文章17
标签11
分类1

TridentNet总结

论文标题: Scale-Aware Trident Networks for Object Detection
论文地址: 传送门

Abstract

尺度差异(Scale variation)是目标检测的关键问题之一。本文对目标检测中关于尺度差异的有效感受野进行了调研,同时提出了TridentNet,它可以使用统一的表示方式产生尺度相关的特征图。
TridentNet采用了一种并行多分支结构,每个分支共享参数但是具有不同的感受野。然后采用了一种尺度相关训练策略,从而使每一个分支对合适的样本进行采样。同时,TridentNet还有fast版本,即多分支训练,仅采用单个分支测试,其精度损失很低但是速度有所提升。
在COCO上TridentNet+ResNet101达到了48.4 mAP。

Introduction

DCN在目标检测领域取得了巨大的成功,如one-stage的YOLO、SSD,two-stage的Faster R-CNN、R-FCN,然而尺度问题一直都是一个很严重的问题,尤其是对非常小或者非常大的目标。

为了解决尺度问题,最早的就是使用图像金字塔的形式,如SNIP(ER)提出了一种尺度归一化的方法,对每个尺度选择合适的输入影像,然而图像金字塔耗费时间太多了。

另一种方法就是构建网络内的特征金字塔,如SSD、FPN。然而这些不同尺度的特征来自不同的层中,使得其并不能取代图像金字塔。

这两种方法都是基于:不同尺度的物体有不同的感受野。尽管图像金字塔并不高效,但是其能够对所有尺度的物体平等的进行变换。相反,特征金字塔的不同尺度破坏了特征的连续性,这导致有效训练数据的减少和更高的过拟合风险。

本文的工作就是将两者的优点结合起来,使其能够高效的产生一种对所有尺度具有统一表示能力的特征。(即三个分支使用相同的参数,但是有不同的感受野,从而可以识别大小不同的物体;而FPN是不同的参数识别不同的物体,这样的话同一种物体是有不同的参数来识别的,并不统一)。在本文中,相比于输入多尺度的图像金字塔,我们提出了一种新的网络结构来处理多尺度。

实际上,我们通过Trident Block输出多尺度的尺度相关(scale-specific)特征图(图1c)。通过空洞卷积(dilated convolutions),不同的分支共享网络结构和网络参数,但是具有不同的感受野。

此外,为了防止训练无穷尺度的物体,我们采用了一种尺度相关的训练策略,使得每一个branch匹配特定的感受野。

最后,由于不同分支共享权重,因此在inference时可以只使用一个分支,这样精度并没有下降很多,但是速度有所提升。

Investigation of Receptive Field

backbone的许多因素可以影响检测器的效果:下采样率、网络深度、感受野。前两者已经有很多工作去证明:深层的网络、较小的下采样率可以提高检测的效果。但是很少有人单独地研究过感受野对检测器的影响。为了研究感受野对不同尺度物体检测的影响,我们使用空洞卷积替换了backbone的部分卷积层,并通过不同的dilation rate 控制感受野大小。

上表表明,随着感受野增大,小目标的检测效果在ResNet50和ResNet101上都有所下降。然而对于大的目标,随着感受野的增加,检测效果有所提升。这个实验可以说明:

  1. 不同尺度物体的检测效果与有效感受野有关。
  2. 尽管ResNet的感受野已经很大了,但是通过增加dilation rates,大物体的检测效果还可以有所提升。
    也就是说,和SSD、FPN一样,感受野对不同尺度目标的检测具有很重要的作用,通过控制感受野可以更加有效的检测目标。

Trident Network

TridentNet包括trident block和scale-aware 训练方法。

Network Structure

TridentNet的目标是利用控制感受野进行检测的策略,同时克服其缺点。其网络结构如下图。

TridentNet的大致结构是:图像通过backbone提取特征,接着送入三个并行的Trident block当中,然后每个block都单独输出检测结果,最后统一通过nms输出结果。其中每个trident block都是一些卷积层和dilation层组成,且三个block共享参数。

