YOLOv3
最新的YOLOv3解决了问题:如何检测两个距离很近的同类物体,淡然又或者是距离很近的不同类的物体
并且最新的YOLOv3在保证速度不降低的条件下,性能效果上已经能达到SSD的效果,这在之前的YOLOv1和YOLOv2版本里都是从未有过的。
YOLOv3与YOLOv2的不同
- loss不同:v3替换了v2的softmax loss变成了logistic loss
- anchor bbox prior不同:v2聚类anchor的宽高时得到5种大小的anchor,而v3得到了9个anchor
- detection的策略不同:v2只有一个detection,v3一下子变成了3个,分别是1个下采样的,feature map为13×13,还有2个上采样的eltwise sum,feature map 为26×26,52×52,也就是说v3的v3的416版本已经用到了52的feature map,而v2把多尺度考虑到训练的data采样上,最后也只是用到了13×13的feature map,这应该是对小目标影响最大的地方
- backbone不同:这和上一点是有关系的,v2的darknet-19变成了v3的darknet53,为啥呢?就是需要上采样,卷积的数量自然就多了,另外作者还用了一连串的3×3、1×1的卷积,3×3的卷积增加channel,而1×1的卷积在于压缩3×3卷积后的特征表示。
改进细节
1.多尺度预测
每种尺度预测3个box,anchor的涉及方法仍然使用聚类,得到9个聚类中心,按其大小均分给3种尺度
尺度1:在基础网络之后添加一些卷积层再输出box信息
尺度2:在尺度1中的倒数第二层的卷积层上采样(×2)再与16×16大小的特征图相加,再次通过多个卷积后输出box信息,相比尺度1变大2倍
尺度3:与尺度2类似,使用了32×32大小的特征图
2.分类器-类别预测:
YOLOv3不使用softmax对每个框进行分类,主要考虑因素有2个:
Softmax使得每个框分配一个类别(score最大的一个),而对于Open Images这种数据集,目标可能有重叠的类别标签,因此softmax不适用于多标签分类;
Softmax可被独立的多个logistic分类器替代,且准确率不会下降。分类损失采用binary cross-entropy loss
基础网络 3.Darknet-53
这个网络主要是由一系列的1×1和3×3的卷积层组成(每个卷积层后都会跟一个BN层和一个LeakyReLU层),作者说因为网络中有53个convolutional layers,所以叫做Darknet-53(53包括了全连接层,但不包括Residual层).下图是Darknet-53的结构图。卷积的stride默认为(1,1),padding默认为same,当stride为(2,2)时padding为valid
上图是以256×256进行预训练的,常用的尺寸还有416×416.
网络结构
作者在论文中提到利用三个特征层进行边框的预测,如下图所示
上图中已经能够很清楚的看到三个预测层分别来自什么地方,以及Concatenate层与哪个层进行拼接。
YOLO的发展历程
这发展的历程应该是这样的:
yolo——SSD——yolov2——FPN、Focal loss、DSSD……——yolov3