【目标检测(一)】RCNN详解——深度学习目标检测的开山之作
【目标检测(二)】SPP Net——让卷积计算共享
【目标检测(三)】Fast RCNN——让RCNN模型能端到端训练
【目标检测(四)】Faster RCNN——RPN网络替代selective search
【目标检测(五)】YOLOv1——开启one-stage目标检测的篇章
【目标检测(六)】YOLOv2——引入anchor, Better, Faster, Stronger
【目标检测(七)】YOLOv3——准确率的全面提升
【目标检测(八)】一文吃透目标检测回归框损失函数——IoU、GIoU、DIoU、CIoU原理及Python代码
【目标检测(九)】FPN详解——通过特征金字塔网络进行多尺度特征融合
【目标检测(十)】RetinaNet详解——Focal Loss将one-stage算法推向巅峰
【目标检测(十一)】CenterNet——Anchor Free, NMS Free
【目标检测(十二)】FCOS——用实例分割的思想做Anchor Free的目标检测
YOLOv3去掉参考文献只有四页A4纸内容,没什么大的改动和创新点,而是在一些小的地方进行改动,最终取得了不错的效果。但是YOLO的作者风格比较洒脱,在文中许多细节都没有说清楚,也许是想让人去欣赏他的代码吧。论文主要有如下细节的改动:
- 主干网络:由Darknet-19切换为Darknet-53。
- 使用了三个不同尺度的输出特征层,来更好的适应小物体的检测。
- 增加了anchor数量。
- 损失函数:由softmax的交叉熵损失切换为二分类交叉熵损失。
1. Darknet-53 网络结构
如下图所示,Darknet-53是作者设计的分类网络,作为YOLOv3的backbone,有一系列的3*3
和1*1
卷积构成,每个卷积层后面都会有一个BN层和LeakyReLU激活函数。作者将最后的全连接层也算作了一层卷积,总共有53层卷积。作者也借鉴了ResNet残差结构的思想,下图中每个框都代表了一个残差结构。下图是用256*256
输入来作分类网络的,而目标检测中使用416*416
分辨率作为网络输入,下面第二章节主要讲在哪3个feature map上做预测。
2. YOLOv3模型结构
浅层的网络学习到的特征更多是角点和边的细节性特征,而深层次网络学到的特征更倾向于抽象的语义特征。同时浅层网络的感受野小,更适合小目标的检测,深层次网络感受野大,更适合预测大物体。类似FPN的思想,作者也在YOLOv3中使用了多个维度的特征进行预测。
在YOLOV2中作者就融合了更细粒度的特征,concat到一起进行最终的预测。YOLOv3使用Darknet-53作为backbone,去除了全连接层,作者选取最后三个残差层之后得到的feature map,来作为三个特征图尺度,分别是52*52*256
(小目标)、26*26*512
(中目标)和13*13*1024
(大目标)。这三个特征层的融合是通过一系列卷积层和上采样层实现的,高维度特征和低维度特征进行concat连接融合。这里看到一幅图说的非常清楚,搬运了过来,如下所示。
上图最后输出预测的三个tensor,维度分别为52*52*255
、26*26*255
和13*13*255
,这里是在COCO任务上跑的,共有80个分类,每个anchor只输出一个bbox的坐标预测和confidence预测,每个位置生成3个不同的anchor,即255=3×(80+4+1)
。
3. Anchor
Yolov3沿用YOLOv2的anchor机制,需要理解anchor、predictated bboxes和GT Boxes的关系(不太容易),可以参考上一篇YOLOv2中的2.3.3
章节。YOLOv3中的anchor数量增加比较多,主要还是由于三个尺度上每个尺度都会生成相应的anchor(尺寸比例是coco数据集上聚类得到的)。
4. Loss函数设计
作者在论文中并没有给出明确的Loss损失函数,下面的损失函数主要是基于作者的描述和复现代码总结的,主要包括目标定位损失、confidence损失和分类损失三部分构成。
4.1 Confidence损失
目标confidence可以理解为confidence=P(obj)*IOU
,包含了预测的这个框是否是目标、预测框和真实框的重合程度两部分,YOLOv3将confidence由误差平方和的方式调整为binary cross entropy loss的方法,下图中oi表示预测目标边界框i中是否真实存在目标,1表示存在目标,0表示不存在目标(也有复现代码中认为oi是预测目标边界框与真实目标边界框的IOU),这里预测概率值是经过sigmoid处理的。
4.2 分类损失
这里同样是使用二分类交叉熵,作者认为同一目标可同时归为多类,比如猫可归为猫类以及动物类,这样能够应对更加复杂的场景(但是个人认为一般目标检测并没有这类情况)。公式中Oij表示预测目标边界框i中是否真实存在第j类目标,0表示不存在,1表示存在,公式中概率值也是经过sigmoid处理的。
4.3 边界框定位损失
这部分与YOLOv2一致,使用误差平方和的方式来进行计算,进行offset regression,只计算当前区域确实有目标的情况,Offset定义如下所示:
以13*13
尺度为例,上面公式中σ表示sigmoid函数;
是映射到0-13维度上的框中心坐标;
,是
最近的离散整数点,
,是映射到0-13维度上的anchor宽度和高度,
,是GT Box的中心点坐标映射到0-13维度上;
同理。
5. YOLOv3效果及贡献
- backbone: YOLOv3换了性能更强的主干网络,提升了准确率。
- 小目标效果变好了:YOLOv3拉取了多层分支,而且最大的特征图达到了52 × 52,这让小目标更容易被检测到。
- 准确率进一步提升,同时推理速度也达到实时程度,超过同期其他模型。
- 相比Faster RCNN,在工业界上准确率仍然略有逊色,不如两阶段算法。
Reference:
今天的文章【目标检测(七)】YOLOv3——准确率的全面提升分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/20937.html