首页 > 编程知识 正文

cnn卷积神经网络图(cnn中卷积核计算)

时间:2023-05-03 11:53:24 阅读:92714 作者:2767

雷锋网押:本论文的原作者Xf是一只模糊的烤鸡,本论文原载于知乎。 雷锋网得到了作者的授权。

我推荐另一个好的总结。 变形卷积核,可分离卷积? 卷积神经网络中十大拍尖叫的操作。

这个总结很专业,很好地回答了评论中的疑问:

深度可备用组合是加卷积组吗? 这篇文章说:

需要注意的是,Group conv是通道分组的方式,Depthwise Pointwise是卷积的方式,只是在ShuffleNet中应用了两者。 因此,Group conv和Depthwise Pointwise不能划等号。 Depthwise Pointwise卷积是特征地图的空间信息(高度和映射; width )和频道信息) channel )分开处理,而group卷积是简单的频道分组处理,只是降低了复杂度。

表达错误的地方欢迎更正! 另外,现在只列举了有名且实用的卷积操作,对于没有提及的,请指出并补充

1. 原始版本

最初的卷积方式还没吵起来,所以没什么好说的。

请参照下图。 原始的conv操作可以看作是2D版本的无隐藏层神经网络。

附上卷积的详细过程。

【TensorFlow】tf.nn.conv2d是如何实现卷积的? - CSDN博客

代表型号:

LeNet )以最初使用stack单卷积单池化结构的方式,对卷积层进行特征提取、池化,在空间上进行采样

AlexNet :后来发现用单卷积提取的特征不太丰富,stack多卷积单池化的结构开始了

vgg(1409.1556 ) verydeepconvolutionalnetworksforlarge-scaleimagerecognition :结构没有太大变化,但更深一些

2. 多隐层非线性版本

这个版本是融合了增加网络中的隐藏层以提高非线性表现的思想的一大改进,有这样一种通过1*1卷积映射到隐藏空间,然后在隐藏空间进行卷积的结构。 同时考虑多尺度,用多个不同大小的卷积核在单层卷积层中卷积,并将结果concat。

这个结构被称为“Inception”

代表型号:

inception-v1 ([ 1409.4842 ] goingdeeperwithconvolutions ) :称为堆栈以上的inception结构

inception-V2 (加速器电磁干扰综合集成电路标准化) :添加BatchNormalization正则,消除5*5卷积,并

inception-V3 ([ 1512.00567 ] rethinkingtheinceptionarchitecture Forcomputer vision ):7*7卷积还分解为7*1*7

inception-v4 ([ 1602.07261 ] inception-v4,inception-resnetandtheimpactofresidualconnectionsonlearning ) :添加残差结构

3. 空洞卷积

Dilation卷积通常翻译为空洞卷积或卷积核膨胀操作,是解决pixel-wise输出模型的常用卷积方式。 一般的认识之一是,轮询的降采样操作造成的信息丢失是不可逆的。 在普通的分类识别模型中,只需要预测每个类的概率,因此不需要考虑通过轮询丢失图像的详细信息的问题,但是在进行语义分割等像素级别的预测时,需要考虑这个问题。

所以,虽然卷积的作用(倍增增加感觉野)代替了保龄球,但是空洞卷积就是为了做那个。 通过在卷积内核中插入“0”,可以获得比普通卷积更大的感觉野。 这个idea的motivation在这里被介绍。 具体的实现方法和原理请参考以下链接。

如何理解“空洞卷积”(dilated convolution )?

膨胀卷积----multi-scalecontextaggregationbydilatedconvolutions

在博客上做了一个空洞卷积的小demo

【Tensorflow】tf.nn.atrous_conv2d是如何实现空洞卷积的? - CSDN博客

代表型号:

fcn ([ 1411.4038 ]全循环

utional Networks for Semantic Segmentation):Fully convolutional networks,顾名思义,整个网络就只有卷积组成,在语义分割的任务中,因为卷积输出的 feature map 是有 spatial 信息的,所以最后的全连接层全部替换成了卷积层。

Wavenet(WaveNet: A Generative Model for Raw Audio):用于语音合成。

4. 深度可分离卷积

Depthwise Separable Convolution,目前已被 CVPR2017 收录,这个工作可以说是 Inception 的延续,它是 Inception 结构的极限版本。

为了更好的解释,让我们重新回顾一下 Inception 结构(简化版本):

上面的简化版本,我们又可以看做,把一整个输入做 1*1 卷积,然后切成三段,分别 3*3 卷积后相连,如下图,这两个形式是等价的,即 Inception 的简化版本又可以用如下形式表达:

OK,现在我们想,如果不是分成三段,而是分成 5 段或者更多,那模型的表达能力是不是更强呢?于是我们就切更多段,切到不能再切了,正好是 Output channels 的数量(极限版本):