Multi-branch Block Trident Block其实就是将ResNet中的bottleneck进行修改,将一个branch改为3个branch,这三个branch共享参数,但是其中$3 \times 3$的conv层有不同的dilation rates,分别为1,2,3。一般情况下,Trident block仅在backbone的最后一层添加。

Weight sharing among branches 一般情况下,多分支参数有可能导致过拟合。但由于三个分支共享参数,所以并不会出现过拟合。

Scale-aware Training Scheme

TridentNet的不同分支产生具有不同感受野的特征图,根据前面对感受野的研究,不同感受野对不同尺度目标检测效果也不同,因此可以将不同尺度的目标分配在不同的特征图上。

与SNIP相似,TridentNet为每个分支$i$定义了一个一个有效区间$[l_i,u_i]$。在训练的过程中,我们只选择尺度合适的proposals和gts。对于一个$(w,h)$的图像,对它有效的branch $i$上有:
$$l_i \leq \sqrt{wh} \leq u_i$$
这个策略对RPN和R-CNN都有效,对于RPN,在anchor label assignment时s我们仅选择合适的gts,相同的,在R-CNN时也仅选择合适的proposals。

Inderence and Approximation

在inference时我们将所有branch的结果合并起来,然后通过nms或者soft-nms和并输出结果。

Fast Inference Approximation 由于TridentNet多分支的缘故,其Inferencee的速度较慢,因此提出了TridentNet Fast,即仅取三个Trident block中间的分支作为输出。同时发现,fast版本的精度并没有下降多少。这主要是由于权重共享策略,multi-branch相当于网络内的数据增强。

Experiments

训练数据:trainval35k
验证数据:minival
测试数据:testdev

Implementation Details

  • backbone是在ImageNet上预训练的,stem、first residual stage all BN 的参数被*冻结。
  • 输入图片尺度的短边缩放到800。Random horizontal flip is adopted during training。
  • batch size is 16 on 8 GPUs。
  • Models are trained in 12 epochs with learing rate from 0.02 and decreased by a factor of 0.1 after 8th and 10th epoch.
  • $2 \times $ or $3 \times$ 即2倍或者3倍训练epoch和learning rate schedules。
  • TridentNet中的每一个branch,top 12000/500 proposals被用在NMS前/后,然后采样128 ROIs for training。
  • dilation rates分别为1,2,3.
  • scale-aware scheme中有效区间为:$[0,90],[30,160],[90,∞]$

Ablation Studies

Component of TridentNet

Number of branches

Stage of Trident blocks

Number of trident blocks

Performance of each branch

Comparison with State-of-the-Arts

Compare with other scale handling methods

Summary

总体来说,TridentNet是一个simple but work的工作。

目前用的最多的FPN,其通过不断地卷积来调整感受野,实现在多层特征上的预测,利用更多的信息。但是FPN上不同的实例被分配到不同的层上,而不同层有不同的参数,这就导致同一个类别的物体是通过两个层上来预测的,并不是一种统一的表示,而图像金字塔如SNIP对图像进行简单的缩放即可达到很高的精度,说明了图像金字塔的优势。但图像金字塔的速度较慢。

作者通过对有效感受野的研究,发现不同的感受野适应于不同尺度的目标。因此很自然的想到通过控制感受野实现多尺度的预测,即利用空洞卷积,设置不同的dilation rates。

为了克服FPN的缺点,TridentNet的block共享权重,从而使得相同的参数,通过调整感受野,实现对不同尺度目标的检测,因此是一种更加统一的特征表示方式。

由于其共享参数的特点,其在预测时仅使用一个branch即可达到较好的效果。

Faster R-CNN细节详解

论文题目:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
论文地址:传送门

这学期刚开学的时候,重新读了遍R-CNN系列,但当时仍然是浅尝辄止,许多东西还不懂。这是当时写的R-CNN系列总结,基本就是照着论文翻译,但其实现细节也是很久之后才懂的。

