环保网站 下载,网站建设销售常见问题,生活服务网站开发,pc网站优化排名系列文章目录
task01 导学课程 task02 YOLO系列发展线 文章目录 系列文章目录前言1 功能分块1.1 骨干网络 Backbone1.2 颈部网络 Neck1.3 头部网络 Head1.3.1 边界框回归头1.3.2 分类头 2 关键概念3 典型算法3.1 NMS3.2 IoU 总结 前言
Datawhale是一个专注于AI与数据科学的开…系列文章目录
task01 导学课程 task02 YOLO系列发展线 文章目录 系列文章目录前言1 功能分块1.1 骨干网络 Backbone1.2 颈部网络 Neck1.3 头部网络 Head1.3.1 边界框回归头1.3.2 分类头 2 关键概念3 典型算法3.1 NMS3.2 IoU 总结 前言
Datawhale是一个专注于AI与数据科学的开源组织汇集了众多领域院校和知名企业的优秀学习者聚合了一群有开源精神和探索精神的团队成员YOLO-Master本章学习资料 1 功能分块
1.1 骨干网络 Backbone
它的任务是把一张图片的关键信息浓缩出来比如形状、纹理、颜色等特征就像把水果榨成汁一样保留精华去掉多余水分无关背景。
1.2 颈部网络 Neck
1.3 头部网络 Head
1.3.1 边界框回归头
1.3.2 分类头 2 关键概念 3 典型算法
3.1 NMS
3.2 IoU IoUIntersection over Union衡量两个边界框Bounding Box之间重叠程度和匹配度常用于目标检测任务中评估预测框 Predicted Box与真实框 Ground Truth Box的匹配度。相比于 Jaccard Index 其值范围在 [ 0 , 1 ] [0,1] [0,1]1 表示完全重叠0 表示无重叠。 数学定义 I o U 交集面积 并集面积 \mathrm{IoU} \frac{交集面积}{并集面积} IoU并集面积交集面积
即 IoU A inter A union A inter A box1 A box2 − A inter \text{IoU} \frac{A_{\text{inter}}}{A_{\text{union}}} \frac{A_{\text{inter}}}{A_{\text{box1}} A_{\text{box2}} - A_{\text{inter}}} IoUAunionAinterAbox1Abox2−AinterAinter
计算步骤
交集坐标 左上角取两框左上坐标的较大值右下角取两框右下坐标的较小值若右下坐标 左上坐标则交集面积为 0 x LeftTop max ( x 1 a , x 1 b ) , y LeftTop min ( y 1 a , y 1 b ) x_{\text{LeftTop}} \max(x_1^a, x_1^b), \quad y_{\text{LeftTop}} \min(y_1^a, y_1^b) xLeftTopmax(x1a,x1b),yLeftTopmin(y1a,y1b) x RightBottom min ( x 2 a , x 2 b ) , y RightBottom max ( y 2 a , y 2 b ) x_{\text{RightBottom}} \min(x_2^a, x_2^b), \quad y_{\text{RightBottom}} \max(y_2^a, y_2^b) xRightBottommin(x2a,x2b),yRightBottommax(y2a,y2b) 面积计算 交集面积 max ( 0 , x RightBottom − x LeftTop ) × max ( 0 , y RightBottom − y LeftTop ) \max(0, x_{\text{RightBottom}} - x_{\text{LeftTop}}) \times \max(0, y_{\text{RightBottom}} - y_{\text{LeftTop}}) max(0,xRightBottom−xLeftTop)×max(0,yRightBottom−yLeftTop)并集面积 框1面积 框2面积 - 交集面积
代码实践
import matplotlib.pyplot as plt
import matplotlib.patches as pts# 现在定义一个函数接收两个参数都是两个点坐标以数组的形式
def calculate_iou(box1, box2):计算两个边界框之间的 IoU (Intersection over Union)参数:box1: 第一个边界框格式为 [x1, y1, x2, y2]box2: 第二个边界框格式为 [x1, y1, x2, y2]返回:iou: 两个边界框之间的 IoU 值# 解析边界框坐标x1_box1, y1_box1, x2_box1, y2_box1 box1x1_box2, y1_box2, x2_box2, y2_box2 box2# 确保坐标的有效性assert x1_box1 x2_box1, f无效的 box1 x坐标: {x1_box1} {x2_box1}assert y1_box1 y2_box1, f无效的 box1 y坐标: {y1_box1} {y2_box1}assert x1_box2 x2_box2, f无效的 box2 x坐标: {x1_box2} {x2_box2}assert y1_box2 y2_box2, f无效的 box2 y坐标: {y1_box2} {y2_box2}# 计算交集区域的坐标x_left max(x1_box1, x1_box2)y_top max(y1_box1, y1_box2)x_right min(x2_box1, x2_box2)y_bottom min(y2_box1, y2_box2)# 检查是否有交集if x_right x_left or y_bottom y_top:return 0.0# 计算交集区域面积intersection_area (x_right - x_left) * (y_bottom - y_top)# 计算两个边界框各自的面积area_box1 (x2_box1 - x1_box1) * (y2_box1 - y1_box1)area_box2 (x2_box2 - x1_box2) * (y2_box2 - y1_box2)# 计算并集区域面积union_area area_box1 area_box2 - intersection_area# 计算IOU并避免除零错误if union_area 0:iou 0else:iou intersection_area / union_areareturn iou# 定义一个函数根据坐标画出两个框
def plot_boxes(box1, box2):fig, ax plt.subplots()# 绘制第一个框rect1 pts.Rectangle((box1[0], box1[1]), box1[2]-box1[0], box1[3]-box1[1], linewidth1, edgecolorr, facecolornone)ax.add_patch(rect1)# 绘制第二个框rect2 pts.Rectangle((box2[0], box2[1]), box2[2]-box2[0], box2[3]-box2[1], linewidth1, edgecolorb, facecolornone)ax.add_patch(rect2)# 设置坐标轴范围ax.set_xlim(0, 100)ax.set_ylim(0, 100)# 显示图像plt.show()# 测试用例
if __name__ __main__:# # 测试1: 完全重叠box_a [10, 10, 50, 50]# box_b [10, 10, 50, 50]# iou calculate_iou(box_a, box_b)# print(f测试1 (完全重叠): IoU {iou:.2f} (预期: 1.00))# 测试2: 部分重叠box_c [20, 20, 60, 60]iou calculate_iou(box_a, box_c)print(f测试2 (部分重叠): IoU {iou:.2f} (预期: 0.47))# 绘制框plot_boxes(box_a, box_c)效果图 总结
分段介绍YOLO的框架和基本原理。