目标检测论文分析(二) CornerNet

CornerNet提出一种新颖的物体检测方法,通过检测物体的左上角和右下角角点替代传统anchor机制,实现one-stage检测,媲美two-stage网络。创新点包括CornerPooling、角点邻域高斯分布、Embedding学习和偏移量预测,显著提升检测精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CornerNet: Detecting Objects as Paired Keypoints 论文解析

博客写完忘记保存,也没发表就关机了,,,,win10 用习惯了。。。心疼自己,重写第二版

CornerNet 舍弃了检测网络常用的anchor结构,采用了检测物体左上角以及右下角角点的方式来代替anchor,属于one-stage检测网络,领先于其他的one-stage网络,媲美two-stage网络。

出发点

  • 作者认为两步网络里的anchor设置的数量太多了,其中高质量的anchor很少,造成正负样本分布失衡,影响网络收敛速度以及检测精度
  • anchor需要设置很多超参数,对先验知识和训练经验有一定要求。

网络结构和输出

backbone采用FCN的HG网络如下图。
在这里插入图片描述

HG网络的原理这里不详细说,不了解的童鞋可以看一下FCN的相关知识,这里只需要知道,HG最后输出是一组feature map,没有FC结构。作者采用两个Corner detector (左上角和右下角共两个)分别检测左上角和右下角的角点信息,每个detector输出由三部分组成:
在这里插入图片描述

  • Heatmap (C)个,C是目标的类别数
    也就是说每一张Heatmap专门预测一个类别,比如,第3张heatmap专门预测猫,你可以把这张图叫做猫图,图上有几个角点,就证明有几个猫。heatmap可以认为是C个二值图,在物体的角点处的值为1,其他处为0。但是,值得注意的是,实际上这样的方式并不好,作者给出了示意图来说明这个问题:
    在这里插入图片描述
    红色框代表GT,绿色的框是预测框,可以看到,绿色框已经很接近真值,然而红绿两个框的角点距离还是很大,因此,如果在Heatmap上只将真值角点处的值,那么很明显是不合理,也很难真正收敛的,所以,以GT角点为圆心以一定距离为半径的区域都认为是有效的,半径根据实际情况调节,同时采用高斯函数设置角点邻域内的数值分布。最后损失函数采用Focal Loss。
    在这里插入图片描述
    离中心越近的权重越小,越远越大。α和β是超参数,这里经验性的设置为2和4.

  • 2个偏移量(offset)
    包括X方向和Y方向。由于Heatmap的尺寸和原图大小并不对应,所以在预测时一定会有精度损失(不能整除),因此作者同时预测了这个偏移量来对损失的精度进行补偿。
    在这里插入图片描述
    在这里插入图片描述
    [x/n]是一个取整符号,n是原图与Heatmap的比值,也就是下采样的比例,x/n几乎不会整除,所以才会造成精度损失,那么损失的精度就是x/n-[x/n]是一个微小的偏移,因此,通过smoothL1来回归这个偏移。

  • 1个标签(Embedding)
    该作用在文章中成为Grouping Corners。从上文我们也知道,使用两个detector分别检测左上和右下两个角点,但是,如何知道哪两个角点是属于同一个物体的呢?这就需要对Embedding进行学习。
    在这里插入图片描述

我们这里可以认为这个e就是一个标签,当左上和右下的标签相同(最近)就认为是属于同一个目标的两个角点,所以上述的损失函数中pull就是让同一目标的标签值尽可能的贴近,push是让不同目标的标签尽可能的拉远。很像Fisher分类器的思想。

  • 整体的损失函数形式
    在这里插入图片描述

因此网络整体输出为2*(C+2+1)个

Corner Pooling

Corner Pooling是文章的核心点,前文说了很多,但是Heatmap如何生成是最为关键的一步。
在这里插入图片描述
在这里插入图片描述
使用两张图来一起描述这个过程,这里我不太理解Fig6,我认为Fig6展示的是右下角角点的检测,从箭头方向上我们可以看到,池化的方向是从featuremap的右侧向左侧进行,从下侧到上侧进行,在该方向上取第一个值为初值F0,依次与方向上各点(假设为F1)进行比较,若F0>F1,则该点数值F1变为F0;若F0<F1,则F0 =F1。这样操作直到最后。 池化后将两个方向的Feature map求和得到新的Feature map,再次经过卷积操作,进行输出。
在这里插入图片描述
在这里插入图片描述

关键点

  • 提出了新的池化方式,Corner Pooling
  • 角点邻域采用高斯分布,降低了角点邻域内的损失惩罚,更具有合理性
  • 通过学习Embedding,确定角点的归属
  • 学习偏移量,对精度损失进行补偿。

各项关键点对AP的影响

Corner Pooling
在这里插入图片描述
作者对比了使用Corner Pooling前后的效果,其他参数都是相同的,结果大概提高了2.0%

角点邻域内的损失惩罚

在这里插入图片描述
表中,最上面是不使用高斯分布的邻域分布,中间是使用固定大小的半径作为分布的范围,下面是使用物体大小自适应半径的设置,可以看到分别都有很大的精度提升。

Heatmap和偏移量Offset的影响
在这里插入图片描述
作者为了节目效果直接演了一波,把Heatmap都去掉了,emmm。。。。
所以可以看到节目效果惨不忍睹,加上了瞬间涨了将近一倍,这里可以看到offset的精度补偿对于AP提高很明显,有13.1之多。

与其他检测网络对比
在这里插入图片描述

这里就话不多说,看图就行,检测的效果是state-of-the-art了

但是速度嘛。。。。。虽然是one-stage网络,224ms(4.5FPS)给one-stage网络丢人了

Reference

Law H , Deng J . CornerNet: Detecting Objects as Paired Keypoints[J]. 2018.
论文地址
代码地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值