YOLO

YOLO是一个end-to-end的目标检测算法,通过回归的方法进行坐标框的检测及分类,奠定了YOLO系列“分而治之”的基调。

网络结构

YOLO使用CNN提取特征,然后使用全连接层得到预测值。网络结构灵感来源于GoogLeNet图像分类模型,结构如图所示,包含24个卷积层以及2个全连接层。与GoogLeNet不同的是,YOLO在3x3卷积层后只使用了1x1卷积层。

为了提高速度,作者设计了Fast YOLO,使用了9层卷积。

yolo目标检测好发文章吗 yolo目标检测完整步骤_ide

训练

YOLO将目标检测问题看成回归问题,采用总方差(Sum-Squared Error,SSE)损失函数计算损失,使用leaky ReLU作为激活函数,并且对不同部分采用了不同的权重。

训练步骤如下:

步骤1:使用ImageNet预训练前20层卷积层,训练结果为top-5准确率88%;

步骤2:一般检测需要更高清的图片,所以将图片resize成yolo目标检测好发文章吗 yolo目标检测完整步骤_目标检测_02大小;

步骤3:通过卷积神经网络,输出维度为yolo目标检测好发文章吗 yolo目标检测完整步骤_计算机视觉_03的张量,训练时使用Reshape之前一层的输出,即长度为1470的向量;

yolo目标检测好发文章吗 yolo目标检测完整步骤_计算机视觉_04

这里借用Inference过程的图来解释一下1470的来源,方便后面理解:

  • S为划分网格数,即将原图像划分为yolo目标检测好发文章吗 yolo目标检测完整步骤_目标检测_05的网格;
  • B表示每个网格生成框(bounding box,bbox)的个数;
  • 5表示5个参数yolo目标检测好发文章吗 yolo目标检测完整步骤_计算机视觉_06
  • yolo目标检测好发文章吗 yolo目标检测完整步骤_目标检测_07表示bbox的中心相对于单元格的偏移量offset,单元格坐标为yolo目标检测好发文章吗 yolo目标检测完整步骤_计算机视觉_08,bbox坐标为yolo目标检测好发文章吗 yolo目标检测完整步骤_计算机视觉_09,图片宽高为yolo目标检测好发文章吗 yolo目标检测完整步骤_ide_10,计算公式为yolo目标检测好发文章吗 yolo目标检测完整步骤_yolo目标检测好发文章吗_11
  • yolo目标检测好发文章吗 yolo目标检测完整步骤_ide_12表示bbox相对于整个图片的比例,bbox的宽高为yolo目标检测好发文章吗 yolo目标检测完整步骤_ide_13,计算公式为yolo目标检测好发文章吗 yolo目标检测完整步骤_计算机视觉_14
  • yolo目标检测好发文章吗 yolo目标检测完整步骤_yolo目标检测好发文章吗_15由两部分组成,一是格子内是否有目标,二是bbox的IOU,计算公式为yolo目标检测好发文章吗 yolo目标检测完整步骤_目标检测_16格子内有物体,yolo目标检测好发文章吗 yolo目标检测完整步骤_ide_17yolo目标检测好发文章吗 yolo目标检测完整步骤_卷积_18,没有物体,yolo目标检测好发文章吗 yolo目标检测完整步骤_目标检测_19yolo目标检测好发文章吗 yolo目标检测完整步骤_yolo目标检测好发文章吗_20
  • C表示种类有20种,与Fast RCNN的21种不同,YOLO将是否为背景放在了confidence中;

步骤4:修改检测与分类的权重,增加bbox坐标的权重yolo目标检测好发文章吗 yolo目标检测完整步骤_目标检测_21,降低没有物体时confidence权重yolo目标检测好发文章吗 yolo目标检测完整步骤_卷积_22,原文中yolo目标检测好发文章吗 yolo目标检测完整步骤_计算机视觉_23yolo目标检测好发文章吗 yolo目标检测完整步骤_目标检测_24

步骤5:根据yolo目标检测好发文章吗 yolo目标检测完整步骤_卷积_25个单元格中每个单元格的参数,计算损失,损失函数如下。

yolo目标检测好发文章吗 yolo目标检测完整步骤_计算机视觉_26

Inference

yolo目标检测好发文章吗 yolo目标检测完整步骤_ide_27


上图为YOLO的检测框架,训练过程如下:

