天天看点

yolov3损失函数_YOLOv3: An Incremental Improvement解读

入门小白,若博文有不妥之处,望加以指点,笔者一定及时修正

YOLOV1解读:(https://blog.csdn.net/qq_33948796/article/details/88538940) YOLOV2解读:(https://blog.csdn.net/qq_33948796/article/details/88561542)

目录:

①前言

②YOLOV3论文翻译

1、引言

2、YOLOV3内容

2.1 Bounding Box Prediction

2.2 类别预测

2.3 多尺度预测

2.4 网络结构

③ 总结

④主要参考

正文开始:

① 前言

首先介绍一下YOLO整个系列的算法思路:通过卷积神经网络对 input image 提取特征,很多层,每个层都得到一定尺寸的 feature map。比如YOLOV2输入 416x416 分辨率的时候,最后一层的输出是 416/32=13,13X13。然后将输入图像分成 13x13 个网络格子。然后如果 ground truth中的某个目标的中心点落在哪个格子里面,该格子就负责预测这个目标。每个 grid cell 预测的 bounding boxes的数目的一定的(YOLOV1的数目是2,YOLOV2的数目是5,YOLOV3的数目是3,但是这几个 bounding boxes 的初始大小不一样)。而固定数量的 bounding boxes里面哪一个才真正的来预测目标呢?论文中是这样处理的:这几个bounding boxes 里面与 ground truth 的 IOU最大的那个才是真正用来预测该 object。一个维度是最后的特征图,如 YOLOV2的 13x13,还有一个维度是深度,是 B*(5+C)。这边 B 是每个格子的预测框数,5 代表框的坐标和置信度,C表示预测的类别数。YOLOV1,YOLOV2,YOLOV3里面的 B 和 C是不一样的,详细可以参考我前面的博客。 这边给出三个网络结构图,主要参考:这位大牛的。

YOLOV1的网络结构图

yolov3损失函数_YOLOv3: An Incremental Improvement解读
YOLOV2的网络结构图:
yolov3损失函数_YOLOv3: An Incremental Improvement解读
YOLOV3的网络结构图

yolov3损失函数_YOLOv3: An Incremental Improvement解读

② YOLOV3论文翻译

摘要

emmmmmm.....不重要,跳!

1、引言

emmmmmm....也无关重要,再跳!

2、YOLOV3内容

2.1 Bounding Box Prediction

YOLOV2使用维度聚类作为Anchor boxes来源来预测边界框(YOLOV2论文提及了可以人为地设定 Anchor boxes 的面积和大小,后面介绍了聚类可以给更有效的开始,详细可以参考我的博客)。

YOLOV3跟YOLOV2一样,还是使用维度聚类进行选择 Anchor boxes。同时,YOLOV3使用 Logistic regression 来预测每个边界框里面对象的分数,用来区分对象和背景。当某个 bounding box 与 ground truth 的 IOU大于其他所有的 bounding box时,target 值赋1;如果某个 bounding box 不是 IOU最大的那个,但是 IOU 也大于了某个阈值,那么忽略这个框,既不惩罚也不奖励。对每个ground truth只分配一个最好的 bounding box 与其对应。如果某个 bounding box 没有与任何一个 ground truth 对应,那么这个框对边框位置大小的回归和类别预测没有帮助,只会惩罚他的 objects,试图减小他的 confidence。

2.2 类别预测

YOLOV3不使用 softmax 对每个框进行分类,因为 softmax 使每个框分配一个类别(得分最高的一个)。而 很多东西是重叠的标签,比如预测的是女生,也属于人这一个类别,属于多标签问题,而 softmax 不适合多标签分类。因为 softmax强加一个假设,使得每个框只包含一个类别。逻辑回归层主要用到sigmoid函数,该函数可以将输入约束在0到1的范围内,因此当一张图像经过特征提取后的某一类输出经过sigmoid函数约束后如果大于0.5,就表示属于该类。 所以 softmax 可被独立的多个 Logistic 分类器代替,且准确率不会下降。分类损失使用二元交叉熵损失函数。

2.3 多尺度预测

这一部分主要参考:这位大牛的。 YOLOV2里面有一个层叫做:passthrough layer 。最后的 feature map 的 size 是 13x13。这个层的作用:将前一个 pooling 层和本层进行 concat,类似于 ResNet,目的也是加强对小目标的检测。

而在YOLOV3中,采用了 upsample 和融合,YOLOV3里面融合了3个 scale,三个尺寸为:13x13,26x26,52x52。

在多个feature map 做检测,

yolov3损失函数_YOLOv3: An Incremental Improvement解读

结合上图看,卷积网络在79层后,经过下方几个黄色的卷积层得到一种尺度的检测结果。相比输入图像,这里用于检测的特征图有32倍的下采样。比如输入是 416x416 的话,这里的特征图就是 13x13 了。由于

下采样倍数高,这里特征图的感受野比较大,因此适合检测图像中尺寸比较大的对象。 为了实现细粒度的检测,第79层的特征图又开始作上采样(从79层往右开始上采样卷积),然后与第61层特征图融合(Concatenation),这样得到第91层较细粒度的特征图,同样经过几个卷积层后得到相对输入图像16倍下采样的特征图。它具有中等尺度的感受野,适合检测中等尺度的对象。 最后,第91层特征图再次上采样,并与第36层特征图融合(Concatenation),最后得到相对输入图像8倍下采样的特征图。它的感受野最小,适合检测小尺寸的对象。

这篇博客里面网络结构图也很通俗易懂,大牛叙述的很棒,参考链接在下面:YOLOV3结构图。

YOLOV3为每个特征图聚类3种尺寸的先验框,那么一共有9个先验框。下面简单的看一下9种先验框的尺寸。

yolov3损失函数_YOLOv3: An Incremental Improvement解读
yolov3损失函数_YOLOv3: An Incremental Improvement解读
yolov3损失函数_YOLOv3: An Incremental Improvement解读

红色的为格子,黄色的为真实框,蓝色的为聚类的先验框。

2.4 网络结构

Darknet-53 ,感觉只有 Debug 时候才会理解! 余下的跳过。。。。。

③ 总结

1、网络结构使用了类似的金字塔网络;

2、用 Logistic 代替 softmax ;

3、网络结构;

4、有了YOLOV3,不用提YOLOV2,和YOLOV1。但是还是需要从V1,V2一步一步来理清!

5、YOLOV3的不足,当IOU > 0.5时,mAP后劲不足!

嘿!最近在调试YOLOV3的代码,哎,估计个把月才能弄懂源码,科研真难受!github上面见,敬请期待!

④主要参考:

1、https://zhuanlan.zhihu.com/p/47575929

2、https://zhuanlan.zhihu.com/p/46691043

3、https://blog.csdn.net/u014380165/article/details/80202337

4、https://www.jianshu.com/p/d13ae1055302

5、YOLO官网:YOLO: Real-Time Object Detection

6、论文链接:https://pjreddie.com/media/files/papers/YOLOv3.pdf

7、Youtube:https://www.youtube.com/watch?v=MPU2HistivI

8、知乎话题:如何评价YOLOv3: An Incremental Improvement?

继续阅读