论文提出了CornerNet,通过检测角点对的形式进行指标检测,与以后的SOTA检测模型有相当的性能。CornerNet借鉴人体姿势预计的办法,创始了指标检测畛域的一个新框架,前面很多论文都基于CorerNet的钻研拓展出新的角点指标检测
起源:晓飞的算法工程笔记 公众号
论文: CornerNet: Detecting Objects as Paired Keypoints
- 论文地址:https://arxiv.org/abs/1808.01244
- 论文代码:https://github.com/princeton-vl/CornerNet
Introduction
指标检测算法大都与anchor box脱不开关系,论文认为应用anchor box有两个毛病:1) 须要在特色图上平铺大量的anchor box防止漏检,但最初只应用很小一部分的anchor box,造成正负样本不均衡且拖慢训练。 2) anchor box的引入带来了额定的超参数和特地的网络设计,使得模型训练变简单。
基于下面的思考,论文提出了CornerNet,将指标检测定义为左上角点和右下角点的检测。网络结构如图1所示,通过卷积网络预测出左上角点和右下角点的热图,而后将两组热图组合输入预测框,彻底去除了anchor box的须要。论文通过试验也表明CornerNet与以后的支流算法有相当的性能,创始了指标检测的新范式。
CornerNet
Overview
CornerNet中通过检测指标的左上角点和右下角点进行指标检测,卷积网络预测两组热图(heatmap)来示意不同类别指标的角点地位,别离对应左上角点和右下角点。为了将左上角点和左下角点进行对应,为每个角点预测一个embedding向量,属于同一个指标的两个角点的间隔会十分小。另外还减少了偏移量(offset)的预测,对角点的地位进行小幅度的调整。
CornerNet的构造如图4所示,应用hourglass网络作为骨干网络,通过独立的两个预测模块输入两组后果,别离对应左上角点和右下角点,每个预测模块通过corner池化输入用于最终预测的热图、embedding向量和偏移。
Detecting Corners
预测的热图的大小为$C\times H\times W$,$C$为类别数量,不蕴含背景类。每个GT的角点仅对应一个正样本点,其它的点均为负样本点,但在训练时不会等同地惩办负样本点,而是缩小正样本点半径内的负样本点的惩办力度。这样做的起因次要在于,凑近正样本点的负样本点可能产生有足够高IoU的预测框,如图5所示。
半径的大小依据指标的大小来设定,保障产生的预测框能至多满足IoU大于$t$。在设定半径后,依据二维高斯核$e^{-\frac{x^2+y^2}{2\sigma^2}}$进行惩办衰减,$x$和$y$为绝对正样本点的间隔,$\sigma$为半径的1/3。定义$p_{cij}$为地位$(i,j)$对于类别$c$的预测分数,$y_{cij}$为依据高斯核得出的分数,论文设计了一个focal loss的变种:
因为池化层的存在,原图地位$(x,y)$在特色图上通常会被映射到$(\lfloor\frac{x}{n}\rfloor, \lfloor\frac{y}{n}\rfloor)$,$n$为下采样因子。在将热图中的点映射回原图时,因为池化的起因可能会有精度的损失,这会极大地影响小指标的IoU计算。为了解决这个问题,论文提出了偏移预测,在将热图地位映射到原图前,小幅调整角点的地位:
$o_k$为偏移值,$x$和$y$为角点$k$的坐标。须要留神的是,网络对左上角点和右下角点别离预测一组偏移值,偏移值在类别间共用。在训练时,对正样本点增加smooth L1损失来训练角点的偏移值:
Grouping Corners
当图片中存在多个指标时,须要辨别预测的左上角点和右下角点的对应关系,而后组成残缺的预测框。这里论文参考了人体姿势预计的策略,每个角点预测一个一维的embedding向量,依据向量间的间隔进行对应关系的判断。定义$e_{t_k}$指标$k$左上角点的embedding向量,$e_{b_k}$为右下角的embedding向量,应用pull损失和push损失来别离组合以及拆散角点:
$e_k$为$e_{t_k}$和$e_{b_k}$的平均值,$\Delta=1$,这里的pull损失和push损失跟偏移一样,仅对正样本点应用。
Corner Pooling
角点的地位个别都没有指标信息,为了判断像素是否为左上角点,须要向右程度查找指标的最高点以及向下垂直查找指标的最左点。基于这样的先验常识,论文提出corner pooling来定位角点。
假如须要确定地位$(i,j)$是否为左上角点,首先定义$f_t$和$f_l$为左上corner pooling的输出特色图,$f_{t_{i,j}}$和$f_{l_{i,j}}$为输出特色图在地位$(i,j)$上的特征向量。特色图大小为$H\times W$,corner pooling首先对$f_t$中$(i,j)$到$(i,H)$的特征向量进行最大池化输入向量$t_{ij}$,同样对$f_l$中$(i,j)$到$(W,j)$的特征向量也进行最大池化输入向量$l_{ij}$,最初将$t_{ij}$和$l_{ij}$相加。残缺的计算可示意为:
公式6和公式7采纳element-wise最大池化。
在实现时,公式6和公式7能够如图6那样进行整张特色图的高效计算,有点相似动静布局。对于左上角点的corner pooling,对输出特色图别离进行从右往左和从下往上的事后计算,每个地位只须要跟上一个地位的输入进行element-wise最大池化即可,最初间接将两个特色图相加即可。
残缺的预测模块构造如图7所示,实际上是个改进版residual block,将$3\times 3$卷积模块替换为corner pooling模块,最初输入热图、embedding向量和偏移。
Hourglass Network
CornerNet应用hourglass网络作为骨干网络,这是用于人体姿势预计工作中的网络。Hourglass模块如图3所示,先对下采样特色,而后再上采样复原,同时退出多个短路连贯来保障复原特色的细节。论文采纳的hourglass网络蕴含两个hourglass模块,并做了以下改良:
- 替换负责下采样的最大池化层为stride=2的卷积
- 共下采样五次并逐渐减少维度(256, 384, 384, 384, 512)
- 上采样应用两个residual模块+最近邻上采样
- 短路连贯蕴含2个residual模块
- 在网络的结尾,应用4个stride=2、channel=128的$7\times 7$卷积模块以及1个stride=2、channel=256维度的residual模块进行解决
- 原版的hourglass网络会对每个hourglass模块增加一个损失函数进行有监督学习,而论文发现这对性能有影响,没有采纳这种办法
Experiments
比照corner pooling的成果。
比照负样本点惩办衰减的成果。
比照hourglass网络与corner检测搭配的成果
对比热图和偏移预测的成果。
与其它各种类型的检测网络进行比照。
CONCLUSION
论文提出了CornerNet,通过检测角点对的形式进行指标检测,与以后的SOTA检测模型有相当的性能。CornerNet借鉴人体姿势预计的办法,创始了指标检测畛域的一个新框架,前面很多论文都基于CorerNet的钻研拓展出新的角点指标检测。
如果本文对你有帮忙,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】