YOLO v1阅读笔记

摘要

作者提出了一种目标检测的网络,将目标检测问题当做一种回归问题,同时回归出box和class,一种可以端到端训练的single network,最主要的优点就是检测的速度非常快,YOLO可以达到45 fps,Fast YOLO可以达到 155 fps,同时保持较高的检测精度。

工作原理

图片处理流程:

1.resize图片到448x448
2.将图片输入single network当中
3.nms

  1. 网格划分:将输入image划分为 S×S S × S 个grid cell,如果image中某个object box的中心落在某个grid cell内部,那么这个cell就对检测该object负责(responsible for detection that object)。同时,每个grid cell同时预测 B B 个bounding box的位置和一个置信度。这个置信度并不只是该bounding box是待检测目标的概率,而是该bounding box是待检测目标的概率乘上该bounding box和真实位置的IoU的积。通过乘上这个交并比,反映出该bounding box预测位置的精度。
  2. 网络输出:每个bounding box对应于5个输出,分别是x,y,w,h x , y , w , h 和上述提到的置信度。其中, x,y x , y 代表bounding box的中心离开其所在grid cell边界的偏移。 w,h w , h 代表bounding box真实宽高相对于整幅图像的比例。 x,y,w,h x , y , w , h 这几个参数都已经被bounded到了区间 [0,1] [ 0 , 1 ] 上。除此以外,每个grid cell还产生 C C 个条件概率,P(Classi|Object) P ( Class i | Object ) 。注意,我们不管 B B 的大小,每个grid cell只产生一组这样的概率。在test的非极大值抑制阶段,对于每个bounding box,我们应该按照下式衡量该框是否应该予以保留。
  3. 实际参数:在PASCAL VOC进行测试时,使用S=7 S = 7 , B=2 B = 2 。由于共有20类,故 C=20 C = 20 。所以,我们的网络输出大小为 7×7×30 7 × 7 × 30

网络结构

网络有24个卷基层和2个全连接层组成,Fast YOLO 有9个卷基层,其余的训练和测试参数与YOLO相同。最后输出的是 7×7×30 7 × 7 × 30 的tensor

训练

  1. 作者在Image-Net上进行了1000个类别的与训练,预训练了前20个卷基层。随后又增加了4个卷积和2个全连接层(因为全连接层可以提高预训练网络的效果)并随机初始化参数。
  2. 在训练的过程中,将中心的坐标 x x y y norm到 [0,1] [ 0 , 1 ] ,将坐标表示为所在 cell c e l l offset o f f s e t ;把bbox的 w w h h 也norm到 [0,1] [ 0 , 1 ] ,通过图像的大小进行norm。
  3. 在最后一个全连接层使用了线性激活函数,其他的使用了 leaky rectified 激活函数。
  4. loss使用平方损失和,因为容易优化,但是这对精度并没有多好的效果,因此就在loss上面进行了改进。
  5. 平等对待分类的损失和box的损失并不好,并且在大多数 cell c e l l 中并不包含物体,因此,导致了最后没有物体的 cell c e l l confidence c o n f i d e n c e 直接等于0,造成最后的模型过早的收敛。因此对于存在物体的损失和不存在物体的损失都进行计算,加了不同的权重,λcoord=5,λnoobj=0.5
  6. 直接使用w和h进行loss计算,会导致大的box和小的box在损失计算的时候不均衡,因此讲w和h变成 w w h h
    最后的损失公式如下:
  7. 训练的参数:235 epoch,batch size 64, momentum 0.9, dacay 0.0005,学习率随着训练轮次的不同手动调整了。防止过拟合使用了 dropout 0.5,对于原始数据进行了增广(缩放、翻转、曝光和饱和度)
  8. 最后多检测的结果进行nms

 YOLO的一些局限:

  1. 对于两个box非常接近检测效果不好(可能因为两个box都在一个cell中,最终只取了一个较高的结果作为输出,因此没有检测到两个)
  2. 对于小物体检测效果不好
  3. 在loss中对待小物体的loss和大物体的loss是一样,这样效果不好,因为一个非常小的error对于大的box来说,检测的已经很好了,但是对于小的box来说,检测的效果就不能说明很好。

实验

在实验的过程当中,在深度学习方面,主要与two-stage的Faster Rcnn系列进行了比较,精度上不如FRCNN,但是检测速度可以到达实时,针对背景检测的情况,YOLO检测效果更好。
还使用FRCNN和YOLO进行了联合检测实验,检测精度提高了一些。

总结

  1. 使用了single network实现了端到端的检测和分类的网络,检测速度非常快,45 fps可以达到实时的检测。
  2. 在loss方面进行了物体与非物体的loss分配,并对box的loss 做了改进。
  3. 网络结构比较简单。

过了一遍论文,看的不是非常仔细,记录下来,写的不对的请见谅。

你可能感兴趣的:(深度学习)