最近在尝试旋转框的检测,需要将Faster R-CNN的Horizontal BBOX改为Oriented BBOX,这才发现自己对其细节理解的不够深刻,同时代码能力也不够。

经过半个月的摸索,虽然旋转框还没有跑起来,但代码能力似乎提高了不少,对检测流程、检测框架有了较多的了解。

重读Faster R-CNN,才发现作者的设计真的是非常的严谨。

Introduction

事实上,Fast R-CNN已经够快了,将R-CNN上通过crop对应Region的图像块,调整为crop对应Region的特征块,即从feature map上crop出对应特征,并剔除ROI Pooling,使得特征的输入更加平稳。

至此,只有Region Proposal的部分仍然使用传统的方法,如Selective Search,耗费了大量的时间,且不符合NN的自动提取特征。因此作者就思考,能不能在feature map上提取region proposal?

为此,Faster R-CNN最突出的贡献就是提出了RPN(Region Proposal Network),而RPN也成为了Det中奠基石的一部分。

而在Faster R-CNN的实现当中,如果实现了RPN,其实就实现了其80%。

Region Proposal Networks

RPN对于任意尺寸的输入图像,可以输出其矩形的Region Proposals,每个Proposal都有一个score。其示意图如图一所示。

RPN是一个全卷积网络,其输入是某一尺寸为$H \times W \times N$的特征图,输出是$H \times W \times 2k$的scores和$H \times W \times 4k$的坐标。

具体来说,我们将$H \times W \times N$的特征图,通过一次卷积得到$H \times W \times N_1$的特征图($N_1$可以是256、512等),然后再分别送入两个分支网络当中,其中的分类(cls)分支得到$H \times W \times 2k$的特征图,回归分支得到$H \times W \times 4k$的特征图。其中$k$是特征图上每个点的anchor数量,本文设置为$k=9$。

Translation-Invariant Anchors

那么anchor是什么东西呢?其中文意思是锚点,(个人理解)在Det中一般指的是在某个位置上设置的“锚”,也就是预设的目标。如上图中$k$个anchor具有不用的尺寸和长宽比。

这里是怎样实现Translation-Invariant呢?其实就是在每个点设置$k$个anchors,从而可以得到$k$个Region Proposals(RP),且这$k$个RP相对于anchors是参数化的,也就是其$(x,y,h,w)$是相对于anchor的$(x,y,h,w)$的。

具体来说,本文选取$k=9$,其中包括3个scale、3个ratio,$scales=128,256,512$,$ratios=2:1,1:1,1:2$。两者组合起来即有9种anchors。
这样的话,对于$H \times W$的特征图,将会有$H \times W \times 9$个anchors。

Loss Function for Learning Region Proposals

为了更清晰的说明,贴上具体实现过程中,Faster R-CNN的示意图,图片来自这里

由于RPN只需要判断objectness,而不需要判断类别,因此在训练RPN时,只需要gt_boxes,而不需要gt_labels。

首先我们根据特征图的大小$H \times W$,可以预设$H \times W \times k$个anchors,每个anchor都可以表示为$(x_a,y_a,w_a,h_a)$,其中$x_a,y_a$为其中心点坐标。那么这些anchors当中有许多都是没有gt_boxes与其对应的,这样的anchors在后面的box回归当中也很难收敛,因此我们需要从这些anchors当中选取一些与gt_boxes重叠较大的anchors。Positive anchors的选择原则:

  1. 和gt_boxes有最大重叠的anchors
  2. 和任一gt_boxes重叠超过0.7的anchors

因此一个gt_boxes可能有多个anchors与其对应,负责其box回归。那么negative anchors被定义为IOU小于0.3的anchors,其他的anchors则被忽略。

其Loss Function定义如下:

其中$i$是一个mini_batch中anchor的索引,$p_i$是anchor $i$的objectness预测值,$p_i^*$是对应的gt,$p_i^*=1$时为positive,$p_i^*=0$时为negative。其中$L_{cls}$为log loss。

