暑校


2、yolo系列-yolov3

<p>YOLOv3(《Yolov3:An incremental improvement》)是Joseph Redmon关于YOLO系列的最后一篇,因为他反对将YOLO用于军事和隐私窥探,所以在2020年2月宣布停止更新YOLO。</p> <h1>v3改进目标</h1> <p>yolo v3是为了更好的检测小目标。 yolo v3处理物体的过程如下图所示:</p> <h1>网络结构</h1> <p><strong>修改1:</strong>yolo v3在网络结构上更换了backbone(主干网络),替换了v2中所使用的DarkNet-19网络,采用了更深的网络DarkNet-53。DarkNet-53使用了53层卷积,最后的Connected是全连接层所以也是一个卷积层。每层卷积都包含了V2中新增的BN层(批量归一化),具体一层卷积包含的内容如下图所示,包括线性卷积、BN层以及激活函数。 &lt;center&gt;&lt;img src=&quot;<a href="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=ff182c76a7dc731c60e0a24bb2db3897&amp;file=file.png&quot">https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=ff182c76a7dc731c60e0a24bb2db3897&amp;file=file.png&quot</a>; width=&quot;60%&quot; height=&quot;auto&quot;&gt;&lt;/center&gt; <strong>修改2:</strong>在yolo v2网络结构中是使用Maxpool(最大池化层)来实现空间降采样。但是v3删除了这个操作,改用stride=2(步长=2)的卷积层来实现空间降采样操作。 <strong>修改3:</strong>DarkNet-53新增了残差连接结构,在下面图中被方框框起来的部分就是一个残差模块。残差连接是在ResNet中提出的,但是在yolov3中&amp;emsp;&amp;emsp;把残差模块轻量化了一下,只用一层1x1的卷积层和一个3x3的卷积层串联起来构成一个残差模块。下面左图是ResNet-50中提出的残差模块结构,右边是V3讲过轻量化后的残差模块结构。 &lt;center&gt;&lt;img src=&quot;<a href="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=1890d8cb98f9ef8dc65b94f700b06a00&amp;file=file.png&quot">https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=1890d8cb98f9ef8dc65b94f700b06a00&amp;file=file.png&quot</a>; width=&quot;60%&quot; height=&quot;auto&quot;&gt;&lt;/center&gt; &amp;emsp;&amp;emsp;整体网络结构如下图所示: &lt;center&gt;&lt;img src=&quot;<a href="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=1fa36ea46838ee151490fb8acad951d2&amp;file=file.jpg&quot">https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=1fa36ea46838ee151490fb8acad951d2&amp;file=file.jpg&quot</a>; width=&quot;70%&quot; height=&quot;auto&quot;&gt;&lt;/center&gt;</p> <p>&amp;emsp;&amp;emsp;完整的YOLOv3网络是由4个部分组成:<strong>输入层、Backbone特征提取部分,也就是Darknet-53,Neck特征拼接部分,head头分类部分</strong>。下面这张图能让大家很直观的将这四部分区分出来:</p> <ul> <li>CBL:一个卷积层、一个BN层和一个Leaky ReLU组成的基本卷积单元。</li> <li>Res unit:借鉴Resnet网络中的残差结构,让网络可以构建的更深。</li> <li>ResX: X代表一个具体的数字,表示该网络中包含的残差单元的数量。</li> <li>concat:将Darknet-53的中间层和后面的某一层的上采样进行张量拼接,达到多尺度特征融合的目的。这与残差层的add操作是不一样的,拼接会扩充张量的维度,而add直接相加不会导致张量维度的改变。</li> </ul> <p>&lt;center&gt;&lt;img src=&quot;<a href="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=594d38b7fabccac457eff5a0a69eae30&amp;file=file.jpg&quot">https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=594d38b7fabccac457eff5a0a69eae30&amp;file=file.jpg&quot</a>; width=&quot;80%&quot; height=&quot;auto&quot;&gt;&lt;/center&gt;</p> <p>&amp;emsp;&amp;emsp;在论文中作者也是和v2中所使用的网络结构DarkNet-19以及两个ResNet网络进行了比较,可以看到因为DarkNet-19的网络层数不深检测很快,但是他的TOP-1和TOP-5都是最低的。但是v3中所采用的DarkNet-53在TOP-1和TOP-5指标上比最好的ResNet-152就逊色了一点点,但是他的FPS指标是ResNet-152的两倍,相较来说,还是V3兼顾了准确率与检测率。 <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=37e87fc0fe798a52c263c1879ecf5d81&amp;amp;file=file.png" alt="" /></p> <h5>什么是TOP-1和TOP-5?</h5> <p>TOP-1:在这张测试的类别中,取出概率最大的那个类别,如果真实类别就是概率最大的这个类别,则预测正确,否则预测错误。 TOP-5:在这张测试的类别中,取出概率最大的前五个类别,如果真实类别在这五个类别中,则预测正确,否则预测错误。 这里面有一个小例子可以给大家更好的理解这两指标:<a href="https://blog.csdn.net/qq_27278957/article/details/120077439">https://blog.csdn.net/qq_27278957/article/details/120077439</a></p> <h5>什么是FPS?</h5> <p>FPS就是目标网络每秒可以处理(检测)多少帧(多少张图片)。</p> <h1>改进细节</h1> <h2>1、输入</h2> <p>yolov3依旧使用的全卷积网络结构,所以可以进行多尺度图片输入,但是需要注意,因为生成的3个尺度的feature map分别是经过32倍、16倍、8倍下采样,所以输入的图片尺寸一定要为32的倍数(比如416)。</p> <h2>2、特征图输出</h2> <p>&amp;emsp;&amp;emsp;yolo v3的输出不再只是一个尺度的feature map,而是分别经过32倍下采样、16倍下采样、8倍下采样得到3个不同尺度的特征图。对应了小物体、中物体、大物体的检测。 &amp;emsp;&amp;emsp;详细实现细节可以参考这幅图,416x416x3的图像在经过特征提取网络和残差连接之后输出了三个尺度的特征图,再经过32倍、16倍、8倍下采样之后获得的分别是13x13x255,26x26x255、52x52x255特征图。 <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=f71e95824edd3c5b08e8548eb9850cb9&amp;amp;file=file.png" alt="" /></p> <h2>3、跨尺度预测</h2> <h3>(1)3个不同尺度的特征图</h3> <p>&amp;emsp;&amp;emsp;YOLOv3通过下采样32倍、16倍和8倍得到3个不同尺度的特征图。 &amp;emsp;&amp;emsp;例如输入416X416的图像,则会得到13X13 (416/32),26X26(416/16) 以及52X52(416/8)这3个尺度的特征图。 &lt;center&gt;&lt;img src=&quot;<a href="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=66ef44fc6f2079ae6c7e7f1333ba0f80&amp;file=file.png&quot">https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=66ef44fc6f2079ae6c7e7f1333ba0f80&amp;file=file.png&quot</a>; width=&quot;60%&quot; height=&quot;auto&quot;&gt;&lt;/center&gt;</p> <h3>(2)一个尺度的特征图上使用3个anchor box</h3> <p>&amp;emsp;&amp;emsp;yolov1和yolov2训练过程中会发现很多小目标的物体无法被识别,所以在yolov3中生成的三个尺度的先验框可以分别识别大目标、中目标、小目标物体。 &lt;center&gt;&lt;img src=&quot;<a href="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=b7f6bf96cefbc0bf1629c449a8a8b55c&amp;file=file.jpg&quot">https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=b7f6bf96cefbc0bf1629c449a8a8b55c&amp;file=file.jpg&quot</a>; width=&quot;60%&quot; height=&quot;auto&quot;&gt;&lt;/center&gt;</p> <p>&amp;emsp;&amp;emsp;随着输出的特征图的数量和尺度的变化,先验框的尺寸也需要相应的调整。YOLO2已经开始采用K-means聚类得到先验框的尺寸,但是V2只有5个先验框。YOLO3延续了这种方法(K-means聚类)得到了9种先验框的尺寸,并将这些先验框划分到3个尺度特征图上,尺度更大的特征图(52X52X255)使用尺寸小的先验框。在COCO数据集得到这9个先验框的尺寸是:(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。先验框大小与特征图的关系如下图所示: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=fc36d21aa44760c02e7b7bb7a7268256&amp;amp;file=file.png" alt="" /></p> <p>&amp;emsp;&amp;emsp;在最小的13x13特征图上 (有最大的感受野) 应用尺寸较大的先验框,检测较大的对象。在中等的26x26特征图上 (中等感受野) 应用中等的先验框,适合检测中等大小的对象。在较大的52x52特征图上 (较小的感受野) 应用较小的先验框适合检测较小的对象。 &lt;center&gt;&lt;img src=&quot;<a href="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=319871cca98411fb16f51c88ddfda3f2&amp;file=file.jpg&quot">https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=319871cca98411fb16f51c88ddfda3f2&amp;file=file.jpg&quot</a>; width=&quot;50%&quot; height=&quot;auto&quot;&gt;&lt;/center&gt;</p> <h3>(3) 对每个尺度下的特征图都进行边界框的预测</h3> <p>每种尺度的特征图上可以得到N × N × [3 x (4 + 1 + 80)] 的结果(分别是N x N个网格,3种尺度的先验框,4个边界框偏移值(tx, ty, tw, th)、1个目标预测置信度(IOU)以及80种类别的预测概率。) 下面以一个416x416x3的图片举例:</p> <ul> <li> <p>对于大目标 特征图: 对原图下采样32倍得到(13 x 13)特征图 预测: 在上述特征图后添加几个卷积层,最后输出一个 13 × 13 × [3 ∗ (4 + 1 + 80)] 的张量表示预测 最终输出张量: [13, 13, 255]</p> </li> <li> <p>对于中目标 特征图:1.对原图下采样16x得到 (26 x 26)特征图;2.对第一种尺度得到的(13 x 13)特征图进行<strong>上采样</strong>,得到(26 x 26)特征图。将这两种计算得到的(26 x 26)特征图通过连接合并在一起。 预测: 在合并后的特征图后添加几个卷积层,最后输出一个 26 × 26 × [3 ∗ (4 + 1 + 80)] 的张量表示预测。这个张量的大小是大目标输出张量大小的两倍。 最终输出张量: [26, 26, 255]</p> </li> <li>对于小目标 特征图:1.对原图下采样8x得到 (52 x 52)特征图2.对第二种尺度得到的(26 x 26)特征图进行<strong>上采样</strong>,得到(52 x 52)特征图。两种方式得到的(52 x 52)的特征图通过连接合并在一起。 预测: 在合并后的特征图后添加几个卷积层,最后输出一个 52 × 52 × [3 ∗ (4 + 1 + 80)] 的张量表示预测。这个张量的大小是中目标输出的两倍。 对第三尺度的预测受益于所有的先验计算以及网络早期的细粒度特性。 最终输出: [52, 52, 255]</li> </ul> <p>&lt;center&gt;&lt;img src=&quot;<a href="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=511b049ab10a9344799b6022952be840&amp;file=file.jpg&quot">https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=511b049ab10a9344799b6022952be840&amp;file=file.jpg&quot</a>; width=&quot;70%&quot; height=&quot;auto&quot;&gt;&lt;/center&gt;</p> <h5>什么是感受野?</h5> <p>&amp;emsp;&amp;emsp;感受野(receptive field)这一概念来自于生物神经科学,是指感觉系统中的任一神经元,其所受到的感受器神经元的支配范围。<strong>在卷积神经网络中,感受野就是指输出feature map上某个元素受输入图像上影响的区域。</strong> &amp;emsp;&amp;emsp;下面给出一个例子,在下面图片中一个kernel size=3的卷积核,通过在一个5x5大小Input上划窗,然后计算得到一个3x3的feature map。那就说经过这个3×3卷积以后,这二层的feature map的感受野就是3×3。如果是经过两层卷积以后,那么图中黄色的feature map中的一个元素对应最下面输入中的5×5的感受野。 &lt;center&gt;&lt;img src=&quot;<a href="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=30136579c213bb34b7b746c9c6fe1084&amp;file=file.jpg&quot">https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=30136579c213bb34b7b746c9c6fe1084&amp;file=file.jpg&quot</a>; width=&quot;70%&quot; height=&quot;auto&quot;&gt;&lt;/center&gt;</p> <h2>4、残差连接</h2> <p>在yolov3中一共进行了23次残差连接(具体信息看上面的总体结构:1+2+8+8+4=23),这里以第2次残差连接举例,在进入残差模块之前输入的特征图是104x104x128,在经过一次1x1卷积和一次3x3卷积之后,输出的特征图维度104x104x128,将输入特征与输出特征进行残差连接得到的特征图为104x104x128,<strong>残差连接之后特征图的尺寸不会发生变化。</strong>(不知道残差连接是什么的,可以看目录) &lt;center&gt;&lt;img src=&quot;<a href="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=deebdd32e3cdd31442bf706f82f8fb97&amp;file=file.png&quot">https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=deebdd32e3cdd31442bf706f82f8fb97&amp;file=file.png&quot</a>; width=&quot;50%&quot; height=&quot;auto&quot;&gt;&lt;/center&gt;</p> <h2>5、类别输出(Head)</h2> <p>(1)YOLOv3 使用的是logistic 分类器,而不是之前使用的softmax。因为softmax只适用于单目标多分类,但目标检测任务中可能一个物体有多个标签,比如一个人可能是Person和Women。 (2)在YOLOv3 的训练中,便使用了Binary Cross Entropy ( BCE, 二元交叉熵) 来进行类别预测。</p> <h1>参考文献</h1> <p>1、论文原文:<a href="https://pjreddie.com/media/files/papers/YOLOv3.pdf">https://pjreddie.com/media/files/papers/YOLOv3.pdf</a> 2、项目主页:<a href="https://pjreddie.com/darknet/yolo/#google_vignette">https://pjreddie.com/darknet/yolo/#google_vignette</a> 3、项目源码:<a href="https://github.com/pjreddie/darknet">https://github.com/pjreddie/darknet</a> 4、哔哩哔哩视频:(1)搜关键字“yolo清华大学”,因为老是被举报下架,所以我找不到相关链接,有需要的可以根据关键字搜索(2)<a href="https://www.bilibili.com/video/BV1yi4y1g7ro?p=4&amp;spm_id_from=pageDriver&amp;vd_source=48258d61722fcea384d1c05707db8963">https://www.bilibili.com/video/BV1yi4y1g7ro?p=4&amp;spm_id_from=pageDriver&amp;vd_source=48258d61722fcea384d1c05707db8963</a> 5、博客:<a href="https://cloud.tencent.com/developer/article/2406045">https://cloud.tencent.com/developer/article/2406045</a> <a href="https://blog.csdn.net/baidu_36913330/article/details/119869197">https://blog.csdn.net/baidu_36913330/article/details/119869197</a></p> <h1>后续改进</h1> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=a72079caaee3807e11cc79facbe0f10b&amp;amp;file=file.png" alt="" /> 以及损失函数</p>

页面列表

ITEM_HTML