Hi!请登陆

重读 CenterNet,一个在Github有5.2K星标的目标检测算法

2021-2-5 39 2/5

来源:新智元

论文作者信息:

论文:

https://arxiv.org/abs/1904.07850

动机

使用卷积神经网络做目标检测,大体可以分为单阶段(one-stage)方法和二阶段(two-stage)方法。单阶段检测器预定义很多anchor,基于这些anchor去做检测,密集的anchor有助于提高检测精度,然而在预测阶段,真正起到检测作用的只有少部分anchor,因此导致了计算资源的浪费。

无论是单阶段检测器还是二阶段检测器,在后处理阶段都需要NMS(Non-Maximum Suppression)操作去除多余框,NMS操作只在推理阶段存在,NMS的存在导致现有的检测器并不是严格的端到端训练的。

基于上述现象,作者提出了CenterNet算法,直接预测物体bounding box的中心点和尺寸。相比其他方法,该方法在预测阶段不需要NMS操作,极大的简化了网络的训练和推理过程。

CenterNet原理

CenterNet主要原理为:输入尺寸为 的3通道图像,表示为
,经过卷积神经网络运算,输出尺寸为
、通道数为数据集类别数 的heatmap,且heatmap中每个值在 区间内,表示为
。默认情况下令 ,即网络输出的heatmap的长和宽分别为输入图像的

使用
表示heatmap中的第 个通道位置 处的值,当 时,表示heatmap的
处是一个关键点(key point),若
,表示heatmap的 处是背景。heatmap中关键点所在的位置对应原图像中目标的bounding box中心。

若输入图像的位置 处为类别 的bounding box中心,令 ,那么heatmap的第 个通道的 处的值为:

上式为高斯函数,式中的 与物体尺寸有关。若输入图片中有2个或多个相邻的类别为
的目标,在求取heatmap时,某个位置处的元素可能会得到根据多个目标求到的多个值,此时取最大值作为heatmap中该位置的值。

1.1 关键点(key point)损失函数

参考focal loss,构造如下形式的损失函数:

令 , ,
是输入图片中目标的个数,也是heatmap中关键点的个数。上式中的 和
是交叉熵损失函数, 和 是focal loss项。

focal loss的存在有如下影响:

当 时,若 接近1,由于 项的存在,损失函数会急剧衰减,而当 不接近1时,损失函数轻微衰减,使得优化器更关注 不接近1的样本。

当 时,若 接近0,由于 项的存在,损失函数急剧衰减,而当 接近1时,损失函数轻微衰减,使得优化器更关注 接近1的样本。

在 的情况中,损失函数还包含 ,结合下图讲述该项的作用:

上图为根据训练集的标注信息得到的heatmap,该heatmap作为网络的监督信息训练网络。关注上图中左边的目标,深绿色的点为输入图片bounding box中心位置

上图为根据训练集的标注信息得到的heatmap,该heatmap作为网络的监督信息训练网络。关注上图中左边的目标,深绿色的点为输入图片bounding box中心位置

在heatmap上对应的位置 ,heatmap中该位置的值为1。

前文谈到,根据标注信息生成heatmap时,使用了二维高斯函数确定heatmap中
处周围位置的值,即上图中浅绿色方框位置的值,它们的值不为1但是接近1。

在网络训练过程中,由于
的存在,当 很接近1时,损失函数的值被进一步压制,即使它们的值
接近1也要让优化器不特别关注这些浅绿色位置的损失函数值,因为这些位置离物体的bounding box中心很接近。

1.2 offset损失函数

为了更准确地预测出输入图像中bounding box中心点的位置,该网络除了输出 个通道的heatmap外,还会输出2个通道的offset信息,记作

如前文所述,输入图片bounding box中心位置 在heatmap上对应的位置为
,这个过程存在向下取整运算,导致得到网络输出的heatmap中关键点的位置后,难以精确得到输入图片中bounding box中心的位置,offset用于弥补这一精度损失。

offset表示的值为
,使用L1损失构造offset的损失函数,表示如下:

上式中
表示网络预测的offset,
可以根据训练集的标注信息得到。需要特别指出的是,offset损失只针对heatmap中的关键点,对于非关键点,不存在offset损失。

1.3 尺寸(size)损失函数

令表示目标 的bounding box左上角和右下角的坐标,则该目标的尺寸为,
可以通过训练集的标注信息的到。网络输出2个通道的信息用来预测目标的尺寸,记作
。使用L1损失构造尺寸损失函数,表示如下:

1.4 整体的损失函数

根据上文内容可得到整体的损失函数,表示如下:

实验过程中,取上式的 , 。使用这个损失函数训练网络,得到
个通道的feature map,分别表示关键点 、偏移 和尺寸 。

网络结构

作者尝试了4种网络结构,分别为ResNet-18、ResNet-101、DLA-34、Hourglass-104,如下图所示,方框内的数字用于指出特征的尺寸,当方框内数字为4时,表示此时特征的长和宽分别为输入图片的1/4。

Hourglass-104

如上图中图(a)所示,每个Hourglass模块是对称的5个下采样和5个上采样,中间使用skip connection进行短接,该网络的配置与文章《Cornernet:Detecting objects as paired keypoints》基本一致。

ResNet-18和ResNet-101

如上图中图(b)所示,作者在ResNet中做了些改动:在每个upsample操作之前加入了1个3x3的deformable convolutional layer,即在做upsample操作时,先通过deformable convolutional layer改变通道数,再进行反卷积(transposed convolution)操作。

DLA-34

上图中图(c)是原始的DLA-34结构,作者在其基础上进行改进,变成了图(d)中的结构。主要改动为:增加了一些skip connection,在upsample操作时使用deformable convolutional layer。

对于每种网络结构,backbone后面会增加3个网络head,分别预测关键点 、偏移 和尺寸 ,每个head包括1个3x3的卷积、ReLU和1个1x1的卷积。网络输出结果的示意图如下图所示:

使用CenterNet做3D目标检测

2D目标检测只需要网络输出目标的位置和尺寸即可,而3D目标检测还需要网络输出目标的深度、(长、宽、高)、目标的角度这3个额外的信息。

3.1 深度

在backbone后面增加一个head用于预测深度信息,网络的输出并不是最终的深度。对于目标 ,网络输出的深度信息记作
,则目标的真正深度为 ,
表示sigmoid函数。

使用L1损失构造深度损失函数,表示如下:

上式中的表示训练集中目标的真实深度,单位为米。

3.2 长、宽、高

将目标的长、宽、高用向量表示,对于目标 ,网络输出的长、宽、高记作
,使用L1损失构造损失函数,表示如下:

上式中表示训练集中目标的长、宽、高,单位为米。

3.3 角度

使用卷积神经网络直接回归角度比较困难,因此作者将角度信息用8个标量表示,对于目标 ,网络输出角度信息记作


进行分组,其中 表示第1组,用于预测目标角度位于

相关推荐