$t_i$为预测的box的参数化表示,相应的$t_i^*$为gt。$L_{reg}(t_i,t_i^*)=R(t_i-t_i^*)$。其中$L_{reg}$为Smooth L1 Loss。

$p_i^*L_{reg}$表示只对positive anchor进行回归,忽略negative。

我们前面所说的参数化表示,如下式所定义:

其中$x,x_a,x^*$分别为预测值、anchor、gt_boxes。

到这里文章所要表达的内容似乎清晰多了。检测的主要任务是cls和reg,而reg需要预测物体的坐标,但直接让一个网络预测坐标是比较困难的。
因此作者设计了anchor这个东西,即在每个位置都预设一些“锚点”,我们不直接预测坐标,而是预测gt_boxes与anchors之间的偏移量。
同时由于物体的大小、长宽比各不相同,因此在每个位置设置多个不同scale,不同ratio的anchor,每种anchor负责相近尺寸目标的回归。

当网络学习到这种偏移量规则后,我们再将偏移量转为coordinates,从而实现box预测。

当然,由于每个位置有$k$个anchor,且是人为设计的,因此后面有许多工作对此进行改进,甚至是取消anchor这个机制,如FSAF、FCOS等。

Optimization

经过anchor的选取后,我们有许多positives和negatives,我们可以直接对其进行训练,然而由于negatives的数量远超过positives,从而会导致class imbalance的问题。因此在RPN中会有一个样本选择的过程,即我们共选取大约256个样本,其中正样本128个,负样本128个。如果正样本$s_{pos}<128$,则仅选取$s_{pos}$个正样本,那么负样本即选取$256-s_{pos}$个;若正样本$s_{pos}>128$,则随机选取128个样本,负样本也是同样的规则。

Sharing Convolutional Feaetures for Region Proposal and Object Detection

即RPN和Fast R-CNN共享同一个backbone的feature map,然后两者依次交叉训练,但后来实验表明,直接对两者联合训练的效果也非常好。

当RPN与Fast R-CNN结合时,其作用是为Fast R-CNN提供Region Proposals,也就是取代了Selective Search的作用。因此其输出有3个:cls_loss,reg_loss,region proposals。

由于这些region proposals有很大的重叠,会造成冗余,因此我们根据其cls_score进行NMS(threshold=0.7),选取大约2000k region proposals。然后我们再选出top-N个regions用于检测。

Experiments

Ignored

Conclusion

在CV如此快速发展的今天,Faster R-CNN从15年提出,到现在19年底依然是非常流行的检测框架,足以见其重要性,接下来我们重新实现下Faster R-CNN,同时形成自己的一套代码风格。

R-FCN模型总结

论文名称:R-FCN: Object Detection via Region-based Fully Convolutional Networks
论文地址:传送门

Introduction

传统的影像分类模型需要依赖特征的平移不变性(translation-invariance),而对于检测网络,影像的平移显然会影像到目标的定位与识别,因此其需要依赖位置敏感性(translation-variance)。通过 RoI pooling 的插入,打破了原卷积网络的平移不变性,但这种做法牺牲了训练和测试效率。而R-FCN在提升精度的同时利用“位置敏感得分图(position-sensitive score maps)”提升了检测速度。本文的核心即替换Faster R-CNN中单纯的ROI Pooling,引入psROIpooling(Position Sensitive ROI Pooling),从而引入了位置信息,提升了检测速度。
基于ResNet-101的R-FCN在PASCAL VOC 2007的测试集上的mAP=83.6%,速度为170ms per image。

Network Design

R-FCN

如上图所示为R-FCN的示意图,其大部分结构借鉴于Faster R-CNN,如RPN,ROI Pooling,但不同的是将其中的ROI Pooling替换为了psROIPooling,从而解决了位置敏感性的问题。其流程如下:

  1. 影像送入Backbone网络,输出特征图
  2. 使用RPN网络提取Region
  3. 加入一个具有特定数量卷积核的卷积层,得到一定量的特征图
  4. 对于每一个ROI,使用psROIpooling得到新的特征图
  5. Vote确定特征图所属ROI的类别

