单阶段目标检测:SSD与Yolo

SSD与Yolo结构对比图

yolo单阶段目标检测网络

设计理念

yolo直接采用regression(回归)的方法进行坐标框的检测以及分类,使用一个end-to-end的简单网络,直接实现坐标回归与分类。Yolo的CNN网络将输入的图片分割成 网格,然后每个单元格负责去检测那些中心点落在该格子内的目标,如图下图所示,可以看到狗这个目标的中心落在左下角一个单元格内,那么该单元格负责预测这个狗。**每个单元格会预测 个边界框(bounding box)以及边界框的置信度(confidence score)**。

yolo网络详细设计

Yolo采用卷积网络来提取特征,然后使用全连接层来得到预测值,检测网络由24个convolutional layers和之后的两个connected layers组成。于convolutional layers,主要使用1x1卷积来做channle reduction,然后紧跟3x3卷积。对于卷积层和全连接层,采用Leaky ReLU激活函数: 。但是最后一层却采用线性激活函数。

输出tensors为7*7*(2*5+20)解释

这里注意yolo论文中,输入为448448大小,输出tensors为7*7(25+20),骨干网络为GoogLeNet。输出维度:`7*7(2*5+20)`:

  1. 如果一个object的中心落在某个单元格上,那么这个单元格负责预测这个物体。
  2. 每个单元格需要预测B个bbox值(bbox值包括坐标xy和宽高wh,原文中B=2),同时为每个bbox值预测一个置信度(confidence scores)。也就是每个单元格需要预测B×(4+1)个值。
  3. 每个单元格需要预测C(物体种类个数,原文C=20,这个与使用的数据库有关)个条件概率值. 所以,最后网络的输出维度为S×S×(B×5+C)

详细解释如下图:

将图片分为S×S个单元格(原文中S=7),之后的输出是以单元格为单位进行的:对于每一个单元格,前20个元素是类别概率值,然后2个元素是边界框置信度,两者相乘可以得到类别置信度,最后8个元素是边界框的 (x, y, w, h) 。这里。对于边界框为什么把置信度 c(x, y, w, h) 都分开排列,而不是按照 (x, y, w, h, c) 这样排列,其实纯粹是为了计算方便,因为实际上这30个元素都是对应一个单元格,其排列是可以任意的。但是分离排布,程序上可以方便地提取每一个部分。这里来解释一下,首先网络的预测值是一个二维张量 P ,其shape为 [batch,7*7*30] 。采用切片,那么 就是类别概率部分,而 是置信度部分,最后剩余部分 是边界框的预测结果。这样,提取每个部分是非常方便的,这会方面后面的训练及预测时的计算。

输出维度各个参数计算方式

知道了输出维度的解释,我们还需要知道每个单元格预测的B个(x,y,w,h,confidence)的向量和C个条件概率中,每个参数的含义和计算方式(假设图片宽和高为,将图片分为S*S网格):

  1. (x, y):中心坐标的预测值 是相对于每个单元格左上角坐标点的偏移值,并且单位是相对于单元格大小的。对于下图中蓝色框的那个单元格(坐标为(xcol=1,yrow=4)),假设它预测的输出是红色框的bbox, 设bbox的中心坐标为(), 那么最终预测出来的(x,y)是经过归一化处理的,表示的是中心相对于单元格的offset,计算公式如下:$$
  2. (w, h):边界框的 预测值是相对于整个图片的宽与高的比例,理论上(x,y,w,h)4个元素的大小应该在 范围。
  3. confidence:置信度是由两部分组成,一是格子内是否有目标,二是bbox的准确度。定义置信度为Pr(Object)∗IOUtruthpred,如果格子内有物体,则Pr(Object)=1,此时置信度等于IoU。如果格子内没有物体,则Pr(Object)=0,此时置信度等于0。
  4. C类条件概率:条件概率定义为Pr(Classi|Object),表示该单元格存在物体且属于第i类的概率。在测试的时候每个单元格预测最终输出的概率定义为,Pr(Classi|Object)∗Pr(Object)∗IOUtruthpred=Pr(Classi)∗IOUtruthpred

详细解释参考下图(来源于网络):

损失函数理解

loss计算公式如下图(来源于网络):

损失函数分析:

  • Yolo算法将目标检测看成回归问题,所以公式中采用的是均方差损失函数。包含三类损失:bbox损失、confidence损失和categories损失,但是对不同的损失部分采用了不同的权重值。首先区分定位误差和分类误差。
  • 对于定位误差,即边界框坐标预测误差,采用较大的权重 。然后其区分不包含目标的边界框与含有目标的边界框的置信度,对于前者,采用较小的权重值 ,其它权重值均设为1,然后采用均方误差。
  • 为了平衡短边和长边对损失函数的影响,YOLO使用了边长的平方根来减小长边的影响。即预测值变为
    ##参考资料
    目标检测|YOLO原理与实现
    yolo详解
全部评论

相关推荐

01-17 10:48
门头沟学院 Java
xxxxOxo:这公司幽默得很,要了简历半天一点动静都没有,过一会就给你发个邮件让你做测试,做完又没后文了,纯溜人
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务