文章17
标签11
分类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。

Mask R-CNN模型总结

论文名称:Mask R-CNN
论文地址:传送门

Introduction

本以为这篇文章是众多R-CNN系列的一个,然而看到作者是kaiming和Ross Girshick,再看知乎上各种“劝退目标检测”,足以见得这篇文章的重要性。事实上,Mask R-CNN确实成为这几年来的baseline。

我们知道目标检测的基本任务是localization和classification,而instance segmentation不仅需要detection,同时也要segmentation,也就是要完成localization、classification、segmentation三项任务。由于其任务复杂,以往的instance segmentation系统也趋向于复杂化。而Mask R-CNN则通过向Faster R-CNN添加一个branch,实现了在detection的同时,完成segmentation的任务。作者指出,在没有使用任何trick的情况下,Mask R-CNN在检测和分割都达到了较好的效果。

同时作者还提出了ROIAlign,用来解决ROIPooling在运算时存在的定位误差。

ROIAlign

本文较为重要的一个概念就是ROIAlign了,但文中并没有清晰的介绍ROIAlign是怎么来的。
ROIPooling存在的问题:两次量化的误差。

  1. 首先Region Proposal中的坐标是通过回归得到的,一般都是浮点数,如$(cx,cy,w,h)$均是相对于图像长宽的值(范围均是$[0,1]$),同时此时的特征图一般都是较小的(如$[\frac{1}{16}w,\frac{1}{16}h]$),此时若在特征图上取ROI的话,得到的相对坐标也是浮点值,必须进行取整,从而产生误差。
  2. 其次ROIPooling将一个不同尺寸的Proposal变换到固定的尺寸(如$7 \times 7$),那么此时对Proposal进行划分时所产生的浮点数坐标也要进行取整,因此又产生一个误差。

这些误差在特征图上看似无关紧要,但如果将一个$[\frac{1}{16}w,\frac{1}{16}h]$的特征图映射回去,那么误差将放大16倍,这对小目标的检测是十分重要的。

那么ROIAlign做了什么事呢?其实就是将这些取整的操作用双线性插值代替,从而减小误差。

  1. 在通过回归或者RPN得到坐标后,并不进行取值,保留浮点坐标
  2. 将Region Proposal划分为$k \times k$个bin,对于每个bin,计算若干中心点的的像素值,取均值或最大值,得到大小为$k \times k$的特征图。
    其中对于每个bin,若只计算1个像素值,则对这个bin的中心点坐标进行双线性插值,得到其像素值;若计算4个像素值,则对这个bin划分为4个区域,取各区域的中心,并通过插值计算其像素值,然后取Mean或者Max。
    ROIAlign

对于ROIPooling,有公式:
$$y_{rj}=x_{i^(r,j)}$$
即$y_{rj}$是从$x_{i^
(r,j)}$中的最大值中得到的(MaxPool)

其梯度传播如下:
$$\frac{\partial{L}}{\partial{x_i}}=\sum_r \sum_j[i=i^(r,j)]\frac{\partial L}{\partial y_{rj}}$$
即L对x的梯度仅取决于其取到的那个像素值$x_{i^
(r,j)}$

对于ROIAlign,其梯度公式如下:
$$\frac{\partial L}{\partial x_i}\sum_r \sum_j [d(i,i^*(r,j))<1](1-\Delta h)(1- \Delta w)\frac{\partial L}{\partial y_{rj}}$$
即在ROIPooling的基础上,在半径为1的范围内,考虑参与插值的多个点贡献的梯度值,并以距离作为梯度传回大小的衡量。

Mask R-CNN

Mask R-CNN

Mask R-CNN基本上就是在box regression和classification上添加了一个并行的segmentation。segmentation部分已经比较常见,通过对特征图反卷积,产生更大的特征图,即本文中的Mask。

但重要的是,Mask R-CNN将detecction和segmentation结合起来,且实现方式十分的简单。在计算$L_{mask}$时,仅计算第$K$个mask产生的Loss,其中$K$为此box所包含物体的类别;在预测的时候,$K$为分类网络预测出的类别。

基于此,作者设计了两中结构,左侧为一般的Faster R-CNN,右侧为加入FPN的Faster R-CNN。

Summary

Mask R-CNN在detection领域并不算的多么重大的突破,但在实践过程中发现其收敛速度快,训练效果好,被工业界推崇。其提出的RIOAlign也算是对ROIPooling的一个改进,会逐渐的被采用。将Detection和Segmentation结合 起来进行Instance Segementaion,对IS来说是一个很大啊的突破。

GHM总结

论文名称:Gradient Harmonized Single-stage Detector
论文地址:传送门

Introduction

