以下内容纯属个人理解,请路过的小伙伴留下宝贵意见欢迎纠正和补充,谢谢
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))。
流程:首先输入尺寸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采用多个独立的逻辑分类器来计算属於特定标签的可能性在计算分类损失时,它对每个标签使用二元交叉熵损失降低了计算的复杂度。