资讯详情

真正的即插即用!盘点11种CNN网络设计中精巧通用的“小”插件

点击上面的计算机视觉车间,选择星标

第一时间送达干货

992ede497a62dd871647ab19ec973949.png

作者皮特潘

极市平台编辑

所谓插件,就是锦上添花,容易植入落地,即真正的即插即用。本文盘点的插件可以改进CNN平移、旋转、scale提取等变性能力或多尺度特征,感受野生等能力SOTA它们的影子在网络上随处可见。

前言

本文盘点了一些CNN网络中设计精美实用的插件。所谓“插件”,就是不改变网络主体结构, 可以很容易嵌入到主流网络当中,提高网络提取特征的能力,能够做到plug-and-play。网络上也有很多类似的盘点工作,都声称所谓的即插即用、无痛涨点。然而,根据作者的经验和收集,发现许多插件不实用、不通用甚至不实用work于是有了这篇文章。

首先,我的理解是:。本文盘点了许多插件SOTA它们的影子会在网络上看到。。很多“插件”都为提升CNN平移、旋转、scale变性能力、多尺度特征提取能力、感觉野等能力、感知空间位置能力等。

:STN、ASPP、Non-local、SE、CBAM、DCNv1&v2、CoordConv、Ghost、BlurPool、RFB、ASFF

1 STN

:Spatial Transformer Networks

:https://arxiv.org/pdf/1506.02025.pdf

在OCR在任务中,你会经常看到它。对于CNN网络,我们希望它对物体的姿势和位置有一定的不变性。也就是说,它可以适应测试集中某些姿势和位置的变化。不变性或等变性能有效提高模型泛化能力。虽然CNN使用sliding-window卷积操作在一定程度上具有平移不变性。但许多研究发现,采样会破坏网络的平移不变性。因此,可以认为网络的不变性能力很弱,更不用说旋转、规模、光等不变性了。一般来说,我们利用数据增强来实现网络的不变性。

本文提出STN模块、显式将空间变换植入网络,从而提高网络的旋转、平移、规模等不变性。可以理解为“对齐”操作。STN如上图所示,每个结构STN模块由Localisation net,Grid generator和Sampler三部分组成。Localisation net学习获取空间变换的参数是上式中的六个参数。Grid generator用于坐标映射。Sampler用于像素采集,采用双线插值。

STN意义是将原始图像纠正为网络想要的理想图像,这个过程是无监督的,即变换参数是通过自发学习获得的,无需标记信息。该模块是一个独立的模块CNN插入任何位置。符合本次插件的盘点要求。

 
     
class SpatialTransformer(nn.Module):     def __init__(self, spatial_dims):         super(SpatialTransformer, self).__init__()         self._h, self._w = spatial_dims          self.fc1 = nn.Linear(32*4*4, 1024) # 可根据自己的网络参数具体设置         self.fc2 = nn.Linear(1024, 6)       def forward(self, x):          batch_images = x #保存原始数据         x = x.view(-1, 32*4*4)         # 利用FC结构学习6个参数         x = self.fc1(x)         x = self.fc2(x)          x = x.view(-1, 2,3) # 2x3         # 利用affine_grid生成采样点         affine_grid_points = F.affine_grid(x, torch.Size((x.size(0), self._in_ch, self._h, self._w)))         # 将采样点作用于原始数据         rois = F.grid_sample(batch_images, affine_grid_points)         return rois, affine_grid_points

2 ASPP

:atrous spatial pyramid pooling

:DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Conv

:https://arxiv.org/pdf/1606.00915.pdf

该插件是一个带有空洞卷积的空间金字塔池模块,主要是为了提高网络的感觉,并引入多尺度的信息。众所周知,语义分割网络通常面临分辨率较高的图片,这就要求我们的网络有足够的感觉来覆盖目标对象。对于CNN网络基本上是通过卷积层叠加上下采样操作来获得感觉野。本文的模块可以在不改变特征图大小的情况下控制感觉野,有利于提取多尺度信息。其中rate控制感觉野的大小,r野越大,感觉越大。

ASPP主要包括以下部分:1. 全局平均池化层获得image-level并进行1X1卷积,双线插值达到原尺寸;2. 一个1X1卷积层和3卷积层X3.空洞卷积;3.. 五个不同尺度的特征是channel维度concat一起送1X集成输出1卷积。

 
     
class ASPP(nn.Module):     def __init__(self, in_channel=512, depth=256):         super(ASPP,self).__init__()         self.mean = nn.AdaptiveAvgPool2d((1, 1))         self.conv = nn.Conv2d(in_channel, depth, 1, 1)         self.atrous_block1 = nn.Conv2d(in_channel, depth, 1, 1)         # 不同空洞率的卷积         self.atrous_block6 = nn.Conv2d(in_channel, depth, 3, 1, padding=6, dilation=6)         self.atrous_block12 = nn.Conv2d(in_channel, depth, 3, 1, padding=12, dilation=12)         self.atrous_block18 = nn.Conv2d(in_channel, depth, 3, 1, padding=18, dilation=18)         self.conv_1x1_output = nn.Conv2d(depth * 5, depth, 1, 1)       def forward(self, x):         size = x.shape[2:]      # 池化分支         image_features = self.mean(x)         image_features = self.conv(image_features)         image_features = F.upsample(image_features, size=size, mode='bilinear')      # 不同空洞率的卷积         atrous_block1 = self.atrous_block1(x)         atrous_block6 = self.atrous_block6(x)         atrous_block12 = self.atrous_block12(x)         atrous_block18 = self.atrous_block18(x)         # 整合所有尺度的特征      x = torch.cat([image_features, atrous_block1, atrous_block6,atrous_block12, atrous_block18], dim=1)         # 利用1X1卷积融合特征输出         x = self.conv_1x1_output(x)         return net

3 Non-local

:Non-local Neural Networks

标签: 2d型位移变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台