UnitBox: An Advanced Object Detection Network
最后更新于
最后更新于
UnitBox使用了和DenseBox类似的基于图像分割的方法进行人脸检测。在DenseBox中,bounding box的定位使用的是l2损失。l2损失的一个缺点是会使模型在训练过程中更偏向于尺寸更大的物体,因为大尺寸物体的l2损失更容易大于小物体。
为了解决这个问题,UnitBox中使用了IoU损失,顾名思义,IoU损失既是使用Ground Truth和预测bounding box的交并比作为损失函数。
首先回顾DenseBox中介绍的几个重要的知识点,明白了这些知识点才能理解下面要讲解的UnitBox。
DenseBox网络结构是全卷积网络,输出层是一个的Feature Map,是一个image-to-image的任务;
输出Feature Map的每个像素点都是可以确定一个检测框的样本,包样本含置信度和该点到bounding box四条边的距离,如图1所示
图1:UnitBox的Ground Truth
Unitbox的一个最重要的特征是使用IoU损失替代了传统的l2损失,下面我们先从IoU损失入手讲解UnitBox。
前向计算非常简单,如图2中的伪代码所示:
图2:IoU损失前向计算伪代码
注意结合图1中的和的定义理解图2中的伪代码,计算的是预测bounding box的面积,则是ground truth的bounding box的面积,是两个区域的交集,是两个区域的并集。
本质上是对IoU的交叉熵损失函数:那么可以将IoU看做从伯努利分布中的随机采样,并且,于是可以化简成源码中的公式,即
其中:
其它三个变量的推导方法类似,这里不再重复。
从这个推导公式中我们可以看出三点信息:
综合1,2两条我们可以看出当bounding box等于ground truth值时检测效果最好。
因此可以看出优化IoU损失是正向促进物体检测的精度的。
UnitBox的网络结构如图3所示,下面分析几个重要的方面
输入:由于使用了全卷积结构,在测试时直接输入原始图片即可。在训练时每个batch的图像的尺寸相同即可。
输出:UnitBox的输出标签分成两部分,上半部分椭圆形为置信度热图,具体标签生成方法论文中没有讲,猜测应该是采样类似于DenseBox中的策略。另外一组是bounding box热图,生成策略应该也是类似于DenseBox。
写这篇文章的目的主要是介绍UnitBox中引入的IoU损失,IoU损失有如下优点
IoU损失将位置信息作为一个整体进行训练,而l2损失把它们当做互相独立的四个变量进行训练,这样得到的结果更准确;
这里我们推导一下IoU损失的反向计算公式,以变量为例:
损失函数和成正比,因此预测的面积越大,损失越多;
同时损失函数和成反比,因此我们希望交集尽可能的大;
图3:UnitBox网络结构
骨干网络是VGG-16,用于计算置信度热图的是stage-4阶段的Feature Map,计算方式是先通过线性插值得到相同尺寸的Feature Map,再通过卷积将Feature Map的通道数降到1,此时得到的Feature Map表示预测的置信度热图。网络的另外一个分支用于预测bounding box的热图,Feature Map取自VGG-16的stage-5。通过和上面类似的方法得到和原图尺寸相同的4个预测bounding box热图。并且在后面加入了ReLU将负值置0。
至于为什么两个任务使用不同的stage,论文中给出的解释是IoU损失计算的Bounding box是一个整体,因此需要更大的感受野,由于UnitBox仅添加了两组卷积,因此速度要比DenseBox快很多。
UnitBox的提出虽然目的是为了解决人脸检测问题,但是从其算法角度讲也可以扩展到其它类型的检测任务中,但是像Pascal VOC或者是COCO这样的多类别检测任务,目前基于语义分割的方法还需要改进,因为其本身的置信度热图的设计是位于直接的一个值,暂时是无法进行多分类的。
无论输入的样本是什么样子,IoU的值均介于,这种天然的归一化的损失使模型具有更强的处理多尺度图像的能力。