以下内容纯属个人理解,请路过的小伙伴留下宝贵意见,欢迎纠正和补充,谢谢
yolov3的总体思想归纳:
首先,将输入图片压缩到416×416,通过特征提取网络(Darknet53 without FC layer)对输入图像提取特征得到大小一定的特征图,比如13×13,然后将输入图像分成13×13个网格(grid cells),接着如果GT中某个目标的中心坐标落在哪个grid cell中,那么就由该grid cell来预测该目标。每个grid cell都会预测3个边界框。预测得到的输出特征图共有三个维度,第三个维度是深度。
Yolov3输出了三个不同尺度的特征图。采用多尺度对不同大小的目标进行检测,越精细的grid cell就可以检测出越精细的物体。三个尺度的深度都是255(3×(5+80))。
根据图来说明过程:
![](https://img-blog.csdnimg.cn/20191023205531616.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjExMTMy,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20191023205703527.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjExMTMy,size_16,color_FFFFFF,t_70)
流程:首先输入尺寸416×416,然后进入darknet特征提取网络,右边图(不算分支,也是左边图虚线中内容),其中经过五次下采样,还是用了残差结构,目的是使网络结构在很深的情况下,仍能收敛,继续训练下去。然后到左边图,虚线中输出的尺寸是13×13,然后在经过DBL特征提取,以及最后蓝色的卷积(我猜是用来代替全连接分类的),输出第一个尺度13×13。
接着用虚线输出的特征图经过DBL后的13×13的特征图上采样后与倒数第二次下采样的结果相加,二者都为26×26,然后在进行和尺度一同样的后续操作。
最后是26×26的特征图上采样后与倒数第三次下采样的特征图相加,即还为26×26,在进行后续操作。
总的来说会输出3个不同尺度的特征图,每个尺度的特征图负责预测不同大小的目标。每个特征图对应3种anchor大小不同的负责预测目标。最初图像还被分成13×13个网格,目标落在哪个网格中,哪个网格就负责预测目标,一个网格对应3个anchor(anchor的尺寸根据特征图相对于原图的比例等比缩小)。
预测时,yolov3采用多个独立的逻辑分类器来计算属于特定标签的可能性,在计算分类损失时,它对每个标签使用二元交叉熵损失,降低了计算的复杂度。