CornerNet: Detecting Objects as Paired Keypoints 论文阅读
论文链接:https://arxiv.org/abs/1808.01244 (ppt私信我)
代码链接:https://github.com/umich-vl/CornerNet
Abstract(摘要)
本文提出一种新的目标检测的方法,使用单个卷积神经网络将目标边界框检测为一对关键点(即边界点)。通过将目标检测为成对关键点,我们消除了现有的one stage检测器设计中对一组anchors的需要。文章还引入了Corner pooling,一种新型的池化层,可以帮助网络更好的定位边界框的角。目前本网络效果优于所有现有的one stage目标检测网络。
Introduction(介绍)
目前成熟的且效果好的卷积神经网络大多是采用anchor boxes,他们是包含各种尺寸和宽高比的矩形框,用作检测的候选框。
anchor boxes的两个缺点:
- 需要选取大量的anchor boxes来保证有足够的与gt满足overlap阈值的anchor box。因为anchor box数量大,这在正负样本之间造成了巨大的不平衡,减慢了训练速度。
- anchor boxes的使用引入了许多的超参与设计选择。这些包括多少个box,大小和宽高比。这些选择影响到模型的训练和推断速率。
本文中的CornerNet,一种新的one stage目标检测方法,可消除anchor boxes。具体将一个目标物体检测为一对关键点–边界框的左上角和右下角。使用单一卷积模型来生成热点图(heatmap)和连接矢量(embedding vector)。
Hourglass Design as Backbone
引用文章:(本文使用全卷积网络解决人体姿态分析问题。)
Newell, A., Yang, K., Deng, J.: Stacked Hourglass Networks for Human Pose Estimation
捕捉不同尺度下图片所包含的信息。局部信息,对于比如脸部、手部等等特征很有必要,而最终的姿态估计需要对整体人体一致理解. 不同尺度下,可能包含了很多有用信息,比如人体的方位、肢体的动作、相邻关节点的关系等等。
Stacked Hourglass Networks输出heatmaps的集合,每一个heatmap表征了关节点在每个像素点存在的概率.
上图中的每种白框为一个residual模块。
Residual Module
卷积分支:由三个核尺度不同的卷积层(白色)串联而成,中间穿插BatchNormalization(浅蓝)和ReLU(浅紫);
跳级分支:只包含一个核尺度为1的卷积层;如果跳级路的输入输出通道数相同,则这一路为单位映射。所有卷积层的步长为1,pading为1,不改变数据尺寸,只对数据深度(channel)进行变更。Residual Module由两个参数控制:输入深度M和输出深度N。可以对任意尺寸图像操作。
作用:Residual模块提取了较高层次的特征(卷积分支),同时保留了原有层次的信息(跳级分支)。不改变数据尺寸,只改变数据深度。可以把它看做一个保尺寸的高级“卷积”层。
Multi-task training
Corner Pooling
若需要决定feature map上的一个点是否为Corner,我们需要从行和列分别检查。例如,为了得到top-left:
1.从下到上做max pooling
2.从右到左做max pooling
3.然后合并(相加)
因此在Backbone后接上两个分支分别进行top-left pooling 与 bottom-right pooling。
Associative Embedding Method
这个部分决定一对corner是否来自于同一object。具体的做法是对卷积特征进行embedding(1*1的conv),得到corner的embedding向量。
通过计算
L
p
u
l
l
L_{pull}
Lpull与
L
p
u
s
h
L_{push}
Lpush来保障相同物体两个点的embedding vector足够近而不同物体的vector足够远。
L
p
u
l
l
L_{pull}
Lpull损失函数使是同一目标的顶点进行分组。
L
p
u
s
h
L_{push}
Lpush损失函数用于分离不同目标的顶点。
Heatmap Prediction
网络预测两部分的heatmaps,top-left and bottom-right,每个部分heatmaps的大小都是C x H x W,C是类别的数量(无背景)。每个channel大小都是H x W。每个通道都是一个二进制掩码,用于表示该类的角点位置。
对于每个角点,有一个ground-truth正位置,其他所有的位置都是负值。 在训练期间,我们没有同等地惩罚负位置,而是减少对正位置半径内的负位置给予的惩罚。 这是因为如果一对假角点检测器靠近它们各自的ground-truth位置,它仍然可以产生一个与ground-truth充分重叠的边界框。
P
c
i
j
P_{cij}
Pcij为预测热图中
c
c
c类位置
(
i
,
j
)
(i,j)
(i,j)得分,
y
c
i
j
y_{cij}
ycij为用非标准化高斯增强的“ground-truth”热图。
其中N是图像中目标的数量,
α
α
α和
β
β
β是控制每个点的贡献的超参数(在所有实验中我们将α设置为2,β设置为4)。利用
y
c
i
j
y_{cij}
ycij中编码的高斯凸点,(1−
y
c
i
j
y_{cij}
ycij)项减少了ground-truth周围的惩罚。
location Offset Prediction
涉及下采样层以收集全局信息和减少内存使用。 当它们完全卷积应用于图像时,输出的尺寸通常小于图像。 因此,图像中的位置(x,y)被映射到热图中的位置([xn],[yn]),其中n是下采样因子。当我们将热图中的位置重新映射到输入图像时,可能会丢失一些精度,这会极大地影响小边界框与ground-truth之间的IoU。 为了解决这个问题,我们预测位置偏移,以稍微调整角位置,然后再将它们重新映射到输入分辨率。
Experiments
我们在PyTorch中实现了CornerNet。网络是在默认的PyTorch设置下随机初始化的,没有在任何外部数据集上进行预训练。当我们应用focal loss时,我们遵循来设置卷积层中的偏差来预测角点热图。在训练期间,我们设置了网络的输入分辨率511×511,导致输出分辨率为128×128。为了减少过拟合,我们采用了标准的数据增强技术,包括随机水平翻转、随机缩放、随机裁剪和随机色彩抖动,其中包括调整图像的亮度,饱和度和对比度。 最后,我们将PCA[20]应用于输入图像。
其中
α
α
α,
β
β
β和
γ
γ
γ分别是pull,push和offset的权重。 我们将
α
α
α和
β
β
β都设置为0.1,将
γ
γ
γ设置为1。我们发现,1和更大的
α
α
α和
β
β
β值会导致性能不佳。 我们使用49的batch size,并在10个Titan X(PASCAL)GPU上训练网络(主GPU 4个图像,其余GPU每个GPU 5个图像)。 为了节省GPU资源,在我们的 ablation experiments(即模型简化测试,去掉该结构的网络与加上该结构的网络所得到的结果进行对比)中,我们训练网络,进行250 k次迭代,学习率为
2.5
×
1
0
−
4
2.5×10^{−4}
2.5×10−4。当我们将我们的结果与其他检测器进行比较时,我们额外训练网络,进行250 k次迭代,并到最后50 k次迭代时,将学习速率降低到
2.5
×
1
0
−
5
2.5×10^{−5}
2.5×10−5。
Related:
1.https://blog.youkuaiyun.com/weixin_40414267/article/details/82379793
2.https://blog.youkuaiyun.com/zziahgf/article/details/72732220
3.https://blog.youkuaiyun.com/shenxiaolu1984/article/details/51428392