YOLO系列总结

参考:

https://arxiv.org/abs/1506.02640

https://www.jianshu.com/p/13ec2aa50c12

https://www.imooc.com/article/36391

https://www.jianshu.com/p/f87be68977cb

https://www.cnblogs.com/xiongzihua/p/9315183.html

1. YOLO v1

网络框架:

YOLO系列总结_第1张图片

1.1 其中,输入图像大小是448*448*3,输出大小是7*7*30,如上图,最后输出的一个像素值对应原图中的一个网格,即相当于将原图分割成7*7的网格:

  • 最后输出的每个像素值都是一个30维的向量,每个像素对应原图中的一个网格,30等于2×5+20,即2个bbox值(bbox值包括坐标和宽高),同时为每个bbox值预测一个置信度(confidence scores)。20表示某个类的中心落在当前单元格内的概率。
  • 即前面10个值用来确定目标的位置(定位),后面20个值用来确定目标的类别(分类)。
  • 输出结果中的一个像素,只能有一个类别,即要么是狗,要么是自行车,所以对应到原图中的网格,每个网格负责预测一种物体;为何用两个bbox,为了更准确的定位出物体。

 

1.2 分类功能简单,即20个0到1的值,哪个位置上的值大即属于哪个类,难点是定位功能:

YOLO系列总结_第2张图片

 

因为定位和分类一样也视为回归任务,所以需要将坐标数据值归一化为0到1之间,假设输出结果的其中一个像素值为(x,y,w,h,confidence),对应到原图即为上图的蓝色网格的检测结果,该目标的bbox是红色框。

1.2.1 (x, y)

(x, y)是红色bbox的中心(原图绿色点)相对于网格(当前网格是蓝色)的偏移距离:对于上图蓝色网格坐标为(x_{col} = 1, y_{row} = 4),假设它输出的是红色框bbox,设bbox的中心坐标(x_c, y_c),那么最终预测的结果(x,y)是经过归一化处理的,表示的是绿色中心相对于蓝色网格的偏移,计算公式如下:

(1)其他博客里面的公式如下

x = \frac{x_c}{w_i} S - x_{col}

y = \frac{y_c}{h_i} S - y_{row}

其中,w_i是原图宽,值为448,S值为7,x_col值为1,假设x_c值为84,则依据上面公式

x = \frac{84}{448} *7 - 1 = 0.3125

(2)自己理解的公式,更简单,容易理解

因为bbox中心相对于单元格的偏移量,即绿色点如果正好在蓝色单元格最左上角,则偏移量为0,如果正好在最右下角,则偏移量为1,公式如下

\large x = \frac{x_c - w_c}{w_c}

\large y = \frac{y_c - h_c}{h_c}

其中,w_c是每个单元格的宽,x_c是原图像的坐标位置,x就是相对于单元格的左边界偏移的距离。

同理,y值一样,这样就实现了原图中所有的坐标值都是0到1。

1.2.2 (w,h)

(w,h)是红色bbox相对于整个图片的比例。预测的bbox的真实宽高为w_b, h_b,如上图所示。(w,h)表示的是bbox的是相对于整张图片的占比,计算公式如下:

w = \frac{w_b}{w_i}

h = \frac{h_b}{h_i}

其中w_i值为448,假设w_b值为160,则w = 160 / 448 = 0.3571.

1.2.3 confidence

这个置信度是由两部分组成,一是格子内是否有目标(有为1,无为0),二是bbox的准确度(IoU,设置IoU是为了定位更准)。即如果有目标,置信度为IoU,否则置信度为0.

一个网格,有两个bbox,所以就有两个confidence

1.2.4 C类的条件概率

20个条件概率定义为\large p_r = (Class_i|Object),表示该网格存在目标且属于第i类的概率。

 

最终的输出是置信度乘以这20个条件概率值,得出一组20个概率值,因为有两组bbox,这样bbox1和bbox2的confidence分别乘以这20个条件概率值,就有两组概率值。

因为输出有7x7像素,所以有7×7×2 = 98 组结果,送入NMS,得到最终的输出框结果

 

1.3 损失函数

首先要明确两个概念,一是网格中有无目标,二是网格中的一个目标只有一个box负责(responsible)另一个box也算没有目标,根据在线计算IOU的大小确定哪一个负责。

YOLO系列总结_第3张图片

其中,其中i表示第i个方格,j表示该方格预测出的第j个方框。\large 1_i^{obj}表示物体obj的实际方框与第i个方格有对应关系,即obj的中心落在第i个方格中;\large 1_{ij}^{obj}表示物体obj的实际方框与第i个方格预测的第j个方框有对应关系,即obj的中心落在第i个方格中,并与它的第j个预测方框的IOU最大。

  • 可以看到损失函数包括5个部分。第一部分是x,y坐标;第二部分是w,h,采用根号使得小方框size变化的损失比大方框size变化的损失大,因为小目标对于预测wh的误差更敏感;第三部分是方框置信度损失,回归目标是预测方框与实际方框的IOU值;前三部分都只在预测方框和实际方框有对应关系时才计算loss
  • 第四部分是没有对应物体的方框置信度损失,实际的置信度都是0;
  • 第五部分是分类损失,当方格与物体有对应关系时,才计算分类损失。

因为在图片中很多方格都不包含物体,使得方格预测方框的置信分数趋于0。所以对包含物体的方格加大权重,对不包含物体的方格减小权重。论文中有\large \lambda _coord = 5\large \lambda_{noobj} = 5

 

待续。。。

 

 

 

你可能感兴趣的:(Deep,Learning,PyTorch)