yolo基本理论
- 将一幅图像分解成SxS个网格(cell),如果在拿到图片对目标进行人工标注的结果框(box)中心落在某一个网格内,那这个网格就负责预测这个目标。
- 每个网格预测b个box(一般是2),除了预测每个box的位置(x y w h)之外,还要预测一个confidence值(一个box一共五个要被预测的值)。再加上要预测的类别的分数(准确度)。一共参数有30个参数要预测。
假设一张图被分割成7x7个网格,那么一张图就有7x7x30这么一个tensor。
note:x,y是相对于整个图像的中心点的位置(0-1之间)
w,h也是相对于整个图像而言的(0-1之间)
而针对单个cell的confidence是相对于原始标注框的交并比计算出来的。 P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object)*IOU^{truth}_{pred} Pr(Object)∗IOUpredtruth,这里的 P r ( O b j e c t ) Pr(Object) Pr(Object)就是说这个网格是否和人工标注的框有交集,有交集就是1,没有就是0。至于后面的 I O U p r e d t r u t h IOU^{truth}_{pred} IOUpredtruth这个就是交集区域面积闭上并集区域面积了。
每个类别的分数计算方法就是
P r ( C l a s s i ∣ O b j e c t ) ∗ P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Class_i|Object)*Pr(Object)*IOU^{truth}_{pred} Pr(Classi∣Object)∗Pr(Object)∗IOUpredtruth
而这里的 P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i|Object) Pr(Classi∣Object)指的是如果这个object是类别i那就是1不是就是0。 - 损失函数计算分为三个部分,box损失,confidence损失,class损失
box损失中x,y的损失是点和点的损失,点与点之间的损失就直接用维度空间的距离计算求和就可以了 [ ( x i − x i ^ ) 2 + ( y i − y i ^ ) 2 ] [(x_i-\hat{x_i})^2+(y_i-\hat{y_i})^2] [(xi−xi^)2+(yi−yi^)2],w,h的损失就需要先开方相减再求和了 [ ( w i − w i ^ ) 2 + [ ( h i − h i ^ ) 2 ] [(\sqrt{w_i}-\sqrt{\hat{w_i}})^2+[(\sqrt{h_i}-\sqrt{\hat{h_i}})^2] [(wi−wi^)2+[(hi−hi^)2],原因是小目标框重叠度相比较大目标重叠度要小,可能看起来相同的重叠情况,但是计算iou的时候差别却很大。
confidence计算过程中,计算正负样本的损失 [ ( C i − C i ^ ) 2 + λ n o o b j ( y i − y i ^ ) 2 ] [(C_i-\hat{C_i})^2+\lambda_{noobj}(y_i-\hat{y_i})^2] [(Ci−Ci^)2+λnoobj(yi−yi^)2],希望yolo不仅识别正样本可以准确,同样的,yolo不识别负样本也准确。
最后就是类别损失,略。