-
论文背景及大致思路
a. 一日,在某讨论群,有位小伙伴提问:有哪些不用Anchor的检测方法呢,小伙伴纷纷回复”CornerNet“,那么显然可知,这篇文章舍弃了Anchor,转而通过预测两个顶角的方法”曲线救国“。本文发表在ECCV2018,被多个自媒体成为“本次ECCV最值得关注的检测方法”。
b. 其实最后一句是我瞎逼逼的。不过,文中表示在COCO上达到了42.1%的准确率,还是相当不错的成绩了。
c. 思路来自于一篇和人动作预测相关的文章,Newell, A., Huang, Z., Deng, J.: Associative embedding: End-to-end learning for joint detection and grouping. In: Advances in Neural Information Processing Systems. pp. 2274–2284 (2017) -
和其他结构的异同及优缺点
a. 我们知道目前主流的两步检测方法都是,先给出若干个比例和大小的锚框,然后在第一步得到ROI时进行第一次的调整,然后再进行分类和边框的回归预测,相当于再调整一次。而一步的方法,相当于提高版的第一步,没有再回归的部分了,但是锚框都是不可缺少的。这就带来两个缺点:
i. 在一步的检测网络中,我们往往就需要提取大量的锚框来覆盖整个图,使得不会遗漏目标,这就造成了正负样本的比例的巨大差别,也是如RetinaNet,RefineDet等最新模型试图解决的问题之一。
ii. 如何选择框的大小,比例,也是一个非常困难的部分。很多网络还需要在不同大小的特征图上进行预测,自然锚框的选择也就更多了。
b. 而在此文中,使用了一个卷积网络分别预测一个左上角点的和一个右下角点的特征图,还有用于每个检测的角的嵌入向量。对于同样的物品,角点的嵌入向量应当距离最小。
c. 此文所用的Pooling也很特别,叫做corner pooling,据说,他可以帮助更好的定位回归框的角点,不过我反正是不懂为什么这个能work。
d. 作者给出了这个结构能work的两个猜测:
i. 定位中心是比较困难的,因为它是由四条边一起决定的,然而角点只靠两条边决定,所以比较好定位。而且,顶角这种形式,我们有更多的先验知识,也就更好的检测。
ii. 效率更高。我们枚举出w*h个点,通过组合,可以组合出W2*H2个锚框。 -
CornerNet
a. 网络会输出三个结果,Top-Left和Bottom-right的热点图,嵌入向量,以及一个偏移量用于微调。
b. 主干网络用的是Hourglass Network,个人感觉看起来像是很多个全卷积网络拼接起来,并且每一块会进行浅层和深层的信息融合,类似FPN。然后接两个预测模块,分别用于两个角点。每个模块产生自己的Corner Pooling。所有操作都在同一个尺度下完成。
c. Detecting Corners:
i. 每个热点图的尺度如下HWC,其中C就是种类数,这里没有背景种类。
ii. 在训练时,我们对于顶点附近的区域也会进行权重的加权之后在进行惩罚。区域大小由目标大小确定。惩罚通过一个非标准的2维的高斯分布给出。
iii. 惩罚函数:
其中,Pcij为(i,j)位置上为c类的预测,ycij为GT通过高斯分布处理后的对应位置值。整个函数为变体的Focal Loss。
iv. 在全卷积时,由于降采样再上采样,就会出现精度的丢失,这里我们再预测一个偏移值,用来调整角的位置。这里使用smooth L1 Loss函数作为惩罚函数。
d. Grouping Corners:我们需要确定左上和右下来自于同一个回归框。作者通过嵌入的距离进行分类,也就是同组的左上角点和右下角点他们的嵌入向量的距离应该是最小的。文章中使用pull来训练分组角点,用push来训练分离角点。
e. Corner Pooling:这里我是不能理解的,为什么找最大值就能代表角点了。所以具体细节不讨论了。
CornerNet论文笔记
最新推荐文章于 2021-03-23 14:14:59 发布