YOLOV1最全面解读! |
当前主流的 C N N CNN CNN目标检测框架可分为两类:
Y O L O YOLO YOLO (You Only Look Once) 是第一个相对成功的 O n e − S t a g e One-Stage One−Stage物体检测方法,在2016年 C V P R CVPR CVPR会议上被提出,以简单,高效的优势,一跃成为与 R C N N RCNN RCNN系列并驾齐驱的物体检测框架,直至今日, Y O L O V 3 YOLOV3 YOLOV3依然作为物体检测的首选方案之一。
优点:
缺点:
这张图,诠释了YOLO V1的运行过程:
用以预测结果(框和类别)的特征图大小为 7 × 7 7× 7 7×7,有49个向量(这里有点像 R P N RPN RPN),每个向量都要去预测**“框”和“类别”**,训练时,我们需要为每个向量分配类别以及是否需要负责预测框,那么如何分配呢?我们需要把 7 × 7 7× 7 7×7个点映射回原图,正好形成 7 × 7 7× 7 7×7个网格,然后根据每个网格跟 G r o u n d Ground Ground T r u t h Truth Truth之间的关系(作者设定了规则去建立联系),来做后续分配。也就是为什么分成 S × S ( 7 × 7 ) S× S(7 × 7) S×S(7×7)个框了。
每个网格在最后 7 × 7 7 × 7 7×7的特征图上对应一个向量,这个30维向量用来预测结果,那么我们应该选择哪个网格来负责预测框呢?通俗一些,就是哪些网格是正例,哪些是负例(过程有点儿类似RPN,但区别蛮大),先看文中的一段描述:
这句话给了其标准答案,物体的“中心”落在哪个网格中,哪个网格就负责训练这个框(类别和坐标)。这句英文大家都能看懂,但是实际呢?看看下面这张图:
这张图,中心点被标出来了,并且落在了“橘黄网格”中,那么它就是正例,那么“绿色网格”和“白色网格”的标签(Label)是什么呢?这里是与 R P N RPN RPN最大不同之处了, Y O L O V 1 YOLOV1 YOLOV1中,对于一个 G r o u n d Ground Ground T r u t h Truth Truth,有且只有一个网格是正例,其余的就算与Ground Truth IOU很大,也是负例,所以“绿色网格”和“白色网格”Label为负,所以也就不用负责训练框坐标了(但是会负责训练其他信息)
根据原论文我们可以确定几点:
比如图片的宽高为 w i d t h , h e i g h t width,height width,height,物体的中心点为 x , y , x,y, x,y,宽高为 w , h w,h w,h,那么根据论文的描述:
w = w w i d t h h = h h e i g h t \begin{aligned} w &=\frac{w}{w i d t h} \\ h &=\frac{h}{h e i g h t} \end{aligned} wh=widthw=heighth
x,y在Loss中的值是相对网格的偏移,是相对于网格的中心点还是左上角点的偏移呢?其实这个顾虑是多余的,因为在最后7 x 7大小的特征图上,网格仅仅是一个”点“,相对于它的偏移,我们需要把x,y也映射到7 x 7的特征图上,然后与对应的网格的位置相减,然而我们不难发现,这个过程可以简化为:
x = x ∗ S w i d t h − i n t ( x ∗ S w i d t h ) y = y ∗ S h e i g h t − i n t ( y ∗ S h e i g h t ) \begin{aligned} x &=\frac{x * S}{w i d t h}-i n t\left(\frac{x * S}{w i d t h}\right) \\ y &=\frac{y * S}{h e i g h t}-i n t\left(\frac{y * S}{h e i g h t}\right) \end{aligned} xy=widthx∗S−int(widthx∗S)=heighty∗S−int(heighty∗S)
根据”选取网格 “的方法,我们知道中心点x,y在7 x 7特征图上的位置的整数部分就是对应网格的位置,因为它们在原图上距离也不超过 448 / S 448 / S 448/S(网格的大小),所以在 7 × 7 7 × 7 7×7的图片上,它们的距离不超过1。
根据上一个问题的答案,我们不难发现,实际的训练和预测的过程中,我们是不需要对原图划分网格的,论文中划分网格的目的主要是为了方便表达。
论文中说了,我们一共预测98个框(明明只有49组向量),所以30维向量中一定包含了2个框的信息,也就是两组(x, y, w, h)。由于是在Pascal VOC上训练的,所以还有20个类别信息,这样组合发现只有28个值,难道大家就没有疑问, Y O L O V 1 YOLO V1 YOLOV1是如何区分背景的么? Y O L O V 1 YOLO V1 YOLOV1不仅预测了框的x, y, w, h,还预测了框的分数,用来判断是不是框,所以30维向量成分:2组 ( x , y , w , h , s c o r e ) + 20 ( x, y, w, h, score) + 20 (x,y,w,h,score)+20个类别概率。原文如下:
预测的时候,分数是直接输出的,那么训练的时候呢?是不是选中的网格分数为1,没选中的为0,答案是NO,这也是YOLO V1的巧妙之处,YOLO V1计算了一个所谓的IOU(intersection over union:交并比)分数,IOU指的是预测的框与实际框的IOU,这样在训练的时候,我们需要实时的计算这个IOU,作为输入到Loss Function中的“目标”,与预测的IOU分数做L2-Loss,举个例子,第一次迭代,网络会输出一个预测框P1,对应的真实框为G,程序会计算P1和G的IOU,然后继续做Loss。
其中 Y O L O V 1 YOLO V1 YOLOV1有一个细节,我画图描述一下:
其中,绿色的框P1与白色的框P2是网络预测的框,而红色的框G是真实值,YOLO V1会计算P1与G的IOU1,以及P2与G的IOU2,然后比较哪个IOU大,比如IOU2更大,那么P2的信息会输入到LossFunction中,P1被忽略掉(??)并不是100%被忽略,如果IOU1小于一个阈值,会作为负例,压向0值。
这里详细讲一下 l o s s loss loss f u n c t i o n function function。在 l o s s loss loss f u n c t i o n function function中,前面两行表示 l o c a l i z a t i o n localization localization e r r o r error error(即坐标误差),第一行是box中心坐标(x,y)的预测,第二行为宽和高的预测。
注意:这里注意用宽和高的开根号代替原来的宽和高,这样做主要是因为相同的宽和高误差对于小的目标精度影响比大的目标要大。举个例子,原来w=10,h=20,预测出来w=8,h=22,跟原来w=3,h=5,预测出来w1,h=7相比,其实前者的误差要比后者小,但是如果不加开根号,那么损失都是一样:4+4=8,但是加上根号后,变成0.15和0.7。
第三、四行表示bounding box的confidence损失,就像前面所说的,分成grid cell包含与不包含object两种情况。
注意:这里因为每个grid cell包含两个bounding box,所以只有当ground truth 和该网格中的某个bounding box的IOU值最大的时候,才计算这项。
第五行表示预测类别的误差,注意前面的系数只有在grid cell包含object的时候才为1。
损失函数公式如上,里面有几个值得我们借鉴的地方:
输入N个图像,每个图像包含M个object,每个object包含4个坐标 ( x , y , w , h ) (x,y,w,h) (x,y,w,h)和1个label。然后通过网络得到 7 × 7 × 30 7× 7× 30 7×7×30大小的三维矩阵。每个1×30的向量前5个元素表示第一个bounding box的4个坐标和1个confidence,第6到10元素表示第二个bounding box的4个坐标和1个confidence。最后20个表示这个grid cell所属类别。注意这30个都是预测的结果。然后就可以**计算损失函数的第一、二 、五行。**至于第二三行,confidence可以根据ground truth(真实边框)和预测的bounding box计算出的IOU和是否有object的0,1值相乘得到。真实的confidence是0或1值,即有object则为1,没有object则为0。 这样就能计算出loss function的值了。
输入一张图像,跑到网络的末端得到 7 × 7 × 30 7× 7× 30 7×7×30 的三维矩阵,这里虽然没有计算 I O U IOU IOU,但是由训练好的权重已经直接计算出了 b o u n d i n g bounding bounding b o x box box的 c o n f i d e n c e confidence confidence。然后再跟预测的类别概率相乘就得到每个 b o u n d i n g bounding bounding b o x box box属于哪一类的概率。
下一节:论文阅读笔记:YOLOV2全面解读!
参考文献: