目标检测和分割中Backbone技术总结

写这篇的目的不是详细介绍每种技术的原理,而是将每种技术的要点包括我自己的理解记下来,方便自己也方便需要的人

VGG (2014)

  1. 使用3x3的卷积核代替5x5和7x7的卷积核
    • 就feature map的尺寸来说,2个3x3相当于1个5x5的卷积核,参数量变得更少;更少的参数量使得增加网络深度更容易.
  2. 大幅增加网络深度至16-19
    • Invariance and equivariance are two important properties in image feature representations.更深的网络提取的特征有更强的Invariance(即能提取到更高层次的语义信息),所以更深的VGG在分类任务上效果更好(Classification desires in- variant feature representations since it aims at learning high-level semantic information);
    • 我的思考1:深度的增加,提取出更多的多种多样的特征信息,所有的不一定都有用,但有了更多的特征,再通过全连接进行特征组合,有利于寻找最优解;
    • 我的思考2:深度的增加,带来参数量的增加和特征数量的增加,给模型带来更高的过拟合风险(增加方差),所以更深的网络,需要更强的正则化。

ResNet系列

无限制的增加网络的深度,会导致网络的退化(Degradation of deep network):1. 理想情况下,当网络提取的特征在某一层达到最优,剩下的层输出的特征应该保持最优,即形成**恒等映射,换句话说,更深的网络不会有更差的效果;**2. 实际情况是,发生了网络退化,这是由于最优特征进一步变换提取,就破坏了原有特征的表达能力;3. 为了解决此问题(让网络真正实线恒等映射),ResNet被提出。

ResNet (2015)

  1. Residual Module

    shortcut模块会在前向过程中帮助网络中的特征进行恒等映射,在反向过程中帮助传导梯度,让更深的模型能够成功训练:

    • residual模块将输出分成F(x) + x 两部分,其中F是x的函数,也就是说F实际上是对x的补充,这样就把任务从根据x映射成一个新的y转为了根据x求x和y之间的差距,这明显是一个相对更加简单的任务;
    • 假设不加residual模块的输出为h(x). 当x=10 , h(x)=11,h(x)简化为线性运算W_h明显为1.1,加了redidual模块后,F(x)=1, F(x)+x=11,对应的W_f为0.1。而损失函数对F中的参数和h中参数回传的损失实际上是一样大的,因此redidual模块会明显减小模块中参数的值从而让网络中的参数对反向传导的损失值有更敏感的响应能力,虽然根本上没有解决回传的损失小得问题,但是却让参数减小,相对而言增加了回传损失的效果。
  2. Depth and Width

    • 增大宽度可以增加各种深度的残差模型的性能;

    • 只要参数的数量可以接受,宽度和深度的增加就可以使性能提升;

ResNeXt

ResNeXt是ResNet和Inception的结合体,不同于Inception v4的是,ResNext不需要人工设计复杂的Inception结构细节,而是每一个分支都采用相同的拓扑结构。ResNeXt的本质是分组卷积(Group Convolution),通过变量基数(Cardinality)来控制组的数量。组卷积是普通卷积和深度可分离卷积的一个折中方案,即每个分支产生的Feature Map的通道数为n.

  • ResNet的残差结构取得了巨大的成功;
  • Inception的卷积核分解思想和BN层的运用也取得了很大的成功;

ResNeSt

ResNeSt由ResNeXt和SKNet进化而来。站在巨人的肩膀上,比巨人又更高了一步。

  • 提出了split-attention blocks构造的ResNeSt,与现有的ResNet变体相比,不需要增加额外的计算量。而且ResNeSt可以作为其它任务的骨架;
  • 在几乎所有CV任务上达到最优。 利用ResNeSt主干的模型能够在几乎所有CV任务上达到最先进的性能,即:图像分类,对象检测,实例分割和语义分割。ResNeSt性能优于所有现有ResNet变体,并且具有相同的计算效率。

其结构如下图:

首先是借鉴了ResNeXt网络的思想,将输入分为K个,每一个记为Cardinal (记为1到k),然后又将每个Cardinal拆分成R个,每一个记为一个Split (记为1-r),所以总共有G=KR个组;然后是对于每一个Cardinal,如下图所示,其实就是一个SKNet(不同的是这里每个卷积核的size都一样):

Inception系列

