MindOCR
简介
MindOCR是一个基于MindSpore的开源OCR开发和应用工具箱,集成了一系列主流文本检测和识别算法/模型,提供易用的训练和推理工具。它可以加速将最先进的文本检测和识别模型应用于实际场景的过程,如DBNet/DBNet++和CRNN/SVTR等,并有助于满足图像文本理解的需求。
主要特点
- 模块化设计:我们将OCR任务解耦为几个可配置的模块。用户只需修改几行代码,就可以轻松设置训练和评估流程,自定义数据处理流程和模型架构。
- 高性能:MindOCR提供了一系列经过优化配置训练的预训练权重,在OCR任务上达到了具有竞争力的性能。
- 低成本应用:MindOCR提供了易用的推理工具来执行文本检测和识别任务。
以下是对应的mindocr
版本和支持的mindspore版本。
mindocr | mindspore |
---|---|
master | master |
0.4 | 2.3.0 |
0.3 | 2.2.10 |
0.1 | 1.8 |
安装
详细信息
前提条件
MindOCR基于MindSpore AI框架构建,并与以下框架版本兼容。有关详细信息和安装指南,请参考下面显示的安装链接。
- mindspore >= 2.2.0 [安装]
- python >= 3.7
- openmpi 4.0.3 (用于分布式训练/评估) [安装]
- mindspore lite (用于离线推理) >= 2.2.0 [安装]
依赖
pip install -r requirements.txt
从源代码安装(推荐)
git clone https://github.com/mindspore-lab/mindocr.git
cd mindocr
pip install -e .
使用
-e
表示"可编辑"模式可以帮助解决潜在的模块导入问题。
从docker安装
提供的docker环境信息如下:
- 操作系统:Euler2.8
- CANN:7.0
- Python:3.9
- MindSpore:2.2.10
- MindSpore Lite:2.2.10
请按照以下步骤安装docker:
-
下载docker
- 910:
docker pull swr.cn-central-221.ovaijisuan.com/mindocr/mindocr_dev_910_ms_2_2_10_cann7_0_py39:v1
- 910*:
docker pull swr.cn-central-221.ovaijisuan.com/mindocr/mindocr_dev_ms_2_2_10_cann7_0_py39:v1
- 910:
-
创建容器
docker_name="temp_mindocr" # 910 image_name="swr.cn-central-221.ovaijisuan.com/mindocr/mindocr_dev_910_ms_2_2_10_cann7_0_py39:v1" # 910* image_name="swr.cn-central-221.ovaijisuan.com/mindocr/mindocr_dev_ms_2_2_10_cann7_0_py39:v1" docker run --privileged --name ${docker_name} \ --tmpfs /tmp \ --tmpfs /run \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ --device=/dev/davinci1 \ --device=/dev/davinci2 \ --device=/dev/davinci3 \ --device=/dev/davinci4 \ --device=/dev/davinci5 \ --device=/dev/davinci6 \ --device=/dev/davinci7 \ --device=/dev/davinci_manager \ --device=/dev/hisi_hdc \ --device=/dev/devmm_svm \ -v /etc/localtime:/etc/localtime \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \ --shm-size 800g \ --cpus 96 \ --security-opt seccomp=unconfined \ --network=bridge -itd ${image_name} bash
-
进入容器
# 设置docker id container_id="你的docker id" docker exec -it --user root $container_id bash
-
设置环境变量 进入容器后,使用以下命令设置环境变量:
source env_setup.sh
从PyPI安装
pip install mindocr
由于该项目正在积极开发中,当前从PyPI安装的版本可能已过时(将很快更新)。
快速开始
1. 文本检测和识别演示
安装MindOCR后,我们可以轻松地在任意图像上运行文本检测和识别,如下所示。
python tools/infer/text/predict_system.py --image_dir {path_to_img or dir_to_imgs} \
--det_algorithm DB++ \
--rec_algorithm CRNN
运行后,结果将默认保存在./inference_results
中。以下是一个示例结果。
文本检测和识别结果可视化
我们可以看到,图像上的所有文本都被准确地检测和识别出来了。有关更多用法,请参考教程中的推理部分。
2. 模型训练和评估 - 快速指南
使用tools/train.py
脚本可以轻松训练您的OCR模型,该脚本支持文本检测和识别模型的训练。
python tools/train.py --config {path/to/model_config.yaml}
--config
参数指定了一个yaml文件的路径,该文件定义了要训练的模型和训练策略,包括数据处理流程、优化器、学习率调度器等。
MindOCR在configs
文件夹中提供了带有训练策略的最先进OCR模型。
您可以根据自己的任务/数据集进行调整,例如,通过运行以下命令:
# 在icdar15数据集上训练文本检测模型DBNet++
python tools/train.py --config configs/det/dbnet/dbpp_r50_icdar15.yaml
# 在icdar15数据集上训练文本识别模型CRNN
python tools/train.py --config configs/rec/crnn/crnn_icdar15.yaml
同样地,可以使用 tools/eval.py
脚本轻松评估训练好的模型。
python tools/eval.py \
--config {模型配置文件路径} \
--opt eval.dataset_root={数据集路径} eval.ckpt_load_path={检查点文件路径}
更多说明和用法,请参阅教程中的模型训练部分。
3. 模型离线推理 - 快速指南
您可以使用MindOCR模型或第三方模型(PaddleOCR、MMOCR等)在MindOCR中进行MindSpore Lite推理。请参考以下文档:
教程
- 数据集
- 模型训练
- 使用MindSpore进行推理
- 使用MindSpore Lite进行推理
- 开发者指南
模型列表
文本识别
- CRNN (TPAMI'2016)
- CRNN-Seq2Seq/RARE (CVPR'2016)
- SVTR (IJCAI'2022)
- MASTER (PR'2019)
- VISIONLAN (ICCV'2021)
- RobustScanner (ECCV'2020)
- ABINet (CVPR'2021)
版面分析
关键信息抽取
- LayoutXLM (arXiv'2021)
- LayoutLMv3 (arXiv'2022)
表格识别
- TableMaster (arXiv'2021)
OCR大模型
- Vary (arXiv'2023)
有关已训练模型的详细性能,请参阅https://github.com/mindspore-lab/mindocr/blob/main/configs。
有关MindSpore Lite和ACL推理模型支持的详细信息,请参阅MindOCR模型支持列表和第三方模型支持列表(PaddleOCR、MMOCR等)。
数据集列表
MindOCR提供了一个数据集转换工具来处理不同格式的OCR数据集,并支持用户自定义数据集。我们已经在模型训练/评估中验证了以下公开的OCR数据集。
通用OCR数据集
- [数字出生图像](https://rrc.cvc.uab.es/?ch=1) [[下载](docs/en/datasets/borndigital.md)] - [CASIA-10K](http://www.nlpr.ia.ac.cn/pal/CASIA10K.html) [[下载](docs/en/datasets/casia10k.md)] - [CCPD](https://github.com/detectRecog/CCPD) [[下载](docs/en/datasets/ccpd.md)] - [中文文本识别基准](https://github.com/FudanVI/benchmarking-chinese-text-recognition) [[论文](https://arxiv.org/abs/2112.15093)] [[下载](docs/en/datasets/chinese_text_recognition.md)] - [COCO-Text](https://rrc.cvc.uab.es/?ch=5) [[下载](docs/en/datasets/cocotext.md)] - [CTW](https://ctwdataset.github.io/) [[下载](docs/en/datasets/ctw.md)] - [ICDAR2015](https://rrc.cvc.uab.es/?ch=4) [[论文](https://rrc.cvc.uab.es/files/short_rrc_2015.pdf)] [[下载](docs/en/datasets/icdar2015.md)] - [ICDAR2019 ArT](https://rrc.cvc.uab.es/?ch=14) [[下载](docs/en/datasets/ic19_art.md)] - [LSVT](https://rrc.cvc.uab.es/?ch=16) [[下载](docs/en/datasets/lsvt.md)] - [MLT2017](https://rrc.cvc.uab.es/?ch=8) [[论文](https://ieeexplore.ieee.org/abstract/document/8270168)] [[下载](docs/en/datasets/mlt2017.md)] - [MSRA-TD500](http://www.iapr-tc11.org/mediawiki/index.php/MSRA_Text_Detection_500_Database_(MSRA-TD500)) [[论文](https://ieeexplore.ieee.org/abstract/document/6247787)] [[下载](docs/en/datasets/td500.md)] - [MTWI-2018](https://tianchi.aliyun.com/competition/entrance/231651/introduction) [[下载](docs/en/datasets/mtwi2018.md)] - [RCTW-17](https://rctw.vlrlab.net/) [[下载](docs/en/datasets/rctw17.md)] - [ReCTS](https://rrc.cvc.uab.es/?ch=12) [[下载](docs/en/datasets/rects.md)] - [SCUT-CTW1500](https://github.com/Yuliang-Liu/Curve-Text-Detector) [[论文](https://www.sciencedirect.com/science/article/pii/S0031320319300664)] [[下载](docs/en/datasets/ctw1500.md)] - [SROIE](https://rrc.cvc.uab.es/?ch=13) [[下载](docs/en/datasets/sroie.md)] - [SVT](http://www.iapr-tc11.org/mediawiki/index.php/The_Street_View_Text_Dataset) [[下载](docs/en/datasets/svt.md)] - [SynText150k](https://github.com/aim-uofa/AdelaiDet) [[论文](https://arxiv.org/abs/2002.10200)] [[下载](docs/en/datasets/syntext150k.md)] - [SynthText](https://www.robots.ox.ac.uk/~vgg/data/scenetext/) [[论文](https://www.robots.ox.ac.uk/~vgg/publications/2016/Gupta16/)] [[下载](docs/en/datasets/synthtext.md)] - [TextOCR](https://textvqa.org/textocr/) [[下载](docs/en/datasets/textocr.md)] - [Total-Text](https://github.com/cs-chan/Total-Text-Dataset/tree/master/Dataset) [[论文](https://arxiv.org/abs/1710.10400)] [[下载](docs/en/datasets/totaltext.md)]我们将包含更多用于训练和评估的数据集。此列表将持续更新。
常见问题
关于配置环境和MindOCR的常见问题,请参阅常见问题。
注意事项
最新动态
新闻
- 2023/04/01
- 添加新的训练模型
- 用于关键信息提取的LayoutLMv3
- 2024/03/20
- 添加新的训练模型
- 用于OCR大模型的Vary-toy,提供基于Qwen-1.8B LLM的目标检测和OCR能力
- 2023/12/25
- 添加新的训练模型
- 用于表格识别的TableMaster
- 添加更多基准数据集及其结果
- 2023/12/14
- 新增训练模型
- 用于关键信息提取的LayoutXLM
- 用于关键信息提取的VI-LayoutXLM
- 用于文本检测的PP-OCRv3 DBNet和用于识别的PP-OCRv3 SVTR,支持在线推理和微调
- 增加更多基准数据集及其结果
- 支持多种规格的Ascend 910:DBNet ResNet-50、DBNet++ ResNet-50、CRNN VGG7、SVTR-Tiny、FCENet、ABINet
- 2023/11/28
- 增加PP-OCRv4离线推理支持
- 用于文本检测的PP-OCRv4 DBNet和用于文本识别的PP-OCRv4 CRNN,支持离线推理
- 修复第三方模型离线推理的错误
- 2023/11/17
- 2023/07/06
- 新增训练模型
- 用于文本识别的RobustScanner
- 2023/07/05
- 新增训练模型
- 用于文本识别的VISIONLAN
- 2023/06/29
- 2023/06/07
- 新增训练模型
- 增加更多基准数据集及其结果
- 增加恢复训练功能,可用于意外中断训练时。使用方法:在yaml配置文件的
model
字段下添加resume
参数,例如resume: True
,从{ckpt_save_dir}/train_resume.ckpt加载并恢复训练,或resume: /path/to/train_resume.ckpt
,从给定路径加载并恢复训练。 - 改进检测后处理:默认将检测到的文本多边形重新缩放到原始图像空间,可通过在
eval.dataset.output_columns
列表中添加"shape_list"来启用。 - 重构在线推理以支持更多模型,详见README.md。
- 2023/05/15
- 新增训练模型
- 用于文本检测的DBNet++
- 用于文本识别的CRNN-Seq2Seq
- 现已提供在SynthText上预训练的DBNet:checkpoint url
- 增加更多基准数据集及其结果
- SynthText、MSRA-TD500、CTW1500
- 更多DBNet的基准结果报告可在此处查看。
- 添加检查点管理器以保存前k个检查点并改进日志。
- 重构Python推理代码。
- 错误修复:使用Meter平均大数据集的损失,在AMP训练中禁用ctcloss的
pred_cast_fp32
,修复存在无效多边形时的错误。
- 2023/05/04
- 支持通过在yaml中设置
model-pretrained
为检查点url或本地路径来加载自定义预训练检查点。 - 支持设置执行旋转和翻转等增强的概率。
- 为模型训练添加指数移动平均(EMA),可通过在yaml配置中设置
train-ema
(默认:False)和train-ema_decay
启用。 - 参数变更:
num_columns_to_net
->net_input_column_index
:将输入网络的列数改为列索引。 - 参数变更:
num_columns_of_labels
->label_column_index
:将对应标签的列数改为列索引。
- 2023/04/21
- 添加参数分组以支持训练中的灵活正则化。用法:在yaml配置中添加
grouping_strategy
参数选择预定义的分组策略,或使用no_weight_decay_params
参数选择要排除权重衰减的层(如偏置、归一化)。示例可参考configs/rec/crnn/crnn_icdar15.yaml
。 - 添加梯度累积以支持大批量训练。用法:在yaml配置中添加
gradient_accumulation_steps
,全局批量大小 = batch_size * devices * gradient_accumulation_steps。示例可参考configs/rec/crnn/crnn_icdar15.yaml
。 - 添加梯度裁剪以支持训练稳定。通过在yaml配置中设置
grad_clip
为True来启用。
- 2023/03/23
- 添加动态损失缩放器支持,兼容溢出丢弃更新。要启用动态损失缩放器,请将
loss_scale
的type
设置为dynamic
。YAML示例可在configs/rec/crnn/crnn_icdar15.yaml
中查看。
- 2023/03/20
- 参数名称变更:
output_keys
->output_columns
,num_keys_to_net
->num_columns_to_net
- 数据管道更新
- 2023/03/13
- 添加系统测试和CI工作流。
- 添加modelarts适配器以允许在OpenI平台上训练。在OpenI上训练:
i) 在openi云平台上创建新的训练任务。 ii) 在网页上链接数据集(如ic15_mindocr)。 iii) 在网站UI界面添加运行参数`config`并写入yaml文件路径,例如'/home/work/user-job-dir/V0001/configs/rec/test.yaml' iv) 在网站UI界面添加运行参数`enable_modelarts`并设置为True。 v) 填写其他空白并启动。
如何贡献
我们欢迎各种形式的贡献,包括问题和PR,以使MindOCR变得更好。
请参考CONTRIBUTING.md了解贡献指南。请遵循模型模板和指南贡献适合整体接口的模型 :)
许可证
本项目遵循Apache License 2.0开源许可证。
引用
如果您在研究中发现此项目有用,请考虑引用:
@misc{MindSpore OCR 2023,
title={{MindSpore OCR }:MindSpore OCR 工具箱},
author={MindSpore 团队},
howpublished = {\url{https://github.com/mindspore-lab/mindocr/}},
year={2023}
}