人工智能图像识别应用基础(YOLO系列)

一、概述

在YOLOv1提出之前,R-CNN系列算法在目标检测领域独占鳌头。R-CNN系列检测精度高,但是由于其网络结构是双阶段(two-stage)的特点,使得它的检测速度不能满足实时性从而饱受诟病。

为了打破这一僵局,在2016年,Joseph Redmon、Santosh Divvala、Ross Girshick等人提出了一种单阶段(one-stage)的目标检测网络。它的检测速度非常快,每秒可以处理45帧图片,能够轻松地实时运行。由于其速度之快和其使用的特殊方法,作者将其取名为:You Only Look Once(也就是我们常说的YOLO的全称),并将该成果发表在了CVPR 2016上,从而引起了广泛地关注。


YOLO 的核心思想就是把目标检测转变成一个回归问题,利用整张图作为网络的输入,仅仅经过一个神经网络,得到bounding box(边界框) 的位置及其所属的类别。

二、YOLO-V1

YOLO-V1采用的是“分而治之”的策略,将一张图片平均分成7×7个网格,每个网格分别负责预测中心点落在该网格内的目标。

在Faster R-CNN中,是通过一个RPN来获得目标的感兴趣区域,这种方法精度高,但是需要额外再训练一个RPN网络,这无疑增加了训练的负担。

在YOLOv1中,通过划分得到了7×7个网格,这49个网格就相当于是目标的感兴趣区域。通过这种方式,我们就不需要再额外设计一个RPN网络。


现在看来,YOLOv1的网路结构非常明晰,是一种传统的one-stage的卷积神经网络:

  • 网络输入:448×448×3的彩色图片。
  • 中间层:由若干卷积层和最大池化层组成,用于提取图片的抽象特征。
  • 全连接层:由两个全连接层组成,用来预测目标的位置和类别概率值。
  • 网络输出:7×7×30的预测结果。

每个数字的含义:10 =(X,Y,H,W,C)*B(2个)、当前数据集中有20个类别、7*7表示最终网格的大小、(S*S)*(B*5+C)

损失函数

  • 损失由三部分组:坐标预测损失、置信度预测损失、类别预测损失。
  • 使用的是差方和误差。需要注意的是,w和h在进行误差计算的时候取的是它们的平方根,原因是对不同大小的bounding box预测中,相比于大bounding box预测偏一点,小box预测偏一点更不能忍受。而差方和误差函数中对同样的偏移loss是一样。 为了缓和这个问题,作者用了一个比较取巧的办法,就是将bounding box的w和h取平方根代替原本的w和h。
  • 定位误差比分类误差更大,所以增加对定位误差的惩罚,使λcoord​=5。
  • 在每个图像中,许多网格单元不包含任何目标。训练时就会把这些网格里的框的“置信度”分数推到零,这往往超过了包含目标的框的梯度。从而可能导致模型不稳定,训练早期发散。因此要减少了不包含目标的框的置信度预测的损失,使λnoobj​=0.5。

NMS(非极大值抑制)

在YOLO-V1中,NMS(非极大值抑制)是分别对每个类别进行的。对于其中的每一个类别,首先会进行排序操作,按照置信度(全概率得分)从大到小进行排序,将该类别下置信度最大的bounding box依次和比它小的的bounding box进行比较,计算他们之间的IOU(交并比,一定程度上反映两个边界框之间的重叠程度),此时也会给定一个IOU的阀值,当两个边界框的IOU值超过给定的阀值,则说明第二个大的边界框可能是重复识别了同一个物体,则将其抹去删除,保留置信度(全概率得分)最大的那个。

一轮过后,继续将保留下的bounding box中置信度第二大bounding box依次和比它晓得bounding box进行比较,重复上轮的操作,直到循环到下次全概率为0的bounding box为止。

至此,YOLO的优缺点也显而易见。

  • 优点:
  1. YOLO检测速度非常快。标准版本的YOLO可以每秒处理 45 张图像;YOLO的极速版本每秒可以处理150帧图像。这就意味着 YOLO 可以以小于 25 毫秒延迟,实时地处理视频。对于欠实时系统,在准确率保证的情况下,YOLO速度快于其他方法。
  2. YOLO 实时检测的平均精度是其他实时监测系统的两倍。
  3. 迁移能力强,能运用到其他的新的领域(比如艺术品目标检测)。
  • 缺点:
  1. YOLO对相互靠近的物体,以及很小的群体检测效果不好,这是因为一个网格只预测了2个框,并且都只属于同一类。
  2. 由于损失函数的问题,定位误差是影响检测效果的主要原因,尤其是大小物体的处理上,还有待加强。(因为对于小的bounding boxes,small error影响更大)
  3. YOLO对不常见的角度的目标泛化性能偏弱。

