MMOCR项目数据集准备完全指南
前言
在OCR(光学字符识别)领域,数据集的准备往往是项目开发的第一步,也是最关键的一环。不同来源的数据集往往采用不同的标注格式,这给研究人员和开发者带来了不小的困扰。MMOCR项目为解决这一问题,提供了一套完整的数据集准备方案,让用户能够轻松地将各种格式的OCR数据集转换为统一格式,并快速投入模型训练。
数据集准备流程概述
MMOCR推荐的数据集准备流程主要包含两个核心步骤:
- 数据集下载及格式转换:将原始数据集转换为MMOCR支持的统一格式
- 修改配置文件:根据实际需求配置训练和测试数据集
下面我们将详细介绍这两个步骤的具体操作方法和注意事项。
数据集下载及格式转换
一键式转换工具
MMOCR提供了便捷的数据集准备脚本prepare_dataset.py
,支持多种常见OCR数据集的自动下载和格式转换。以ICDAR 2015数据集为例,只需执行以下命令:
python tools/dataset_converters/prepare_dataset.py icdar2015 --task textdet
这条命令会自动完成以下工作:
- 下载ICDAR 2015数据集(如果尚未下载)
- 将数据集转换为MMOCR标准格式
- 按照规范目录结构组织文件
转换后的目录结构
转换完成后,数据集将被组织为以下结构:
data/icdar2015
├── textdet_imgs
│ ├── test
│ └── train
├── textdet_test.json
└── textdet_train.json
其中:
textdet_imgs
目录存放图像文件.json
文件包含标注信息,采用MMOCR统一格式
数据验证
为确保数据转换正确,MMOCR提供了可视化工具browse_dataset.py
,可用于检查标注是否正确:
python tools/analysis_tools/browse_dataset.py configs/textdet/_base_/datasets/icdar2015.py
这个工具会显示图像及其对应的标注框,帮助用户直观地验证数据准备的质量。
配置文件修改指南
单数据集配置
在MMOCR中,每个数据集都需要在配置文件中进行声明。以ICDAR 2015为例,其配置文件通常位于configs/textdet/_base_/datasets/icdar2015.py
,内容如下:
icdar2015_textdet_data_root = 'data/icdar2015' # 数据集根路径
# 训练集配置
icdar2015_textdet_train = dict(
type='OCRDataset', # 数据集类型
data_root=icdar2015_textdet_data_root, # 数据根目录
ann_file='textdet_train.json', # 标注文件
filter_cfg=dict(filter_empty_gt=True, min_size=32), # 数据过滤配置
pipeline=None) # 数据预处理流水线
# 测试集配置
icdar2015_textdet_test = dict(
type='OCRDataset',
data_root=icdar2015_textdet_data_root,
ann_file='textdet_test.json',
test_mode=True, # 测试模式标志
pipeline=None)
关键配置项说明:
type
:指定数据集类型,MMOCR内置了多种数据集类型data_root
:数据集根目录路径ann_file
:标注文件名称filter_cfg
:数据过滤配置,可过滤无效样本test_mode
:标识是否为测试集
模型训练配置
在模型配置文件中,需要导入并使用已配置的数据集。例如,使用DBNet_R18模型训练ICDAR 2015数据集:
_base_ = [
'_base_dbnet_r18_fpnc.py', # 模型基础配置
'../_base_/datasets/icdar2015.py', # 导入数据集配置
'../_base_/default_runtime.py', # 运行时配置
'../_base_/schedules/schedule_sgd_1200e.py',# 训练计划
]
# 配置训练集和测试集
icdar2015_textdet_train = _base_.icdar2015_textdet_train
icdar2015_textdet_train.pipeline = _base_.train_pipeline
icdar2015_textdet_test = _base_.icdar2015_textdet_test
icdar2015_textdet_test.pipeline = _base_.test_pipeline
# 配置数据加载器
train_dataloader = dict(
batch_size=16,
num_workers=8,
persistent_workers=True,
sampler=dict(type='DefaultSampler', shuffle=True),
dataset=icdar2015_textdet_train) # 指定训练数据集
val_dataloader = dict(
batch_size=1,
num_workers=4,
persistent_workers=True,
sampler=dict(type='DefaultSampler', shuffle=False),
dataset=icdar2015_textdet_test) # 指定验证数据集
test_dataloader = val_dataloader
多数据集联合训练
MMOCR支持使用多个数据集联合训练模型,这对于提升模型泛化能力非常有用。通过ConcatDataset
可以轻松实现这一功能:
# 定义数据集列表
train_list = [ic11, ic13, ic15] # 假设这些数据集已配置
# 配置联合数据集
train_dataloader = dict(
dataset=dict(
type='ConcatDataset',
datasets=train_list,
pipeline=train_pipeline))
实际应用示例:使用MJSynth训练,6个数据集测试的配置:
_base_ = [
'../_base_/datasets/mjsynth.py',
'../_base_/datasets/cute80.py',
# ...其他数据集配置...
'_base_crnn_mini-vgg.py',
]
# 训练集列表
train_list = [_base_.mjsynth_textrecog_train]
# 测试集列表
test_list = [
_base_.cute80_textrecog_test,
_base_.iiit5k_textrecog_test,
# ...其他测试集...
]
# 配置联合数据集
train_dataset = dict(
type='ConcatDataset',
datasets=train_list,
pipeline=_base_.train_pipeline)
test_dataset = dict(
type='ConcatDataset',
datasets=test_list,
pipeline=_base_.test_pipeline)
# 配置数据加载器
train_dataloader = dict(
batch_size=192*4,
num_workers=32,
persistent_workers=True,
sampler=dict(type='DefaultSampler', shuffle=True),
dataset=train_dataset)
test_dataloader = dict(
batch_size=1,
num_workers=4,
persistent_workers=True,
drop_last=False,
sampler=dict(type='DefaultSampler', shuffle=False),
dataset=test_dataset)
val_dataloader = test_dataloader
最佳实践建议
- 数据验证:在使用新数据集前,务必使用可视化工具检查数据质量
- 数据过滤:合理配置
filter_cfg
过滤无效样本,提高训练效率 - 多数据集训练:对于需要强泛化能力的场景,推荐使用多数据集联合训练
- 资源配置:根据数据集大小和硬件条件,合理设置
batch_size
和num_workers
- 测试集选择:选择具有代表性的测试集组合,全面评估模型性能
通过遵循这些指南,用户可以高效地准备和使用各种OCR数据集,充分发挥MMOCR框架的强大能力。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考