首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >目标检测算法之ICCV2019 Gaussian YOLOv3

目标检测算法之ICCV2019 Gaussian YOLOv3

作者头像
BBuf
发布2019-12-11 17:51:28
9400
发布2019-12-11 17:51:28
举报
文章被收录于专栏:GiantPandaCVGiantPandaCV

前言

关于YOLOv3可以看一下我前面的推文讲解:YOLOV3点这里 。前面提到过,YOLOv3在实时性和精确性都是做的比较好的,并在工业界被广泛应用。当前的目标检测算法,大都在网络结构,Anchor,IOU上做了大量的文章,而在检测框的可靠性上做文章的却非常少。所以,Gaussian YOLOv3它来了。论文地址为:点这里 。并且作者也开放了源码,地址为:点这里。所以本文就带大家来学习一下这个算法。

算法原理

YOLOv3回顾

对于左图,就是YOLOv3的网络结构。可以看到YOLO V3整体使用了特征金字塔的结构,使得网络在3个尺度上执行目标检测任务,可以适应各种不同大小的目标。并且使用了跳跃连接skip shortcut防止因为网络过深而发生梯度消失,无法收敛。YOLOV3还使用了上采样操作,并将大特征图和小特征图上采样的特征图进行concat,使得网络既可以包含高层特征的高级语义信息又可以保留低层特征的物体位置信息,对目标检测任务起到促进作用。而右图也就是YOLOv3中的输出层,可以看到YOLOv3会在三个特征层分别输出,输出信息为目标的坐标位置,目标是前景的置信度,目标属于某个特定类别的置信度。对于对于每个尺度分支而言,在每个grid cell中会预测出三个结果(每个尺度下会有三个anchor)。将三个尺度的结果合并,进行非极大值抑制(NMS)后,输出最终的检测结果。

YOLOv3可能存在的问题?

从上面的回顾中可以看到,YOLOV3的目标类别是一个概率值来评价的,而目标的框只有位置信息却没有概率值,也就是说我们无法知道当前目标框的可靠性。这就是YOLOv3存在的问题,我们无法评价目标框的可靠性。所以这篇论文以这位切入点提出了Gaussian YOLOv3.即利用Guassian模型对网络输出进行建模,在基本不改变YOLOv3结构和计算量的情况下,能够输出每个预测框的可靠性,并且在算法总体性能上提升了3个点的MAP。

Gaussian YOLOv3

将原始的YOLOv3的目标框输出加入高斯模型后,网络的输出变成了下图这样。

原始的YOLOv3对于三个不同尺度的feature map,每个点输出个信息,其中包含了类别的可靠性信息,包含了是否是目标的可靠性信息,而关于边界框,我们只有关于坐标的相关信息,但这些坐标信息并不能表示该bbox的可靠性。基于此,论文提出了将高斯模型用到bbox的坐标预测上,通过高斯模型的标准差来估计坐标信息的可靠性。加入了高斯模型后,bbox的输出变成了:

其中代表均值,表示标准差(方差),考虑到YOLOv3的一贯做法,我们需要将上面的参数做以下变换:

通过这一系列等式(2),(3),(4)得到的可以直接当做计算bbox回归的坐标来用(因为就是的最大似然估计)。

注意,这里对,做了sigmoid操作将值限定在(0,1)范围是YOLOv3的直接坐标预测做法,即是说每个grid检测的物体中心必须落在当前grid内。这一点可以看我之前的推文解释:点这里。而和没有做sigmoid操作的原因是因为长宽的尺度变化可能操作1,这个做法和YOLOv3一致。标准差,,,也通过sigmoid将值限定在(0,1)范围内,这是因为标准差表明了点坐标的可靠性,0表示非常可靠,1表示不可靠(因为对于高斯分布,方差越大,则一定程度上说明这个分布的变化比较大,即是这个bbox的估计结果越不可靠)。

做了上面的铺垫后就可以引出论文的损失函数了。现在对于网络输出的每个bbox坐标都满足均值为,方差为的高斯,因此论文中使用了NLL_LOSS,即是negative log likelihood loss。

其中:

这个式子表示了对于bbox的ground truth框的每一个值在均值为和房差为的高斯分布下的值,其中高斯分布的密度函数是: 。其中每个对应的输出值是在该点的概率密度值,这个值可以近似表示概率,但是它实际上不是概率(其实概率密度函数是概率分布函数的导数)。所以我们的目标是希望ground truth 的概率密度函数值在网络的所有输出值的均值和方差构成的高斯分布中是最大的,即表明网络输出的高斯分布和真实标签是最相符的。那么当和构成的分布和真实的lable分布越接近时,就会越大,也会越大,那么前面取负号,整个损失就会越小。损失函数还有一个权重惩罚系数,计算公式如下:

其中使用ground truth的长宽来计算的。然后表示当ground truth和当前的Anchor的IOU大于一定阈值时取1,如果没有合适的Anchor和Ground Truth就取0。

注意上面只是针对了bbox的x坐标进行了讲解,其他的一样类推即可。还有在目标检测预测阶段,bbox的每一类特定的置信度就要用下面的公式来计算了:

相比原来的YOLO系列,预测部分增加了一个坐标可靠性系数,这个系数是bbox的四个标准差的平均值,这也是前面为什么对标准差做了sigmoid操作的原因。

实验结果

在KITTI和BDD上验证结果:

可以看到Gaussian YOLOv3比YOLOv3的效果提升了很多,并且加入了Gaussian之后的YOLO效果在同等速度下达到了最优。并且文中提到Gaussian YOLOv3有效的减少约%40的False Positive,提高了约5%的True Positive。

代码推荐

建议跑AlexAB版本的darknet里面的GaussianYOLOv3,非常简单和准确。地址如下:点这里

后记

今天介绍了Gaussian YOLOv3,个人觉得这篇论文的思想是值得点赞的。从bbox的可靠性做文章有可能会是目标检测算法优化的又一重要方向。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GiantPandaCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 算法原理
    • YOLOv3回顾
      • YOLOv3可能存在的问题?
        • Gaussian YOLOv3
        • 实验结果
        • 代码推荐
        • 后记
        相关产品与服务
        图像识别
        腾讯云图像识别基于深度学习等人工智能技术,提供车辆,物体及场景等检测和识别服务, 已上线产品子功能包含车辆识别,商品识别,宠物识别,文件封识别等,更多功能接口敬请期待。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档