接下来会详细介绍其实现细节。

Position-sensitive score maps & Position-sensitive RoI pooling

R-FCN采用Resnet作为backbone,将其average pooling和fully connected层的最后一个卷积层作为输出,其是一个2048维的向量($2048 \times 7 \times 7$),接着再加入一个随机初始化的1000维的卷积层($1024 \times 1 \times 1$),最后加入一个包含$k^2(C+1)$个卷积核的卷积层,从而得到$k^2(C+1)$个特征图。

为了将位置信息编码进网络,本文首先将每个ROI分割成$k \times k$的网格,如对于大小为$w \times h$的ROI,则其每一个网格的大小约为$\frac{w}{k} \times \frac{h}{k}$。

接着,我们让第$i+k(j-1)$个score map负责位置$(i,j)$的预测,如对于黄色的score map,我们仅取其左上角的一个网格(即第$(1,1)$个网格)作为新的score map的一部分,那么例如蓝色的score map则负责$(3,1)$位置的预测,即仅取其$(3,1)$位置的网格作为新score map的一部分。

经过这样的映射,新组成的score map就如上图右侧经过ROI pooling之后所示,此时向量的大小为$k \times k \times (C+1)$,即新的score map是由$k^2(C+1)$个特征图经过映射得到的,包含了位置信息,而不是直接的进行ROIpooling。

接着对于大小为$k^2(C+1)$的score map,对$C+1$维上每一层都进行average pooling,得到大小为$C+1$的一维向量,接着使用softmax公式计算其最终的类别。其公式如下:
$$r_c(i,j|\theta)=\sum_{(x,y) \in bin(i,j)}z_{i,j,c}(x+x_0,y+y_0|\theta)/n$$
其中$r_c(i,j|\theta)$表示对于第$c$类经过pool之后的第$(i,j)$个网格,$z_{i,j,c}$表示$k^2(C+1)$个score map中的一个,$(x_0,y_0)$表示ROI的左上角

Bounding Box Regression

为了准确预测bounding box,本文在$k^2(C+1)$的卷积层后添加了一个$4k^2$个卷积核的卷积层,产生了一个$4k^2$维的向量,然后使用average pooling转成4维的向量,让这个4维向量编码$t=(t_x,t_y,t_w,t_h)$。

Refenrence

  1. https://www.jianshu.com/p/df49ff18c8cc
  2. https://zhuanlan.zhihu.com/p/30867916
  3. https://blog.csdn.net/wfei101/article/details/79284512

YOLO系列模型总结

YOLO v1

论文名称:You Only Look Once: Unified, Real-Time Object Detection
论文地址:传送门

Introduction

以往的目标检测算法(尤其是R-CNN系列)将目标检测问题归结为分类问题,即先寻找目标可能存在的区域(Bounding box),然后对这些Box分类,从而确定目标。Yolo则将目标检测问题转换为一个回归问题(Regreesion problem),直接预测出boudning box和相关的类别信息。Yolo是一个可以端到端训练的single network,它不需要单独的搜索Region Proposals,也不需要单独的Classifier,因此其检测速度特别快,Yolo可以达到45FPS,而Fast Yolo可以达到155FPS。Yolo对背景的识别效果较好,且有一定的迁移性,可以识别一般问题(如Artwork),但是Yolo最大的问题是对小目标的检测不准确。

SSD&& MS R-CNN模型总结

论文名称:SSD: Single Shot MultiBox Detector
论文地址:传送门

Introduction

相比于多阶段(Multi-Stage)的方法,SSD是一个Single Shot的目标检测算法,它可以直接输出不同比例、不同尺寸的Bounding box,其结合了不同层的特征图,从而可以处理多种尺寸的 物体。