【目标检测系列】YOLOV1解读

前言

从R-CNN到Fast-RCNN,之前的目标检测工作都是分成两阶段,先提供位置信息在进行目标分类,精度很高但无法满足实时检测的要求。

而YoLo将目标检测看作回归问题,输入为一张图片,输出为S*S*(5*B+C)的三维向量。该向量结果既包含位置信息,又包含类别信息。可通过损失函数,将目标检测与分类同时进行,能够满足实时性要求。

接下来给出YOLOV1的网络结构图

核心思想

YOLO将目标检测问题作为回归问题。会将输入图像分为S*S的网格,如果一个物体的中心点落到一个cell中,那么该cell就要负责预测该物体,一个格子只能预测一个物体,同时会生成B个预测框。

对于每个cell:

  • 含有B个预测边界框,这些框大小尺寸等等都随便,只有一个要求,就是生成框的中心点必须在cell中,每个框都有一个置信度分数(confidence score)。这些框的置信度分数反映了该模型对某个框内是否含有目标的置信度,以及它对自己的预测的准确度的估量。

  • 每个cell还预测了C类的条件概率,即每个单元格只存在一组类别概率,而不考虑框B的数量。

  • 每个预测边界框包含5个元素:(x,y,w,h, c) 其中 x,y,w,h表示该框中心位置, c为该框的置信度

  • 不管框B的数量多少,该cell只负责预测一个目标

综上,S*S个网格,每个网格要预测B个bounding box,还要预测C个类。网络输出为S*S*(5*B+C)。 (S*S个网络,每个网络都有B个预测框,每个框又有五个参数,在加上每个网格都有C个类别)

最终的预测特征由边界框位置、边框的置信度得分以及类别概率,即S*S*(5*B+C), 这里是 7*7*(2*5+20)

训练过程

对于一个网络模型,损失函数的目的是要缩小预测值和标签之间的差距。对于YOLOV1网络来说,每个cell含有5*B+C个预测值,我们在训练过程中该如何获得与之对应的label.

这5*B+C个预测值的含义在上面已经给出(S*S个网络,每个网络都有B个预测框,每个框又有五个参数,在加上每个网格都有C个类别),因此我们实际需要给出的label为每个预测框的四个坐标及其置信度,和每个cell对应的类别。

  • 每个预测框的四个坐标(x, y, w, h)的label为该预测框所在cell中目标物体的坐标

  • 每个预测框的置信度c,反映了该模型对某个框内是否含有目标的置信度,以及它对自己的预测的准确度的估量,是让网络学会自我评价候选框的功能。因此它所对应的label计算相对复杂。我们将置信度定义为confidence=Pr(Object) \times IOU_{pred}^{truth}。 Pr(Object)=[0, 1], 如果该单元格内不存在目标(即Pr(Object)=0),则置信度分数为0。 如果单元格内存在目标,即(Pr(Object)=1),我们希望置信度分数等于预测框和真实框之间的交并比(IOU)。

  • 每个cell对应的类别概率C,参数数量与该模型类别数量保持一致,label为one-hot编码。

  • 此外,根据公式推算,我们发现用置信度*某一类别的概率=Pr(Object) \times IOU_{preb}^{truth} \times Pr( classes_i| Object) = IOU_{preb}^{truth} \times Pr(classes_i)即得到了一个特殊的置信度分数,表示每个预测框中具体某个类别的置信度

损失函数

YOLOV1的损失函数被分为坐标损失、置信度损失和网格类别损失三种

坐标损失

​简要介绍下四个坐标(x,y,w,h)的含义,x,y表示预测框中心点坐标,w,h表示预测框的宽高。

l_{ij}^{obj}表示第i个cell中的第j个预测框是否负责检测物体,同一个cell中仅有IOU值最高的一个框会负责检测物体,并约束其坐标

第一行表示中心点的坐标损失,第二行表示宽高的损失,至于为何对宽高加根号,是为了消除大小框不同的影响。

举个例子,以预测框的宽度为例,不加根号的话,若目标框宽为100,预测结果为90,差值为10,误差为10%,损失为(90-100)^2 = 100; 若目标框宽10,预测结果为9,差值为1,误差为10%,损失为(9-10)^2=1。可以看出,同样的预测差值,产生了同样的损失,但是这个差值给大小框带来的误差差了10倍,而如何利用这个损失值去修正误差的话,对大的预测框来说,微调10%,对小的预测框来说,重调100%。

