YOLO系列算法原理讲解----(2)Yolov2/Yolo9000算法

YOLOV2/YOLO9000

  • YOLO9000:Better,Faster,Stronger
  • CVPR 2017,Best Paper Honorable Mention
  • 引入了anchor box的思想(改进直接回归的粗糙做法)
  • 输出层:卷积层替代YOLOV1的全连接层(通过卷积层减少网络结构对输入图像尺寸的敏感程度,因为FC层参数量同feature map的大小是息息相关的,卷积层无关)
  • 联合使用coco和imagenet物体分类标注数据(用检测数据集学习物体准确的位置信息,分类数据集学习分类的信息)
  • 识别种类、精度、速度和定位准确性都有大大提升

YOLOV2/YOLO9000改进之处:

  • Batch Normalization
  • 高分辨率分类器
  • Anchor Boxes
  • 细粒度特征
  • Multi-Scale Training
    在这里插入图片描述
    这是主干网络的网络结构采用darknet,而yolov1作者采用了GoogleNet,整体速度比VGG更快,而在YOLOV2中采用新的主干网络模型,结构类似于VGG NET,采用三乘三的卷积核,池化后的整个channel的数量都会增加一倍,在网结构中采用Batch Normalization,归一化处理,让整个训练过程更加稳定,收敛的更快,得到一个模型规范化的效果。由于通过卷积代替之前的FC,因此输入的图像尺寸就可以发生变化,因此可以进行多尺度的训练,而对于分类模型,这里采用高分辨率分类器来进行训练,yolo只采用一个维度上的特征,因此它学到的特征不会太惊精细,对于yolov2这里引入跳链的结构,也就是在最终的预测阶段,这里采用不同力度上的特征,通过对不同力度上的特征的融合来提高最终检测的性能。此外,在最终预测的时候同样采用Anchor的机制。具体如下:

YOLOV2/YOLO9000改进之处:
Batch Normalization

  • V1中也大量使用BN,同时在定位层(FC)dropout(防止过拟合)
  • V2中取消了dropout,均使用BN

高分辨率的分类器

  • V1中使用224 *224预训练,448 *448用于检测网络(一般会存在偏差)
  • V2以448 *448的分辨率微调最初的分类网络

Anchor Boxes

  • 预测bbox的偏移,使用卷积代替FC(FC层输出的向量大小通常为S * S * ( B *5+C),而直接采用卷积来代替的话,只需要卷积之后的feature map的大小为S *S,( B *5+C)对应了channel的数量,这样就同样能达到V1的FC层的效果)
  • 输入尺度:416(不是448 *448,原因在于图片中的物体都倾向于出现在图片的中心位置,特别是比较大的物体,因此就需要有一个单独位于物体中心的位置用来预测这个物体,而yolo通过卷积层之后会进行32倍的下采样,对于416 *416的图像呢,下采样32倍之后就会得到13 *13的feature map,而为什么采用416 *416输入的尺寸呢,原因在于对于448 *448的输入,在经过32倍下采样之后得到14 *14这样的feature map,这时候就不存在这样的一个网格位于图像的正中心。这样也保证后面产生的宽高比为奇数。主要原因是作者发现大物体主要位于中间位置,如果不采用奇数,就得使用中间的4个cell来预测物体)
  • max pooling下采样
  • 预测超过1000个
  • mAP降低,recall显著提高(在yolov2中加入Anchor Box之后对于每一个cell,最终可预测多个建议框,相比于之前的网络只能预测B个而言,使用Anchor机制之后结果的召回率有提升,而准确率下降了)

细粒度特征
添加pass through layer,把浅层特征图(26 *26)连接到深层(13 *13)特征图(跳链)

  • Resnet中的identity mapping
  • 把26 *26 *512的特征图叠加成13 *13 *2048的特征图,与深层特征图相连接,增加细粒度特征
  • 性能获得了1%的提升

Multi-Scale Training
每隔几次迭代后就会微调网络的输入尺

  • 输入图像尺寸{320,352,…,608}
  • 尺度的变化

Darknet-19

  • 主要使用3 *3卷积
  • pooling之后channel数加
  • global average pooling
  • 1 *1卷积压缩特征表示
  • batch normalization
    YOLO系列算法原理讲解----(2)Yolov2/Yolo9000算法_第1张图片
    1 *1的卷积核放在3 *3的卷积核中间用于压缩特征。19个卷积层,5个池化层。

每个box包含4个坐标值,1个置信度和classes个条件类别概率
YOLO系列算法原理讲解----(2)Yolov2/Yolo9000算法_第2张图片
不同于yolov1,yolov1中的类别是针对一个cell而言的,每个格子对应B个Bounding Box,每个格子预测的数量是5 *B +C,而yolov2中,类别是对于每个box而言,同Anchor Box是保持一致的,对每个box会预测5 +C长度的向量,整个这样的Box,假设数量为B个,最终会预测B *(5 + C)个输出维度。它更加关注于每个Bounding Box。

YOLOV2算法网络性能–更好
比较:
YOLO系列算法原理讲解----(2)Yolov2/Yolo9000算法_第3张图片
YOLO系列算法原理讲解----(2)Yolov2/Yolo9000算法_第4张图片

YOLOV2算法网络性能–更强
YOLO9000是在YOLOv2的基础上提出的一种可以检测超过9000个类别的模型,其主要贡献点在于提出了一种分类和检测的联合训练策略
能识别9000中归功于它采用了WordTree结构,融合两种数据集。(分类和检测)
YOLO系列算法原理讲解----(2)Yolov2/Yolo9000算法_第5张图片
通过联合训练策略,YOLO9000可以快速检测出超过9000个类别的物体,总体mAP
值为19.7%
YOLO系列算法原理讲解----(2)Yolov2/Yolo9000算法_第6张图片
对于Imagenet数据集而言,我们需要针对每一个类别,通过一个较大的Softmax来分类,而对于WordTree,我们需要考虑label个label之间的关系,在通过对同一概念下的同一词进行softmax分类来完成最终分类loss的运算。

你可能感兴趣的:(深度学习,YOLO算法,YOLOV2,YOLO9000)