文章14
标签9
分类1

CornetNet && CenterNet && RepPoints 模型总结

CornerNet

论文名称:CornerNet: Detecting Objects as Paired Keypoints
论文地址:传送门

Introduction

CornerNet最大的创新在于其突破了anchor的限制,使用两个点来表示物体的bounding box,并提出了corner pooling,且取得了不错的效果。

其指出基于anchor的one-stage detectors通常需要大量的anchor,但最终只提取极少数的box,且导致参数多,计算量大,而其仅通过一个物体的top-left和bottom-right 两个点来确定物体的位置,且不需要各种scale(但事实上其训练速度、测试速度也非常慢)。

在COCO数据集上其达到了42.2%的mAP。

Network

CornerNet采用的backbone为hourglass network(HN),HN的主要特点是重复的bottom-up、top-down操作,使得不同层之间的信息相互融合。
Hourglass Module

如图所示,在一张图片经过ConvNet之后,其分别进入两个分支的网络,其分别预测物体的左上角和右下角,然后通过group corner将同一个物体的corner连接起来,接着还设置了一个offset 网络,对预测点进行offset。

CornerNet

在进行角点检测的过程中,每一个分支都将产生$C$个heatmaps,其中$C$代表物体的类别数,每个heatmap的大小都是$H \times W$。
对于每一个角,其都只有一个ground truth,但靠近此点的prediction也能产生一个近似的预测,因此不能简单地将其归为negtive。为此本文对每个ground truth点设置了一个半径,半径内的即被认为是positive。而半径设置时需要满足半径内的点组成的box与gt box之间的IoU达到某个阈值(本文为0.3)。

由于heatmap较小,在映射回去之后会产生较大的误差,因此本文对每个点都设计了一个offset,使得映射回去的点进行一个修正。如下式中,$o_k$即为offset。
$$o_k = (\frac{x_k}{n}-[\frac{x_k}{n}],\frac{y_k}{n}-[\frac{y_k}{n}])$$
为此本文采用Smooth L1 Loss来定义offset loss。
$$L_{off}=\frac{1}{N} \sum_{k=1}^N SmoothL1Loss(o_k,\hat{o}_k)$$

由于作者在前面采用两张heatmap分别预测两个角点,因此需要将两者进行配对(Grouping Corners),在这里作者主要采用了Associative Embedding的思想。在AE中,作者定义了group loss,即$L_g$,其前半部分是将同一个人体的点pull在一起,后半部分是将不同的人的点push出去,从而使得同一个人的点具有相同的tag,不同人的点具有不同的tag,即同时实现了检测和分组,而不像传统的方法分两个阶段来解决。
Associative Embedding

本文中作者指出,对于同一个box的顶点距离也比较近,也可以采用Associative Embedding来实现点的分组。因此定义了$L_{pull}$和$L_{push}$,分别用来将top-left corner和bottom-right corner pull在一起、push awy。其中$e_k$是两个点的平均值,$\Delta$设置为1。
$$L_{pull} = \frac{1}{N} [(e_{tk}-e_k)^2+(e_{bk}-e_k)^2]$$
$$L_{push}=\frac{1}{N(N-1)} \sum_{k=1}^N \sum_{j=1,j \neq k}^N max(0, \Delta-|e_k-e_j|)$$

其实就是在训练时为每个corner分配一个embeddding vector,然后使用Associative Embedding,根据点之间的距离进行grouping。

Corner Pooling

Corner Pooling

一般情况下,物体的角点不会在物体上,我们在寻找物体的角点时,如左上角,一般会先向右看,找到最靠左的点,然后向下看,找到最靠上的点,那么这两个值组成的点便是左上角点;右下角同理。
具体来说,对于点$(i,j)$,我们对$(i,j)$到$(i,H)$之间所有的点进行maxpool,将结果赋予$t_{ij}$,同理对水平方向也这样进行。

Corner Pool

其示意图如下所示。

Detection Module

即经过backbone之后有三个分支,一个类似于residual connection,另外两个负责预测top-left corner,接着进行corner pooling,接着对pool之后的特征图连接,然后分为三个部分,分别预测heatmaps、Embeddings、Offsets,最后以一个multi-task loss进行优化。
$$L = L_{det}+ \alpha L_{pull} + \beta L_{push} + \gamma L_{off}$$

CenterNet

论文名称:Objects as Points
论文地址:传送门

Introduction

目标检测当中通常使用bounding box来定位object,目前流行的detector也是基于这种方法:产生大量的可能存在目标的box,这显然是wasteful,inefficient。而本文使用一个中心点来表示物体,使用keypoint estimation对尺寸、3D location、orientation、pose等进行点回归。在COCO数据集上达到28.1% AP时有142 FPS,37.4%时有52 FPS,45.1%时有1.4FPS。

本文模型的流程十分简单:将影像送入全卷积网络当中,产生一个heatmap,heatmap中的peaks即为目标的中心点。

在测试时并不需要NMS,因为CenterNet并不需要阈值来区分正样本和负样本,只需要根据heatmap的peaks来确定正样本即可:一个目标仅有一个positive,并不需要选出若干anchor。

同时CenterNet使用了一个较大的output(反卷积实现的),因此并不需要多尺度anchor。

事实上CornerNet和ExtremeNet都是对点进行检测,但他们都需要对点进行配对,而CenterNet并不需要这个过程。

Preliminary

输入:$I \in R^{W \times H \times 3}$
输出:$\hat{Y} \in [0,1]^{\frac{W}{H} \times \frac{W}{H} \times C}$
其中$C$代表关键点的类型,如人体姿态检测$C=17$,COCO目标检测类别$C=80$

Ground Truth: 使用高斯分布将keypoints展开成heatmap。

Keypoints Loss:Focal Loss

Offset Loss: $\hat{O} \in R^{\frac{W}{H} \times \frac{W}{H} \times 2}$

Size Loss: $s_k = (x_2^{(k)}-x_1^{(k)},y_2^{(k)}-y_1^{(k)})$,$\hat{S} \in R^{\frac{W}{H} \times \frac{W}{H} \times 2}$

则总的Loss: $L_{det}=L_k+\lambda_{size}L_{size}+\lambda_{off}L_{off}$

网络在每个位置输出$C+4$个值,其中$C$为关键点类型数,4表示2个size,2个offset,而每个点的location是根据heatmap的peaks得出的。

在网络经过不同的backbone(Resnet、Hourglass、DLA)之后,经过一个$3 \times 3$卷积、Relu、$1 \times 1$卷积。
不同的backbone

从点到bounding box:
$$(\hat{x}_i+\delta \hat{x}_i - \hat{w}_i/2,\hat{y}_i+\delta \hat{y}_i - \hat{h}_i/2,\hat{x}_i+\delta \hat{x}_i + \hat{w}_i/2,\hat{y}_i+\delta \hat{y}_i + \hat{h}_i/2)$$
其中$(\delta \hat{x}_i,\delta \hat{y}_i)$为offset

Summary

虽然CornerNet在论文里argue物体的中心点并不好找,但CenterNet并不需要Associate Embedding的过程,因此效率会更高。我觉得其最具创新的是:将每个物体定义为一个点,接着对于不同的任务,将中心点向不同的方向regression。

本文作者:AI之歌
本文链接:https://lovesmg.cn/2019/10/30/cornernet/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可

转载请附原文链接