YOLO-论文笔记-理解

论文:https://arxiv.org/abs/1506.02640

GitHub源码地址:https://github.com/pjreddie/darknet

翻译:
http://noahsnail.com/2017/08/02/2017-8-2-YOLO%E8%AE%BA%E6%96%87%E7%BF%BB%E8%AF%91%E2%80%94%E2%80%94%E4%B8%AD%E6%96%87%E7%89%88/

理解参考:
https://zhuanlan.zhihu.com/p/25236464

核心技术:
YOLO将输入的图像分割为SxS个格子,如果一个检测目标的中心落入一个单元格中,则该网格负责检测该目标.
例如下图中的狗就由第五行,第二格的格子负责预测狗的boundingbox.
YOLO-论文笔记-理解_第1张图片
每个网格单元预测这些盒子的B个边界框和置信度分数。这些置信度分数反映了该模型对盒子是否包含目标的信心,以及它预测盒子的准确程度。在形式上,我们将置信度定义为 Pr(Object)IOUtruthpred P r ( O b j e c t ) ∗ I O U p r e d t r u t h .如果该单元格中不存在目标,则置信度分数应为零。否则,我们希望置信度分数等于预测框与真实值之间联合部分的交集(IOU).

每个边界框包含五个预测: x,y,w,h x , y , w , h 和置信度, (x,y) ( x , y ) 坐标表示边界框相对于网格单元边界框的中心坐标,宽度和高度是相对于整个图片进行预测的.最后置信度预测表示预测框和实际边界框之间的IOU.

每个网格单元还预测 C C 个条件类别概率Pr(Classi|Object) P r ( C l a s s i | O b j e c t ) .这些概率以包含目标的网格单元为条件,每个网格单元我们只预测一组类别概率,不管边界框的数量B是多少(每个网格单元只对一个目标负责).

例如在Pascal VOC上进行训练测试的时候,使用 S=7 S = 7 , B=2, B = 2 , .Pascal VOC有20个标注类,所以 C=20 C = 20 ,最终得到的就是一个 7x7x30 7 x 7 x 30 的张量.

网络结构如下:
YOLO-论文笔记-理解_第2张图片

Loss Function定义:
YOLO使用均方和误差作为loss函数来优化模型参数,即网络输出的S*S*(B*5+C)维向量与真实图像的对应S*S*(B*5+C)维向量的均方和误差.其中 coordError,iouError,classRrror c o o r d E r r o r , i o u E r r o r , c l a s s R r r o r 分别代表预测数据与标定数据之间的坐标误差,IOU误差和分类误差.

loss=i=0s2coordError+iouError+classError l o s s = ∑ i = 0 s 2 c o o r d E r r o r + i o u E r r o r + c l a s s E r r o r

YOLO对上面这个loss function进行了一些修正.
1)位置相关误差(坐标,IOU)与分类误差对网络loss的共享值是不同的,因此YOLO在计算loss时,使用 λcoord=5 λ c o o r d = 5 修正 coordError c o o r d E r r o r
2)在计算IOU的时候,包含物体的格子与不包含物体的格子,二者的IOU误差对loss的共享是不同的,若采用相同权重,那么不包含物体的格子的confidence值近似为0,变相放大了包含物体的格子的confidence误差在计算网络参数梯度时的影响。为解决这个问题,YOLO 使用 λnoobj=0.5 λ n o o b j = 0.5 修正 iouError i o u E r r o r (注此处的‘包含’是指存在一个物体,它的中心坐标落入到格子内).
3)对于相等的误差值,大物体误差对检测的影响应小于小物体误差对检测的影响。这是因为,相同的位置偏差占大物体的比例远小于同等偏差占小物体的比例。YOLO将物体大小的信息项(w和h)进行求平方根来改进这个问题。( 注:这个方法并不能完全解决这个问题
(注:此部分转载自知乎用户”赵丽丽”的专栏文章)
下面是YOLO中优化的多部分损失函数.
loss=λcoordi=0s2j=0B1objij[(xix^i)2+(yiy^i)2]+λcoordi=0s2j=0B1objij[(wiw^i)2+(hih^i)2]+i=0s2j=0B1objij(CiC^i)2+λnoobji=0s2j=0B1noobjij(CiC^i)2+i=0s21objicclasses(pi(c)p^i(c))2 l o s s = λ c o o r d ∑ i = 0 s 2 ∑ j = 0 B 1 i j o b j [ ( x i − x ^ i ) 2 + ( y i − y ^ i ) 2 ] + λ c o o r d ∑ i = 0 s 2 ∑ j = 0 B 1 i j o b j [ ( w i − w ^ i ) 2 + ( h i − h ^ i ) 2 ] + ∑ i = 0 s 2 ∑ j = 0 B 1 i j o b j ( C i − C ^ i ) 2 + λ n o o b j ∑ i = 0 s 2 ∑ j = 0 B 1 i j n o o b j ( C i − C ^ i ) 2 + ∑ i = 0 s 2 1 i o b j ∑ c ∈ c l a s s e s ( p i ( c ) − p ^ i ( c ) ) 2

其中 1obji 1 i o b j 表示目标是否出现在网格单元 i i 中,1objij 1 i j o b j 表示网格单元 i i 中的第j j 个边界框预测器负责该预测.
注意,如果目标存在于该网格单元中(前面讨论的条件类别概率),则损失函数仅惩罚分类错误。如果预测器“负责”实际边界框(即该网格单元中具有最高IOU的预测器),则它也仅惩罚边界框坐标错误。

突出贡献:
YOLO将物体检测作为回归问题求解。基于一个单独的end-to-end网络,完成从原始图像的输入到物体位置和类别的输出
.同时达到速度快效果好的目标.

缺陷:
虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。这是YOLO方法的一个缺陷。
1)对小物体的检测效果不够好.
2)对boundingBox的预测不够精确.

你可能感兴趣的:(机器学习,论文阅读,YOLO,深度学习)