没有合适的资源?快使用搜索试试~ 我知道了~
yolov1到yolov5算法详解.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 142 浏览量
2023-11-30
12:06:52
上传
评论
收藏 5.13MB DOCX 举报
温馨提示
yolov1到yolov5算法详解
资源推荐
资源详情
资源评论
万字长文详解 YOLOv1-v5 模型
本文首发于 github,内容包括 YOLOv1-v5 网络的详细解读及代码解析。因为文章会
持续优化,所以最新版以 github 仓库为准。
一,YOLOv1
YOLOv1 出自 2016 CVPR 论文 You Only Look Once:Unified, Real-Time Object Detection.
YOLO 系列算法的核心思想是将输入的图像经过 backbone 提取特征后,将得到特征图划
分为 S x S 的网格,物体的中心落在哪一个网格内,这个网格就负责预测该物体的置信度
、类别以及坐标位置。
Abstract
作者提出了一种新的目标检测方法 YOLO,之前的目标检测工作都是重新利用分类器来执
行检测。作者的神经网络模型是端到端的检测,一次运行即可同时得到所有目标的边界框
和类别概率。
YOLO 架构的速度是非常快的,base 版本实时帧率为 45 帧,smaller 版本能达到每秒 155
帧,性能由于 DPM 和 R-CNN 等检测方法。
1. Introduction
之前的目标检测器是重用分类器来执行检测,为了检测目标,这些系统在图像上不断遍历
一个框,并利用分类器去判断这个框是不是目标。像可变形部件模型(DPM)使用互动窗
口方法,其分类器在整个图像的均匀间隔的位置上运行。
作者将目标检测看作是单一的回归问题,直接从图像像素得到边界框坐标和类别概率。
YOLO 检测系统如图 1 所示。单个检测卷积网络可以同时预测多个目标的边界框和类别概
率。YOLO 和传统的目标检测方法相比有诸多优点。
yolo
检测系统
首先,YOLO 速度非常快,我们将检测视为回归问题,所以检测流程也简单。其次,YOLO
在进行预测时,会对图像进行全面地推理。第三,YOLO 模型具有泛化能力,其比 DPM 和
R-CNN 更好。最后,虽然 YOLO 模型在精度上依然落后于最先进(state-of-the-art)的检测
系统,但是其速度更快。
2. Unified Detectron
YOLO 系统将输入图像划分成 S\times S 的网格(grid),然后让每个 gird 负责检测那些
中心点落在 grid 内的目标。
检测任务:每个网络都会预测 B 个边界框及边界框的置信度分数,所谓置信度分数其实
包含两个方面:一个是边界框含有目标的可能性,二是边界框的准确度。前者记为
Pr(Object) ,当边界框包含目标时, Pr(Object) 值为 1,否则为 0;后者记为
IOU_{pred}^{truth} ,即预测框与真实框的 IOU。因此形式上,我们将置信度定义为
Pr(Object)*IOU_{pred}^{truth} 。如果 grid 不存在目标,则置信度分数置为 0,否则,置
信度分数等于预测框和真实框之间的交集(IoU)。
每个边界框(bounding box)包含 5 个预测变量: x , y , w , h 和 confidence。 (x,y)
坐标不是边界框中心的实际坐标,而是相对于网格单元左上角坐标的偏移(需要看代码
才能懂,论文只描述了出“相对”的概念)。而边界框的宽度和高度是相对于整个图片的宽
与高的比例,因此理论上以上 4 预测量都应该在 [0,1] 范围之内。最后,置信度预测表示
预测框与实际边界框之间的 IOU。
值得注意的是,中心坐标的预测值 (x,y) 是相对于每个单元格左上角坐标点的偏
移值,偏移量 = 目标位置 - grid 的位置。
yolo
检测系统
分类任务:每个网格单元(grid)还会预测 C 个类别的概率 Pr(Class_i)|Object) 。grid 包
含目标时才会预测 Pr ,且只预测一组类别概率,而不管边界框 B 的数量是多少。
在推理时,我们乘以条件概率和单个 box 的置信度。
Pr(Class_i)|Object)*Pr(Object)*IOU_{pred}^{truth} = Pr(Class_i)*IOU_{pred}^{truth}
它为我们提供了每个框特定类别的置信度分数。这些分数编码了该类出现在框中的概率以
及预测框拟合目标的程度。
在 Pscal VOC 数据集上评测 YOLO 模型时,我们设置 S=7 , B=2 (即每个 grid 会生成 2 个
边界框)。Pscal VOC 数据集有 20 个类别,所以 C=20 。所以,模型最后预测的张量维度
是 7 \times 7\times (20+5*2) = 1470 。
yolo
模型输出张量维度
总结:YOLO 系统将检测建模为回归问题。它将图像分成 S \times S 的 gird,每个 grid 都
会预测 B 个边界框,同时也包含 C 个类别的概率,这些预测对应的就是 S \times S \times
(C + 5*B) 。
这里其实就是在描述 YOLOv1 检测头如何设计:回归网络的设计 + 训练集标签如何构建(
即 yoloDataset 类的构建),下面给出一份针对 voc 数据集编码为 yolo 模型的输入标签
数据的函数,读懂了这个代码,就能理解前面部分的描述。
代码来源这里。
def encoder(self, boxes, labels):
'''
boxes (tensor) [[x1,y1,x2,y2],[]] 目标的边界框坐标信息
labels (tensor) [...] 目标的类别信息
return 7x7x30
'''
grid_num = 7 # 论文中设为 7
target = torch.zeros((grid_num, grid_num, 30)) # 和模型输出张量维尺寸一样
都是 14*14*30
cell_size = 1./grid_num # 之前已经把目标框的坐标进行了归一化(这里与原论文有
区别),故这里用 1.作为除数
# 计算目标框中心点坐标和宽高
wh = boxes[:, 2:]-boxes[:, :2]
cxcy = (boxes[:, 2:]+boxes[:, :2])/2
# 1,遍历各个目标框;
for i in range(cxcy.size()[0]): # 对应于数据集中的每个框 这里
cxcy.size()[0] == num_samples
# 2,计算第 i 个目标中心点落在哪个 `grid` 上,`target` 相应位置的两个框的
置信度值设为 `1`,同时对应类别值也置为 `1`;
cxcy_sample = cxcy[i]
ij = (cxcy_sample/cell_size).ceil()-1 # ij 是一个 list, 表示目标中心点
cxcy 在归一化后的图片中所处的 x y 方向的第几个网格
# [0,1,2,3,4,5,6,7,8,9, 10-19] 对应索引
# [x,y,w,h,c,x,y,w,h,c, 20 个类别的 one-hot 编码] 与原论文输出张量维度各
个索引对应目标有所区别
target[int(ij[1]), int(ij[0]), 4] = 1 # 第一个框的置信度
target[int(ij[1]), int(ij[0]), 9] = 1 # 第二个框的置信度
target[int(ij[1]), int(ij[0]), int(labels[i])+9] = 1 # 第
int(labels[i])+9 个类别为 1
# 3,计算目标中心所在 `grid`(网格)的左上角相对坐标:`ij*cell_size`,然
后目标中心坐标相对于子网格左上角的偏移比例 `delta_xy`;
xy = ij*cell_size
delta_xy = (cxcy_sample -xy)/cell_size
# 4,最后将 `target` 对应网格位置的 (x, y, w, h) 分别赋相应 `wh`、
`delta_xy` 值。
target[int(ij[1]), int(ij[0]), 2:4] = wh[i] # 范围为(0,1)
target[int(ij[1]), int(ij[0]), :2] = delta_xy
target[int(ij[1]), int(ij[0]), 7:9] = wh[i]
target[int(ij[1]), int(ij[0]), 5:7] = delta_xy
return target
代码分析,一张图片对应的标签张量 target 的维度是 7 \times 7 \times 30 。然后分别对
各个目标框的 boxes: (x1,y1,x2,y2) 和 labels:(0,0,...,1,0)(one-hot 编码的目标类别信
息)进行处理,符合检测系统要求的输入形式。算法步骤如下:
1. 计算目标框中心点坐标和宽高,并遍历各个目标框;
2. 计算目标中心点落在哪个 grid 上,target 相应位置的两个框的置信度值设为 1,
同时对应类别值也置为 1;
3. 计算目标中心所在 grid(网格)的左上角相对坐标:ij*cell_size,然后目标中
心坐标相对于子网格左上角的偏移比例 delta_xy;
剩余65页未读,继续阅读
资源评论
码农张三疯
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功