YOLO系列原理

  • 仅做部分归纳总结,详细内容见参考文章

1. YOLO v0 雏形思想

  传统检测所采用的方法基本是滑动窗口法,想要检测的精度越高,那么就需要遍历的越精确,同时检测所需要的时间开销就会越大。除此之外还存在另一个问题,背景图片很多,前景图片很少:二分类样本不均衡。在一张图片中对应背景和前景的框差距极大。可以把传统检测法的问题总结成两点:

  • 高精度消耗大量时间
  • 操作复杂,需要手动生成大量的样本

  YOLO的作者首先将传统方法中的one-hot vector换成(x, y, w, h, c),x, y 表示窗口左上角顶点坐标,w, h 表示窗口的宽和高,c则表示置信度,将问题转化成了回归问题,直接回归出窗口的位置。对于样本数据只需要把label设置为(

1

,

x

,

y

,

w

,

h

1, x^*,y^*,w^*,h^*

1,x,y,w,h) 。这里 * 代表真值。

2. YOLO v1

  在雏形思想中只能输出一个目标,因此对于多目标的问题需要做出改进,但是我们并不知道一张图片中有多少个目标,为了保证所有的目标都被检测到,需要输出尽量多的目标。在YOLO v1中所采用的办法是用一个(c,x,y,w,h)去负责image某个区域的目标。如下图所示:
请添加图片描述
  又由于一个目标可能横跨多个区域,只让目标中心所在区域c=1其余的c=0,如下图所示:
在这里插入图片描述
  这其中存在一个问题,图片中总共有7个目标,但是只有6个真值,是因为第三行第三列的区域中存在两个目标。对于YOLO v1来说,这个问题无法解决,在一个区域中只能检测出一个目标。只能创建更多区域,例如将4 x 4变成40 x 40,使区域更加密集,但无法从根本上解决问题。
  当我们检测得到16个框之后,采用NMS,将多余的框抑制掉,从而得到我们最终的结果。
  完成多目标检测之后需要解决多分类问题,在YOLO v1中将(c,x,y,w,h)修改为(c,x,y,w,h,one-hot)从而解决了多分类问题
  由于需要检测的不同类目标大小可能有较大差距,所以对于每一个区域采用了两个框,一个负责大目标,一个负责小目标。
  论文中最终的输出是7 x 7 x 30,即7 x 7的区域,

30

=

5

2

(

c

b

i

g

,

x

b

i

g

,

y

b

i

g

,

w

b

i

g

,

h

b

i

g

,

c

s

m

a

l

l

,

x

s

m

a

l

l

,

y

s

m

a

l

l

,

w

s

m

a

l

l

,

h

s

m

a

l

l

)

+

20

c

l

a

s

s

e

s

30 = 5 * 2(c_{big},x_{big},y_{big},w_{big},h_{big},c_{small},x_{small},y_{small},w_{small},h_{small})+20classes

30=52(cbig,xbig,ybig,wbig,hbig,csmall,xsmall,ysmall,wsmall,hsmall)+20classes

损失函数分析:
在这里插入图片描述

3. YOLO v2

  v2版本解决了v1中存在的两个问题:

  • 框的预测准确度不足
  • recall不足

  相较于v1版本中直接预测x,y,w,h的不同,v2版本采用预测偏移量的做法。基于Anchor框的宽和高和grid的先验位置的偏移量,得到最终目标的位置。原因是直接预测位置会导致神经网络在一开始训练时不稳定,使用偏移量会使得训练过程更加稳定,性能指标提升了5%左右。这样就解决了框的预测准确度不够的问题。
在这里插入图片描述

  对于问题二YOLO v2首先把 7 x 7 个区域改为13 x 13个区域,每个区域有5个anchor,且每个anchor对应着1个类别,那么,输出的尺寸就应该为:[N,13,13,125]。
  采用5个anchor的原因是,在YOLO v2中,作者观察了很多图片的所有Ground Truth,发现:比如车,GT都是矮胖的长方形,再比如行人,GT都是瘦高的长方形,且宽高比具有相似性。于是作者准备从数据集中预先准备几个几率比较大的bounding box,再以它们为基准进行预测。作者在对VOC和COCO两个数据集上对训练集的GT bounding box进行聚类发现,5类的recall vs. complexity比较好,9类的mAP最好,预测的最全面,但是在复杂度上升很多的同时对模型的准确度提升不大,所以采用了一个比较折中的办法选取了5个聚类簇,即使用5个先验框。从而解决了第二个问题,但对于小目标的检测仍然不佳。
在这里插入图片描述

  • anchor的选择则是从数据集中统计得到的

4. YOLO v3

  YOLO v3的检测头进一步改进,分成了三部分

  • 13 * 13 * 3 * (4+1+80)
  • 26 * 26 * 3 * (4+1+80)
  • 52 * 52 * 3 * (4+1+80)

在这里插入图片描述
即每个grid设置9个先验框,3个大的,3个中的,3个小的。因为32倍下采样每个点感受野更大,所以去预测大目标,8倍下采样每个点感受野最小,所以去预测小目标。每个分支预测3个框,每个框预测5元组+80个one-hot vector类别,所以一共size是:3*(4+1+80) 总共可以预测

(

13

13

+

26

26

+

52

52

)

3

=

10467

>

>

(

13

13

5

)

=

845

(13 * 13 + 26 * 26 + 52 * 52) * 3 = 10467 >> (13 * 13 * 5) = 845

(1313+2626+5252)3=10467>>(13135)=845所以相较于v2,v3模型能力有所提升。

YOLO v3 网络结构图

在这里插入图片描述

5. YOLO v4

  之前的YOLO v3是1个anchor负责一个GT,YOLO v4中用多个anchor去负责一个GT。方法是:对于

G

T

j

GT_j

GTj来说,只要

I

o

U

(

a

n

c

h

o

r

i

,

G

T

j

)

>

t

h

r

e

s

h

o

l

d

IoU(anchor_i,GT_j)>threshold

IoU(anchori,GTj)>threshold,就让

a

n

c

h

o

r

i

anchor_i

anchori去负责

G

T

j

GT_j

GTj。目的是框的数量没变,但是选择正样本的比例增加了,缓解了最开始正负样本不均匀的问题。

6. YOLO v5

  在检测头部分并未做出改动,但是采用了自适应anchor,之前anchor是固定的,自适应anchor利用网络的学习功能,让

(

x

A

,

y

A

,

w

A

,

h

A

)

(x_A,y_A,w_A,h_A)

(xA,yA,wA,hA)也是可以学习的。

7. YOLO v1 v2 v3 v4 v5 对比图

在这里插入图片描述

参考文章

版权声明:本文为CSDN博主「回锅肉炒肉」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43902773/article/details/119608117

回锅肉炒肉

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

GiraffeDet:Heavy Neck的目标检测框架

关注并星标 从此不迷路 计算机视觉研究院 公众号ID|ComputerVisionGzq 学习群|扫码在主页获取加入方式 获取论文:关注并回复“GD” 计算机视觉研究院专栏 作者:Edison_G 在传统的目标检测框架中,从图像识别模型继承的主

目标检测算法简单说明(自己正在学习)

目标检测是作为计算机视觉领域的核心任务之一,其主要任务就是对图像或者图像序列的物体进行分类和定位。 传统目标检测有很多弊端,比如泛化性能差,需要大量的人工去提取特征等缺点,并且由于卷积神

yolov4训练测试自己的数据集关键点总结

在实习中,有一个任务是训练出一个车辆检测的yolov4模型。感觉yolov4的功能好强大啊!特此记录一下自己在使用过程中的一些改动。 yolov4论文,yolov4源码 首先肯定是要配置相关的环境&#