目录
论文学习
摘要
开篇明义,三点结论:
- 3D 卷积网络比2D卷积更适合提取时空特征;
- 3x3x3的卷积核是最好的filter结构;
- C3D与线性分类器的组合有在UCF101数据集上很好的分类效果
介绍
视频分类在动作识别、非常规动作识别、活动理解、视频内容描述等领域;视频描述器的四个特点:通用、有竞争力、高效、简洁;卷积网络并不适用于处理视频数据,因此提出 C3D.
不同数据集上的表现:
除Sport 1M上,其他数据比之前最好的都要好。
优秀!
相关研究
传统机器视觉领域的SIFTs(spatio-temporal interest points)、SIFT-3D、HOG3D算法。对大规模数据集合表现intractable;
前人在3D卷积网络上的研究对比,突出点提出适用于大规模视频数据集合,具有3D卷积、3Dpooling提取时间信息的深度网络。
网络结构
图一对比了3D卷积的机构特点。对于多帧的视频输入,传统2d卷积核的深度于视频的帧数相同,输出只有一层输出,因此丢失了时域信息(b);相反,3D卷积核的深度d小于输入画面的帧数L,因此一个卷积核操作以后可以得到多特征层,因而保留了时域信息(c).
可以参看最后一张图中的数据维度,一般的conv2d的输入数据维度为(batch, w, h, channels), 卷积核和stride都是二维参数,即在(w, h)维度上进行操作;
对于conv3d为(batch, frames, w, h, channels),卷积核和stride都是三维参数,即在(frames, w, h)维度上进行操作。
超参设置
对于UCF101的视频数据输入,压缩成3x16x128x171的格式
卷积核深度
卷积核的深度d的确定:相同深度(1,3,5,7);不同深度(逐步加深3-3-5-5-7,逐步减小7-5-5-3-3)
对比结果如下:
明显采用相同卷积核深度3的网络性能最好。
C3D网络
通过上面的对该笔提出了C3D网络的基本框架。
3x3x3的卷积核大小,1 x 1 x 1stride
2x2x2的pooling层, 2 x 2 x 2stride
整体结构:
sport-1M数据集上表现
结果上看比文献29的预测准确度低,但作者说这主要是受到输入画面帧数较多的影响。
网络可视化
对conv5b特征层进行可视化,可以发现C3D网络相比2D网络对运动物体更加敏感。
动作识别分类
UCF101数据集的动作识别结果
网络的一些组合和比较,比如C3D (3 nets) 表示三组C3D的fc6同时并联,与SVM结合后能提高预测精度(这里三组C3D训练差别没有太看明白)
网络compactness(紧密度?)
通过提取不同算法的全连接层提取的体征,适用PCA算法降维到10后,对比算法的准确度,进而比较compactness性能。
相同的fc6特征层,使用t-SNE算法降维到2维可视化空间。
可见C3D对不同类型的视频在2维空间中有很好的分离
ASLAN动作识别数据集表现
场景识别
YUPENN(420 videos of 14 scene categories)和Maryland(130 videos of 13 scene categories)数据集。
同样优秀!
耗时比较
一样的优秀!
附录
卷积神经网络,可视化的展示
参考
Learning Spatiotemporal Features with 3D Convolutional Networks
下载资源
http://vlg.cs.dartmouth.edu/c3d/
代码实操
C3D网络构建
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers, models, Input
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Conv3D, MaxPooling3D, Dense, Flatten, Dropout, ZeroPadding3D
def C3Dnet(nb_classes, input_shape):
input_tensor = Input(shape=input_shape)
# 1st block
x = Conv3D(64, [3,3,3], activation='relu', padding='same', strides=(1,1,1), name='conv1')(input_tensor)
x = MaxPooling3D(pool_size=(1,2,2