步骤1:将图片resize成yolo目标检测好发文章吗 yolo目标检测完整步骤_目标检测_28大小;

步骤2:通过卷积神经网络,输出维度为yolo目标检测好发文章吗 yolo目标检测完整步骤_计算机视觉_03的张量,得到每个单元格预测的bounding box及其类别置信度分数(class-specific confidence score),计算公式为yolo目标检测好发文章吗 yolo目标检测完整步骤_计算机视觉_30其中yolo目标检测好发文章吗 yolo目标检测完整步骤_计算机视觉_31为每个网格预测的类别信息,yolo目标检测好发文章吗 yolo目标检测完整步骤_ide_32为每个bbox预测是否有物体的置信度,yolo目标检测好发文章吗 yolo目标检测完整步骤_计算机视觉_33为bbox和gtbox的IOU值;

yolo目标检测好发文章吗 yolo目标检测完整步骤_目标检测_34


步骤3:设置阈值,过滤掉得分低的bbox,使用非极大值抑制(Non-Maximum Suppression,NMS)算法筛选剩余候选框;

yolo目标检测好发文章吗 yolo目标检测完整步骤_目标检测_35

NMS算法
YOLO中图像经过卷积神经网络可以给出多个带有score的bbox,这些bbox会存在交叉情况,所以需要使用NMS算法选出候选框,主要步骤如下:

  1. 将所有bbox按照score排序,选中score最高对应的bbox;
  2. 遍历其余bbox,若与当前bbox的IOU大于某个阈值(YOLO中是0.5),便将该bbox的score置为0;
  3. 从剩余未处理的bbox中在选取一个score最高的,重复以上步骤。

步骤4:对剩余候选框,确定其类别,只有当其score不为0时,输出检测结果。

总结
  1. 训练时使用的为全连接层的输出,即长度为1470的向量,然后通过Reshape映射回原图;
  2. 若单元格内存在多个目标,YOLO只能选择其中一个来训练,因为YOLO默认格子里所有的bbox为同种类目标;
  3. 图片中很多单元格不包含目标,其yolo目标检测好发文章吗 yolo目标检测完整步骤_ide_36趋于0,这样在损失函数中会抑制包含目标的单元格的梯度,即红框部分
    因此YOLO提升了定位损失的权重,降低了没有目标单元格损失的权重,只有当单元格中有目标的时候才对分类进行损失计算;
  4. 对bbox的坐标yolo目标检测好发文章吗 yolo目标检测完整步骤_ide_37和长宽yolo目标检测好发文章吗 yolo目标检测完整步骤_ide_38进行归一化,方便回归计算;
  5. 大小不同的bbox会给损失带来不同的影响,YOLO使用w和h的平方根来削弱这个影响;
  6. leaky ReLU和ImageNet模型预训练。

YOLO9000

YOLO9000相对YOLO版本,在继续保持处理速度的基础上,从预测更准确(Better),速度更快(Faster),识别对象更多(Stronger)这三个方面进行了改进。其中识别更多对象也就是扩展到能够检测9000种不同对象,称之为YOLO9000。

网络结构

作者设计了一个新的分类网络(Darknet-19)作为基础模型。

yolo目标检测好发文章吗 yolo目标检测完整步骤_目标检测_39

Better
  1. Batch Normalization
  2. 高分辨率分类器
    原始YOLO的分类器以224*224作为输入,而检测采用448*448的图像,意味着模型需要学习检测目标以适应新的分辨率。YOLO9000直接使用448*448的图像训练分类器,这样模型可以更好地适应高分辨率的输入图像。
  3. 采用先验框(Anchor Box)(最终没有采用)
  4. 维度聚类(Dimension Clusters)
    使用K-means算法自动选择最佳的初始框。
  5. 直接预测位置
  6. 细粒度特征(Fine-grained Features)
  7. 多尺度训练
Faster
  1. Darknet-19
  2. 数据增强
  3. 先训练分类任务,再训练检测任务
Stronger

分类和检测联合训练

YOLOv3

网络结构

backbone网络采用Darknet-53。相比于Darknet-19,Darknet-53加深了网络层数,引入了Resnet结构,并借鉴SPP思想,小尺寸特征图检测大尺度的目标,大尺寸特征图检测小尺度目标。

yolo目标检测好发文章吗 yolo目标检测完整步骤_目标检测_40

优化
  • 采用了anchor机制,并根据K-means设定anchor的先验

YOLOv4