single-stage detector虽然面临着训练时的不协调,如正样本和负样本、易分类目标和难分类目标之间质量的巨大差异,但其不失为一种优雅且有效的方法。
在本文中,作者将这种不协调性归结到梯度问题,并提出了一种梯度协调机制(Gradient Harmonizing Mechanism,GHM)来解决这种不协调。GHM可以与分类和回归Loss function相结合,如Cross Entropy、Smooth L1 Loss。

我们知道在one-stage方法的训练过程中,最大的挑战就是正样本和负样本、易分类目标和难分类目标之间的不平衡性,大量易分类的背景样本使得模型并不能学习到目标的真正特征。如果一个目标很容易区分,那么模型并不能从中受益。

梯度范数等效于梯度的大小,范数越大,则梯度就较大。作者通过对梯度范数的分析,发现梯度范数较小时聚集了大量的样本,而这些样本即代表易分类的样本,它们对模型的训练并没有太大的帮助;同时我们还发现有许多梯度范数及其大的样本,他们对目标的分类也没有太大的作用。

因此如果能够对梯度范数十分小的样本和十分大的样本(异常值,outliers)down-weight,那么每个样本的贡献都是均衡的。

Gradient Harmonizing Mechanism

对于二分类问题的Loss函数:Cross Entropy
$$L_{CE}(p,p^)=\begin{cases}
-log§ && if \quad p^
=1 \
-log(1-p) && if \quad p^*=0
\end{cases}$$

假设$p=sigmoid(x)$,那么:
$$\frac{\partial L_{CE}}{\partial x}=\begin{cases}
p-1 && if \quad p^=1 \
p && if \quad p^
=0
\end{cases}
=p-p^*
$$

接着我们定义$g$:
$$g = |p-p^|=\begin{cases}
1-p && if \quad p^
=1 \
p && if \quad p^*=0
\end{cases}$$

Gradient Dentisy

$$GD(g)=\frac{1}{l_{\epsilon}(g)}=\sum_{k=1}^N\delta_{\epsilon}(g_k,g)$$
$$\delta(x,y)=\begin{cases}
1 && if \quad y-\frac{\epsilon}{2} <= x < y+ \frac{\epsilon}{2} \
0 && otherwise
\end{cases}$$
$$
l_{\epsilon}(g)=min(g+\frac{\epsilon}{2},1)-max(g-\frac{\epsilon}{2},0)
$$
接着定义梯度密度协调参数$\beta_i=\frac{N}{GD(g_i)}$,其中N是样本总数。

GHM-C Loss

将GHM加入到分类Loss当中:
$$L_{GHM-C}=\frac{1}{N} \sum_{i=1}^{N}\beta_i L_{CE}(p_i,p^)
\= \sum_{i=1}^N \frac{L_{CE}(p_i,p^
)}{GD(g_i)}
$$
GHM-C Loss

GHM-R Loss

在回归当中使用的L1 Loss:
$$L_{reg}=\sum_{i \in {x,y,w,h}}SL_1(t_i-t_i^*)$$

Experiments

RetinaNet模型总结

论文名称:Focal Loss for Dense Object Detection
论文地址:传送门

Introduction

目前在目标检测领域,two-stage detector(如R-CNN系列)通常能取得较好的精度,但速度较慢;而one-stage detector(如SSD、YOLO)通常速度比较快,但精度会较低。如何保持检测速度的同时,能够提高one-stage检测精度,作者指出类别不平衡性是主要原因,因此作者提出了Focal Loss来解决类别不平衡问题,使本文提出的RetinaNet也能实现较高的精度。
类别不平衡性通常会导致两个问题:

  1. 许多易分类的负样本对训练没有什么贡献,导致训练较为低效。
  2. 这些Negetive的样本影响模型的训练,导致模型整体学习方向偏离。

而在two-stage detector中,通常有两种解决方案:

  1. 使用两个阶段进行递归(cascade)。在多阶段cascade时,可以逐渐筛去easy negetives,使得样本之间平衡。
  2. 选择mnibatch时,有针对的选择正负样本。如正:负=1:3。

Focal Loss

为了解决正负样本间的极度不平衡性,作者提出了Focal Loss。

通常情况下,对于两分类问题我们使用Cross Entropy Loss,即:
$$CE(p,y)=\begin{cases}
-log§, & \mbox{if } \quad y = 1 \
-log(1-p), & otherwise.
\end{cases}$$
其中y为Ground truth label,$p \in [0,1]$为预测结果,为了方便描述,CE也可以表示为:
$$p_t=\begin{cases}
p & \mbox{if} \quad y=1\
1-p & otherwise
\end{cases}
$$
此时有$CE(p,y)=CE(p_t)=-log(p_t)$,对应下图曲线上的蓝色曲线。可以看到,即使$p \ge 0.8$,仍有很大的loss。
这种损失的一个显着特征是,即使很容易分类(pt≫ .5)的例子,其损失也具有不小的幅度。 如果将大量简单的例子相加,这些小的损耗值可能会导致错误的类别。