三、YOLO-V2

YOLO-V2肯定要比YOLO-V1更快更强的。

2017年,作者在 YOLOv1 的基础上,进行了大量改进,提出了 YOLOv2。重点解决YOLOv1召回率和定位精度方面的不足。

  • YOLOv2 是一个先进的目标检测算法,比其它的检测器检测速度更快。除此之外,该网络可以适应多种尺寸的图片输入,并且能在检测精度和速度之间进行很好的权衡。
  • YOLOv1是利用全连接层直接预测Bounding Box的坐标,而YOLOv2借鉴了Faster R-CNN的思想,引入Anchor机制。利用K-means聚类的方法在训练集中聚类计算出更好的Anchor模板,大大提高了算法的召回率。同时结合图像细粒度特征,将浅层特征与深层特征相连,有助于对小尺寸目标的检测。

YOLO-V2-Batch Normalization(批量归一化

  • V2版本舍弃Dropout,卷积后全部加入Batch Normalization
  • 网络的每一层的输入都做了归一化,收敛相对更容易
  • 经过Batch Normalization处理后的网络会提升2%的mAP
  • 从现在的角度来看,Batch Normalization已经成网络必备处理

YOLO-V2-High Resolution Classifier(高分辨率)

  • V1训练时用的是224*224,测试时使用448*448
  • 可能导致模型水土不服,V2训练时额外又进行了10次448*448的微调
  • 使用高分辨率分类器后,YOLOv2的mAP提升了约4%

YOLO-V2-网络结构

YOLOv2 采用 Darknet-19 作为特征提取网络,其整体结构如下:


与VGG相似,使用了很多3×3卷积核;并且每一次池化后,下一层的卷积核的通道数 = 池化输出的通道 × 2,在每一层卷积后,都增加了批量标准化(Batch Normalization)进行预处理,采用了降维的思想,把1×1的卷积置于3×3之间,用来压缩特征,在网络最后的输出增加了一个global average pooling层,整体上采用了19个卷积层,5个池化层。

YOLO-V2-Dimension Clusters(聚类提取先验框)

  • Faster R-CNN 中 Anchor Box 的大小和比例是按经验设定的,不具有很好的代表性。若一开始就选择了更好的、更有代表性的先验框Anchor Boxes,那么网络就更容易学到准确的预测位置了!
  • YOLOv2 使用 K-means 聚类方法得到 Anchor Box 的大小,选择具有代表性的尺寸的Anchor Box进行一开始的初始化。传统的K-means聚类方法使用标准的欧氏距离作为距离度量,这意味着大的box会比小的box产生更多的错误。因此这里使用其他的距离度量公式。聚类的目的是使 Anchor boxes 和临近的 ground truth boxes有更大的IOU值,因此自定义的距离度量公式为 :

到聚类中心的距离越小越好,但IOU值是越大越好,所以使用 1 - IOU;这样就保证距离越小,IOU值越大,如下图所示,是论文中的聚类效果,其中紫色和灰色也是分别表示两个不同的数据集,可以看出其基本形状是类似的。

YOLO-V2-Anchor Box(带有Anchor Boxes的卷积)

YOLOv1将输入图像分成7*7的网格,每个网格预测2个Bounding Box,因此一共有98个Box,同时YOLOv1包含有全连接层,从而能直接预测Bounding Boxes的坐标值,但也导致丢失较多的空间信息,定位不准。
YOLOv2首先将YOLOv1网络的FC层和最后一个Pooling层去掉,使得最后的卷积层可以有更高分辨率的特征,然后缩减网络,用416*416大小的输入代替原来的448*448,使得网络输出的特征图有奇数大小的宽和高,进而使得每个特征图在划分单元格(Cell)的时候只有一个中心单元格(Center Cell)。
由于图片中的物体都倾向于出现在图片的中心位置,特别是比较大的物体,所以有一个单元格单独位于物体中心的位置用于预测这些物体。

也就是说:

  • 通过引入anchor boxes,使得预测的box数量更多(13*13*n)
  • 跟faster-rcnn系列不同的是先验框并不是直接按照长宽固定比给定

YOLO-V2-Directed Location Prediction(直接位置预测

直接对Bounding Boxes求回归会导致模型不稳定,其中心点可能会出现在图像任何位置,有可能导致回归过程震荡,甚至无法收敛,尤其是在最开始的几次迭代的时候。大多数不稳定因素产生自预测Bounding Box的中心坐标(x,y)位置的时候。

YOLOv2的网络在特征图(13*13)的每一个单元格中预测出5个Bounding Boxes(对应5个Anchor Boxes),每个Bounding Box预测出5个值(tx,ty,tw,th,t0),其中前4个是坐标偏移值,t0是置信度结果(类似YOLOv1中的边界框置信度Confidence)。YOLOv2借鉴了如下的预测方式,即当Anchor Box的中心坐标和宽高分别是(xa,ya)和(wa,wh)时,Bounding Box坐标的预测偏移值(tx,ty,tw,th)与其坐标宽高(x,y,w,h)的关系如右图:

基于这种思想,YOLOv2在预测Bounding Box的位置参数时采用了如下强约束方法:


图中黑色虚线框是Anchor Box,蓝色矩形框就是预测的Bounding Box结果,预测出的Bounding Box的坐标和宽高为(bx,by)和(bw,bh),计算方式如图2-8中所示,其中:对每个Bounding Box预测出5个值(tx,ty,tw,th,t0),Cell与图像左上角的横纵坐标距离为(cx,cy),σ定义为sigmoid激活函数(将函数值约束到[0,1]),该Cell对应的Anchor Box对应的宽高为(pw,ph)。
简而言之,(bx,by)就是(cx,cy)这个Cell附近的Anchor Box针对预测值(tx,ty)得到的Bounding Box的坐标预测结果,同时可以发现这种方式对于较远距离的Bounding Box预测值(tx,ty)能够得到很大的限制。

例如预测值(σtx,σty,tw,th)=(0.2,0.1,0.2,0.32),anchor框为:

特征图位置
原位置

感受野

感受野(receptive field)这一概念来自于生物神经科学,是指感觉系统中的任一神经元,其所受到的感受器神经元的支配范围。感受器神经元就是指接收感觉信号的最初级神经元。
视觉的产生来自于光在个体感受器上的投射,将客观世界的物理信息转换为人能感知的神经脉冲信号。

说白了举个例子就是你眼睛能看到的画面就是感受野。

  • 在卷积神经网络中,感受野(receptive field)不像输出由整个网络输入所决定的全连接网络那样,它是可以存在于网络中任意某层,输出仅由输入部分决定。
  • 就是指输出feature map上某个元素受输入图像上影响的区域。

如上图所示,共有3个feature map输出。该图说明了2个3*3的conv可以代替1个5*5的conv层

  • Layer1中方格可看作是一个元素,3*3的绿色方格则是一个3*3的卷积核。
  • Layer2由一个3*3的卷积核经过卷积运算输出,输出尺寸是3*3(假设stride=1,padding=0)显而易见,layer2中的绿色方格是由layer1中3*3的绿色方格所决定的。那么这一位置的感受野就是layer1中的绿色方格区域。
  • Layer3由layer2经过3*3的conv层输出,只有一个。

如果堆叠3个3*3的卷积层,并且保持滑动窗口步长为1,其感受野就是7*7的了,这跟一个使用7*7卷积核的结果是一样的,那为什么非要堆叠3个小卷积呢?

  • 假设输入大小都是h*w*c,并且都使用c个卷积核(得到c个特征图),可以来计算一下其各自所需参数:

很明显,堆叠小的卷积核所需的参数更少一些,并且卷积过程越多,特征提取也会越细致,加入的非线性变换也随着增多,还不会增大权重参数个数,这就是VGG网络的基本出发点,用小的卷积核来完成体特征提取操作。

YOLO-V2-Fine-Grained Features(细粒度的特征

简单来说fine-grained就是细粒度,fine-grained classification是细粒度的图像分类。

与coarse-grained classification(粗粒度)相比,粗粒度是分辨是猫还是狗——细粒度是分辨狗这个类别下,这张图是吉娃娃还是萨摩耶还是哈巴狗。

YOLO-V2-Multi-Scale(多尺度目标检测方法)

Multi scale 一般是会送给CNN十张图片,比如高宽是256*256的图片,multi scale 则会在四个角和中心crop 5个224*224,再把五个crop的图片flip ,总共得到十个图片送给CNN。

将图片进行不同尺度的缩放,得到图像金字塔,然后对每层图片提取不同尺度的特征,得到特征图。最后对每个尺度的特征都进行单独的预测。


特点:不同尺度的特征都可以包含很丰富的语义信息,精度高 ,但 速度慢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值