MMPretrain项目数据集准备完全指南
作为深度学习项目的重要组成部分,数据集准备是模型训练的基础环节。本文将全面介绍MMPretrain框架支持的数据集格式及准备方法,帮助开发者快速上手数据准备工作。
一、CustomDataset通用数据集类
MMPretrain提供了CustomDataset
通用数据集类,支持两种主流的数据组织方式,适用于不同场景的需求。
1.1 子文件夹组织方式
这种方式最为简单直观,特别适合快速实验和小型数据集。
监督学习场景
对于分类等监督学习任务,目录结构如下:
data_prefix/
├── 类别A
│ ├── 图片1.jpg
│ ├── 图片2.jpg
│ └── ...
├── 类别B
│ ├── 图片1.jpg
│ └── ...
└── ...
配置示例:
train_dataloader = dict(
dataset=dict(
type='CustomDataset',
data_prefix='path/to/data_prefix',
with_label=True,
pipeline=...
)
)
无监督学习场景
对于自监督等无监督任务,目录结构更简单:
data_prefix/
├── 图片1.jpg
├── 图片2.jpg
└── ...
配置只需将with_label
设为False。
注意:子文件夹方式在数据集较大时初始化较慢,建议大型数据集使用标注文件方式。
1.2 标注文件组织方式
这种方式更适合中大型数据集,通过文本文件管理样本和标签。
监督学习标注格式
每行格式:图片路径 类别索引
folder1/img1.jpg 0
folder2/img2.jpg 1
img3.jpg 2
无监督学习标注格式
每行只需图片路径:
folder1/img1.jpg
folder2/img2.jpg
img3.jpg
完整目录结构示例:
data_root
├── meta
│ ├── train.txt
│ ├── val.txt
│ └── test.txt
├── train
│ ├── 图片文件...
└── val
├── 图片文件...
配置示例:
train_dataloader = dict(
dataset=dict(
type='CustomDataset',
data_root='path/to/data_root',
ann_file='meta/train.txt',
data_prefix='train',
classes=['类别A', '类别B', ...],
pipeline=...,
)
)
二、ImageNet数据集准备
ImageNet是计算机视觉领域最常用的基准数据集之一,MMPretrain提供了完善的支持。
2.1 数据集获取方式
通过MIM工具下载(推荐)
# 安装OpenXLab CLI
pip install -U openxlab
# 登录
openxlab login
# 下载数据集
mim download mmpretrain --dataset imagenet1k
手动下载
- 从官网下载ILSVRC2012数据集
- 解压训练集和验证集
2.2 目录结构
支持两种组织形式:
子文件夹格式
imagenet/
├── train/
│ ├── n01440764/
│ │ ├── n01440764_10026.JPEG
│ │ └── ...
│ └── ...
└── val/
├── n01440764/
│ ├── ILSVRC2012_val_00000293.JPEG
│ └── ...
└── ...
标注文件格式
imagenet/
├── meta/
│ ├── train.txt
│ └── val.txt
├── train/
│ ├── n01440764_10026.JPEG
│ └── ...
└── val/
├── ILSVRC2012_val_00000001.JPEG
└── ...
2.3 配置示例
train_dataloader = dict(
dataset=dict(
type='ImageNet',
data_root='data/imagenet/',
split='train',
pipeline=...,
)
)
三、其他支持的数据集
MMPretrain内置支持多种常用视觉数据集:
| 数据集名称 | 适用任务 | 特点说明 | |----------------|-----------------|---------------------------| | CIFAR-10/100 | 图像分类 | 小型数据集,适合快速实验 | | MNIST/FashionMNIST | 手写数字/服饰分类 | 经典入门数据集 | | CUB-200-2011 | 细粒度分类 | 鸟类细粒度分类数据集 | | Oxford-IIIT Pet | 细粒度分类 | 宠物细粒度分类数据集 | | Flowers102 | 细粒度分类 | 花卉分类数据集 | | Stanford Cars | 细粒度分类 | 车辆分类数据集 |
四、OpenMMLab 2.0标准数据集格式
为统一多任务数据接口,OpenMMLab制定了2.0标准数据集格式规范。
4.1 标注文件格式要求
- 必须是json/yaml/yml/pickle/pkl格式
- 必须包含两个顶级字段:
metainfo
: 数据集元信息data_list
: 样本数据列表
示例结构:
{
"metainfo": {
"classes": ["cat", "dog"],
...
},
"data_list": [
{
"img_path": "xxx/xxx_0.jpg",
"gt_label": 0,
...
},
...
]
}
4.2 目录结构示例
data
├── annotations
│ └── train.json
└── train
├── xxx_0.jpg
└── ...
4.3 配置方式
dataset_cfg = dict(
type='CustomDataset',
ann_file='path/to/train.json',
data_prefix='path/to/train',
pipeline=...
)
五、高级功能
5.1 数据集包装器
MMPretrain支持多种数据集包装器,实现高级功能:
- ConcatDataset: 合并多个数据集
- RepeatDataset: 重复采样数据集
- ClassBalancedDataset: 类别平衡采样
- KFoldDataset: K折交叉验证
5.2 自定义数据集
对于特殊格式的数据集,可以通过继承基础数据集类实现自定义数据集类,具体实现方法可参考MMPretrain高级教程。
六、最佳实践建议
- 小型数据集推荐使用子文件夹方式,简单直观
- 大型数据集推荐使用标注文件方式,效率更高
- 生产环境建议采用OpenMMLab 2.0标准格式
- 注意文件路径的相对位置关系
- 类别索引应从0开始连续编号
通过本文介绍,您应该已经掌握了MMPretrain框架下的各种数据集准备方法。合理的数据集组织方式能够显著提升训练效率,建议根据实际项目需求选择最适合的方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考