为了解决这个问题,作者提出了Balanced Cross Entropy,即:
$$CE(p_t)=- \alpha_t log(p_t)$$

为了降低易分类目标(easy examples)的权重,使模型在训练时更加专注于难分类样本(hard exmaples),作者提出了Focal Loss,不同$\gamma$对应的图像如上图所示。
$$FL(p_t)=-(1-p_t)^{\gamma}log(p_t)$$

使用Focal Loss之后,大量易分的negtives的loss就减小了,从而使模型更加专注于难以区分的目标。

Focal Loss还有另一种形式:
$$FL(p_t)=-\alpha_t(1-p_t)^{\gamma}log(p_t)$$
本文实验采用的即时此种形式。

RetinaNet Detector

RetinaNet

  1. ReNet作为backbone
  2. 采用FPN(Feature Pyramid Network)进行不同scale的采样。
  3. 对于每个scale level,都有一个class net和box net。
  4. 将最终预测的anchor进行merge,使用NMS进行筛选。

其中,FPN使用的的是$P_3$到$P_7$,$P_3 \dots P_5 \rightarrow C_3 \dots C_5$,而$P_6$是对$C_5$进行卷积得到的,$P_7$是通过对$C_6$卷积得到的。

对于每个level,不仅仅是从$32^2$到$512^2$的大小,还有${2^0,2^{1/3},2^{2/3}}$三个尺寸,每个尺寸都有三个ratio:${1:2,1:1,2:1}$,即每个level都有9个anchor box。对于每个anchor box,都单独预测K个class,即总共需要$KA$个值。

对于box net,则简单的预测$4A$个值,对应着A个anchor box的坐标。

FPN(Feature Pyramid Networks for object detection)总结

论文题目:Feature Pyramid Networks for Object Detection
论文地址:传送门

Introduction

在传统的手工提取特征里,金字塔模型用于提取层次化的特征,然而在深度学习里基本上抛弃了这种方式,而FPN(Feature Pyramid Networks)则将金字塔模型融入到深度神经网络当中,从而 在目标检测时取得了显著的提升。

作者展示了四种常见的金字塔模型。(a)即对于不同尺度的影像计算特征,比较慢。(b)即Fast R-CNN等采用的方式,仅利用最后一层特征。©即抽取不同层的特征,如SSD。(d)即本文的FPN所采用的方式。

Feature Pyramid Network

FPN

作者指出其目标为使用卷积网络从低到高的特征层构建特征金字塔模型。模型包含一个从低到顶(bottom-up)和从顶到低(top-down)的路径和一个侧边连接(lateral connection) 。

从底到顶即卷积网络一层层的提取特征,特征图逐渐变小,分辨率逐渐降低,语义信息逐渐变清晰;对于产生相同大小特征图的卷积层,作者将其称为同一阶段(stage);FPN将为每一个阶段(stage)定义一个Pyramid level,通常情况下,每一个level都将从stage的最后一层取出,因为最后一层具有最丰富的信息。
如对于$Resnet$,FPN将取其conv2、conv3、conv4、conv5定义为${C_2,C_3,C_4,C_5}$。

从顶到底和侧边连接:即如上图所示将顶层的特征upsampling后与底层的特征相连接,不断重复一直到最底层,从而构建新的特征金字塔。

如下图以Resnet为例,为了将FPN融入到Resnet当中,首先从${C_2,C_3,C_4,C_5}$中抽取特征,然后对$C_5$进行$3 \times 3$卷积后输出$P_5$;接着将$C_5$二倍upsampling,然后与$C_4$连接,再进行$3 \times 3$卷积得到$P_4$;以此类推得到$P_3,P_2$。

FPN示意图

Applications

首先作者将其应用到RPN(Region Proposal Network)上。

RPN结构示意
对于这样一个RPN来说,在Faster R-CNN中是直接在VGG的conv4或conv5的后面接一个$1 \times 1$的卷积层,得到256维的输出,然后进行localization和classification。
但加入FPN时,作者将VGG中得到的${P_2,P_3,P_4,P_5}$与RPN相连。具体作法为:原本RPN直接输出9个anchor box坐标,但作者将其不同尺寸的anchor box分到不同的FPN层去处理。作者将anchor的大小定义为${32^2,64^2,128^2,256^2,512^2}$,对应着${P_2,P_3,P_4,P_5,P_6}$,$P_6$是特意为RPN加入的一个层;然后每个层都有三个不同的ratio:${1:2,1:1,2:1}$,即加入FPN的RPN在每个点上都有15个anchor box。
对于Fast R-CNN的部分:TODO

Summary

总结起来,FPN就是将传统的金字塔模型进行了调整,使其融入到卷积网络当中,提取不同层次的特征;同时将FPN融入到目标检测网络当中,并取得了很好的效果。