YOLO
YOLO是一个end-to-end的目标检测算法,通过回归的方法进行坐标框的检测及分类,奠定了YOLO系列“分而治之”的基调。
网络结构
YOLO使用CNN提取特征,然后使用全连接层得到预测值。网络结构灵感来源于GoogLeNet图像分类模型,结构如图所示,包含24个卷积层以及2个全连接层。与GoogLeNet不同的是,YOLO在3x3卷积层后只使用了1x1卷积层。
为了提高速度,作者设计了Fast YOLO,使用了9层卷积。
训练
YOLO将目标检测问题看成回归问题,采用总方差(Sum-Squared Error,SSE)损失函数计算损失,使用leaky ReLU作为激活函数,并且对不同部分采用了不同的权重。
训练步骤如下:
步骤1:使用ImageNet预训练前20层卷积层,训练结果为top-5准确率88%;
步骤2:一般检测需要更高清的图片,所以将图片resize成大小;
步骤3:通过卷积神经网络,输出维度为的张量,训练时使用Reshape之前一层的输出,即长度为1470的向量;
这里借用Inference过程的图来解释一下1470的来源,方便后面理解:
- S为划分网格数,即将原图像划分为
的网格;
- B表示每个网格生成框(bounding box,bbox)的个数;
- 5表示5个参数
:
表示bbox的中心相对于单元格的偏移量offset,单元格坐标为
,bbox坐标为
,图片宽高为
,计算公式为
表示bbox相对于整个图片的比例,bbox的宽高为
,计算公式为
由两部分组成,一是格子内是否有目标,二是bbox的IOU,计算公式为
格子内有物体,
,
,没有物体,
,
。
- C表示种类有20种,与Fast RCNN的21种不同,YOLO将是否为背景放在了confidence中;
步骤4:修改检测与分类的权重,增加bbox坐标的权重,降低没有物体时confidence权重
,原文中
、
;
步骤5:根据个单元格中每个单元格的参数,计算损失,损失函数如下。
Inference
上图为YOLO的检测框架,训练过程如下:
步骤1:将图片resize成大小;
步骤2:通过卷积神经网络,输出维度为的张量,得到每个单元格预测的bounding box及其类别置信度分数(class-specific confidence score),计算公式为
其中
为每个网格预测的类别信息,
为每个bbox预测是否有物体的置信度,
为bbox和gtbox的IOU值;
步骤3:设置阈值,过滤掉得分低的bbox,使用非极大值抑制(Non-Maximum Suppression,NMS)算法筛选剩余候选框;
NMS算法
YOLO中图像经过卷积神经网络可以给出多个带有score的bbox,这些bbox会存在交叉情况,所以需要使用NMS算法选出候选框,主要步骤如下:
- 将所有bbox按照score排序,选中score最高对应的bbox;
- 遍历其余bbox,若与当前bbox的IOU大于某个阈值(YOLO中是0.5),便将该bbox的score置为0;
- 从剩余未处理的bbox中在选取一个score最高的,重复以上步骤。
步骤4:对剩余候选框,确定其类别,只有当其score不为0时,输出检测结果。
总结
- 训练时使用的为全连接层的输出,即长度为1470的向量,然后通过Reshape映射回原图;
- 若单元格内存在多个目标,YOLO只能选择其中一个来训练,因为YOLO默认格子里所有的bbox为同种类目标;
- 图片中很多单元格不包含目标,其
趋于0,这样在损失函数中会抑制包含目标的单元格的梯度,即红框部分
因此YOLO提升了定位损失的权重,降低了没有目标单元格损失的权重,只有当单元格中有目标的时候才对分类进行损失计算; - 对bbox的坐标
和长宽
进行归一化,方便回归计算;
- 大小不同的bbox会给损失带来不同的影响,YOLO使用w和h的平方根来削弱这个影响;
- leaky ReLU和ImageNet模型预训练。
YOLO9000
YOLO9000相对YOLO版本,在继续保持处理速度的基础上,从预测更准确(Better),速度更快(Faster),识别对象更多(Stronger)这三个方面进行了改进。其中识别更多对象也就是扩展到能够检测9000种不同对象,称之为YOLO9000。
网络结构
作者设计了一个新的分类网络(Darknet-19)作为基础模型。
Better
- Batch Normalization
- 高分辨率分类器
原始YOLO的分类器以224*224作为输入,而检测采用448*448的图像,意味着模型需要学习检测目标以适应新的分辨率。YOLO9000直接使用448*448的图像训练分类器,这样模型可以更好地适应高分辨率的输入图像。 - 采用先验框(Anchor Box)(最终没有采用)
- 维度聚类(Dimension Clusters)
使用K-means算法自动选择最佳的初始框。 - 直接预测位置
- 细粒度特征(Fine-grained Features)
- 多尺度训练
Faster
- Darknet-19
- 数据增强
- 先训练分类任务,再训练检测任务
Stronger
分类和检测联合训练
YOLOv3
网络结构
backbone网络采用Darknet-53。相比于Darknet-19,Darknet-53加深了网络层数,引入了Resnet结构,并借鉴SPP思想,小尺寸特征图检测大尺度的目标,大尺寸特征图检测小尺度目标。
优化
- 采用了anchor机制,并根据K-means设定anchor的先验
YOLOv4