一文搞定3D卷积

一文搞定3D卷积

在讨论卷积核的时候,是不把channel维加进去的

核 = 一个可以滑动的窗口

窗口内不同位置数据之间的权值共享

3D卷积,卷积核会在3个方向上运动,那么卷积核的运动需要有三个自由度(一小块立方体,在一个大面包块内3个方向上滑动
2D卷积,卷积核只在2个方向上运动,因此只有两个自由度(一小片纸,在一大张纸内2个方向上滑动
1D卷积,卷积核只在1个方向上运动,因此只有一个自由度(一条滑窗,在一大长线上1个方向上滑动

一个卷积核运算一次 得到一个输出值(先乘法再加法)


接下来考虑,卷积层如何进行计算,即将卷积核作用在多个输入通道上,又得到多个输出通道。

下图展示了CxHxW的输入特征,通过2D卷积层,得到1xHxW的输出特征的过程。

用pytorchAPI描述就是:

torch.nn.Conv2d(in_channels=C, out_channels=1, kernel_size=3, stride=1, padding=0, dilation=1, groups=1, bias=Falese, padding_mode='zeros', device=None, dtype=None)

该卷积层参数量为:输入通道数*输出通道数*kernel_size*kernel*size=C*3*3*1

该2D卷积中的所有kernel都需要在HW维度上做步长为1的滑动。因此,我们将多个输入通道拼接在一起,同时将C个卷积核拼接在一起,滑动一轮,边滑动边做乘法。再做一次加法得到单通道结果(绿色)
在这里插入图片描述
如果输出通道为K,则如下图所示,卷积层参数量为:C*3*3*K
在这里插入图片描述

取某一通道中的3D特征为例,做TxHxW方向上的滑动3D卷积。该3*3*3的3D卷积核,在三个方向上滑动得到的一个THW都更小的3D输出特征。
在这里插入图片描述
而如果考虑多通道,和2D卷积层同理,3D卷积层也对同一输入特征,做并行的乘法和加法运算。
在这里插入图片描述

3D卷积

下图是C3D论文中配图 (b) (c) 都是视频cube作为输入
在这里插入图片描述
视频输入:CxTxWxH 不能用一个立方体表示了;
考虑输入:C个并列的维度为TxWxH的cude(多个蓝色cube同时算)
用一个小方块在cube中3个方向滑动,得到一个厚度为时间步的输出


2D卷积情况下,此文第一张图 橘色块到绿色片的转化,上图为过程演示(https://poloclub.github.io/cnn-explainer/)
在这里插入图片描述

3D卷积情况下,不画图解释了,就是多个“维度相同的cube”先滑动乘法,再加法到同一个cube,以上2d图中的纸片看作一个个切片面包

卷积分解

先说一个 1x1 卷积,不属于卷积分解
如果我们要做5x5卷积,先在之前加一个1x1卷积 用于降维/通道(1x1卷积核个数<输入通道数 即可实现低成本降维/通道)
原本一步操作分成2步操作,有分解那味了

// 假设
input feature maps:28×28  channel:256
1x1 convolutional layer:1x1 channel:16
5x5 convolutional layer:5x5 channel:32
   
// 仅一步32个5x5卷积
卷积核参数量 = 256x5x5x32 = 201800

// 两步:5x5 卷积之前经过了 1x1 卷积
输入的 size 为 28x28x256 经过 1x1 卷积后 size 为 28x28x16 (通道数256降低至16)
再5x5卷积
卷积核参数量 = 256x1x1x16 + 16x5x5x32 = 16896

同理,1x1卷积核个数>输入通道数,即可升维度

Q:是否损失信息?
A:理论模糊(跨通道信息交互啦耦合解耦通道信息啦不损失分辨率啦),实验结果说明并没有损失很多信息,最大好处减少参数量~


空间可分离卷积

1个二维卷积核分解为2个一维卷积核点积

比起卷积,空间可分离卷积要执行的矩阵乘法运算也更少。假设我们现在在 m x m 卷积核、卷积步长=1 、填充=0 的 N x N 图像上做卷积。传统的卷积需要进行 (N-2) x (N-2) x m x m 次乘法运算,而空间可分离卷积只需要进行 N x (N-2) x m + (N-2) x (N-2) x m = (2N-2) x (N-2) x m 次乘法运算

深度(通道)可分离卷积

Depthwise Separable Convolution

2D卷积的 多通道输出,不add,而进行stack
在这里插入图片描述

Pointwise Separable Convolution

上一步stack后的多通道输出,通过一个"1x1x通道数"的卷积核计算,一个核输出一个通道
在这里插入图片描述流程如下:
在这里插入图片描述等同于
在这里插入图片描述
肉眼可见参数量的大大缩小
3x3x3x128 -> 3x3x3 + 1x1x3x128

另一篇解释:https://yinguobing.com/separable-convolution/#fn2


S3D, (2+1)D, P3D

k_t x k x k --> 1x k x k (saptial, depthwise) + k_t x 1 x 1(temporal, pointwise)

CSN

Channel-Separated Convolutional Networks
下图是CSN 论文配图:卷积(chanel合并),组卷积(组内channel合并),depthwise卷积(channel不合并)
在这里插入图片描述

分解channel

CHW为输入:

  • 普通卷积:空间下采样,通道合1
  • channel-wise卷积:空间下采样,通道拼接
  • point-wise卷积,空间不变,通道合1
  • 75
    点赞
  • 277
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
3D卷积和RNN(循环神经网络)是两种不同的神经网络结构,用于处理不同类型的数据和任务。下面是它们之间的比较: 1. 数据类型:3D卷积主要用于处理图像、视频等三维数据,而RNN适用于序列数据,如文本、语音等。 2. 特征提取:3D卷积通过在多个维度上执行卷积运算来提取空间和时间特征。它能够同时捕捉到数据的空间和时间相关性,适合于处理视频等具有时序信息的数据。而RNN通过循环神经单元在序列中传递信息,并在每个时刻依赖前一个时刻的隐藏状态来处理序列数据。 3. 上下文建模:3D卷积网络在每个时间步都独立地处理输入,没有显式地建模上下文信息。相比之下,RNN能够通过隐藏状态来记忆和传递历史信息,具有更强的上下文建模能力。 4. 参数共享:3D卷积具有参数共享的特性,即同一个卷积核在输入的不同位置共享权重。这种参数共享使得3D卷积网络可以对输入数据进行平移不变性的处理。而RNN没有参数共享的机制,每个时刻都有独立的参数。 5. 计算效率:由于参数共享和并行计算的特性,3D卷积网络在处理大规模数据时可以更高效地进行计算。相比之下,RNN在处理长序列时可能会面临梯度消失和梯度爆炸等问题,导致训练困难。 总的来说,3D卷积和RNN是两种不同的神经网络结构,适用于处理不同类型的数据和任务。3D卷积适用于处理图像、视频等三维数据,能够同时捕捉空间和时间特征;而RNN适用于处理序列数据,能够建模上下文信息。选择合适的网络结构应根据具体任务和数据类型来确定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值