《三、YOLOV3细节原理全解析》


《一、YOLOV1细节原理全解析》 

《二、YOLOV2细节原理全解析》 

《三、YOLOV3细节原理全解析》

3.0 综述

  V3不像V2那样众多细节的改变,V3注重于整体网络核心架构升级。如下图,比较浮夸;x轴是单帧前向推理速度,y轴是主流网络在COCO数据集上mAP

值。下图浮夸之处在于:将V3曲线划到了第二象限!V3广泛用于实时目标检测、实时跟踪项目中。

创新点:

  • 网络结构大改,使其更加是适应于小目标检测;
  • 特征提取、融合更加充分细致,融入多持续特征图来预测不同规格物体
  • 先验框更加丰富了,3中scale,每种3个规格,一共9种(借鉴Faster RCNN)
  • Softmax改进,预测单目标-多标签任务(多分类改为多个二分类)

3.1 升级版Muti-Scale与特征融合

  在V2中的2.7、2.8节讲述了特征的融合、和训练过程动态改变分辨率,一定程度上使得V2网络模型能够检测到小目标,V2中的最终特征图、中间特征图的堆叠过于生硬,反而导致一些信息会被淹没。

  V3中,为了检测不同大小物体,设计了3个scale。如下图,图中三个特征图分别为:52×52、26×26、13×13,感受野依次变大,他们分别来自网络中靠前、中间、靠后的特征图,依次识别小目标、中等规格目标、大目标,而且是分开处理,不像V2中那样直接堆叠在一起。每种特征图都有3个Box,依次对应3中不同比例的先验框(显然52×52对应的目标小,候选框也小),这里的9种候选框是借鉴Faster R-CNN的。

  如下图,左图是对不同的特征图分别利用进行预测,右图(V3做法,这是FPN,YOLOV4\5中用的是升级版,即:PANet),对不同特征图融合后进行预测。例如:26×26的特征图融合13×13特征图的信息,(注:13×13可以通过上采样、插值得到26×26的特征图)。

 

3.2  残差链接

  深度残差网络自2016年起广受欢迎,目标业界主流网络基本基于ResNet改进而来。V3也引入了ResNet的思想,堆叠了更多的层进行特征提取。    

  ResNet由来:当年的VGG网络堆叠了到了19层已经有不错效果,但是随着网络加深,过拟合风险也加大(这么理解有点问题??),计算量也变大,卷积层再加多就没有意义了。如下图,VGG-56效果还不如VGG-20。如下图,随着迭代次数加大,训练、测试的loss逐渐下降,VGG-19效果居然比VGG-56要好。

  当时业界有人认为DL走到一个瓶颈期。后来何凯明大神发明了残差连接算法,有效解决了以上问题。如上图,VGG-56 相对于VGG-20多出了36层,这36层中,有的层可以为整体网络提升性能,有的则是降低性能;那怎么从这36层中剔除“害群之马”呢?如下图,ResNet大概是这样做的:例如从20层往下走有两条路,一是经过21、22层,二是直接“拷贝”过去,接着验证两种方式的loss,哪一条路的loss小就保留哪一条路。以上做法可以有效避免“网络加深导致过拟合网络参数跑偏”问题。

  其实,两条路有权重参数,哪条路不行,那就降低他的权重,例如:上述H(x)应该写成:

H(x) = a*F(x) + (1-a)*x

3.3 整体网络架构模型分析

  如下图,是V3的网络架构图,称为DarkNet-53(V2中称为DarkNet-19),其实和ResNet差不多。

  •  没有池化(特征图会压缩,需要下采样的地方,用卷积代替,例如:将特征图缩小一半,可通过将卷积stride设为2来实现)。也没有全连接层(FC层参数多,训练慢,不易收敛),全部卷积。
  • 3种scale,更多先验框,前面说过。
  •  当下主流算法全部融入。

   下面这样图就是DarkNet-53,有关于Scale方便的特征图融合,可以结合3.1节两张图看下,没啥好说。

 

 

3.4 先验框的改进

V1、2、3的网格分别为:7×7、13×13、(13×13、26×26、52×52),如下图,是对3个最终层特征图参数的解析。

 

  V1中B=2,V2中B=5(KMeans得出),V3中B=9,这个9并非针对一张图中的一个cell。如下图,13*13感受野大,所以先验框大。V3中9个先验框宽高分别为:

 

 

 

 

实测图片(可以看到不同感受野得到先验框大小不同):

 

 

3.5 SoftMax多标签改进

   V2中SoftMax的作用是:预测一个目标例如是猫,后续计算交叉熵就只会计算是猫的概率,其他类别就不管了。

  交叉熵曲线(loss-概率曲线图):

 

 

  例如:一只猫的label有:动物、波斯猫、猫科动物,哺乳动物等,V2的处理方式不能解决这个问题。V3版本中,使用多个logistic激活函数来预测一个物体的多标签概率,这样就能预测每个类别是与不是。例如:预测上述猫属于上述类别(动物、波斯猫、猫科动物,哺乳动物)为:0.9、0.8、0.5、0.55;接着,V3的做法是取一个概率阈值,例如“0.7”,认为大于0.7的都是该类别,于是输出为“1 1 0 0”。

reference:

https://blog.csdn.net/edward_zcl/article/details/85224833


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM