本文将从五个方面解读CVRP2016目标检测论文YOLO:Unified,Real-Time Object Detection
1.创新
2.网络结构
3.损失函数
4.缺点
5.效果

1、创新
改革了区域建议框式检测框架: RCNN系列均需要生成建议框,在建议框上进行分类与回归,但建议框之间有重叠,这会带来很多重复工作。YOLO将全图划分为SXS的格子,每个格子负责中心在该格子的目标检测,采用一次性预测所有格子所含目标的bbox、定位置信度以及所有类别概率向量来将问题一次性解决(one-shot)。
但是YOLO网络的定位精度始终无法达到Faster RCNN的水平。

2、网络结构

YOLO网络包含24个卷积层和2个全连接层,如下所示

yolo一定需要pytorch吗_ide

网络输入为448*448,图片必须先resize,网络的输出结果为一个张量,维度为:

S*S*(B*5+C)

其中,S为划分网格数,B为每个网格负责目标个数,C为类别个数,该表达式含义为:

(1)每个小格都会对应B个边界框,边界框的宽高范围为全图,表示以该小格为中心寻找物体的边界框位置。

(2)每个边界框对应一个分值,代表该处是否有物体及定位准确度:

(3)每个小格会对应C各概率值,找出最大概率对应的类别P,并认为小格中包含物体或者物体的一部分。

yolo一定需要pytorch吗_ide_02

3、YOLO损失函数

YOLO使用均方和误差作为loss函数来优化模型参数,即网络输出的S*S*(B*5 + C)维向量与真实图像的对应S*S*(B*5 + C)维向量的均方和误差。如下式所示。其中,coordError、iouError和classError分别代表预测数据与标定数据之间的坐标误差、IOU误差和分类误差。

yolo一定需要pytorch吗_ide_03

YOLO对上式loss的计算进行了如下修正。

(1)位置相关误差(坐标、IOU)与分类误差对网络loss的贡献值是不同的,因此YOLO在计算loss时,使用λcoord=5

λ c o o r d = 5 修正coordError。

(问题:为啥是5?)

(2)在计算IOU误差时,包含物体的格子与不包含物体的格子,二者的IOU误差对网络loss的贡献值是不同的。若采用相同的权值,那么不包含物体的格子的confidence值近似为0,变相放大了包含物体的格子的confidence误差在计算网络参数梯度时的影响。为解决这个问题,YOLO 使用λnoobj=0.5

λ n o o b j = 0.5 修正iouError。(注此处的‘包含’是指存在一个物体,它的中心坐标落入到格子内)

yolo一定需要pytorch吗_ide_04


其中,x,y,w,C,p为网络预测值,x,y,w,C,p帽 为标注值。Πobji

Π i o b j 表示物体落入格子i中,Πobjij Π i j o b j 和Πnoobjij Π i j n o o b j

4、缺点
(1)对小物体及邻近特征检测效果差:当一个小格中出现多于两个小物体或者一个小格中出现多个不同物体时效果欠佳。原因是:每个框会按照置信度排序物体,每个框只检测出一个物体,就是置信度最高的那个。3
(2)图片的resize花费时间较多,会先resize成448*448,降低了检测速度(it takes about 10ms in 25ms)
(3)基础网络计算量较大。

5、速度

6、精度