一、环境配置
-Python 3+发行版
-PyTorch >= 0.4.0
可选:
-Matplotlib:可视化预测
-ffmpeg:导出MP4视频(下载快到最后卡住了可以尝试切换网络)
-imagemagick:导出gif
-MATLAB:用HumanEva-I的实验中来转换数据集
二、数据集设置
1、安装依赖
pip install cdflib
pip install h5py
pip install numpy
2、下载H36M数据集
提取名为Poses_D3_Positions_S*.tgz的文件。(主题1、5、6、7、8、9、11)到一个公共目录。你的目录如下:
/path/to/dataset/S1/MyPoseFeatures/D3_Positions/Directions 1.cdf
/path/to/dataset/S1/MyPoseFeatures/D3_Positions/Directions.cdf
...
3、运行数据准备代码
cd data
python prepare_data_h36m.py --from-source-cdf /path/to/dataset
cd ..
生成的数据文件存放在data目录下:
4、下载Mask R-CNN and CPN detections
cd data
wget https://dl.fbaipublicfiles.com/video-pose-3d/data_2d_h36m_cpn_ft_h36m_dbb.npz
wget https://dl.fbaipublicfiles.com/video-pose-3d/data_2d_h36m_detectron_ft_h36m.npz
cd ..
三、预训练模型
1、下载
mkdir checkpoint
cd checkpoint
wget https://dl.fbaipublicfiles.com/video-pose-3d/pretrained_h36m_cpn.bin
wget https://dl.fbaipublicfiles.com/video-pose-3d/pretrained_humaneva15_detectron.bin
cd ..
2、测试于Human3.6M,运行:
python run.py -k cpn_ft_h36m_dbb -arc 3,3,3,3,3 -c checkpoint --evaluate pretrained_h36m_cpn.bin
四、从零开始训练
1、训练指令
python run.py -e 80 -k cpn_ft_h36m_dbb -arc 3,3,3,3,3
2、Training from scratch 和预训练模型的区别:
特性 | Training from scratch | Using pretrained models |
---|---|---|
初始状态 | 随机初始化参数 | 使用已有的预训练权重 |
训练时间 | 较长,需要更多计算资源 | 较短,因为预训练已学到特征 |
数据需求 | 需要大量的数据才能收敛 | 数据量需求较小 |
适用任务 | 新任务或特定领域任务 | 通用任务或相似领域任务 |
模型表现 | 可能需要更多时间调优 | 起点高,容易达到较好效果 |
3、时序数据的优化
- 样本相关性问题:由于时间序列数据中相邻帧的相关性,作者通过选择来自不同视频片段的训练样本来减少相关性,以提高模型训练的稳定性和泛化能力。
- 训练优化:通过替换扩张卷积为步幅卷积,以及利用批归一化动量调度等技术,优化了训练过程。
- 推理优化:在推理阶段,通过不使用时间维度池化,并重用中间状态,提高了推理效率。
- 数据增强:通过水平翻转等数据增强策略,增强了模型的鲁棒性。
五、半监督训练
python run.py -k gt --subjects-train S1 --subset 0.1 --subjects-unlabeled S5,S6,S7,S8 -e 200 -lrd 0.98 -arc 3,3,3 --warmup 5 -b 64
大约65.2毫米误差,如果只训练监督,大约80.7毫米。
六、评估指标
协议 | 对齐方式 | 衡量的误差类型 | 应用场景 |
---|---|---|---|
MPJPE | 无对齐 | 关节点的绝对位置误差 | 通用评估,直接衡量模型输出的精度 |
P-MPJPE | 平移 + 旋转 + 尺度对齐 | 关节点的相对位置误差 | 对姿态形状的预测精度感兴趣 |
N-MPJPE | 尺度对齐 | 关节点的相对位置误差(仅考虑比例一致性) | 半监督或弱监督场景,忽略平移和旋转的影响 |