Inception v1

  • 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;
  • 网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3x3和5x5卷积的比例也要增加;
  • 使用1x1的卷积核,主要目的是降维,即通过减少通道数减少参数数量;同时可以增加特征的非线性(多了个激活函数;实现跨通道的交互和信息整合)
  • GoogLeNet是由inception模块进行组成的。为了避免梯度消失,其在较浅层额外增加了2个辅助的softmax用于向前传导梯度,这2个分类器的loss的权重是0.3。此外,实际测试的时候,这两个额外的softmax会被去掉。

Inception v2

相对于v1版本,其增加了BN算法,所以这里主要对BN算法进行介绍。

训练DNN网络的一个难点是,在训练时每层输入数据的分布会发生改变,所以需要较低的学习率和精心设置初始化参数。只要网络的前面几层发生微小的改变,那么后面几层就会被累积放大下去。一旦网络某一层的输入数据的分布发生改变,那么这一层网络就需要去适应学习这个新的数据分布,所以如果训练过程中,训练数据的分布一直在发生变化,那么将会影响网络的训练速度。作者把网络中间层在训练过程中,数据分布的改变称之为:“Internal Covariate Shift”。因此,作者提出对数据做归一化的想法。

BN算法公式如下:

x ( k ) ^ = x ( k ) − E [ x ( k ) ] V a r ( x ( k ) ) \widehat{x^{(k)}}=\frac{x^{(k)}-E[x^{(k)}]}{\sqrt{Var(x^{(k)})}} x(k) =Var(x(k)) x(k)E[x(k)]

如果是仅仅使用上面的归一化公式,对网络某一层A的输出数据做归一化,然后送入网络下一层B,这样是会影响到本层网络A所学习到的特征的(让每一层网络的输入数据分布都变得稳定,但却导致了数据表达能力的缺失)。打个比方,比如网络中间某一层学习到特征数据本身就分布在S型激活函数的两侧,你强制把它给我归一化处理、标准差也限制在了1,把数据变换成分布于s函数的中间部分,这样就相当于我这一层网络所学习到的特征分布被搞坏了。于是提出了“变换重构”,引入了可学习参数𝛾(scale参数,起缩放作用)和𝛽(shift,起平移作用)(通过缩放和平移恢复原有特征):

  • 可以设置较大的初始学习率,并且减少对参数初始化的依赖,提高了训练速度;
  • 这是个正则化模型,因此可以去除dropout和降低L2正则约束参数;

Inception v3

  1. General Design Principles

    • **避免特征表示瓶颈,尤其是在网络的前面。**要避免严重压缩导致的瓶颈。特征表示尺寸应该温和地减少,从输入端到输出端。特征表示的维度只是一个粗浅的信息量表示,它丢掉了一些重要的因素如相关性结构;
    • **高维信息更适合在网络的局部处理。**在卷积网络中逐步增加非线性激活响应可以解耦合更多的特征,那么网络就会训练的更快;
    • **空间聚合可以通过低维嵌入,不会导致网络表示能力的降低。**例如在进行大尺寸的卷积(如3*3)之前,我们可以在空间聚合前先对输入信息进行降维处理,如果这些信号是容易压缩的,那么降维甚至可以加快学习速度;
    • **平衡好网络的深度和宽度。通过平衡网络每层滤波器的个数和网络的层数可以是网络达到最佳性能。**增加网络的宽度和深度都会提升网络的性能,但是两者并行增加获得的性能提升是最大的。所以计算资源应该被合理的分配到网络的宽度和深度。
  2. Factorizing Convolutions with Large Filter Size

    • 大尺度滤波器的卷积(如5x5*,7x7)的引入,会产生大量的计算。例如一个5x5的卷积比一个3x3卷积滤波器多25/9=2.78倍计算量。因此,提出了使用两个级联的3x3的滤波器来代替一个5x5的滤波器,这样节省了(55)/(233)=1.39倍计算量。
    • 受到上面的启发,又进一步对卷积进行分解,将3x3的卷积核分解为3x1+1x3,如下图所示。这样,又能进一步降低计算量。因此,一个nxn的卷积可以被1xn和nx1的卷积所代替。但实际上,在网络模型的前期使用这样的卷积分解,并不能达到一个很好的效果。通过在网络中期使用,在特征图的尺寸为12-20左右使用最佳。

    • 提出标签平滑

Inception V4

主要提出了新的更加复杂的Inception结构,并且结合ResNet网络提出了Inception-ResNet-v1和Inception-ResNet-v2

总结

  • inception是通过增加网络的宽度来提高网络性能,在每个inception模块中,使用了不同大小的卷积核,可以理解成不同的感受野,然后将其concentrate起来,丰富了每层的信息;
  • 提出了卷积分解的思想,节省了计算量;
  • 使用了BN算法(BN使用在conv之后,relu之前),来加速网络的收敛速度。

