乐趣区

关于算法:CornerNet经典keypointbased方法通过定位角点进行目标检测-ECCV2018

论文提出了 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 的钻研拓展出新的角点指标检测。



如果本文对你有帮忙,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

退出移动版