文章16
标签10
分类1

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融入到目标检测网络当中,并取得了很好的效果。

Cascade R-CNN模型总结

论文名称:Cascade R-CNN: Delving into High Quality Object Detection
论文地址:传送门

Introduction

众所周知,在目标检测中IoU的阈值越高,则样本质量就越好,但是一味的提升阈值会引发两个问题:

  1. 样本过少引起过拟合
  2. 在train和inference时使用不同的阈值会导致mismatch
    因此作者提出了一种multi-stage的网络,不断地提高阈值,在保证样本数量的情况下训练出高质量的检测器。

本文的出发点引人思考:在现阶段常用的两阶段目标检测任务当中,通常使用IoU(intersection over union)阈值来确定那些proposal是positive,哪些是negative,一般情况下,这个阈值$u=0.5$,然而0.5的阈值一定合适吗?很多情况下,即使阈值大于0.5,仍然会有很多close false positives,这就导致模型预测出很多噪声bounding box。

如上图所示,$©$和$(d)$分别为不同IoU阈值$u \in {0.5,0.6,0.7}$的情况下,localization和detection perfoemance的情况。如$©$表示不同IoU阈值下,输入proposal的IoU与输出的IoU之间的关系,可以看出,在输入输出IoU相近的情况下,有较好的效果;同时只有当proposal有较高质量时,detector才有较好的表现。

Related Works

作者还列举了一些相关的工作,如上图所示,$H_i$表示卷积,而$C$表示表示分类,$B$表示回归。对于Faster R-CNN,其使用RPN进行提取ROI,然后进行识别和回归;对于Iterative BBox则是通过三个级联的方式,但其三个阶段的阈值是相同的;对于Intergral Loss其设置三个不同的阈值,但各个部分是单独检测的,额米有利用到前面高质量的proposal。其实吧,作者仅仅是在$(b)$的基础上改动了下阈值,但是作者对这种改变做出了深刻的分析。

如上图所示,作者发现,在cascade r-cnn当中,经过不同stage的训练,IoU的质量确实有显著的提升,越靠后,其质量越高;同时我们在前面讲过,对于某一质量的IoU,经过网络之后其质量必然会有所提升,因此经过三个阶段的训练,可以得到高质量的detector。


经过对比,cascade R-CNN精度有了很大的提升,但是在速度上并没有慢多少。

Summary

其实本文最核心的思想就是:作者发现高质量的proposal可以产生更高质量的bounding box,同时还存在mismatch问题,因此将多个r-cnn连接起来,并且设置不同的阈值,将产生更高质量的detector。

Reference

  1. https://zhuanlan.zhihu.com/p/36095768