于是,就有了深度卷积(depthwise convolution),深度卷积是对输入的每一个 channel 独立的用对应 channel 的所有卷积核去卷积,假设卷积核的 shape 是 [filter_height, filter_width, in_channels, channel_multiplier],那么每个 in_channel 会输出 channel_multiplier 那么多个通道,最后的 feature map 就会有 in_channels * channel_multiplier 个通道了。反观普通的卷积,输出的 feature map 一般就只有 channel_multiplier 那么多个通道。

具体的过程可参见我的 demo:

【Tensorflow】tf.nn.depthwise_conv2d 如何实现深度卷积? - CSDN 博客

既然叫深度可分离卷积,光做 depthwise convolution 肯定是不够的,原文在深度卷积后面又加了 pointwise convolution,这个 pointwise convolution 就是 1*1 的卷积,可以看做是对那么多分离的通道做了个融合。

这两个过程合起来,就称为 Depthwise Separable Convolution 了:

【Tensorflow】tf.nn.separable_conv2d 如何实现深度可分卷积? - CSDN 博客

代表模型:Xception(Xception: Deep Learning with Depthwise Separable Convolutions)

5. 可变形卷积

可形变卷积的思想很巧妙:它认为规则形状的卷积核(比如一般用的正方形 3*3 卷积)可能会限制特征的提取,如果赋予卷积核形变的特性,让网络根据 label 反传下来的误差自动的调整卷积核的形状,适应网络重点关注的感兴趣的区域,就可以提取更好的特征。

如下图:网络会根据原位置(a),学习一个 offset 偏移量,得到新的卷积核(b)(c)(d),那么一些特殊情况就会成为这个更泛化的模型的特例,例如图(c)表示从不同尺度物体的识别,图(d)表示旋转物体的识别。

这个 idea 的实现方法也很常规:

上图中包含两处卷积,第一处是获取 offsets 的卷积,即我们对 input feature map 做卷积,得到一个输出(offset field),然后再在这个输出上取对应位置的一组值作为 offsets。假设 input feature map 的 shape 为 [batch,height,width,channels],我们指定输出通道变成两倍,卷积得到的 offset field 就是 [batch,height,width,2×channels],为什么指定通道变成两倍呢?因为我们需要在这个 offset field 里面取一组卷积核的 offsets,而一个 offset 肯定不能一个值就表示的,最少也要用两个值(x 方向上的偏移和 y 方向上的偏移)所以,如果我们的卷积核是 3*3,那意味着我们需要 3*3 个 offsets,一共需要 2*3*3 个值,取完了这些值,就可以顺利使卷积核形变了。第二处就是使用变形的卷积核来卷积,这个比较常规。(这里还有一个用双线性插值的方法获取某一卷积形变后位置的输入的过程)

这里有一个介绍性的 Slide:http://prlab.tudelft.nl/sites/default/files/Deformable_CNN.pdf

代表模型:Deformable Convolutional Networks(Deformable Convolutional Networks):暂时还没有其他模型使用这种卷积,期待后续会有更多的工作把这个 idea 和其他视觉任务比如检测,跟踪相结合。

6. 特征重标定卷积

这是 ImageNet 2017 竞赛 Image Classification 任务的冠军模型 SENet 的核心模块,原文叫做”Squeeze-and-Excitation“,我结合我的理解暂且把这个卷积称作” 特征重标定卷积 “。

和前面不同的是,这个卷积是对特征维度作改进的。一个卷积层中往往有数以千计的卷积核,而且我们知道卷积核对应了特征,于是乎那么多特征要怎么区分?这个方法就是通过学习的方式来自动获取到每个特征通道的重要程度,然后依照计算出来的重要程度去提升有用的特征并抑制对当前任务用处不大的特征。

这个想法的实现异常的简单,简单到你难以置信。

首先做普通的卷积,得到了一个的 output feature map,它的 shape 为 [C,H,W],根据 paper 的观点,这个 feature map 的特征很混乱。然后为了获得重要性的评价指标,直接对这个 feature map 做一个 Global Average Pooling,然后我们就得到了长度为 C 的向量。(这里还涉及到一个额外的东西,如果你了解卷积,你就会发现一旦某一特征经常被激活,那么 Global Average Pooling 计算出来的值会比较大,说明它对结果的影响也比较大,反之越小的值,对结果的影响就越小)

然后我们对这个向量加两个 FC 层,做非线性映射,这俩 FC 层的参数,也就是网络需要额外学习的参数。

最后输出的向量,我们可以看做特征的重要性程度,然后与 feature map 对应 channel 相乘就得到特征有序的 feature map 了。

虽然各大框架现在都还没有扩展这个卷积的 api,但是我们实现它也就几行代码的事,可谓是简单且实用了。

另外它还可以和几个主流网络结构结合起来一起用,比如 Inception 和 Res:

代表模型:Squeeze-and-Excitation Networks(Squeeze-and-Excitation Networks)

7. 比较

我们把图像(height,width)作为空间维度,把 channels 做为特征维度。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。