极简笔记 CornerNet: Detecting Objects as Paired Keypoints

极简笔记 CornerNet: Detecting Objects as Paired Keypoints

论文地址:https://arxiv.org/abs/1808.01244

文章核心提出利用关键点定位方式定位物体bbox的左上角点和右下角点,从而完全摆脱利用anchor提取proposal的two stage检测框架。
极简笔记 CornerNet: Detecting Objects as Paired Keypoints_第1张图片
文章使用网络结构如图所示,首先使用hourglass作为backbone,之后分成两个分支,一个预测左上角点(C个类别有C个channel),一个预测右下角点。每个分支里面先做corner pooling,之后再分三个分支分别预测heatmap,embedding map和一个offset。

为了方便计算bbox角点,文章提出corner pooling计算。以左上角点分支计算为例,corner pooling分为2个channel,第一个channel每个像素取该行右侧像素的最大值,第二个channel每个像素取该列下方像素的最大值。右下角点分支的corner pooling也类似,只是改成了左侧和上方。之后将两个channel逐像素求和,要求得到的最大值位置为角点位置。(个人想法,corner pooling的前置条件是能够学得instance上下左右四个极点,之后才能够利用corner pooling求得角点)
极简笔记 CornerNet: Detecting Objects as Paired Keypoints_第2张图片
在计算heatmap的时候,文章希望当预测坐标在gt坐标的一个与instance尺寸相关的半径范围内时能够减少penalty,这个半径选取的条件是在这个范围内与gt的IoU大于0.7,然后gt的高斯分布的方差取半径1/3,利用改进的focal loss计算检测误差 Ldet L d e t

embedding map是用来计算左上角点和右下角点匹配程度的。文章计算pull & push loss( Lpull L p u l l , Lpush L p u s h )来保障相同物体两个点的embedding vector足够近而不同物体的vector足够远(loss具体见原文)

由于在计算heatmap的过程中会存在下采样过程,因此当坐标重新映射回原图尺寸时需要一个微量offset(记作 o o )来保障回归的精确:

o=(xnxn,ynyn) o = ( x n − ⌊ x n ⌋ , y n − ⌊ y n ⌋ )

Loff=1Nk=1NSmoothL1Loss(ok,o^k) L o f f = 1 N ∑ k = 1 N S m o o t h L 1 L o s s ( o k , o ^ k )

最终的loss函数, α,β α , β 取0.1, γ γ 取1:

L=Ldet+αLpull+βLpush+γLoff L = L d e t + α L p u l l + β L p u s h + γ L o f f

贴一张实验对比(似乎有些过时,因为MSCOCO官网上AP最高已经到50左右了)
极简笔记 CornerNet: Detecting Objects as Paired Keypoints_第3张图片

你可能感兴趣的:(极简笔记)