CornerNet: Detecting Objects as Paired Keypoints笔记 [ECCV 2018]

原作者:Hei Law, Jia Deng      笔记整理:ganyd 2020.9.16

如有错误或者不清楚之处,欢迎讨论,如需转载请注明出处

论文:https://arxiv.org/abs/1808.01244
代码:https://github.com/umich-vl/CornerNet

摘要

  1. 提出一种目标检测新方法,用检测目标框的左上和右下对角关键点替代直接定位目标框。使用单个的卷积神经网络就能完成这个任务。不再需要像single-stage检测器一样提前设计一组anchor boxes。
  2. 提出一种新的池化方法:corner pooling。
  3. 在MS COCO数据集上实验性能AP为42.2%,超过同时期的单步检测方法。

anchor boxes:不同尺寸和宽高比的box,在单步目标检测器中使用较多,针对不同数据集和场景提前设计好

 

[1]文章主要内容

目前大部分单步检测器使用anchor boxes

anchor boxes提高了检测速度,但是也有两个缺点:

  1. 为了提高性能,需要设计大量的anchor boxes使其中部分能与真实目标框重叠,尽量覆盖每个真实框,所以需要大量的anchor boxes,但最终只有几个anchor boxes成功与真实目标框重合。这造成了正负anchor boxes之间的巨大不平衡,降低了训练速度。
  2. 针对不同数据集和使用场景,一般需要设计不同的超参数,以确定anchor boxes的数量、尺寸、宽高比等。

本文检测成对的corner关键点取代anchor boxes设计

文章提出的方法,使用单个卷积神经网络来预测同一类别的所有object左上角热点图、右下角热点图和所有角点的embedding向量。这个embedding向量使属于同一个object的两个角点的距离最小。

embedding向量的性质是能使距离相近的向量对应的物体有相近的含义

cornerNet工作流程.png

本文提出corner pooling

  • corner pooling是一种新的池化层,用于定位bounding box的corner。

  • 实际使用中,bounding box的corner经常是超出目标之外的,所以不能直接定位corner。
    左上角corner:水平向右找最最顶部边界和垂直向下找最左边边界。同理得到右下角corner。

防止corner覆盖

  • heatmaps(热图)的尺寸是 W\times H\times C, 有C个通道,C是类别数量,为二值图像mask。

  • 对每个corner,只有一个是真实的正样本,其他都是负样本,我们对处于正样本一定半径范围内的负样本corner进行惩罚,按二维高斯分布递减,而不是所有的负样本都进行同样的惩罚。防止在真实标签周围检测到错误corner把真实corner覆盖了。

 

[2]网络设计

1.corner位置预测损失设计

p_{cij}表示在(i,j)位置通过heatmap预测为c类别的概率
y_{cij}表示对应位置,属于真实类别标签概率,这个概率是确定中心点为1,然后按照非归一化的高斯分布向周围扩散,概率降低。
则定义如下变种的focal loss:
if\:y_{cij}=1:
L_{det}=\frac{-1}{N}\sum_{c=1}^{C}\sum_{i=1}^{H}\sum_{c=1}^{W}{(1-p_{cij})^\alpha\log(p_{cij})}