SENet系列

SENet

对于CNN网络来说,其核心计算是卷积算子,其通过卷积核从输入特征图学习到新特征图。从本质上讲,卷积是对一个局部区域进行特征融合,这包括空间上(H和W维度)以及通道间(C维度)的特征融合。

对于卷积操作,很大一部分工作是提高感受野,即空间上融合更多特征融合,或者是提取多尺度空间信息,如Inception网络的多分支结构。对于channel维度的特征融合,卷积操作基本上默认对输入特征图的所有channel进行融合。而SENet网络的创新点在于关注channel之间的关系,希望模型可以自动学习到不同channel特征的重要程度。为此,SENet提出了Squeeze-and-Excitation (SE)模块,如下图所示:

一开始没看懂这个图,前面俩个正方体其实是表示卷积,SENet的主要创新点在分叉支路上:

  • Squeeze

    此操作就是在feature map的每个通道上做global average pooling,相当于提取了每个通道的全局特征。比如squeeze操作之前的feature map的size为 CxWxH, 则此此操作后的输出大小为Cx1x1;

  • Excitation

    Sequeeze操作得到了全局描述特征,我们接下来需要另外一种运算来抓取channel之间的关系。这个操作需要满足两个准则:首先要灵活,它要可以学习到各个channel之间的非线性关系;第二点是学习的关系不是互斥的,因为这里允许多channel特征,而不是one-hot形式。基于此,这里采用sigmoid形式的gating机制,先使用2个全连接层,再接一个sigmoid函数,此操作的输出的大小为C11, 最后将输出作用在原始feature map上的每个通道上,即赋予每个通道一个权重,让模型可以更加关注信息量最大的channel特征,而抑制那些不重要的channel特征,实际上是一种attention机制。可看下图理解。

    SKNet (Selective Kernel Networks)

    SENet自动学习不同通道特征的重要程度,SKNet自动学习不同size的卷积核生成的feature map的重要程度(也包括每个卷积核生成的feature map的通道上的权重)。其灵感来源是,我们在看不同尺寸不同远近的物体时,视觉皮层神经元接受域大小是会根据刺激来进行调节的。那么对应于CNN网络,一般来说对于特定任务特定模型,卷积核大小是确定的,那么是否可以构建一种模型,使网络可以根据输入信息的多个尺度自适应的调节接受域大小呢?基于这种想法,作者提出了SKNet:

    • Split:这里的Split是指对输入特征X进行不同卷积核大小的完整卷积操作(包括efficient grouped/depthwise convolutions,Batch Normalization,ReLU function)。如结构图所示,对X进行Kernel 3×3和Kernel 5×5的卷积操作,得到输出 U ^ \widehat{U} U U ~ \widetilde{U} U ;

    • Fuse:将 U ^ \widehat{U} U U ~ \widetilde{U} U 相加(不是concat),接着就如SENet一样,学习不同卷积核生成的feature map的权重及每个feature map上每个通道的权重。最后输出2个权重矩阵a和b, 其中a = 1 - b. a和b分别表示不同feature map的权重,a的size为cx1x1,表示不同通道的权重;

    • Select:最终输出的feature map表示为:

    V = a U ^ + b U ~ , a + b = 1 V = a\widehat{U} +b\widetilde{U}, a+b=1 V=aU +bU ,a+b=1

U-Net

U-Net的特点:

  • skip connection的结构,可以融合不同水平的特征。浅层的信息保存有轮廓、位置信息(性质Invariance),而深层有更强的语义信息,有利于分类(equivariance);

  • U-Net层数比较少(一般向下卷积4层,向上卷积4层,特征结合时候concat),这是因为其所面对的任务大都是医学图像或者自然图像分割分类,这类图像一般有图像语义简单、数据量少的特点,简单的语义不需要动辄几十层的网络去提取,很少的数据量要求模型参数少,从而避免过拟合。

  • ConvTranspose:转置卷积。正常卷积的输入可展开为w*h维的向量,记作 x x x , 同样的输出feature 也可展开,记为 y y y, 则 y = C x y = Cx y=Cx ,而转置卷积的公式为: y = C T x y = C^T x y=CTx

Feature Pyramid Network (FPN)

introduction

  • 在使用传统图像处理方法,就有在图像金字塔(不同分辨率的图像)上提取特征(每张图独立预测,然后融合)的做法,这种做法虽然能提取到不同分辨率图像的不同特征,但是计算量比较大;
  • 另外一种方法,就是在同一张图的不同层的feature map上,分别进行预测。优点还是:浅层更注重细节如轮廓、位置等空间信息,更深的层可以获取更强的语义信息,更有助于分类;

