目标检测学习笔记(四)YOLOv1-v3算法

参考视频: (全)最好的目标检测原理与实践课程
参考目录: 计算机视觉应用实战-网易云课堂
参考文章:



YOLO-V1

YOLO最早于2016年提出。
在这里插入图片描述

YOLO-V1结构

它的核心思想就是利用整张图作为网络的输入,将目标检测作为回归问题解决,直接在输出层回归预选框的位置及其所属的类别。YOLO最左边是一个InceptionV1网络,共20层。但作者对InceptionV1进行了改造,他没有使用inception模块,而是用一个1x1的卷积并联一个3x3的卷积来替代。

InceptionV1提取出的特征图再经过4个卷积层和2个全连接层,最后生成7x7x30的输出。

在这里插入图片描述
YOLO将一副448x448的原图分割成 了7x7=49个网格,每个网格要预测两个bounding box的坐标
(x,y,w,h)和box内是否包含物体的置信度confidence(每个bounding box有一个confidence),以及物体属于20类别中每一-类的概率(YOLO的训练数据为voc2012,它是一一个20分类的数据集)。
所以一个网格对应一一个(4x2+2+20)= 30维的向量。
在这里插入图片描述
7x7网格内的每个grid(红色框),对应两个大小形状不同的bounding box(黄色框)。每个box的位置坐标为(x,y,w,h),x和y表示box中心点与该格子边界的相对值,w和h表示预测box的宽度和高度相对于整幅图像的宽度和高度的比例。(x,y,w,h)会限制在[0,1]之间。与训练数据集上标定的物体真实坐标(Gx,Gy,Gw,Gh)进行对比训练,每个grid负责检查中心点落在该格子的物体。
这个置信度只是为了表达box内有无物体的概率(类似于Faster R-CNN中RPN层的softmax预测anchor是前景还是背景的概率),并不预测box内物体属于哪–类。
在这里插入图片描述

confidence置信度

Pr ⁡ ( \operatorname{Pr}( Pr( Object ) × ) × )× IOU pred

其中前一项Pr(OBject)表示有无人工标记的物体落入了网格内,如果有则为1,否则为0。第二项代表bounding box和真实标记的box之间的IOU。值越大则box越接近真实位置。
confidence是针对bounding box的,每个网格有两个bounding box,所以每个网络会有两个confidence与之对应。

YOLO-V1预测工作流程

1.每一个格子得到两个bounding boxes
2.每个网格预测的class信息和bounding boxes预测的confidence信息相乘,得到了每个Bounding box预测具体物体的概率和位置重叠的概率PrlOU

Pr ⁡ ( \operatorname{Pr}\left(\right. Pr( Class i ∣ _{i} \mid i Object ) × Pr ⁡ ( ) × \operatorname{Pr}( )×Pr( Object ) × ) × )× IOU pred  truth  = Pr ⁡ ( _{\text {pred }}^{\text {truth }}=\operatorname{Pr}\left(\right. pred truth =Pr( Class i ) × \left._{i}\right) × i)× IOU pred  truth  _{\text {pred }}^{\text {truth }} pred truth 

3.对于每一个类别,对PrlOU进行排序,去除小于阈值的PrlOU,然后做非极大值抑制
在这里插入图片描述

YOLOv1代价函数讲解以及缺点分析

YOLO的loss函数包含三部分:位置误差、confidence误差、分类误差。
在这里插入图片描述
绿色为bounding box,红色为真实标注。如果w和h没有平方根,那么bounding box跟两个真实标注的位置loss是相同的,但是从面积看来B框是A框的25倍,C框是B框的81/25倍,B框跟A框的大小偏差更大,不应该得到相同的loss。
如果w和h加上平方根,那么B对A的位置loss约为3.06,B对C的位置loss约为1.17,B对A的位置loss的值更大,更符合我们的实际判断。
在这里插入图片描述

不同的任务重要程度不同,所以也应该给予不同的loss weight。

  • 每个网格两个预测框坐标比较重要,给这些损失前面赋予更大的loss weight,在pascal VOC取值为5。
  • 对没有object的box的confidence loss,赋予小的loss weight,在pascal VOC训练中取0.5。
  • 有object的box的confidence loss和类别的loss的loss weight正常取1。

