先放yolo-v3的实验图,很狂,有种自己跟别人不在一个维度的狂
yolov3的改进是网络架构,使它更能检测小的物体,先验框也增加到了9种,在最后的分类中也改成了多标签的问题。
先验框
v3中将特征图分为检测大中小物体的三种,比如:13x13的用来检测大物体,26x26检测中物体。
但是特征图是从卷积的过程中产生的,那么26x26的特征图就不如13x13的所提取的特征到位,所以作者在这里将13x13的进行上采样然后和26x26的进行了特征融合。
在v3中是大量使用了残差连接的,目的是为了把网络做深
网络结构
v3中没有池化和全连接层,图尺寸的变化都是根据卷积核的步长来计算的
可以看到13x13的特征图经过上采样和卷积之后变成了26x26然后跟网络中出来的26x26做了一个concat拼在了一起再卷积得到检测中等物体的最终特征图。
最后就是对softmax的改变,由于要做多标签的问题,所以就把每个标签都做成了二分类,比如:猫(是,否)、狗、飞机、大炮...
总结
YOLOv3在保持实时性的基础上,对YOLOv2进行了几点改进,主要有三点:
- 使用了残差网络;采用逻辑回归预测置信度和进行分类,从三个尺度上预测b-box的坐标以及特征提取器发生变化。
- 在分类上,没有使用softmax多分类,作者也指出softmax最终对性能也没有提升,而且softmax假设是每个box只有一个类,这对迁移到更大有多种类别标签的数据集是没有好处的,对于
Open Images
这种数据集,目标可能有重叠的类别标签,因此Softmax不适用于多标签分类。所以作者使用多个逻辑回归来预测分类,使用二元交叉熵计算分类损失。 - 借由FPN的思想,用中间层的输出与后层输出进行融合,进行三个尺度预测,每个尺度的每个cell预测3个坐标,以上面为例,下采样32倍,最后一起的输出是8x8x1024,通过卷积层和逻辑回归得到8x8x255(255=3x(5+80),5是坐标加置信度,80是coco类别),这就是第一个尺度的预测输出,第二个尺度是8x8x1024通过上采样与卷积通过缩放变成16x16x512,然后与上一个stage的16x16x512进行concat,然后通过相似的方式生成16x16x255,类似的操作得到,得到32x32x255。