Q1:什么是2D卷积(多通道)
A1:这里假设输入层是一个 5 x 5 x 3 矩阵,它有 3 个通道。过滤器则是一个 3 x 3 x 3 矩阵。首先,过滤器中的每个卷积核都应用到输入层的 3 个通道,执行 3 次卷积后得到了尺寸为 3 x 3 的 3 个通道。
面向多通道的 2D 卷积的第一步:过滤器每个卷积核分别应用到输入层的 3 个通道上,之后,这 3 个通道都合并到一起(元素级别的加法)组成了一个大小为 3 x 3 x 1 的单通道。这个通道是输入层(5 x 5 x 3 矩阵)使用了过滤器(3 x 3 x 3 矩阵)后得到的结果。
notes:强调两点:
- 滤波器的卷积核数量与前一层Feature Maps数量相等。
- 一个滤波器只在当前层产生一个Feature Map,可通过滤波器的数量来控制产生的Feature Map的数量。
思考一下,如果卷积核数量小于前一层通道数怎么办?这就是3D卷积的思想来源。
1.论文背景
2D卷积是针对一张原始图像或者视频的一帧进行的特征提取,但是很多场景中多张图片(MRI slices)或者视频的连续帧之间往往存在关联信息,这就是3D CNN提出的背景。3D CNN主要是为了解决图片之间的关联信息,增加一个新的维度信息。
2.Flash point
2D CNN主要将视频的一帧作为输入,但这就忽略了各帧之间的关联信息。而3D CNN以连续的多帧作为输入,增加了时间维度的信息,能够提取到更具表达性的特征。
3.论文细节
3.1 3D卷积
3D卷积的突出特点:卷积核数量小于前一层通道数
如果是2D卷积应该就是一个卷积核数量为4的滤波器去卷积产生一张Feature Map。但是3D卷积共享一个卷积核产生了多张Feature Map,这些Feature Map之间包含着时间维度的信息,即连续帧之间的关联信息。
上图中时间维度上卷积核大小为3,并且连接使用颜色进行编码,所以共享权值的是相同的颜色,在三维卷积中,将相同的三维卷积核应用于输入视频中重叠的三维立方体重,提取特征。
但是如果想要不同类型的特征呢?与2D卷积一样,用不同的滤波器即可。
上图中,从连续的帧中提取多个特征。多个三维卷积可以应用于相邻帧,提取多个特征。如图所示,连接集是用颜色编码的,因此共享权重是相同的颜色。请注意,所有6组连接都不共享权重,从而导致右侧出现两个不同的特征映射。
3.2 hardwired kernels
通过上面的讲解你应该知道3D卷积的真正实现了,但是在实际应用中我们不可能直接对连续的帧直接做3D卷积,因为这样提取的信息过于简单,所以需要在3D卷积之前做一次hardwired kernels 卷积。
解释一下这里5种颜色的33个Feature map,作者利用 hardwired kernels 生成了灰度、x方向梯度、y方向梯度、x方向光流、y方向光流五种特征信息(gray,gradient-x,gradient-y, optflow-x, and optflow-y),前面三个通道的信息可以直接对每帧分别操作获取,后面的光流(x,y)则需要利用两帧的信息才能提取,因此H1层的特征maps数量:(7+7+7+6+6=33),特征maps的大小依然是60 * 40。
3.3 3D-CNN
3D-CNN架构室友1个hardwired kernels层,三个卷积层,两个下采样层,一个全连接层组成。
notes:
1.上图2个红框表示两个不同的滤波器得到的特征图。
2.上图这种3D卷积由于是对五种特征分开进行卷积的,因此卷积核的数量是3.1节中所有通道一起卷积的卷积核数量的五倍。
在如图3所示的这个架构中,我们考虑以当前帧为中心的7个大小为60×40的帧作为3D CNN模型的输入
H1.首先使用hardwired kernel层使的输入的帧形成多个channel,这使得在第二次的5个不同channel中有33个不同特征信息:gray,gradient-x,gradient-y, optflow-x, and optflow-y.
gray channel:包含7个输入帧的灰度像素值。
gradient-x,gradient-y:分别映射计算7和输入帧每个帧延水平和垂直方向的梯度
optflow-x和optflow-y:分别包含沿水平和垂直方向的光流场,从相邻的输入帧计算中得出。
C2.使用3D卷积内核大小为7x7x3(7x7在空间维度上,3在时间维度)在5个channel上分别进行,为了增加特征映射的数量,在每个位置应用了两组不同的卷积,导致C2层有2组特征映射,每组包含23个特征映射,该层包含1480个可训练参数。
S3:在随后的下采样层S3中:我们在C2层的每个feature map上应用2×2下采样,导致feature map数量相同,但空间分辨率降低。该层可训练参数数为92个。
C4:下一个卷积层C4是通过分别对两组特征映射中的5个channel中的每个通道应用核大小为7×6×3的3D卷积得到的。为了增加特征映射的数量,我们在每个位置应用3个带有不同内核的卷积,导致在C4层中产生6组不同的特征映射,每组包含13个特征映射。该层包含3810个可训练参数。
S6:下一层S5通过在C4层的每个feature map上应用3×3下采样,得到相同数量的feature map,但降低了空间分辨率。该层可训练参数个数为156个。在这个阶段,时间维的大小已经比较小了(gray, gradient-x, gradient-y为3,optflow-x和optflow-y为2),所以我们只在这一层的空间维度进行卷积。所使用的卷积内核的大小为7×4,因此输出特性映射的大小减少为1×1。
C6:C6层由128个1×1大小的feature map组成,每个feature map都连接到S5层的所有78个feature map,导致289536个可训练参数。
通过多层卷积和子采样,将7个输入帧转换为128D特征向量,捕获输入帧中的运动信息。输出层由与动作数量相同的单元组成,每个单元完全连接到C6层的128个单元。
input—>H1
神经网络的输入为7张大小为60*40的连续帧,7张帧通过事先设定硬核(hardwired kernels)获得5种不同特征:灰度、x方向梯度、y方向梯度、x方向光流、y方向光流,前面三个通道的信息可以直接对每帧分别操作获取,后面的光流(x,y)则需要利用两帧的信息才能提取,因此H1层的特征maps数量:(7+7+7+6+6=33),特征maps的大小依然是60* 40。
H1—>C2
用两个7*7*3的3D卷积核对5个channels分别进行卷积,获得两个系列,每个系列5个channels(7* 7表示空间维度,3表示时间维度,也就是每次操作3帧图像),同时,为了增加特征maps的个数,在这一层采用了两种不同的3D卷积核,因此C2层的特征maps数量为:(((7-3)+1)* 3+((6-3)+1)* 2)* 2=23* 2。这里右乘的2表示两种卷积核。特征maps的大小为:((60-7)+1)* ((40-7)+1)=54 * 34。然后为卷积结果加上偏置套一个tanh函数进行输出。(典型神经网。)
C2—>S3
2x2池化,下采样。下采样之后的特征maps数量保持不变,因此S3层的特征maps数量为:23 *2。特征maps的大小为:((54 / 2) * (34 /2)=27 *17
S3—>C4
为了提取更多的图像特征,用三个7*6*3的3D卷积核分别对各个系列各个channels进行卷积,获得6个系列,每个系列依旧5个channels的大量maps。
我们知道,从输入的7帧图像获得了5个通道的信息,因此结合总图S3的上面一组特征maps的数量为((7-3)+1) * 3+((6-3)+1) * 2=23,可以获得各个通道在S3层的数量分布:
前面的乘3表示gray通道maps数量= gradient-x通道maps数量= gradient-y通道maps数量=(7-3)+1)=5;
后面的乘2表示optflow-x通道maps数量=optflow-y通道maps数量=(6-3)+1=4;
假设对总图S3的上面一组特征maps采用一种7 6 3的3D卷积核进行卷积就可以获得:
((5-3)+1)* 3+((4-3)+1)* 2=9+4=13;
三种不同的3D卷积核就可获得13* 3个特征maps,同理对总图S3的下面一组特征maps采用三种不同的卷积核进行卷积操作也可以获得13*3个特征maps,
因此C4层的特征maps数量:13* 3* 2=13* 6
C4层的特征maps的大小为:((27-7)+1)* ((17-6)+1)=21*12
然后加偏置套tanh。
C4—>S5
3X3池化,下采样。此时每个maps的大小:7* 4。通道maps数量分布情况如下:
gray通道maps数量= gradient-x通道maps数量= gradient-y通道maps数量=3
optflow-x通道maps数量=optflow-y通道maps数量=2;
S5—>C6
进行了两次3D卷积之后,时间上的维数已经被压缩得无法再次进行3D卷积(两个光流channels只有两个maps)。此时对各个maps用7*42D卷积核进行卷积,加偏置套tanh(烦死了!),获得C6层。C6层维度已经相当小,flatten为一列有128个节点的神经网络层。
C6—>output
经典神经网络模型两层之间全链接,output的节点数目随标签而定。
下面是整个过程中3DCNN各通道数量变化情况以及特征maps大小变化情况:
深度学习之3D卷积神经网络_zlinxi-CSDN博客_3d卷积神经网络