YOLO-V1缺点

1.每个网格只对应两个bounding box,当物体的长宽比不常见(也就是训练数据集覆盖不到时),效果较差。

2.原始图片只划分为7x7的网格,当两个物体靠的很近时,效果比较差。

3.最终每个网格只对应一个类别,容易出现漏检(物体没有被识别到)。

4.对于图片中比较小的物体,效果比较差。这其实是所有目标检测算法的通病,SSD对这个问题有一些些优化。


YOLO-V2

YOLOv2网络结构Darknet-19

YOLO-V2速度优化:

  • 针对YOLO准确率不高,容易漏检,对长宽比不常见物体效果差等问题,结合SSD的特点,2016提出了YOLO-V2。
  • 为了精度与速度并重,作者在速度上也作了一-些改进措施。
    大多数检测网络依赖于VGG-16作为特征提取网络,VGG-16是一个强大而准确的分类网络,但是确过于复杂。224×224的图片进行一次前向传播,其卷积层就需要多达306.9亿次浮点数运算。
  • YOLO使用的是基于Googlenet的自定制网络,比VGG-16更快,一次前向传播仅需85.2亿次运算,不过它的精度要略低于VGG-16。
    作者使用Darknet-19在标准1000类的lmageNet上训练了160周期。训练的时候仍然使用了很多常见的数据扩充方法。初始的224×224训练后把分辨率上调到了448×448,又训练了10次。高分辨率下训练的分类网络top-1准确率76.5%,top-5准确率93…3%。
    在这里插入图片描述

Darknet-19结构:19层网络,输入224x224

YOL.Ov2结构

  • 1-24层参考Darknet;
  • 25层 route 16表示将第16层的结果拿到此处,reorg /2对数据进行处理:26x26x512 --> 13 x 13 x2048

YOLOv2精度优化-高分辨率和anchor

YOLO-V2精确度优化:

为了达到更精确(Better)的目的,YOLO v2主要做了如下改进:

  • 1.High Resolution Classifier YOLOv2首先修改预训练分类网络的分辨率为448x448,在ImageNet数据集上训练10个周期(10 epochs)。这个过程让网络有足够的时间去适应高分辨率的输入。然后再fine tune为检测网络,mAP获得了4%的提升。
  • 2.Convolutional With Anchor Boxes YOLO(v1)使用全连接层数据进行bounding box预测,这会丢失较多的空间信息,导致定位不准。YOLOv2借鉴 了Faster R-CNN中的anchor思想:简单理解为卷积特征图上进行滑窗采样,每个中心预测9种不同大小和比例的anchor。总的来说就是移除全连接层(以获得更多空间信息)使用anchor boxes去预测bounding boxes。并且,YOLOv2由anchor box同时预测类别和坐标。
    2.Convolutional With Anchor Boxes具体做法:
  • 去掉最后的池化层确保输出的卷积特征图有 更高的分辨率。
  • 缩减网络,让图片输入分辨率为416*416,目的是让后面产生的卷积特征图宽高都为奇数,这样就可以产生一个center cell。因为作者观察到,大物体通常占据了图像的中间位置,可以只用一个中心的cell来预测这些物体的位置,否则就要用中间的4个cell来进行预测,这个技巧可稍稍提升效率。
  • 使用卷积层降采样(factor为32),使得输入卷积网络的416*416图片最终得到13x13的卷积特征图(416/32=13)。
  • 由anchor box同时预测类别和坐标。因为YOLOv1是由每个cell来负责预测类别,每个cell对应的2个bounding box负责预测坐标(回想YOLO中最后输出7730的特征,每个cell对应1130,前10个主要是2个bounding box用来预测坐标,后20个表示该cell在假设包含物体的条件下属于20个类别的概率)。YOLOv2中,不再让类别的预测与每个cell(空间位置)绑定一起,而是让全部放到anchor box中。

