社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

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

我爱计算机视觉 • 3 年前 • 262 次点击  


本文带领大家重温 Objects as Points 一文,其于2019年4月发布于arXiv,谷歌学术显示目前已有403次引用,Github代码仓库已有5.2K星标,无论在工业界和学术界均有巨大影响力。

论文作者信息:


论文:

https://arxiv.org/abs/1904.07850


0.动机



使用卷积神经网络做目标检测,大体可以分为单阶段(one-stage)方法和二阶段(two-stage)方法。单阶段检测器预定义很多anchor,基于这些anchor去做检测,密集的anchor有助于提高检测精度,然而在预测阶段,真正起到检测作用的只有少部分anchor,因此导致了计算资源的浪费。
无论是单阶段检测器还是二阶段检测器,在后处理阶段都需要NMS(Non-Maximum Suppression)操作去除多余框,NMS操作只在推理阶段存在,NMS的存在导致现有的检测器并不是严格的端到端训练的。
基于上述现象,作者提出了CenterNet算法,直接预测物体bounding box的中心点和尺寸。相比其他方法,该方法在预测阶段不需要NMS操作,极大的简化了网络的训练和推理过程。


1.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中该位置的值为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,分别表示关键点、偏移和尺寸


2.网络结构



作者尝试了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的卷积。网络输出结果的示意图如下图所示:


3.使用CenterNet做3D目标检测



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

3.1 深度

在backbone后面增加一个head用于预测深度信息,网络的输出并不是最终的深度。对于目标,网络输出的深度信息记作,则目标的真正深度为表示sigmoid函数。
使用L1损失构造深度损失函数,表示如下:
上式中的表示训练集中目标的真实深度,单位为米。

3.2 长、宽、高

将目标的长、宽、高用向量表示,对于目标,网络输出的长、宽、高记作,使用L1损失构造损失函数,表示如下:
上式中表示训练集中目标的长、宽、高,单位为米。

3.3 角度

使用卷积神经网络直接回归角度比较困难,因此作者将角度信息用8个标量表示,对于目标,网络输出角度信息记作
进行分组,其中表示第1组,用于预测目标角度位于范围内的角度值;表示第2组,用于预测目标角度位于范围内的角度值。
对于每一组,用于使用softmax函数进行分类,从而决定目标的预测角度是由第1组的信息表示还是由第2组的信息表示;分别用于预测“目标角度与该组内角度范围的中心角度”差值的值和值。使用交叉熵损失函数训练,使用L1损失训练,得到如下损失函数:
上式中表示角度区间的中间值,由训练集中的标注信息得到,用于指明训练集中目标的角度在哪一组的角度范围内,是卷积神经网络的输出值。
推理时,若输入一张图片,根据神经网络输出的得到角度值:
上式中的取值为1或2,具体取值由中的 决定,根据选择使用第1组还是第2组的角度信息。


4.实验结果


4.1 2D目标检测

作者使用了ResNet-18、ResNet-101、DLA-34、Hourglass-104这4种网络进行实验,输入图片分辨率为512x512,输出图片分辨率为128x128,训练时使用了如下数据增强方法:
  • random flip
  • random scaling
  • cropping
  • color jittering
在COCO训练集上训练,使用Adam优化器,ResNet-101和DLA-34的下采样层由ImageNet预训练权重初始化,上采样层随机初始化;Hourglass-104以ExtremeNet为基础微调。在8卡TITAN-V GPU上,ResNet-101和DLA-34训练了2.5天,Hourglass-104训练了5天。在COCO验证集上测试,结果如下图所示:


上图中,“N.A”表示测试时未使用数据增强;“F”表示测试时使用了flip方式进行数据增强,在解码bounding box之前平均2个网络的输出结果;“MS”表示使用了5个尺度(0.5,0.75,1,1.25,1.5)进行推理,使用NMS融合5个网络的结果。“FPS”的测试是基于Intel Core i7-8086K CPU、TITAN Xp GPU、Pytorch 0.4.1、CUDA9.0和CUDNN7.1环境。
下图为使用DLA-34和Hourglass-104这2种结构在COCO测试集上的测试结果:


包含“/”的项表示“单尺度/多尺度”结果。可以看到使用Hourglass-104结构精度可以达到45.1% AP,超越了其他单阶段检测器。

4.2 3D目标检测

在KITTI数据集上训练3D目标检测算法,训练时没有使用数据增强技术。在训练和测试时,输入图片分辨率为1280x384,使用DLA-34网络结构。对于包含深度、(长、宽、高)和方向的损失函数,训练时权重均设置为1。
在测试时,recall的值设置为从0到1步长为0.1的11个值,IOU阈值为0.5,计算2D bounding box的AP、度量角度准确性的AOS、鸟瞰图bounding box的BEV AP。针对该数据集训练5个模型,测试结果取5个模型平均值,并给出标准差。测试结果如下:


上图中分别与Deep3DBox和Mono3D进行比较,并且按照要比较的算法划分测试集。在AP和AOS两个指标下,CenterNet略差于Deep3DBox和Mono3D方法,在BEV AP指标下明显优于这2个方法。


5.总结



这篇文章有如下亮点:
  • 提出了CenterNet框架用于目标检测,该方法预测目标的关键点和尺寸,简单、速度快、精度高,不需要预定义anchor,也不需要NMS,完全实现端到端训练;
  • 在CenterNet框架下,可以通过增加网络的head预测目标的其他属性,比如3D目标检测中的目标深度、角度等信息,可扩展性强。
  • 源码:
    https://github.com/xingyizhou/CenterNet
仅用于学习交流!

END



备注:目标检测

目标检测交流群

2D、3D目标检测等最新资讯,若已为CV君其他账号好友请直接私信。


我爱计算机视觉

微信号:aicvml

QQ群:805388940

微博知乎:@我爱计算机视觉

投稿:amos@52cv.net

网站:www.52cv.net

在看,让更多人看到  

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/107189
 
262 次点击