深度学习【60】物体检测:CornerNet

CornerNet是一种创新的物体检测方法,它通过预测图像中物体bbox的左上角和右下角边角点,而非依赖于anchor box。论文使用热图表示边角点坐标,基础网络采用HG网络,但速度较慢。CornerNet解决了anchor box的过多数量和超参数设置问题,预测效率更高。网络包括两个预测模块,分别预测Top-left和Bottom-right corners,通过Corner Pooling、Heatmaps、Embeddings和Offsets实现边角点定位和匹配。实验表明CornerNet在准确性上优于一阶段和某些二阶段检测方法,但在速度上存在挑战。
摘要由CSDN通过智能技术生成

很有意思的一篇文章,使用热图来预测bbox的左上角和右下角,这两个边角点的坐标,而不依赖于anchor box。在人体姿态检测和人脸特征点识别领域里面,有不少论文都是使用热图来表示坐标点。由于bbox也是一组坐标点,所以在物体检测应当也可以使用热图来做,该论文便是一个很好的思路。论文的基础网络使用的是HG网络(漏斗网络),并且又两个HG网络堆叠起来,因此模型还是很大的。根据作者提供的训练好的模型文件,有768M(https://drive.google.com/uc?id=1UHjVzSG27Ms0VfSFeGYJ2h2AYZ6d4Le_&export=download), 在titanX上的平均预测速度是244ms每张图片。论文的检测结果会比一阶段的方法好,并且也比一些二阶段的检测方法要好,但是速度上却没那么令人满意。个人猜测应该是HG网络引起的,因为HG网络会对特征图进行下采样,然后再上采样;同时cornerNet的输入是511*511,输出是128*128,这使得cornerNet的基础网络所需的计算量太大了。所以不要看到cornerNet这么慢,就觉得这个方法不行,后续的改进空间还是很大的。

先简单回忆一下anchor box。利用anchor box进行bbox检测时,我们一般是对大小为W*H的网格进行操作的。网格中的每个位置作为多个anchor box(比如faster rcnn中每个点有9个anchor box)的中心点,然后预测每个anchor box的中心点x,y坐标偏移量和宽高缩放尺度。这样就得到了最后的bbox。

那么,anchor box有什么问题呢?作者认为有两个问题:
1、anchor box的数量实在太多了,比如DSSD有40K个,RetinaNet有100K个。在那么多的anchor box里面,正负样本的比例严重失衡。并且使得训练速度很慢。(然而由于cornerNet的基础网络太大,训练起来也是很慢)
2、anchor box 的超参数太多了,比如要选多少个box啊,他们的size是多少啊,以及宽高比怎么设置啊。当与多尺度检测结合起来,这些超参数的设置就更复杂了。

CornerNet的方法为啥比基于anchor box的方法更牛逼?作者认为有两个原因:
第一个、预测anchor box的中心点坐标要考虑四个方向的因素,左、右、上和下。而cornerNet在定位边角点时只要考虑两个方向的因素,比如要定位左上边角点,我们只需要观察物体的最上边点边界和最左边的边界。
第二个、用边界点来表示bbox,会更高效:因为只使用 O ( w h ) O(wh) O(wh)量级的边角点,就可以表示 O ( w 2 h 2 ) O(w^2h^2) O(w2h2)量级的anchor box。

扯了那么多,我们开始cornerNet的具体内容吧。

概览

先看论文最先给出的一张整体构架图:
在这里插入图片描述

说实在的,第一次看到这张图,内心是,WTF???这是在说什么,是我太菜了吗,原谅我,看不懂!!!那个热图我知道什么意思,可是那个embedding是什么鬼,热图和embedding怎么搞在一块,然后输出坐标的?不过,我们还是能知道网络预测的是bbox的左上角点和右下角点。
所以,不看这张图了,看论文中的另一张图:
在这里插入图片描述
输入图片经过HG基础网络后,得到一个特征图,然后将该特征图作为两个Prediction模块的输入,分别是Top-left corners和Bottom-right corners。在每个预测模块里面,先经过Corner Pooling,然后输出Heatmaps,Embeddings,Offsets分支。我们先不管Corner Pooling了,先认为是一个普通的Pooling,只是这个Pooling不改变特征图尺寸。

Heatmaps的大小是128*128,通道为80(coco数据,80类),所以Heatmaps是一个大小为128*128*80的张量。以Top-left corners模块中的Heatmaps为例,其每个通道代表coco数据中的80个类别,每个通道的128*128网格中的每个点的输出表示该点是一个左上角点的概率。并且该通道预测出来的所有左上角点对应的所有bbox的物体类别都一样。举个例子,假设在通道编号为10(假设物体类别是dog)的128*128热图里面,预测出了3个左上角点,也就是有3个bbox,那么这3个bbox的物体类别都是dog。

Offsets大小为128*128,通道为2(分别为边角点x,y的偏移量)。由于用热图来表示某一点的xy坐标,会损失精度。因此cornerNet还对每个边角点预测其真实位置的偏移量。举个例子,假设通过热图预测出某一左上角点的坐标是(50,50),该坐标的对应尺度是热图的128*128,而真实的坐标从网络的输入尺度511*511,映射到128*128时是(50.2,50.6)这样就损失了精度了。现在cornerNet为(50,50)预测了偏移量为(0.3,0.5),那么可以计算出网络最终的预测坐标为(50.3,50.5)。尽管比真正的坐标(50.2,50.6)差了一点,但比(50,50)还是精确了许多。

Embedding大小为128*128,通道为1。这个Embedding的作用是什么呢?现在假设两个预测模块已经分别预测出了100个左上角点,和100个右下角点。那么有个问题,怎么知道哪一个左上角点和哪一个右上角点是属于同一个bbox呢?解决方法就是使用这个Embedding。Top-left预测模块和Bottom-right预测模块都有一个128*128的Embedding,简单来说,这两个Embedding中的每个值相当于一个标签。假设在Top-left预测模块里的Embedding的(50,50)位置的值是10(这个值是多少无所谓),那么其表示Top-left位置为(50,50)的左上角点的标签是10。如果,在Bottom-right预测模块里的Embedding的(100,100)位置的值也是10。那么就认

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值