目标检测方法概述(二)--YOLO系列

  • YOLO

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

  • 网络结构

YOLO使用CNN提取特征,然后使用全连接层得到预测值。网络结构灵感来源于GoogLeNet图像分类模型,结构如图所示,包含24个卷积层以及2个全连接层。与GoogLeNet不同的是,YOLO在3x3卷积层后只使用了1x1卷积层。
为了提高速度,作者设计了Fast YOLO,使用了9层卷积。
目标检测方法概述(二)--YOLO系列_第1张图片

  • 训练

YOLO将目标检测问题看成回归问题,采用总方差(Sum-Squared Error,SSE)损失函数计算损失,使用leaky ReLU作为激活函数,并且对不同部分采用了不同的权重。
训练步骤如下:
步骤1:使用ImageNet预训练前20层卷积层,训练结果为top-5准确率88%;
步骤2:一般检测需要更高清的图片,所以将图片resize成 448 × 448 448\times448 448×448大小;
步骤3:通过卷积神经网络,输出维度为 S × S × ( B ∗ 5 + C ) S\times S\times(B*5+C) S×S×(B5+C)的张量,训练时使用Reshape之前一层的输出,即长度为1470的向量;
目标检测方法概述(二)--YOLO系列_第2张图片

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

  • S为划分网格数,即将原图像划分为 7 × 7 7\times7 7×7的网格;
  • B表示每个网格生成框(bounding box,bbox)的个数;
  • 5表示5个参数 ( x , y , w , h , c o n f i d e n c e ) (x, y,w,h,confidence) (x,y,w,h,confidence)
  • ( x , y ) (x,y) (x,y)表示bbox的中心相对于单元格的偏移量offset,单元格坐标为 ( x c o l , y r o w ) (x_{col},y_{row}) (xcol,yrow),bbox坐标为 ( x c , y c ) (x_c,y_c) (xc,yc),图片宽高为 ( w i , b i ) (w_i,b_i) (wi,bi),计算公式为 x = x c w i S − x c o l , y = y c h i S − y r o w x=\frac{x_c}{w_i}S-x_{col},y=\frac{y_c}{h_i}S-y_{row} x=wixcSxcol,y=hiycSyrow
  • ( w , h ) (w,h) (w,h)表示bbox相对于整个图片的比例,bbox的宽高为 ( w b , h b ) (w_b,h_b) (wb,hb),计算公式为 w = w b w i , h = h b h i w=\frac{w_b}{w_i},h=\frac{h_b}{h_i} w=wiwb,h=hihb
  • c o n f i d e n c e confidence confidence由两部分组成,一是格子内是否有目标,二是bbox的IOU,计算公式为 c o n f i d e n c e = P r ( O b j e c t ) ∗ I O U t r u t h p r e d confidence=P_r(Object)*IOU_{truth}^{pred} confidence=Pr(Object)IOUtruthpred格子内有物体, P r ( O b j e c t ) = 1 P_r(Object)=1 Pr(Object)=1 c o n f i d e n c e = I O U confidence=IOU confidence=IOU,没有物体, P r ( O b j e c t ) = 0 P_r(Object)=0 Pr(Object)=0 c o n f i d e n c e = 0 confidence=0 confidence=0
  • C表示种类有20种,与Fast RCNN的21种不同,YOLO将是否为背景放在了confidence中;

步骤4:修改检测与分类的权重,增加bbox坐标的权重 λ c o o r d \lambda_{coord} λcoord,降低没有物体时confidence权重 λ n o o b j \lambda_{noobj} λnoobj,原文中 λ c o o r d = 5 \lambda_{coord}=5 λcoord=5 λ n o o b j = 0.5 \lambda_{noobj}=0.5 λnoobj=0.5
步骤5:根据 S × S S\times S S×S个单元格中每个单元格的参数,计算损失,损失函数如下。
目标检测方法概述(二)--YOLO系列_第3张图片

  • Inference

目标检测方法概述(二)--YOLO系列_第4张图片
上图为YOLO的检测框架,训练过程如下:
步骤1:将图片resize成 448 ∗ 448 448*448 448448大小;
步骤2:通过卷积神经网络,输出维度为 S × S × ( B ∗ 5 + C ) S\times S\times(B*5+C) S×S×(B5+C)的张量,得到每个单元格预测的bounding box及其类别置信度分数(class-specific confidence score),计算公式为 P r ( C l a s s i ∣ O b j e c t ) ∗ P r ( O b j e c t ) ∗ I O U p r e d t r u t h = P r ( C l a s s i ) ∗ I O U p r e d t r u t h Pr(Class_i|Object)*Pr(Object)*IOU_{pred}^{truth}=Pr(Class_i)*IOU_{pred}^{truth} Pr(ClassiObject)Pr(Object)IOUpredtruth=Pr(Classi)IOUpredtruth其中 P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i|Object) Pr(ClassiObject)为每个网格预测的类别信息, P r ( O b j e c t ) Pr(Object) Pr(Object)为每个bbox预测是否有物体的置信度, I O U p r e d t r u t h IOU_{pred}^{truth} IOUpredtruth为bbox和gtbox的IOU值;目标检测方法概述(二)--YOLO系列_第5张图片
步骤3:设置阈值,过滤掉得分低的bbox,使用非极大值抑制(Non-Maximum Suppression,NMS)算法筛选剩余候选框;

目标检测方法概述(二)--YOLO系列_第6张图片

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. 图片中很多单元格不包含目标,其 c o n f i d e n c e confidence confidence趋于0,这样在损失函数中会抑制包含目标的单元格的梯度,即红框部分目标检测方法概述(二)--YOLO系列_第7张图片
    因此YOLO提升了定位损失的权重,降低了没有目标单元格损失的权重,只有当单元格中有目标的时候才对分类进行损失计算;
  4. 对bbox的坐标 ( w , h ) (w,h) (w,h)和长宽 ( x , y ) (x,y) (x,y)进行归一化,方便回归计算;
  5. 大小不同的bbox会给损失带来不同的影响,YOLO使用w和h的平方根来削弱这个影响;
  6. leaky ReLU和ImageNet模型预训练。
  • YOLO9000

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

  • 网络结构

作者设计了一个新的分类网络(Darknet-19)作为基础模型。
目标检测方法概述(二)--YOLO系列_第8张图片

  • 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思想,小尺寸特征图检测大尺度的目标,大尺寸特征图检测小尺度目标。

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

你可能感兴趣的:(计算机视觉)