基于MMSkeleton框架构建自定义骨骼数据集指南
前言
MMSkeleton是一个专注于骨骼动作识别的开源框架,它支持多种骨骼数据格式。本文将详细介绍如何在该框架下构建自定义的骨骼数据集,包括从视频源提取骨骼数据以及直接使用已有骨骼数据的两种方式。
数据集格式说明
MMSkeleton框架支持两种主要的数据格式:
- .npy格式:NumPy数组格式,适合高效存储和读取
- .json格式:推荐格式,具有更好的可读性和扩展性
JSON数据结构详解
JSON格式的骨骼数据包含三个主要部分:
{
"info": {
"video_name": "示例视频.mp4",
"resolution": [宽度, 高度],
"num_frame": 总帧数,
"num_keypoints": 关键点数量,
"keypoint_channels": ["x", "y", "score"],
"version": "数据版本"
},
"annotations": [
{
"frame_index": 帧序号,
"id": 检测ID,
"person_id": 人物ID,
"keypoints": [[x坐标, y坐标, 置信度], ...]
},
...
],
"category_id": 动作类别ID
}
其中:
keypoints数组中的每个元素代表一个身体关键点score表示该关键点的检测置信度category_id对应动作类别,若未标注则为-1
从视频构建数据集
准备工作
- 准备视频文件:建议将同类动作的视频放在同一目录
- 确保视频命名规范,便于后续管理
处理流程
- 视频解析:框架会逐帧读取视频
- 人物检测:使用预训练的检测模型定位视频中的人物
- 姿态估计:对检测到的人物进行关键点提取
- 数据存储:将提取的骨骼序列保存为JSON格式
执行命令示例
mmskl configs/utils/build_dataset_example.yaml \
--video_dir 视频目录 \
--category_annotation 类别标注文件 \
--out_dir 输出目录 \
--gpus GPU设备号
类别标注文件格式
类别标注文件采用JSON格式,包含两个部分:
{
"categories": ["类别1", "类别2", ...],
"annotations": {
"视频文件名1.mp4": {"category_id": 0},
"视频文件名2.mp4": {"category_id": 1},
...
}
}
使用已有骨骼数据
如果已有骨骼数据,只需将其转换为上述JSON格式即可直接使用。转换时需注意:
- 关键点顺序需与框架预期一致
- 确保坐标系和归一化方式正确
- 置信度分数范围应在[0,1]之间
高级自定义
对于特殊需求,可以自定义数据加载器:
- 继承基础数据加载器类
- 实现数据读取和预处理逻辑
- 在配置文件中指定自定义加载器
# 示例自定义数据加载器
class CustomDataLoader(BaseDataLoader):
def __init__(self, ...):
# 初始化代码
pass
def load_data(self, ...):
# 自定义数据加载逻辑
pass
模型训练与测试
构建好数据集后,可以使用ST-GCN等模型进行训练:
# 训练命令
mmskl configs/recognition/st_gcn/自定义配置/train.yaml
# 测试命令
mmskl configs/recognition/st_gcn/自定义配置/test.yaml --checkpoint 模型路径
常见问题与建议
-
数据质量问题:
- 确保视频中人物清晰可见
- 复杂场景建议使用更强大的检测模型
- 可对提取的骨骼数据进行可视化检查
-
性能优化:
- 批量处理视频提高效率
- 合理设置GPU数量加速处理
- 对大视频可考虑分段处理
-
扩展性考虑:
- 为数据集添加更多元信息
- 考虑多视角数据融合
- 设计灵活的数据增强策略
结语
通过本文介绍,您应该已经掌握了在MMSkeleton框架下构建自定义骨骼数据集的方法。无论是从原始视频提取还是使用现有骨骼数据,合理的数据组织方式都是后续模型训练成功的基础。建议在实际应用中根据具体场景调整数据处理流程,以获得最佳性能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



