一、YOLO系列算法的基本思想
1.1 YOLO系列算法的基本思想
(1)首先通过特征提取网络对输入图像提取特征,得到一定size的feature map,也就是我们所说的S*S的网络图;
(2)然后在S*S个grid cell上,每个grid cell预测固定数量的anchor box(v1是2个,v2是5个,v3是3个)
(3)最后在anchor box的基础上做目标分类和边界框回归
二、YOLO-V3
2.1 Backbone的创新
YOLOV3在darknet-19的基础上进一步扩充了深度,使用darknet-53进行特征提取,其网络结构如下:
进步之处
1、充分借鉴了resnet网络的残差结构,使得网络能够达到很深程度的同时避免了梯度消失的问题;
2、去除了池化层而改用步长为2的卷积层的方式进行特征图降维,更好的保持了信息传递;
3、使用1*1卷积即降低了参数量,又增强了不同通道间的特征融合。
2.2 Neck的创新
多尺度融合
背景
yolo自诞生之日起,就被打上了一个不太友好的标签,对小物体的检测效果不佳。这是原理上的限制,yolov1仅仅利用最后一层卷积层进行特征预测,而小物体的信息经过层层卷积后几乎完全丧失,从而制约了模型的效果;
yolov2中采用passthrough结构来改善细粒度特征的检测,由于网络深度不够深,浅层学到的边缘特征和当前深层学习到的特征结合起来,学习不到丰富的语义信息,所以效果依旧不理想;
yolov3,作者充分借鉴了FPN网络的思想,采用多尺度来对不同大小尺度的目标物体进行检测;
流程
1、416* 416* 3的图像输入图像后,经过5次下采样,得到第一张尺寸为13* 13的预测特征图。13* 13的特征图下采样倍数大,单元网络的感受野比较大,此时,我们能够很好的检测出比较大的目标物。这里会输出特征图P0,P0包含了预测出大物体的anchor boxs置信度得分、边界框位置、类别概率,这里的目的就是为了弥补深层网络语义信息丰富,而空间位置不准确的缺点,从而去实现多尺度融合;507
2、为了实现细粒度特征检测,在第79层特征图处进行上采样,并与来自第61层的特征图进行特征拼接,得到了第二张尺寸为26* 26的预测特征图。26* 26的特征图中单元格感受野适中,能够很好地检测出尺寸中等的目标物。这里会输出特征图P1,P1同样包含了预测出中等物体的anchor box置信度得分、边界框位置坐标、类别概率。2028
3、最后,在第91层特征图处进行上采样,与第36层特征图进行拼接,得到了第三张尺寸为52* 52的预测特征图。52* 52的特征图单元格感受野相对较小,能够很好地检测出尺寸较小的目标物。这里会输出一个P2,P2包含了预测出小物体的anchor box置信度得分、边界框位置坐标、类别概率。8112
4、以上,就是一个完整的前向传播过程,我们产生了507+2028+8112=10636个anchor box,然后再通过反向传播,对anchor做分类和边界框回归;
细节
由于三张预测特征图承担的任务各不相同,相应的anchor box也需要进行调整。V3延续采用k-means聚类算法确定的anchor box尺寸的方法,在COCO数据上,聚类得到9中尺寸的anchor,然后遵循特征图尺寸越小,则分配的anchor的尺寸越大的原则,为每张特征图分配3种anchor。
2.3 Head 的创新
2.3.1 代价函数
在目标分类上直接使用逻辑分类器代替softmax函数,主要原因是softmax函数要为每个边界框分配一个类别。而使用多个独立的逻辑分类器可以对同一个边界框进行多次预测,这样在进行目标分类时,可以为一个目标预测多个类别(例如,一个目标即是“人”,也是“女人”);