【目标检测 深度学习】3.Yolo系列算法原理

目录

  • 1.YoloV1
    • 1.1综述
    • 1.2算法原理
    • 1.3yolov1网络结构图
    • 1.4网络结构分析
    • 1.5损失函数定义
    • 1.6网络训练
    • 1.7yolov1网络存在的问题
    • 1.8yolov1网络性能
  • 2.YoloV2
    • 2.1算法原理
    • 2.2算法网络结构
  • 2.3算法性能对比
  • 3.Yolo9000
  • 4.YoloV3
    • 4.1YoloV3介绍:
    • 4.2改进策略
    • 4.2主干网络
    • 4.3多尺度预测(类FPN)
    • 4.4分类器
    • 4.5网络性能
    • 4.6darknet框架
  • 5.Yolo系列网络优缺点


1.YoloV1

1.1综述

  • 同时预测多个box位置和类别
  • 端到端的目标检测和识别
  • 速度更快
    • 实现回归功能的CNN并不需要复杂的设计过程
    • hijack选用整图训练模型,更好地区分目标和背景区域

1.2算法原理

【目标检测 深度学习】3.Yolo系列算法原理_第1张图片

  • 图像被分成S×S个格子,对于每一个格子
  • 包含GT物体中心的格子负责检测相应的物体,如上图狗所在中心落在某一个格子上,则这个格子负责预测狗。
  • 每个格子预测B(超参数)个检测框及其置信度(x,y,w,h,c),以及C个类别概率。置信度表面了预测的bbox中含有目标物体的可能性以及当前bbox预测得有多准。检测框及置信度对应bbox,类别对应当前的格子。每个格子预测的向量长度为5×B×C
  • bbox信息(x,y,w,h)为物体的中心位置相对格子位置的偏移及宽度和高度,均被归一化。
  • 置信度反映是否包含物体以及包含物体情况下位置的准确性,定义为
    • 在这里插入图片描述

1.3yolov1网络结构图

【目标检测 深度学习】3.Yolo系列算法原理_第2张图片
yolov1的网络结构采用直接回归的方式来获取最终所需要检测的物体的位置和类别,它只包含了CNN网络结构。原始的输入图像经过多层卷积之后最终再通过一个FC层。原论文里S的大小为7,B为2。 通过这样的回归,最终可以得到每一个格子所包含的bbox的置信度以及是否包含目标物体,如果包含的话,当前物体的偏移量是多少,以及长宽是多少。对FC层通过的结果进行解码,得到上图中下半部分的两幅图,对于第一个图,虽然每个格子预测B个BBOX,但是只选择IOU最高的BBOX作为物体检测的输出,这也是yolo算法的缺陷,图像中可能会包含多个小的目标,但由于每一个格子只预测一个物体,如果格子同时出现多个物体的时候,效果就会变差。网络回归之后得到每一个bbox对应的类别和位置信息,通过NMS进行筛选后得到最终检测的结果。

1.4网络结构分析

  • 网络使用小卷积,即1×1和3×3
  • FC输出为:S×S(B×5+C)
  • 网络比VGG16快,准确率稍差

1.5损失函数定义

  • Loss函数:均方和误差
  • 坐标误差、IOU误差和分类误差
  • 权重考量
  • 【目标检测 深度学习】3.Yolo系列算法原理_第3张图片

1.6网络训练

  • 预训练
    • ImageNet1000类数据预训练
  • 使用预训练参数(20个conv)来初始化yolo,并训练VOC20
  • 将输入图像分辨率从224×224Resize到448×448。对于预训练模型,如果我们仅仅是使用了卷积层,则对feature map的大小不敏感
  • 训练时B个bbox的GT设置相同

1.7yolov1网络存在的问题

  • 输入尺寸固定(检测层没有采用多尺度输入)
  • 小目标检测效果差
    • 同一格子包含多个目标时,仅预测一个(IOU最高)
  • 损失函数中,没有区分大物体的IOU和小物体的IOU的误差对于网络训练loss的贡献,实际上小物体的IOU误差会对网络优化过程造成更大的影响,进而降低物体定位的准确性。
  • 出现不常见长宽比目标时,算法效果较差。

1.8yolov1网络性能

五种尺度训练的精度与其他网络的精度对比:
【目标检测 深度学习】3.Yolo系列算法原理_第4张图片

2.YoloV2

2.1算法原理

相比Yolov1:

  • 引入了anchor box思想
  • 输出层:卷积层替代YOLO V1的全连接层
  • 联合使用coco和Imagenet物体分类标注数据
  • 识别种类、精度、速度和定位准确性等都有大大提升