FPN

  • 过程:在输入的图像上进行卷积,然后对Layer2上面的特征进行降维操作(即添加一层1x1的卷积层),对Layer4上面的特征进行上采样操作,使得它们具有相应的尺寸,然后对处理后的Layer2和处理后的Layer4执行加法操作(对应元素相加),将获得的结果输入到Layer5中去。
  • 能够在增加较少计算量的前提下融合低分辨率语义信息较强的特征图和高分辨率语义信息较弱但空间信息丰富的特征图;
  • 能更好的识别不同尺寸的object, 特别是小目标(更高分辨率的feature map能更好的识别小目标)

Faster R-CNN with FPN

  • 上图是faster R-CNN的网络结构,左列ResNet用每级最后一个Residual Block的输出,记为{C1, C2, C3, C4, C5};

  • FPN用2-5级参与预测(第一级的语义太低),{P2, P3, P4, P5}表示融合C2,C3,C4和C5的输出层后的特征;

  • 在Faster R-CNN中,使用feature map P2, P3, P4, P5分别形成ROI, 然后一起进行ROI Pool操作。

DCN

DCN v1

Deformable Convolution

作者认为,CNN其实不具有旋转不变性和尺度不变性(只是通过大量的数据去学习不同形变的目标),缺乏判断形变的策略依据。局限性比较多,比如固定的box对于灵活物体来说非常僵硬,比如同一层的特征图的不同位置可能对应的是不同形状的物体,但是都和同一个卷积做计算。

作为对上述问题的解决方案,作者提出了一种新的卷积方式deformable convolution,在此基础上提出了一种新的RoI pooling方法deformable RoI pooling。主要思路就是卷积操作不是在规规矩矩的nxn的格子里做了,而是有了种种偏移,如下图所示:

  • 单个点的offset 是二维的, 分别表示x, y方向上的偏移;

  • 注意每个卷积核在feature map上对每个点上都有offset;

  • 图一只是几个例子,实际的offset不是这么有规律的,而是根据输入feature map(WxH)学习的:以输入feature map为输入,经过一次卷积形成offset矩阵,其大小为WxHx2N,其中N是feature map的channel的数量。

  • offset一般是小数,所以在进行卷积时,使用双线性差值计算这些经过offset修正的位置的响应;

  • 按我的理解,在实际学习中,由于卷积时可以有一定偏移,模型会自动在重要的特征点处多采样,而在无关的采样点处少采样,所以实际上也算是一种注意力机制。

Deformable RoI Pooling

RoI pooling是把不同大小的RoI(w*h)对应的feature map 统一到固定的大小(k x k);可形变RoI pooling则是先对RoI对应的每个bin按照RoI的长宽比例的倍数进行整体偏移(同样偏移后的位置是小数,使用双线性差值来求),然后再pooling。

在获取offset矩阵的时(上图上面的支路),先使用普通的ROI pooling产生pooled feature maps, 再使用一个FC产生 normalized offsets,offset 为大小 k*k的矩阵,由于在x和y方向上是按照bin(一个bin pool后产生一个特征点)等比例偏移的,所以只需要算出其中一维的偏移量,就可得到另一维的偏移量。

DCN v2

相比v1,v2版本做了如下改进:

  • 使用更多的Deformable Conv层:v1中使用的ResNet-50,只将C5中的3层3x3卷积换成了可变形卷积,v2则将C3,C4和C5中一共12个3x3的卷积层都换成了可变形卷积(DC)。v1中发现对于pascal voc这样比较小规模的数据集,3层DC已经足够了。而在COCO上,作者实验发现在C3到C5中使用DC,是效率和精度上最好的均衡。我的理解,实际上DCN增加了模型的参数量,越多的DC,参数量越多,需要的数据也越多,所以在小数据集上可适当减少DC,以防造成过拟合,大拟合相反。

  • 改进可变形卷积使其可调节:v1给普通的卷积的采样点加了偏移,v2在此基础上还允许调节每个采样位置或者bin的特征的amplitude,就是给这个点的特征乘以个系数,如果系数为0,就表示这部分区域的特征对输出没有影响。这个系数也是可学习的,原来学习偏移量 Δ x \Delta x Δx Δ y \Delta y Δy ,在v2中增加一个学习变量,即这个系数。

  • R-CNN Feature Mimicking:TODO

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值