C3D阅读笔记
Paper:Learning Spatiotemporal Features with 3D Convolutional Networks
主要研究内容及贡献
- 实验证明了3D卷积神经网络比起2D卷积神经网络能够更好地同时学习时空特征(Spatiotemporal Features)。
- 探索了所有层设置相同卷积核大小为 3 × 3 × 3 3\times3\times3 3×3×3,实验效果最好。
- 3D卷积神经网络提取的特征输入到线性模型中,相对于一些其他方法(文中对比方法)能够取得更好的效果。(从这一点看,3D卷积神经网络还挺适合拿来做特征提取的)。
2D卷积网络与3D卷积网络对比
2D卷积在一张图上,输出的是一张图像,2D卷积在多张图上,输出仍然是一张图像,帧数被当成了通道数。3D卷积在一个视频块(video volumn)上,输出还是一个视频块,它保留了输入信号在时间维度的信息。
探索3D卷积网络的框架
数据集
UCF101:中等大小的数据集
在大数据集上训练深度网络耗时长,因此选择在中等大小的数据集上来探索最好的3D卷积框架。
探索过程
注释说明:
- 视频片段大小为 c × l × h × w c\times l\times h\times w c×l×h×w, c c c是通道数, l l l是帧数, h × w h\times w h×w是每帧高和宽。
- 3D卷积核和池化核大小为 d × k × k d\times k\times k d×k×k, d d d是时间上的深度, k k k是空间上核尺寸。
基本网络设置
- 任务:输入为视频片段(video clips),输出为视频中的动作类别。
- 输入:所有视频帧裁剪为 128 × 171 128\times171 128×171(大约为数据集分辨率的一半),每个视频片段帧数为16,且不重叠。输入维度为 3 × 16 × 128 × 171 3\times16\times128\times171 3×16×128×171。
在训练阶段会将输入片段随机裁剪为 3 × 16 × 112 × 112 3\times16\times112\times112 3×16×112×112。
- 网络结构:网络有5个卷积层和5个池化层,每个卷积层后面紧接着一个池化层,2个全连接层和一个softmax层来预测动作类别。
1到5,5个卷积层的通道数分别为64,128,256,256,256。
所有卷积层设置适当padding,步长为1,经过所有卷积层后,输出的尺寸不变。
所有池化层为最大池化,第一个池化层核尺寸为 1 × 2 × 2 1\times2\times2 1×2×2,其他为 2 × 2 × 2 2\times2\times2 2×2×2。第一层之所以这样设计,是因为1表示只在单帧上做最大池化,而不是2帧一起,不会过早地将时间维度的信息进行合并,在早期阶段能够保留时间维度的信息,并且视频帧为16帧,再经过4次时间维度的池化,刚好完全坍塌。
2个全连接层有2048个输出。训练时,批尺寸为30个clips,学习率为0.003。每4个epochs后,学习率缩小10倍。16个epochs后,训练停止。
不同网络框架(卷积核时间深度大小的探索)
在上面网络的基本设置中,没有提到卷积核的大小。接下来就是要探索卷积核最合适的尺寸。文章就此提出两种实验想法:(1)同时间深度,即所有卷积层有相同的时间深度核;(2)不同时间深度,即不同层,卷积核的时间深度设置不同。
针对第一个想法,准备了4个网络,每个网络核时间深度
d
d
d相同,分别为1,3,5,7。(网络命名depth-d)
针对第二个想法,准备了2个网络,一个核时间深度递增:3-3-5-5-7,一个核时间深度递减:7-5-5-3-3,分别是从1到5,5个卷积层的核时间深度大小。
探索最优框架
左图为同核时间深度网络,可以看出depth-1
效果最差(这个网络其实就是2D卷积网络),depth-3
效果最好。右边是不同核时间深度网络,同样是depth-3
效果更好。根据实验,
3
×
3
×
3
3\times3\times3
3×3×3是最佳的核尺寸。
在大数据上验证
大数据集
I380K:380K个Instagram video,382类video concepts。
验证过程
在I380K上,训练两个2D卷积网络和一个3D卷积网络,根据最后的准确率来评估3D卷积网络是否真的比2D卷积网络表现好。
两个2D卷积网络分别是AlexNet和VGG NetA。3D卷积网络类似于VGG NetA,除了将2D卷积和池化替换为3D操作。
3D卷积比AlexNet和VGG NetA分别高出4.5%和2%。
时空特征学习
C3D网络框架
- 8个卷积层
- 5个池化层
- 2个全连接层
- 1个softmax输出层
所有的3D卷积核都是 3 × 3 × 3 3\times3\times3 3×3×3,步长为1(时间和空间)。第一个池化层为 1 × 2 × 2 1\times2\times2 1×2×2,剩余所有池化层为 2 × 2 × 2 2\times2\times2 2×2×2。每个全连接层有4096个输出单元。
数据集
Sports-1M数据集:包含110万个运动视频,对比UCF101数据集,在动作类别上,前者是后者的5倍,在视频数量上,前者是后者的100倍。
训练阶段
对每个长时间的训练视频,随机抽取出5个2秒长的视频片段。
片段尺寸resize到
128
×
171
128\times171
128×171。训练采用SGD,批尺寸为30,初始学习率为0.003,每经过150K次迭代,学习率缩小一半。
在训练过程中数据增强的手段有两个,一个是随机裁剪输入片段为 16 × 112 × 112 16\times112\times112 16×112×112,另外还有50%的概率进行视频翻转。
除了从0开始训练C3D网络,文章还采用了在I380K上预训练过的模型。
数据集分类结果
C3D在学习什么
我们观察到,C3D首先关注第一帧中的外观,然后跟踪后续帧中的运动。C3D与标准2D ConvNets的不同之处在于,它选择性地兼顾运动和外观。
动作识别
数据集
UCF101:包含13320个视频,共101类。
分类模型
提取出C3D特征,并将其输入到多分类线性SVM中训练。实验采用3中C3D描述子:C3D trained on I380K,C3D trained on Sports-1M,C3D trained on I380K and fine-tuned on Sports-1M。在多个网络设置中,我们将这些网络 L 2 L2 L2归一化的C3D描述符连接起来。