MMHuman3D项目:如何为数据集添加转换器
概述
在MMHuman3D项目中,所有数据集在训练或测试加载前都需要经过预处理(使用相应的转换器)并转换为统一的格式。本文将详细介绍如何为MMHuman3D添加一个新的数据集转换器,以支持新的数据集。
数据集转换器基础
在MMHuman3D中,数据集转换器主要负责将原始数据集转换为项目统一的格式。转换后的数据会以.npz文件格式存储,包含图像路径、边界框、2D/3D关键点等信息。
创建转换器脚本
1. 选择转换器基类
MMHuman3D提供了两种转换器基类供开发者继承:
- BaseConverter:适用于不需要区分训练/测试模式的数据集
- BaseModeConverter:适用于需要区分训练/测试模式的数据集
2. 实现转换器类
以LSP数据集为例,我们创建一个lsp.py
文件:
from typing import List
from mmhuman3d.data.data_converters.builder import DATA_CONVERTERS
from mmhuman3d.data.data_converters.base_converter import BaseModeConverter
from mmhuman3d.core.conventions.keypoints_mapping import convert_kps
from mmhuman3d.utils import HumanData
@DATA_CONVERTERS.register_module()
class LspConverter(BaseModeConverter):
"""LSP数据集转换器
参数:
modes (list): 可接受模式列表,如['test', 'train']
"""
ACCEPTED_MODES = ['test', 'train']
def __init__(self, modes: List = []) -> None:
super(LspConverter, self).__init__(modes)
def convert_by_mode(self, dataset_path: str, out_path: str, mode: str) -> dict:
"""按模式转换数据集
参数:
dataset_path (str): 原始数据集路径
out_path (str): 预处理数据输出路径
mode (str): 当前处理模式
返回:
dict: 包含预处理数据的字典
"""
# 关键点格式转换
keypoints2d_, mask = convert_kps(keypoints2d_, 'lsp', 'human_data')
# 使用HumanData结构存储数据
human_data = HumanData()
human_data['image_path'] = image_path_
human_data['bbox_xywh'] = bbox_xywh_
human_data['keypoints2d_mask'] = mask
human_data['keypoints2d'] = keypoints2d_
human_data['config'] = 'lsp'
human_data.compress_keypoints_by_mask()
# 保存预处理数据
if not os.path.isdir(out_path):
os.makedirs(out_path)
out_file = os.path.join(out_path, f'lsp_{mode}.npz')
human_data.dump(out_file)
3. 关键点格式处理
在实现转换器时,需要注意关键点的格式转换。MMHuman3D提供了统一的关键点约定格式,开发者需要将原始数据集的关键点转换为项目定义的格式。
如果数据集的关键点格式不在现有约定中,需要先定义新的关键点约定格式。
注册转换器
创建好转换器类后,需要在__init__.py
文件中注册:
from .lsp import LspConverter
__all__ = [
'build_data_converter', 'AgoraConverter', 'MpiiConverter',
'H36mConverter', ..., 'LspConverter'
]
配置数据集参数
在convert_datasets.py
文件中添加新数据集的配置:
DATASET_CONFIGS = dict(
# ...其他数据集配置
lsp=dict(
type='LspConverter', # 转换器类名
modes=['train', 'test'], # 支持的模式
prefix='lsp' # 数据集文件夹前缀
)
)
数据集文档说明
为方便其他开发者使用,需要为新数据集添加以下文档信息:
- 数据集引用信息:在转换器脚本中添加数据集引用信息
- 文件夹结构:说明原始数据集应有的目录结构
- 许可证信息:注明数据集的许可协议
测试转换器
完成上述步骤后,可以通过以下命令测试转换器是否正常工作:
python tools/convert_datasets.py \
--datasets lsp \
--root_path data/datasets \
--output_path data/preprocessed_datasets
成功执行后,会在data/preprocessed_datasets
目录下生成预处理后的.npz文件。
最佳实践建议
- 代码复用:参考现有转换器实现(如COCO、MPII等)可以减少开发工作量
- 数据验证:转换完成后建议检查生成的数据是否符合预期
- 性能优化:对于大型数据集,可以考虑分批处理以减少内存占用
- 错误处理:添加适当的错误处理逻辑,提高转换器的健壮性
通过以上步骤,开发者可以成功为MMHuman3D添加新的数据集支持,扩展项目的应用范围。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考