如何为WongKinYiu/Yolov7姿态估计准备自定义关键点数据集?
为WongKinYiu/yolov7姿态估计项目准备自定义关键点数据集的步骤
1. 先明确关键点定义
- 敲定你的任务需要检测的关键点数量、顺序和含义,比如自定义人体关键点可以是
0: 鼻尖, 1: 左眼, 2: 右眼, 3: 左肩, 4: 右肩;如果是机械零件、宠物这类非人体目标,也要明确每个点的对应位置。这个定义要贯穿后续标注和配置全流程,不能出错。
2. 收集并整理图像
- 收集覆盖不同场景、角度、光照的训练/验证图像,数量根据任务复杂度调整,至少几百张起步(复杂场景建议上千张)。
- 将图像分成
train和val两个文件夹,默认放在项目的data/images/目录下,用自定义路径的话后续配置要对应修改。
3. 按COCO格式标注关键点
yolov7姿态估计采用类似COCO Keypoints的标注格式,可使用Labelme、VIA或在线工具MakeSense.ai完成标注:
- 每个目标实例必须标注:
bbox:目标的边界框,格式为[左上x坐标, 左上y坐标, 宽度, 高度]keypoints:按之前定义的顺序排列的数组,每个元素是[x坐标, y坐标, 可见性],其中可见性取值:0=关键点不可见,1=可见但未标注,2=可见且已标注
- 把所有图像的标注信息汇总成两个JSON文件:
train.json和val.json,放在data/annotations/目录下。 - 简化版JSON结构示例:
{ "images": [ {"id": 0, "file_name": "train/img_001.jpg", "width": 640, "height": 480} ], "annotations": [ { "id": 0, "image_id": 0, "category_id": 0, "bbox": [120, 80, 200, 300], "keypoints": [150,100,2, 180,120,2, 210,120,2, 140,200,2, 220,200,2], "num_keypoints": 5 } ], "categories": [ {"id": 0, "name": "custom_person", "keypoints": ["nose", "left_eye", "right_eye", "left_shoulder", "right_shoulder"], "skeleton": [[0,1], [0,2], [1,3], [2,4]]} ] }
注:skeleton是关键点之间的连接关系,用于可视化,属于可选配置。
4. 调整项目目录结构
确保数据集目录和项目预期结构匹配,示例如下:
yolov7/ ├── data/ │ ├── images/ │ │ ├── train/ │ │ │ ├── img_001.jpg │ │ │ └── ... │ │ └── val/ │ │ ├── img_002.jpg │ │ └── ... │ └── annotations/ │ ├── train.json │ └── val.json
5. 修改数据集配置文件
在data/目录下新建自定义配置文件(比如custom_kpts.yaml),内容如下:
# 训练/验证图像路径 train: data/images/train/ val: data/images/val/ # 类别数量 nc: 1 # 关键点配置:[关键点总数, 3],3对应x/y/可见性 kpt_shape: [5, 3] # 类别名称 names: ['custom_person'] # 标注文件路径 train_ann: data/annotations/train.json val_ann: data/annotations/val.json
注意:kpt_shape的第一个数值必须和你定义的关键点数量一致,nc是你的目标类别总数。
6. 验证数据集有效性
- 可使用项目内置的
utils/datasets.py模块加载数据集,检查是否能正确读取图像和标注信息。 - 也可以跑一轮短周期的训练测试,确认是否能正常加载数据,没有标注格式错误、路径错误之类的报错。
内容的提问来源于stack exchange,提问作者C.Tale
相关产品推荐
相关产品推荐

