3D CNN 网络结构
在8.4节内容中我们详细介绍了一种用于对时空数据进行特征提取的ConvLSTM模型其有效地结合了RNN和CNN各自的优点对输入数据在时间和空间两个维度进行建模。在接下来的这节内容中将会介绍另外一种拓展自传统卷积网络的3D卷积模型来对时空数据进行特征提取。在传统的卷积神经网络中卷积操作可以直接用于对二维图像数据进行特征提取但是对于类似视频这样的时空数据却不能对其时间维度上的信息进行建模。在时空数据中原始数据是由一系列连续的帧二维图像组成每一帧内部包含了空间信息而帧与帧之间还存在时间关系因此传统的二维CNN只能对单独的帧进行处理而无法捕捉到帧与帧之间的时序特征。基于这样的动机姬水旺[1]等人在2014年提出了一种同时能够考虑时序信息的卷积模型3D Convolutional Neural Network, 3DCNN。3DCNN的基本结构与传统的CNN类似由多个卷积层、池化层和全连接层组成但是3DCNN在卷积操作中使用了3D卷积核同时在池化操作中同时考虑了时间和空间维度这使得3DCNN能够捕捉数据中的时空特征并在处理时间序列或空间序列数据时更加有效。8.5.2 3DCNN结构1. 卷积层在3DCNN中其核心部分便是其中的三维卷积操作。根据8.4.2节内容可知时空数据一共包含有4个维度即长度、宽度、通道数和时序长度。因此在3DCNN中卷积层对输入数据进行卷积操作时除了像二维卷积一样需要在长度和宽上进行滑动还需要以固定深度在时序长度这个维度上进行滑动并在每个位置上与输入数据进行逐元素相乘求和从而生成输出特征图。如图8-7所示从上到下依次为2D卷积对单帧数据、2D卷积对多帧数据和3D卷积对多帧数据的特征提取过程。图 8-7 2D卷积与3D卷积对比图[2]在图8-7(a)中使用卷积核通道数为单个数据帧帧通道数的2D维卷积对单帧数据进行特征提取后得到的仍旧只是一个数据帧在图8-7(b)中使用卷积核通道数为单帧通道数乘以数据帧数的2D卷积后得到的也只是一个数据帧在图8-7(c)中使用卷积核通道数为$d(d图8-8 3D卷积计算示例图如图8-8所示左侧为原始的输入数据和卷积核对于输入数据来说一共包含有5帧其中每一帧中有2个特征通道右侧为3D卷积计算结果后的结果一共包含有4帧每一帧有3个特征通道。由此可知对于3D卷积来说卷积核可通过长度、宽度、通道数、深度和卷积核个数这个5个维度来进行表示。例如对于图8-8中的示例来说该卷积核的长度和宽度均为、通道数和深度均为2、卷积核的个数为3对应的便是输出的3个通道。2. 计算示例在清楚3D卷积的计算原理后我们再通过一个实际的计算示例来体会整个计算过程。现在假定原始输入数据有3帧其中每一帧有2个特征通道长宽均为5即形状为[in_channels, frame_len, height, width]卷积核个数为2长宽均为3深度为2即形状为[out_channels, in_channels, depth, height, width]。整体相关信息如图8-9所示。图8-9 3D卷积输入和卷积核示意图如图8-9所示左侧便是原始的输入数据帧其形状为[2,3,5,5]右侧有为卷积核与偏置其中卷积核的形状为[2,2,2,3,3]。由此可知在不进行填充的情况下3D卷积最终计算完成后特征图一共包含有2帧每一帧的长宽均为3特征通道数为2。进一步3D卷积的计算过程可以通过图8-10来进行表示。图8-10 3D卷积计算示意图如图8-10所示对于第1个卷积核来说第1帧的第1个值3的计算过程如式(8-2)所示。可以发现其计算过程同2D卷积类似即卷积核每个位置上与输入数据进行逐元素相乘求和。同理第2帧的最后一个值36的计算过程如式(8-3)所示。在完成第1个卷积核的计算过程后可以根据同样的做法再次完成第2个卷积核的计算过程最终得到的计算结果如图8-11所示。图8-11 3D卷积计算结果图如图8-11所示便是最后计算得到的结果其形状为[out_channels, frame_len_out, h_out, w_out]即[2,2,3,3]。以上完成计算示例代码可参见Code/Chapter08/C06_3DCNN/main.py文件。