ZH ·
🌏 English MMOCR 安装指南及自定义数据集训练
什么是 OCR?
根据维基百科,OCR(光学字符识别)是将打字、手写或印刷文本的图像转换为机器编码文本的电子或机械过程。
为什么选择 MMOCR?
- 基于 PyTorch:PyTorch 吸收了当前主流深度学习框架的优势,易于上手。
- OpenMMLab 维护:由商汤科技支持,拥有良好的社区生态与长期更新保障。
- 结构清晰:与 MMDetection 类似,代码结构规范,易于扩展。
- 部署支持:提供实验性的 C++ 部署代码,方便落地。
安装
MMOCR 官方文档 提供了详细的安装指南。以下是我在机器上的配置过程。
首先创建一个隔离的虚拟环境:
conda create -n open-mmlab python=3.8
conda activate open-mmlab
安装 PyTorch 1.10(适配 CUDA 10.2):
conda install pytorch=1.10.0 torchvision cudatoolkit=10.2 -c pytorch
安装 MMCV 和 MMDetection:
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu102/torch1.10.0/index.html
pip install mmdet
克隆 MMOCR 仓库并安装:
git clone https://github.com/open-mmlab/mmocr.git
cd mmocr
pip install -r requirements.txt
pip install -v -e . # 或 "python setup.py develop"
注意:官方文档建议将仓库路径添加到 PYTHONPATH 环境变量中。如果你的项目需要跨目录调用 MMOCR,请执行此操作;若仅在仓库内开发,则无需此步骤。
简单测试
可以通过以下命令进行端到端的检测与识别测试,系统会自动下载预训练权重:
python mmocr/utils/ocr.py demo/demo_text_ocr.jpg --print-result --imshow
若仅需进行文本检测,可以使用 TextSnake 算法:
python mmocr/utils/ocr.py demo/demo_text_det.jpg --output demo/det_out.jpg --det TextSnake --recog None --export demo/
使用自己的数据训练
由于 MMOCR 训练通常需要 COCO 格式,而我的标注数据为 PASCAL VOC 格式,因此需要进行转换。
1. 生成 ID 列表
在项目根目录下创建一个 gen_ids.py 脚本,用于划分训练集和测试集 ID:
import os
import argparse
def parse_args():
parser = argparse.ArgumentParser(description='generate id list file.')
parser.add_argument('--path', type=str, default=None, help='path to annotation files dir.')
return parser.parse_args()
def generate_ids(anno_path):
with open("./train_ids.txt", 'w') as ftrain, open("./test_ids.txt", 'w') as ftest:
cntr=0
for path, folders, files in os.walk(anno_path):
for file_name in files:
if cntr % 10 == 0:
ftest.write(file_name.split('.')[0] + '\n')
else:
ftrain.write(file_name.split('.')[0] + '\n')
cntr += 1
def main():
args = parse_args()
generate_ids(args.path)
if __name__ == '__main__':
main()
运行脚本:python gen_ids.py --path ./Annotations/
2. 格式转换
创建 voc2coco.py 脚本(代码略,请参考下文实现)将 VOC XML 转换为 COCO JSON。确保创建一个 coco.names 文件,内容为 text。
执行转换命令:
python voc2coco.py --ann_dir ./Annotations/ --ann_ids ./train_ids.txt --labels ./coco.names --output ./annotations/instances_training.json --ext xml
python voc2coco.py --ann_dir ./Annotations/ --ann_ids ./test_ids.txt --labels ./coco.names --output ./annotations/instances_test.json --ext xml
3. 开始训练
- 在
configs/_base_/det_datasets/下创建new_dataset.py,参考icdar2015.py修改路径配置。 - 在
configs/textdet/dbnet/下创建dbnet_r50dcnv2_fpnc_1200e_new_dataset.py,并在_base_中引用自定义的new_dataset.py。 - 使用多 GPU 进行训练:
./tools/dist_train.sh configs/textdet/dbnet/dbnet_r50dcnv2_fpnc_1200e_new_dataset.py work_dirs/dbnet_r50dcnv2_fpnc_1200e_new_dataset 8
总结
MMOCR 配置简便且运行稳定,训练日志记录详尽。尽管其 C++ 部署代码仍处于实验阶段,但我已成功将其转换为 ONNX 并集成到 C++ 项目中。