yolov1-v3系列学习

参考:https://zhuanlan.zhihu.com/p/51727352
https://blog.csdn.net/qq_18941713/article/details/90776197

yolo系列算法是one stage思想的,即直接提取特征来预测物体的类别和位置。

yolov1

其核心思想是输入整个图片,提取特征后直接进行回归/分类
在这里插入图片描述

论文细节如下:

  • 首先将图片分为sxs的网格,图中为7x7=49个网格(grid),如果待检测物体的中心点落在其中一个网格上,那么这个网格负责去预测这个物体。其中,每个网格只能产生2个预测框(bounding box),那么共产生了98个bbox并且带有置信度confidence,这些框基本覆盖了整个图片。
    不同于一般的iou,训练的时候,这里的iou是这样计算的:
    在这里插入图片描述
    这样设计
    其中,若中心点在这个网格中,Pr(Object)=1,否则为0。
    测试的时候:
    在这里插入图片描述
    这样子设计,即保证了预测bbox属于某一类的概率,又反应了bbox是否包含目标以及坐标的信息。
  • 对每一个网格,将其对应的bbox输入神经网络后,输出有(x,y,w,h,confidence)。其中x,y是指当前格子预测得到的物体的bounding box的中心位置的坐标。w,h是bounding box的宽度和高度。注意:实际训练过程中,w和h的值使用图像的宽度和高度进行归一化到[0,1]区间内;x,y是bounding box中心位置相对于当前格子位置的偏移值,并且被归一化到[0,1]。此外,还有分类信息,即样本总共有c类。B为每个网格产生的bbox的个数,则对整个图片来说,输入神经网络后,输出的个数为 SxSx(5*B+c)。例如, 在PASCAL VOC中,图像输入为448x448,取S=7,B=2,一共有20个类别(C=20)。则输出就是7x7x30的一个tensor。
    关于x,y的计算,如下图:
    在这里插入图片描述
    假设椭圆为目标,绿色长方形为标定的目标框,红点为框的中心点,即其坐标为(3,7),其处在(1,4)的网格中
    对于网格,红点坐标为(0.5,0.5)。根据原图位置计算得到相对于特征图位置的公式如下:可根据下面公式验证。
    x = x S w i d t h i n t ( x S w i d t h ) y = y S w i d t h i n t ( y S w i d t h ) {} x = \frac{{x*S}}{{width}} - {\mathop{\rm int}} \left( {\frac{{x*S}}{{width}}} \right)\\ y = \frac{{y*S}}{{width}} - {\mathop{\rm int}} \left( {\frac{{y*S}}{{width}}} \right)

网络结构如下:
在这里插入图片描述
激活函数:最后一层使用的是标准的线性激活函数,其他的层都使用leaky relu 。
3.损失函数
  由上一步可知,yolov1的损失分为3个方面,坐标损失,置信度损失,分类损失,作者全部使用了mse作为损失函数,但如果直接相加的话,无法权衡8维坐标(因为是2个bbox)损失和2维的置信度损失和20维的分类损失的重要程度。考虑到每个损失的贡献率,作者给坐标损失权重 λ c o o r d {{\bf{\lambda }}_{{\bf{coord}}}} =5。又因为在一幅图片中,没有目标的网格占多数,所给给没有目标的置信度损失权重 λ n o o b j {{\bf{\lambda }}_{{\bf{noobj}}}} =0.5,有目标的置信度损失为1。如下:
在这里插入图片描述
其中 1 i j o b j = { 1 , 0 } {\bf{1}}_{ij}^{obj} = \left\{ {1,0} \right\} ,表示第i个网格第j个bbox是否包含目标。 1 i o b j {\bf{1}}_i^{obj} 表示包含目标的第i个网格。对应到输出tensor上如下图:
注意到,对于分类损失,只有当网格包含目标时,才会计算,不包含目标时,分类全置为0,不参与运算,可参考吴恩达的相关课程。
在这里插入图片描述
  注意到,坐标损失中关于w和h,采用的是开根号的形式,映射到下面这张图上。这时因为,对于不同大小的bbox,宽和高计算出的偏移量损失贡献率是不一样的,采用根号的形式,可以尽量减小对小bbox的敏感度。这样子可以稍微平衡一下大bbox和bbox对损失的贡献率。这样子可以使得训练波动更小一点。

在这里插入图片描述
总的来说,这样设计损失函数可以让坐标,置信度,分类概率三者达到一个较好的平衡。
但仍存在一些不足

  • 虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体,对于多个小目标中心在同一个网格中时,只能检测出一个,对于小物体的召回率不够高,群体小物体检测也不合适。

  • 文中产生的bbox的长宽是根据数据集的特性设定的,对于具有特殊长宽的物体,该网络的泛化能力偏弱。

  • 对于不同大小目标的坐标损失函数的设定权重是相同的,虽然采用了开根号的设定,但该loss function有待加强。

  • 因为网络的最后一层为全连接层,导致测试时输入图像的分辨率要与训练时的相同。

yolov2

yolov1的精度相对于其他网络还比较低。
1) Batch normnization
2)anchor box
下面是yolov1和v2的一个对比,
在这里插入图片描述

发布了61 篇原创文章 · 获赞 17 · 访问量 2967

猜你喜欢

转载自blog.csdn.net/qq_35027690/article/details/103834633