前段时间参加了百度深度学习论文复现营——视频分类论文复现,在此做一些学习记录,希望可以帮助到有需要的朋友
1. 视频分类论文综述
1.1 任务介绍
任务:将视频分到指定类别集合的一个或多个,精细粒度:主要行为识别
应用场景:视频自动标注、视频搜索、监控视频行为理解、自动驾驶、互联网视频合规审查
数据集:
- HMDB-51 (2011)
- UCF-101(2012)
- Kinetics(2017~2019)
1.2 任务介绍
- 视频由空间维度和时间维度组成
- 静态图像特征:场景/目标及其关系等
- 运动特征:目标的帧间运动等
- 音频特征:语音内容、说话人等
- 外部特征:目标关系先验、运动模式等
1.3 主流方法
- 双流网络:
人类有两条视觉信息处理通道,一条侧重于静态视觉场景/目标,另一条侧重于运动。
输入:静态图像和两帧图像之间的光流 - 静态图像特征融合:
提取视频不同时刻多帧图像的特征,聚合生成视频级特征,进而分类。
代表:LRCN(CNN+LSTN)、ActionVLAD、Attention Cluster - 3D卷积:
C3D、P3D、I3D(将2D卷积膨胀为3D卷积的方法)
1.4 趋势展望
- 训练加速:挂载成熟模块(无需训练)、避免复杂光流计算
- 测试加速:轻量级主干网(加速推理)
- 设计轻量化的视频分类模型
- 引入新的信息模态(如:人体关键点分布)
2. 复现论文介绍:3D Resnet
Reference:(ICCV2017 workshop)Learning Spatio-Temporal Features with 3D Residual Networks for Action Recognition 点评:整篇论文的创新性在于拓展了2D Resnet,以及贡献代码的简洁性
3. 复现步骤
3.1 整体流程
- 数据集获取 √
- 数据预处理
- 构建前向网络 √
- 构建反向传播 √
- 精度对齐:小数据集训练(2个epoch)
3.2 精度对齐
- 去除随机性:去除dropout等 √
- 数据对齐:输入数据 √
- 模型参数对齐:
pytorch 和 Paddle 网络参数输出并手动对齐 √
pytorch预训练模型参数转换为Paddle √
将保存的模型载入并设置Paddle模型初始化 √ - Loss对齐
- 小规模实验
4. 实际复现问题
因实际复现时间受限,实际完成了√部分的复现,最后测试集分类准确率为44%,验收标准为92%
(1)借用百度baseline
参考项目:https://aistudio.baidu.com/aistudio/projectdetail/674480
调用config文件报错 KeyError:’TRAIN’
原因是路径出错,configs写成了config,不过报错应该先提示找不到文件比较人性化。
此外配置中对应参数应改为论文参数:
seg_num = 1 #划分为几段
seglen = 16 #每个片段取n帧(随机抽)
(2)BatchNorm3d 对应paddle的BatchNorm
torch 与 paddle API对照表中对应的应该是batch_norm,实际应该用BatchNorm
(3)Paddle中的API勘误
Fluid.dygrapy.Conv3D( num_fliters = ) 报错提示没有num_fliters 参数,实际是num_filters
(4)如何遍历模块的问题
Pytorch中nn.moudles可以返回网络各层模块,对应paddle中用fluid.dygraph.Layer.sublayers 代替
总结
第一次复现paddle,中间也有很多对原文代码不理解复现不到位的地方,欢迎大家指正