pytorch 定义 backward Function pytorch backbone_卷积


经典的Backbone

VGG:

pytorch 定义 backward Function pytorch backbone_卷积_02


VGG的网络结构图

VGG的特点是采用五组卷积核三组全连接,最后使用Softmax做分类。每次经过池化层后特征图的尺寸缩小一倍,而通道数增加一倍(除最后一个池化层)。
VGG摒弃了55的卷积层,而是采用了两个33的卷积层进行堆叠。在保证相同感受野的情况下,降低了参数量,并且提升了网络的学习能力(多了一个非线性激活函数)。

Inception

并行多个不同尺寸的卷积运算与池化,然后拼接起来。

pytorch 定义 backward Function pytorch backbone_池化_03


后续版本加入了11的卷积,用于减少通道数,降低网络参数

pytorch 定义 backward Function pytorch backbone_语义信息_04


V2 版本引入了BN操作,并用两个3
3的卷积层替换了之前的55。

pytorch 定义 backward Function pytorch backbone_池化_05


后续还将n
n的卷积拆分为1n与n1两个卷**积,用于降低计算成本。

pytorch 定义 backward Function pytorch backbone_语义信息_06

ResNet

ResNet的思想是引入一个深度残差框架来解决梯度消失问题,让卷积网络学习残差映射,而不是期望每个堆叠层的网络都完整地拟合潜在的映射。

pytorch 定义 backward Function pytorch backbone_池化_07


一个残差模块称为一个Bottleneck。一个模块至少不比原来的性能要差。

DenseNet

DenseNet可以理解为ResNet的增强版,每个模块中前一层网络跟后面所有的网络都有直连。但是也有区别,ResNet是逐元素相加,而DenseNet是通道拼接(Concatnate)。

pytorch 定义 backward Function pytorch backbone_语义信息_08


两个Dense Block之间的部分称为Transition层,包含BN、ReLU、11卷积、22平均池化等操作。

pytorch 定义 backward Function pytorch backbone_语义信息_09


DenseNet的Block结构图,采用了激活函数在前,卷积层在后的顺序,跟一般的网络不同。

DenseNet的优势

  • 密集连接的特殊网络,一定程度上解决了梯度消失的问题。
  • DenseNet的参数更少,且效率更高。

DenseNet的缺点

  • 显存容易增加的很快,需要一定的显存优化技术。
  • 网络较为特殊,没有ResNet那样应用范围广。

特征金字塔FPN

传统的特征图尺寸较小,造成小物体在特征图上的有效信息较少,小物体的检测性能急剧下降,这就是多尺度问题。

pytorch 定义 backward Function pytorch backbone_池化_10


上采样用的是二倍最近邻上采样,非线性插值。

横向连接的目的是为了将上采样后的高语义信息与浅层的定位细节特征进行融合。

FPN将深层的语义信息传到底层,来补充浅层的语义信息,从而获得了高分辨率、强语义的特征,在小物体检测、实例分割等领域有着不俗的表现。

DetNet

现有的物体检测是基于图像分类网络修改的,特征图的分辨率较低,从而导致下面两个缺陷。

  • 大物体难定位,物体的边缘难以精确预测,增加了回归边界的难度。
  • 小物体难检测,由于下采样导致小物体在较深的特征图上几乎不可见。

DETNet引入了空洞卷积,使模型兼具较大感受野与较高分辨率。

pytorch 定义 backward Function pytorch backbone_池化_11


空洞卷积与残差网络的对比图