,作者:美国密歇根大学
不再需要设置大量的anchors和检测框回归(x,y,w,h),而是用一对关键点进行框检测。论文发表时检测效果优于目前所有的一阶段网络,在ms coco数据集上准确率为42.2%。
用角检测 优于框检测的原因:1、框的中心需要知道四条边的信息,而角则只依赖于两条边,因此相对来说更简单。
2、采用角pooling,利用了角的先验知识;同时,角提供了boxes 空间密度离散的有效方法,用n个点表示n*(n-1)个框。
corner net主要框架:
基础网络为:两个Hourglass NetWork,第一次提出用于人体姿势评估,其先降采样然后再上采样,缓解max pooling造成的细节丢失,所以加入skip 层。
基础模型之后是左上和右下的预测模块。主要包括corner pooling 和热图,embedding,偏置。
其中corner pooling更好应用角的先验知识,对于左上的计算方式是:从某一位置,横向取该点到最右侧中的最大值,纵向取该点到最下面的最大值,然后再进行加法得到输出,例子如图:
最终预测时使用三个分支:热图,embedding,偏置。
heatmap:一个卷积网络预测两个热图集用于定位不同类物体的角位置,两个热图集分别对应左上和右下。其中每个热图集有C个通道,C是类别数目(不包括背景),每个通道是一个二值掩码指出每个类的角位置。对于positive位置,根据物体尺寸计算出一个半径值,保证半径内的点对与真实标注之间的IOU至少为0.3(具体操作需要看下代码实现),同时对于半径内的negative 位置,以positive位置为中心,通过非正则高斯减少惩罚,然后通过focal loss计算损失,公式为:
偏置:由于降采样使得输出图像小于输入图像,在进行remap时会出现信息缺失,因此在remap到输入大小之前调整角的位置,其中所有类的左上角共享同一偏置。
embedding:对每个检测到角点预测一个embedding向量,根据两个embedding之间的距离确定两个角点是否属于同一个框,提出‘pull’损失和‘push’损失,其中pull损失近似为方差,使波动更小吧,push损失是让同一类中的角点尽可能的远。
详细模型如图:
实验:
训练过程用pytorch默认的初始化方式,无预训练模型
结果:
同时论文中还做了一些融合实验,说明了角pooling的作用,以及左上,右下pooling不同象限计算的差异,已经融合三个任务的结果。三个任务结果更好,可能时多任务带来了一定提升。
Titan X(pascal)GPU上的检测速度为244ms。