而加了根号之后,若目标框宽为100,预测结果为90,差值为10,误差为10%,损失为0.263;若目标框宽10,预测结果为9,差值为1,误差为10%,损失为0.0263。同样的误差,对于大小框之间的惩罚从原来的百倍差距,降为10倍差距,即提升了对小框的惩罚力度,毕竟对于小的预测框,一点点偏差都会产生很大的影响。(模型对大小框的约束能力能存在十倍差距,是否可以进一步改进)

置信度损失

l_{ij}^{obj}表示第i个cell中的第j个预测框是否负责检测物体, l_{ij}^{noobj}表示第i个cell中的第j个预测框是否不负责检测物体,两个数值含义相反。 表示该预测框的真实置信度,通过上述公式计算得出, 表示模型预测的置信度,此部分损失函数是为了让模型掌握自我评价的能力,为测试过程选择最佳预测框用。

第一行表示负责检测物体的框的置信度损失,第二行表示不负责检测物体的框的置信度损失 (问:两种置信度之间有什么区别)

分类损失

l_i^{obj}表示第i个cell内是否存在目标物体

测试过程

测试过程就非常简单了,对于一次前向传播得到的S * S *B个预测框,根据各个候选框对应的置信度分数,利用非极大值自抑(NMS),最终得到所有预测结果。

非极大值自抑制(NMS):所有预测框,按照置信度分数从大到小排序。第一轮,选择置信度最高的预测框作为基准,然后所有其他预测框按顺序依次计算与基准预测框的IOU值(提前设置一个阈值,当IOU大于这个阈值,则认为两个预测框高度重合,预测的是同一个物体),对于和基准预测框重合的则直接淘汰。一轮结束后,排除上一轮的基准,重新选择新的预测框作为基准重复上述步骤。

缺点

  • 每个cell只能预测一类物体,对于密度大的小物体无法预测

  • 定位损失占比较大(包括坐标损失和置信度损失),致使模型更加侧重定位物体,分类能力相对较弱

  • 测试时,如果同意物体的长宽比发生变化,则难以泛化。


论文链接:You Only Look Once: Unified, Real-Time Object Detection

源码地址:mirrors / alexeyab / darknet

参考内容:【YOLO系列】YOLOv1论文超详细解读(翻译 +学习笔记)

下一篇:【目标检测系列】YOLOV2解读_怀逸%的博客-CSDN博客​​​​​​​

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
目标检测是计算机视觉的一个重要应用方向,其中yolov5是一种常用的目标检测算法。yolov5可以分为两个主要部分:训练自定义模型和加载解读模型。在训练自定义模型方面,可以使用yolov5进行训练,该过程可以分为一步走算法和两步走算法。一步走算法直接对输入图像应用算法并输出类别和定位信息,典型的算法有yolo和ssd。两步走算法先产生候选区域,然后进行CNN分类,代表的算法有R-CNN。\[1\] 在实际项目中,可以使用yolov5进行目标检测。通过训练自定义模型,可以根据具体需求对模型进行调整和优化。在ZCU102开发板上,可以解析出目标检测的目标框,并且在输入为1024×1024图像的前提下,特征提取的速率可以达到30fps,检测性能也没有很大的影响。\[2\] 在量化方面,可以按照官方文档的要求对yolov5模型进行调整,并参考官方提供的pytorch模型量化代码来编写量化脚本。量化过程分为两步,首先生成量化设置文件,然后运行量化后的模型进行评估。可以使用torch_quantizer库来实现量化操作,并根据需要修改evaluate函数。最后,可以导出量化设置文件。\[3\] 如果对手写yolov5目标检测有任何疑问或需要进一步讨论,欢迎在评论区提问,我会尽力回答并与大家一起交流学习。 #### 引用[.reference_title] - *1* [【计算机视觉】目标检测yolov5自定义模型的训练以及加载](https://blog.csdn.net/qq_43018832/article/details/128054360)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [[ZCU102嵌入式开发]基于Vitis-AI的yolov5目标检测模型在ZCU102开发板上的部署过程分享](https://blog.csdn.net/qq_36745999/article/details/126981630)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怀逸%

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值