otherwise:
L_{det}=\frac{-1}{N}\sum_{c=1}^{C}\sum_{i=1}^{H}\sum_{c=1}^{W}{(1-y_{cij})^\beta(p_{cij})^\alpha\log(1-p_{cij})}
其中,N是一张图像中目标数量
\alpha\beta是控制不同点损失权重的超参数(实验中\alpha=2 \beta=4

相比于原始的focal loss,作者在y_{cij}\not ={0}时,增加了(1-y_{cij})^\beta项,该项可以减少真实标签位置周围的损失,而且越靠近真实标签,这个损失越小。

 

focal loss:用于减少正负样本不平衡对损失计算的影响。比如本例中,非目标点比目标点多很多,即负样本比正样本多很多,用一般的损失计算方法,最后累计的损失较大,其他图像中正样本多些,累计的损失就小。而采用focal loss计算方法,会让真实正样本处被错误预测的程度越高,损失越大,负样本处同理。

 

2.通过预测location offset来解决下采样带来的位置坐标精度丢失问题

很多网络使用下采样层来获取全局信息,同时减少内存占用。对图像中的位置(x,y),映射到heatmaps中为([\frac{x}{n}],[\frac{y}{n}]),其中n是下采样因子。然而这时再从heatmaps映射回原图尺寸,存在预测精度丢失,影响IoU,特别是小目标的IoU。为了解决这个问题,文章还预测了位置偏移(location offsets)用于微调corner的位置。位置偏移计算如下:
O_k=(\frac{x_k}{n}-[\frac{x_k}{n}], \frac{y_k}{n}-[\frac{y_k}{n}])
其中,x_ky_k是第k个corner的xy坐标,这里直接用所有类别的左上角corner一次性预测一组偏移,再用右下角corner预测一组偏移。

offset预测损失设计(只计算真实角点处的损失)

L_{off}=\frac{1}{N}\sum_{k=1}^{N}SmoothL1Loss(o_k,\hat{o_k})

 
smoothL1 Loss
if\:|x|<1:SmoothL_1(x)=0.5x^2

otherwise:SmoothL_1(x)=|x|-0.5

smoothL1损失特点:当预测框与 ground truth 差别过大时,梯度值不至于过大;当预测框与 ground truth 差别很小时,梯度值足够小。

 

3.Embedding 向量

一张图像中多个目标的corner如何匹配对?文章对检测到的所有corner预测一个一维的Embedding向量,那么属于同一个object的左上角和右下角corner之间的Embedding距离就应该很小。所以用这个Embedding距离对corner进行配对。

预测Embedding向量设计的损失(只计算真实角点处的损失)

假设e_{t_k}表示第k个object的左上角corner的Embedding值;对应e_{b_k}表示右下角corner的。

L_{pull}=\frac{1}{N}\sum_{k=1}^{N}[(e_{t_k}-e_k)^2+(e_{b_k}-e_k)^2]
L_{push}=\frac{1}{N(N-1)}\sum_{k=1}^{N}\sum_{j=1,j\not=k}^{N}\max(0,\Delta-|e_k-e_j|)
其中,e_ke_ke_{t_k}的平均值,L_{pull}计算的是任何两个corner之间的正距离平均值。

\Delta表示什么?文中没有说到???点处的损

 

4.Corner Pooling

Corner Pooling从水平方向和垂直方向扫描,找目标的上边界和左边界,作为左上角corner;同理右边界和下边界作为右下角corner。

假设我们需要确定一个location(i,j)处的像素是不是左上角corner。
f_tf_l分别表示左上角Corner pooling之后的特征图,f_{t_{ij}}f_{l_{ij}}表示具体(i.j)位置上的特征值。对于左上角或者右下角的H \times W特征图,取行最大组成向量t_{ij},取列最大值组成向量l_{ij}
t_{ij}=max(f_{t_{ij}}, f_{t_{(i+1)j}})
l_{ij}=max(f_{l_{ij}}, f_{l_{i(j+1)}})
然后对t_{ij}l_{ij}逐个对应位置求和,得到最大值的位置就是corner。

 

5.backbone后的部分网络框架

点对目标检测框架.png

 

6.Hourglass Network(沙漏模型网络)

CornerNet的backbone是沙漏网络。

hourglass nerwork是全卷积神经网络,有一个或者多个hourglass module组成。一个hourglass module先把输入特征图通过一系列卷积层和最大池化层进行下采样,然后通过一系列的上采样回到原始分辨率。由于最大池化层下采样会丢失细节信息,所以通过skip layers来把细节信息带回到上采样特征。沙漏模型在一个统一的结构中同时获取全局特征和局部特征。

文章中的hourglass network由两个hourglass moudle组成,并对hourglass moudle进行了一些修改:
最大池化层步数改成2来减小分辨率。将特征分辨率降低5倍同时增加特征通道的数量。上采样的时候,应用两个残差块后面跟着最近邻上采样。每个skip连接也由两个残差块组成。

在应用沙漏模型之前,我们减少图像分辨率4次通过使用一个7x7,步长为2的128通道的卷积模块,后面着一个残差块。

实验

在MS COCO数据集上实验性能AP为42.2%,超过同时期的单步检测方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342