yolov3算法及其改进
- 1、yolov3简介
- 2、yolov3的改进
- 2.1、backbone的改进
- 2.1.1、darknet19相对于vgg16有更少的参数,同时具有更快的速度和更高的精度
- 2.1.2、resnet101和darknet53,同样具有残差结构,精度也类似,但是darknet具有更高的速度
- 2.2、FPN
- 2.3、anchor-base与grid-cell
- 3、yolov3的坐标表示和正负样本匹配
- 3.1、坐标表示
- 3.2、正负样本匹配
- 4、yolov3的损失函数
1、yolov3简介
- YOLOV3的实时性和精确性在当时比较好,广泛应用于工业界
- YOLOV3在backbone网络结构上应用残差连接思想来解决深度网络的梯度消失问题
- YOLOV3最显著的改进就是在三个尺度上以相同的方式来进行目标检测,这使得科技检测到不同规模的目标
- YOLOV3损失函数是将之前的softmax改为logit
- 在最后推理阶段YOLOV3对3个检测层的预测结果进行非最大抑制(NMS)来确定最终的检测结果
2、yolov3的改进
2.1、backbone的改进
yolov3主要基于darknet53进行构建,除此之外还有VGG,darknet19,resnet101,darknet53等等
2.1.1、darknet19相对于vgg16有更少的参数,同时具有更快的速度和更高的精度
- 较少的参数量:使用1x1的卷积代替了FC,同时 darknet19使用1x1的卷积进行通道缩减,而VGG使用3X3卷积,通道数几乎不变
- 较快的速度:1x1卷积的bottleneck设计也会有速度上的优势
- 较高的精度:darknet19在网络后期通道上也增加了而VGG系列最后一个block的通道数是不变的
2.1.2、resnet101和darknet53,同样具有残差结构,精度也类似,但是darknet具有更高的速度
残差结构
残差结构的如上图所示,原理如下:把卷积层的前后特征进行元素相加求和,如果特征在这其中的某一个卷积后消失,那么残差结构便可以找回丢失的特征
- 都使用了stride=2的3x3卷积代替了Max-pooling操作,也都用了残差结构的思想来设计主干模型
- darknet每个stage只使用了2个卷积作为block,而resnet101则使用了3个卷积层,
- darknet53最后一个stage通道数是resnet101的0.5倍
- 每一个stage的残差块数量darknet53的设计更为均衡(1,2,8,8,4vs3,4,23,3),说明resnet01的设计可能有冗余
2.2、FPN
基于图像金字塔的构建的特征金字塔构成了标准解决方案的基础,能够通过在位置和金字塔级别上的扫码模型来检测大范围内的对象。手动设计
手工设计的特征在很大程度上被卷积网络提取的特征所取代,卷积网络除了能够表示更高层次的语言之外,对尺度变化也更为鲁棒,有助于对单一尺度上的特征进行识别
图像金字塔的每个level都有其主要特点,backbone的网络都会产生不同大小分辨率的特征图,不同的深度导致每一层语义差距较大,同时高分辨率特征图具体低层次的特征,会损害其对目标识别的表征能力
SSD模型的金字塔特征层次结构,如上图所示,是一个特征化的图像金字塔,SSD重要来自不同层的多尺度特征,但是为了避免使用低级特征,SSD放弃使用已有的特征层,而是从网络的高层开始构建金字塔,然后添加几个新层
SSD错过了重用特征层次结构的更高分辨率特征的机会
上图结构,能够增加较少计算量的前提下融合低分辨率的语义信息较强的特征图和高分辨率语义信息较弱的但空间信息丰富的特征图
FPN的独特之处在于,它是在以特征金字塔为基础的结构上,对每一层的特征图分别进行预测,在保证速度的同时进一步提升精度
YOLOV3的FPN是如何设计的?
YOLOV3选择了重用backbone所提取的不同level的特征图,主要是8,16,32倍下采样的特征图,同时采用FPN的设计思想,分别对16倍,32倍以及各自上采样的结果进行融合,融合操作由add改为concat
2.3、anchor-base与grid-cell
YOLOV3会产生三个尺度的特征图,加入输入为4164163,特征图分别为:
- 13 X 13 预测大目标
- 26 X 26 预测中目标
- 52 X 52 预测小目标
总共产生1313+2626+5252个grid cell
每个grid cell由3个anchor
总共有3(1313+2626+52*52)个预测框
对于每一个grid cell,都对应一个85维度的tensor(80+5 = 80+4+1)
80:80个类别的概率
5=4+1:中心坐标x,中心坐标y,宽,高,置信度
3、yolov3的坐标表示和正负样本匹配
3.1、坐标表示
YOLOV3采用直接预测相对位置的方法:预测出bbox的中心点相对于grid cell左上角的相对坐标,例如tx,ty,tw,th,t0),然后通过一下坐标偏移公式计算得到bbox的位置大小和置信度。
tx、ty、tw、th就是模型的预测输出
cx,cy表示grid cell的坐标
如果特征图大小为13*13,grid cell就有13x13
那么第2行,第2列的grid cell坐标cx就是2,cy就是2,
pw和ph表示预测的前bbox的四则
bx,by,bw和bh就是预测得到的bbox的中心坐标和宽高。
confidence=P(object)*IOU表示框中含有object的置信度和这个box预测的准确度
如果这个框对应的是背景,那就是0
如果这个框对应的是前景,这个值就是与对应前景GT的IOU
3.2、正负样本匹配
正负样本匹配的规则就是给每一个GT分配一个正样本,这个正样本是所有bbox中找到一个与GT重叠区域最大的一个预测框,也就是该GT的IOU最大的预测框。
如果一个样本不是正样本,它既没有定位损失,也没有类别损失,只有置信度损失,在YOLOV3中尝试用focal loss来缓解正负样本不均衡的问题,由于负样本参与了置信度的损失,对loss影响占比小,因此效果不佳
另外还有一个缺点,正样本数量较小,网络难以训练
4、yolov3的损失函数
yolo的loss分为三个部分:
1、xywh的误差,也就是bboxloss 上面公式前两行
2、置信度误差,也就是obj loss 上面公式接下来两行
3、类别误差。也就是class loss 上面公式最后一行
其中
S:S^2代表1313,2626,52*52
B:每个网格产生B个候选框
带obj的I:如果在i,j处的box有目标,其值为1,否则为0;
带noobj的I:如果在i,j处的box没有目标,其值为1,否则为0;