2.Convolutional With Anchor Boxes
加入了anchor boxes后,我们来计算一下,假设每个cell预测9个anchor,那么总共会预测13x13x9=1521个boxes,而之前的网络仅仅预测7x7x2=98个boxes。具体数据为:没有anchor boxes,模型recall为81%,mAP为69.5%;加入anchor boxes,模型recall为88%,mAP为69.2%。
在这里插入图片描述

YOLOv2精度优化-维度聚类

3.Dimension Clusters(维度聚类)
在使用anchor时,Faster-RCNN中anchor boxes的个数和宽高维度往往是手动精选的先验框(hand-picked priors),如果能够-开始就选择 了更好的、更有代表性的先验boxes维度,那么网络就应该更容易学到准确的预测位置。YOLOv2中利用K-means聚类方法,通过对数据集中的ground truth box做聚类,找到ground truth box的统计规律。以聚类个数k为anchor boxes个数,以k个聚类中心box的宽和高为anchor box的宽和高。
如果按照标准k-means使用欧式距离函数,大boxes比小boxes产生更多error。但是,我们真正想要的是产生好的IOU得分的boxes(与box的大小无关)。因此采用了如下距离度量:
d ( box , centroid ) = 1 − IOU ( box, centroid ) d(\text {box}, \text {centroid})=1-\text {IOU}(\text {box, centroid}) d(box,centroid)=1IOU(box, centroid)
假设有两个框,一个框是3x5,一个框是5x5
欧式距离的计算 ( 5 − 3 ) 2 + ( 5 − 5 ) 2 = 2 \sqrt{(5-3)^{2}+(5-5)^{2}}=2 (53)2+(55)2 =2
IOU的计算 ( 3 ∗ 5 ) / ( 5 ∗ 5 ) = 0.6 \left(3^{*} 5\right) /\left(5^{*} 5\right)=0.6 (35)/(55)=0.6

随着k的增大,IOU也在增大(高召回率),但是复杂度也在增加。所以平衡复杂度和IOU之后,最终得到k值为5。5聚类的中心与手动精选的boxes是完全不同的,扁长的框较少瘦高的框较多。
作者做了对比实验,5种boxes的Avg I0U(61.0)就和Faster R-CNN的9种Avg lI0U(60.9)相当。说明K-means方法的生成的boxes更具有代表性,使得检测任务更好学习。
在这里插入图片描述
Figure 2: Clustering box dimensions on VOC and COCO. We run k-means clustering on the dimensions of bounding boxes to get good priors for our model. The left image shows the average IOU we get with various choices for k. We find thatk = 5 gives a good tradeoff for recall VS. complexity of the model. The right imageshows the relative centroids for VOC and COCO. Both sets of priors favor thinner, taller boxes while COCO has greater variation in size than VOC.
在这里插入图片描述
Table 1: Average IOU of boxes to closest priors on VOC 2007.
The average IOU of objects on VOC 2007 to their closest, unmodified prior using different generation methods. Clustering gives much better results than using hand-picked priors.

YOLOv2精度优化-直接位置预测

