MMOCR项目数据集准备全指南
前言
在OCR(光学字符识别)领域,数据集的准备是模型训练和评估的基础环节。MMOCR作为一款优秀的OCR工具库,支持多种常用文本相关数据集,并提供了便捷的数据准备工具。本文将详细介绍如何在MMOCR中准备和使用数据集。
数据集准备流程概述
MMOCR数据集准备主要包含两个关键步骤:
- 下载数据集并转换为MMOCR支持的格式
- 配置数据集参数
如果你的数据集已经是MMOCR支持的格式,可以跳过第一步直接进行配置。
数据集下载与格式转换
基本使用方法
MMOCR提供了便捷的数据集准备脚本,可以自动完成下载和格式转换。以ICDAR 2015文本检测数据集为例:
python tools/dataset_converters/prepare_dataset.py icdar2015 --task textdet
执行后,数据集将被下载并转换为MMOCR格式,目录结构如下:
data/icdar2015
├── textdet_imgs
│ ├── test
│ └── train
├── textdet_test.json
└── textdet_train.json
数据集验证
转换完成后,建议使用可视化工具检查数据集是否正确:
python tools/analysis_tools/browse_dataset.py configs/textdet/_base_/datasets/icdar2015.py
这个工具可以帮助你直观地查看标注信息是否正确,包括文本区域的位置和内容。
数据集配置详解
单数据集配置
在MMOCR中,每个数据集都需要一个配置文件。以ICDAR 2015为例,典型的配置文件如下:
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)
在模型中使用数据集
配置好数据集后,可以在模型配置文件中引用。例如,使用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_/datasets/iiit5k.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,
dataset=train_dataset)
test_dataloader = dict(
batch_size=1,
num_workers=4,
dataset=test_dataset)
val_dataloader = test_dataloader
最佳实践建议
- 数据检查:转换后务必使用可视化工具检查数据质量
- 路径配置:确保配置中的路径与实际存储路径一致
- 数据过滤:合理设置过滤条件,如
filter_empty_gt
和min_size
- 多数据集平衡:联合训练时注意各数据集的样本量平衡
- 性能优化:根据硬件配置调整
batch_size
和num_workers
通过以上步骤,你可以高效地在MMOCR中准备和使用各种OCR数据集,为模型训练和评估打下坚实基础。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考