首页 > 技术文章 > YOLOv3 学习笔记

ricc 2022-03-10 20:45 原文

 

图中最左侧一列的1、2、8、8、4数字表示有多少个重复的残差组件,每个残差组件有两个卷积层和一个快捷链路;
不断进行下采样的过程中,输入图片的高和宽不断被压缩,通道数不断被扩张;
->从而可以获得一堆的特征层,可以表示注入进来的图片的特征:
52,52,256 52×52×75 ->52×52×3×25(20+1+4)
26,26,512 会和13×13×1024特征层上采样后的结果进行堆叠5次卷积 26×26×75 26×26×3×25(20+1+4)
13,13,1024进行5次卷积 13,13,75->13,13,3(3个先验框),25->13,13,3,20+1+4(属于概率的概率+是否有物体置信度分数+中心点坐标和长宽)

IoU为0不会预测类别;
YOLOv3是每个BBOX预测自己是属于哪个类别,(S * S * B )* ( 4 + 1 + C );
Scale1预测的是更大的框,Scale3预测的是更小的框,预测的目标不一样,克服了单层输出的缺陷;
COCO数据集是80个类别;
YOLOv3有九种尺度的先验框,每种下采样的尺度设定三种先验框,总共会聚类出九种尺寸的先验框。在COCO数据集这9个先验框是:(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。分配上,在最小的1313特征图上(有最大的感受野)应用较大的先验框(116x90),(156x198),(373x326),适合检测较大的对象。中等的2626特征图上(中等感受野)应用中等的先验框(30x61),(62x45),(59x119),适合检测中等大小的对象。较大的52*52特征图上(较小的感受野)应用较小的先验框(10x13),(16x30),(33x23),适合检测较小的对象;

预测对象类别时不再使用softmax,改成使用Logistic的输出进行预测,这样能够支持多标签对象(比如一个人有Women和Person两个标签);
YOLO3共进行了多少个预测?对于一个416×416的输入图像,在每个尺度的特征图的每个网格设置3个先验框,总共有 13×13×3 + 26×26×3 + 52×52×3 = 10647 个预测。每一个预测是一个(4+1+80)=85维向量,这个85维向量包含边框坐标(4个数值),边框置信度(1个数值),对象类别的概率(对于COCO数据集,有80种对象)。对比一下,YOLO2采用13×13×5 = 845个预测,YOLO3的尝试预测边框数量增加了10多倍,而且是在不同分辨率上进行,所以mAP以及对小物体的检测效果有一定的提升。

YOLOv3借鉴了残差网络结构,形成层次更深的网络层次,以及多尺度检测,提升了mAP及小物体检测效果。如果采用COCO mAP50作为评估指标,YOLOv3的表现非常好,在精确度相当的情况下,YOLOv3的速度是其他模型的3、4倍。但是,如果要求更加精准的预测框,YOLOv3在精确率上确实表现一般;

YOLOv3做了尝试的东西:
(1)Anchor Boxes坐标的偏移预测:我们尝试了常规的Anchor box预测方法,比如利用线性激活将坐标x、y的偏移程度预测为边界框宽度或高度的倍数。但我们发现这种做法降低了模型的稳定性,且效果不佳;
(2)用线性方法预测x,y,而不是使用逻辑方法。我们尝试使用线性激活来直接预测x,y的offset,而不是逻辑激活。这降低了mAP成绩;
(3)focal loss:我们尝试使用focal loss,但它使我们的mAP降低了2点。 对于focal loss函数试图解决的问题,YOLOv3从理论上来说已经很强大了,因为它具有单独的对象预测和条件类别预测。因此,对于大多数例子来说,类别预测没有损失?或者其他的东西?我们并不完全确定;
(4)双IOU阈值和真值分配。在训练期间,Faster R-CNN用了两个IOU阈值,如果预测的边框与.7的ground truth重合,那它是个正面的结果;如果在[.3—.7]之间,则忽略;如果和.3的ground truth重合,那它就是个负面的结果。我们尝试了这种思路,但效果并不好。我们对现在的更新状况很满意,它看起来已经是最佳状态。有些技术可能会产生更好的结果,但我们还需要对它们做一些调整来稳定训练;

YoloV3所使用的主干特征提取网络为Darknet53,它具有两个重要特点:
1、Darknet53具有一个重要特点是使用了残差网络Residual,Darknet53中的残差卷积就是首先进行一次卷积核大小为3X3、步长为2的卷积,该卷积会压缩输入进来的特征层的宽和高,此时我们可以获得一个特征层,我们将该特征层命名为layer。之后我们再对该特征层进行一次1X1的卷积和一次3X3的卷积,并把这个结果加上layer,此时我们便构成了残差结构。通过不断的1X1卷积和3X3卷积以及残差边的叠加,我们便大幅度的加深了网络。残差网络的特点是容易优化,并且能够通过增加相当的深度来提高准确率。其内部的残差块使用了跳跃连接,缓解了在深度神经网络中增加深度带来的梯度消失问题。

2、Darknet53的每一个卷积部分使用了特有的DarknetConv2D结构,每一次卷积的时候进行l2正则化,完成卷积后进行BatchNormalization标准化与LeakyReLU。普通的ReLU是将所有的负值都设为零,Leaky ReLU则是给所有负值赋予一个非零斜率。

 

推荐阅读