4.Direct location prediction(直接位置预测
使用anchor boxes的另一一个问题是模型不稳定,尤其是在早期迭代的时候。大部分的不稳定现象出现在预测box的(x,y)坐标时,YOLOv2没有用Faster-RCNN的预测方式。
YOLOv2位置预测值tx,ty就是预测边界框中心点相对于对应cell左上角位置的相对偏移值,为了将边界框中心点约束在当前cell中,使用sigmoid函数处理偏移值,这样预测的偏移值在(0,1)
范围内(每个cell的尺度看做1)。
作者通过使用维度聚类和直接位置预测这两项Anchor Boxes改进方法,将mAP提高了5%。

网络在特征图(13x13)的每个cell上预测5个anchor,每一个anchor预测5个值:tx,ty,tw,th,to。如果这个cell距离图像左上角的边距为(Cx,Cy),cell对应的先验框(anchor)的长和宽分别为(Pw,Ph),那么网络预测框的为下图蓝框:
在这里插入图片描述

精度优化-细粒度特征和多尺度训练

5.Fine-Grained Features(细粒度特征)
SSD通过不同Scale的Feature Map来预测Box来实现多尺度,而YOLOv2则采用了另–种思路:添加一-个passthrough layer,来获取之前的26x26x512的特征图特征,对于26x26x512 的特征图,经passthrough层处理之后就变成了13x13x2048 的新特征图(特征图大小降低4倍,而channles增加4倍),这样就可以与后面的13x13x1024特征图连接在一起形成13x13x3072大小的特征图,然后在此特征图基础上卷积做预测。
YOLOv2的检测器使用的就是经过扩展后的的特征图,它可以使用细粒度特征,使得模型的性能获得了1%的提升。
26x26x512-> 13x13x2048 + 13x13x1024-> 13x13x3072
在这里插入图片描述

6.Multi-Scale’Training
原始YOLO网络使用固定的448x448的图片作为输入,加入anchor boxes后输入变成416x416,由于网络只用到了卷积层和池化层,就可以进行动态调整(检测任意大小图片)。为了让YOLOv2对不同尺寸图片的具有鲁棒性,在训练的时候也考虑了这一-点。
不同于固定网络输入图片尺寸的方法,每经过10批训练(10 batches)就会随机选择新的图片尺寸。网络使用的降采样参数为32,于是使用32的倍数{320,352,…,608},最小的尺寸为320x320,最大的尺寸为608*608。调整网络到相应维度然后继续进行训练。这种机制使得网络可以更好地预测不同尺寸的图片,同一一个网络可以进行不同分辨率的检测任务,在小尺寸图片上YOLOv2运行更快,在速度和精度上达到了平衡。
在这里插入图片描述

YOLO-V2结果

在这里插入图片描述

YOLOv3

YOLOv3结构讲解

YOLOv3于2018年推出,基础框架为Darknet-53

在这里插入图片描述
在这里插入图片描述
YOLOv3有3个不同特征尺度的输出,分别为13x13x255,26x26x255,52x52x255。
YOLOv3-般使用416*416大小的图片作为输入,最后得到的特征图为13x13,再大–些的特征图为26x26,再大一些的特征图为52x52。
论文中YOLOv3使用COCO数据集训练,COCO数据集目标检测有80个种类,YOLOv3中每个cell有3个box,每个box还有(x,y,w,h,confidence)五 个基本参数。所以3x(5+ 80)=255。
对于416x416的图片,YOLOv2的bounding boxes 有13x13x5=845个,YOLOv3的bounding boxes有3x(13x13+ 26x26+52x52)=10467个。

YOLOv3先验框设置和代价函数修改

YOLOv3有3个不同特征尺度的输出,分别为13x13x255,26x26x255,52x52x255。

YOLO2已经开始采用K-means聚类得到先验框的尺寸,YOLO3延续了这种方法,为每种下采样尺度设定3种先验框,总共聚类出9种尺寸的先验框。在COCO数据集这9个先验框是:(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。

分配上,在最小的13x13特征图上(有最大的感受野)应用较大的先验框(116x90),(156x198),(373x326),适合检测较大的对象。中等的2626特征图上(中等感受野)应用中等的先验框(30x61),(62x45),(59x119),适合检测中等大小的对象。较大的5252特征图上(较小的感受野)应用较小的先验框(10x13),(16x30),(33x23),适合检测较小的对象。
在这里插入图片描述

在这里插入图片描述
YOLO-V3代价函数修改:

YOLOv3对类别预测的代价函数进行了修改,但是没有使用softmax。首先说明一下为什么不用softnfax,原来分类网络中的softmax层都是假设–张图像或一 个object只属于一个类别,但是在一-些复杂场景下,-个object可能属于多个类,比如你的类别中有woman和person这两个类,那么如果一张图像中有一 个woman,那么你检测的结果中类别标签就要同时有woman和person两个类,这就是多标签分类。

所以YOLOv3用逻辑回归层来对每个类别做二分类。逻辑回归层主要用到sigmoid函数,该函数可以将输出约束在0到1的范围内,因此当一张图像经过特征提取后的某一-类输出经过sigmoid函数约束后如果大于0.5,就表示属于该类,这样一个框就可以预测多个类别。代价函数用的是sigmoid的交叉熵。

YOLO-V3结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shine.Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值