具体地改进之处:

  1. batch normalization

    • 进行归一化处理让整个过程变得更稳定,收敛速度变得更快,达到模型规范化的效果
    • v1中也大量用了BN,同时在FC中运用dropout防止过拟合
    • v2中取消了dropout,均使用BN
      .
  2. 高分辨率分类器

    • v1中使用224×224预训练分类网络,448×448用于检测网络
    • v2以448×448的分辨率微调最初的分类网络,保证两个模型在分布上的一致性。
      .
  3. anchor boxes

    • 预测bbox的偏移,使用卷积代替FC。最后卷积层长宽为S×S,通道数为B×5+C。则与以前效果一样。
    • 输入尺度:416。因为图片中的物体倾向于出现在图像中间的位置,如果是448×448的输入,那么最后下采样之后是14×14,没有中心,如果是416×416的输入,32倍下采样后是13×13(奇数输出),有中心,可以预测那些倾向于出现在中心的大物体。
  4. max pooling下采样
    .

  5. 预测超过1000个。比如13×13 然后每个anchor9个预测值,一共就预测1521个

    • mAP小幅度降低,recall显著提高
    • 对于anchor box的宽、高、维度的选择往往是先验框,在训练的过程虽然也可以调整box的宽高维度,最终得到准确的bbox,但是作者希望我们开始选择的时候就选具有代表性的bbox的宽高维度,这样可以通过网络更容易学习到预测的位置,作者采用kmeans的方法对bbox进行回归,自动找到更好的bbox的宽高维度比,距离的度量采用IOU,这样误差与bbox尺寸无关,防止欧式距离中较大尺寸的框所得距离比较小尺寸的大。
    • 最终anchor box预测数量为5最合适。

    .

  6. 细粒度特征

    • 添加pass through layer,把浅层特征图(26×26)连接到深层特征图
      • 用Resnet中的identity mapping方法
      • 把26×26×512的特征图叠加成13×13×2048的特征图,与深层特征图相连接,增加细粒度特征
      • 性能获得1%的提升
  7. multi-scale training,在结尾处用卷积代替FC,则输入图像尺寸就可以变化,所以可以改变图像尺寸进行多尺度训练。每隔几次迭代后就会微调网络的输入尺寸,输入图像尺寸{320,352,…608}

2.2算法网络结构

  1. 主干网络:Darknet-19
    • 主要使用3×3卷积
    • pooling之后channel数增加
    • global average pooling 即用1×1卷积核压缩特征
    • 1×1卷积压缩特征表示
    • batch normalization
      【目标检测 深度学习】3.Yolo系列算法原理_第5张图片
    • 每个box包含4个坐标值,1个置信度和classes个条件类别概率。在v1中每个cell预测一个类别概率,现在是每个bbox预测一个类别概率,所以之前每个格子预测的维度是5×B+C,在v2中,每个box预测5+C个向量。

2.3算法性能对比

【目标检测 深度学习】3.Yolo系列算法原理_第6张图片
下图是不同尺度训练的精度与其他网络的精度对比:
【目标检测 深度学习】3.Yolo系列算法原理_第7张图片

3.Yolo9000

yolo9000是在yolov2的基础上提出的一种可以检测超过9000个类别的模型,其主要贡献点在于提出了一种分类和检测的联合训练策略。它采用了wordTree的结构,用它来混合检测数据集和识别数据集中的数据,来达到分类和检测联合训练的效果。
【目标检测 深度学习】3.Yolo系列算法原理_第8张图片
对于分类任务而言,同样是猫,但分类标签可能会有猫的类别的划分,比如波斯猫等等更细粒度的猫的标签,而对于检测任务而言,仅仅是识别猫、狗这种粗粒度上的概念,如果将分类和回归采用简单方法进行融合就会同时出现猫的label和波斯猫的label这种情况。word tree则是将这两种label来构建它们的粒度关系,将分类和检测任务的数据集融合,在检测任务中不仅要完成物体类别的回归,同样需要对物体类别进行判定,而在分类数据集上,对物体类别进行分类而且物体类别可能更细,通过wordl tree能够将label的层次关系表示出来。
.
通过联合训练策略,Yolo9000可以快速检测出超过9000个类别的物体,总体mAP值为19.7%。
【目标检测 深度学习】3.Yolo系列算法原理_第9张图片

4.YoloV3

4.1YoloV3介绍:

  • 速度和精度最均衡的目标检测网络
  • 融合多种先进方法,改进YoloV1/V2的缺点,且效果更优
    • 重点解决了小物体检测问题

4.2改进策略

  • 更好的主干网络(类ResNet)
  • 多尺度预测(类FPN)
  • 更好的分类器

4.2主干网络

主干网络对比如下:
【目标检测 深度学习】3.Yolo系列算法原理_第10张图片

4.3多尺度预测(类FPN)

  • 聚类来得到Bbox的先验,聚类之后得到9个聚类中心,将这9个聚类中心平均分到3种尺度上,每种尺度预测3个box,另外对于每种尺度,作者引入卷积层来进一步提取特征,之后再输出box的信息。
  • 如下图对于尺度1而言,作者通过卷积之后直接得到后续box的信息
  • 对于尺度2而言,作者在进行输出之前会对尺度1输出的卷积进行上采样,然后同尺度2的feature map进行相加,相加之后再输出到后续的box信息,整个feature map的大小比scale 1扩大了两倍
  • 尺度3比尺度2也扩大了两倍,如下图所示。

【目标检测 深度学习】3.Yolo系列算法原理_第11张图片

4.4分类器

更好的分类器:binary cross-entropy loss
因为softmax不适用于多标签分类
softmax可被独立的多个logistic分类器替代,且准确率不会下降

4.5网络性能

【目标检测 深度学习】3.Yolo系列算法原理_第12张图片

4.6darknet框架

  • 由C语言和CUDA实现
  • GPU显存利用效率极高
  • 第三方库的依赖较少
  • 容易移植到其他平台,如windows或嵌入式设备

5.Yolo系列网络优缺点

优点:

  1. 快速,pipline简单
  2. 背景误检率低
  3. 通用性强

但相比RCNN系列物体检测方法,YOLO具有以下缺点(主要因为每个网格预测固定数量的物体使候选框数量减少):

  1. 识别物体位置精准性差
  2. 召回率低

你可能感兴趣的:(目标检测,深度学习)