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

  • 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成448×448448\times448448×448大小;
步骤3:通过卷积神经网络,输出维度为S×S×(B∗5+C)S\times S\times(B*5+C)S×S×(B5+C)的张量,训练时使用Reshape之前一层的输出,即长度为1470的向量;
在这里插入图片描述

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

  • S为划分网格数,即将原图像划分为7×77\times77×7的网格;
  • B表示每个网格生成框(bounding box,bbox)的个数;
  • 5表示5个参数(x,y,w,h,confidence)(x, y,w,h,confidence)(x,y,w,h,confidence)
  • (x,y)(x,y)(x,y)表示bbox的中心相对于单元格的偏移量offset,单元格坐标为(xcol,yrow)(x_{col},y_{row})(xcol,yrow),bbox坐标为(xc,yc)(x_c,y_c)(xc,yc),图片宽高为(wi,bi)(w_i,b_i)(wi,bi),计算公式为x=xcwiS−xcol,y=ychiS−yrowx=\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的宽高为(wb,hb)(w_b,h_b)(wb,hb),计算公式为w=wbwi,h=hbhiw=\frac{w_b}{w_i},h=\frac{h_b}{h_i}w=wiwb,h=hihb
  • confidenceconfidenceconfidence由两部分组成,一是格子内是否有目标,二是bbox的IOU,计算公式为confidence=Pr(Object)∗IOUtruthpredconfidence=P_r(Object)*IOU_{truth}^{pred}confidence=Pr(Object)IOUtruthpred格子内有物体,Pr(Object)=1P_r(Object)=1Pr(Object)=1confidence=IOUconfidence=IOUconfidence=IOU,没有物体,Pr(Object)=0P_r(Object)=0Pr(Object)=0confidence=0confidence=0confidence=0
  • C表示种类有20种,与Fast RCNN的21种不同,YOLO将是否为背景放在了confidence中;

步骤4:修改检测与分类的权重,增加bbox坐标的权重λcoord\lambda_{coord}λcoord,降低没有物体时confidence权重λnoobj\lambda_{noobj}λnoobj,原文中λcoord=5\lambda_{coord}=5λcoord=5λnoobj=0.5\lambda_{noobj}=0.5λnoobj=0.5
步骤5:根据S×SS\times SS×S个单元格中每个单元格的参数,计算损失,损失函数如下。
在这里插入图片描述

  • Inference

在这里插入图片描述
上图为YOLO的检测框架,训练过程如下:
步骤1:将图片resize成448∗448448*448448448大小;
步骤2:通过卷积神经网络,输出维度为S×S×(B∗5+C)S\times S\times(B*5+C)S×S×(B5+C)的张量,得到每个单元格预测的bounding box及其类别置信度分数(class-specific confidence score),计算公式为Pr(Classi∣Object)∗Pr(Object)∗IOUpredtruth=Pr(Classi)∗IOUpredtruthPr(Class_i|Object)*Pr(Object)*IOU_{pred}^{truth}=Pr(Class_i)*IOU_{pred}^{truth}Pr(ClassiObject)Pr(Object)IOUpredtruth=Pr(Classi)IOUpredtruth其中Pr(Classi∣Object)Pr(Class_i|Object)Pr(ClassiObject)为每个网格预测的类别信息,Pr(Object)Pr(Object)Pr(Object)为每个bbox预测是否有物体的置信度,IOUpredtruthIOU_{pred}^{truth}IOUpredtruth为bbox和gtbox的IOU值;在这里插入图片描述
步骤3:设置阈值,过滤掉得分低的bbox,使用非极大值抑制(Non-Maximum Suppression,NMS)算法筛选剩余候选框;

在这里插入图片描述

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. 图片中很多单元格不包含目标,其confidenceconfidenceconfidence趋于0,这样在损失函数中会抑制包含目标的单元格的梯度,即红框部分在这里插入图片描述
    因此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)作为基础模型。
在这里插入图片描述

  • 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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值