如何在mindee/doctr项目中共享和使用OCR模型
项目概述
mindee/doctr是一个开源的OCR(光学字符识别)工具库,专注于文档文本识别任务。该项目提供了多种预训练模型,并支持用户训练自定义模型后与社区共享。本文将详细介绍如何在doctr项目中加载和使用社区共享的OCR模型,以及如何将自己的训练成果贡献给社区。
从模型中心加载预训练模型
doctr集成了与模型中心的接口,使得加载社区共享的模型变得非常简单。无论是使用PyTorch还是TensorFlow框架,都可以轻松实现。
PyTorch示例
from doctr.io import DocumentFile
from doctr.models import ocr_predictor, from_hub
# 加载图像
image = DocumentFile.from_images(['data/example.jpg'])
# 从模型中心加载自定义检测模型
det_model = from_hub('Felix92/doctr-torch-db-mobilenet-v3-large')
# 从模型中心加载自定义识别模型
reco_model = from_hub('Felix92/doctr-torch-crnn-mobilenet-v3-large-french')
# 将这些模型插入OCR预测器
predictor = ocr_predictor(det_arch=det_model, reco_arch=reco_model)
result = predictor(image)
TensorFlow示例
from doctr.io import DocumentFile
from doctr.models import ocr_predictor, from_hub
# 加载图像
image = DocumentFile.from_images(['data/example.jpg'])
# 从模型中心加载自定义检测模型
det_model = from_hub('Felix92/doctr-tf-db-resnet50')
# 从模型中心加载自定义识别模型
reco_model = from_hub('Felix92/doctr-tf-crnn-vgg16-bn-french')
# 将这些模型插入OCR预测器
predictor = ocr_predictor(det_arch=det_model, reco_arch=reco_model)
result = predictor(image)
将训练好的模型推送到模型中心
如果你训练了一个性能优异的OCR模型,可以将其分享给社区。推送模型到模型中心需要完成以下步骤:
- 确保已创建模型中心账户
- 安装Git LFS(大文件存储)扩展
基本推送方法
from doctr.models import recognition, login_to_hub, push_to_hf_hub
# 登录模型中心
login_to_hub()
# 加载或创建你的模型
my_awesome_model = recognition.crnn_mobilenet_v3_large(pretrained=True)
# 推送模型到中心
push_to_hf_hub(
my_awesome_model,
model_name='doctr-crnn-mobilenet-v3-large-french-v1',
task='recognition',
arch='crnn_mobilenet_v3_large'
)
训练后直接推送
你还可以在训练脚本中直接添加推送参数,实现训练完成后自动推送:
PyTorch版本
python3 train_pytorch.py crnn_mobilenet_v3_large --name doctr-crnn-mobilenet-v3-large --push-to-hub
TensorFlow版本
python3 train_tensorflow.py crnn_mobilenet_v3_large --name doctr-crnn-mobilenet-v3-large --push-to-hub
模型命名规范建议
为了保持社区模型的一致性和可搜索性,建议遵循以下命名规范:
- 分类模型:
doctr-<架构>-<词汇表>
- 检测模型:
doctr-<架构>
- 识别模型:
doctr-<架构>-<语言/词汇表>
社区预训练模型参考
以下是社区贡献的一些预训练模型示例:
分类模型
| 架构 | 模型ID | 词汇表 | 框架 | |----------------|------------------------------------|----------|-----------| | resnet18 | Felix92/doctr-dummy-torch-resnet18 | 法语 | PyTorch | | resnet18 | Felix92/doctr-dummy-tf-resnet18 | 法语 | TensorFlow|
检测模型
| 架构 | 模型ID | 框架 | |------------------------|----------------------------------------|-----------| | db_mobilenet_v3_large | Felix92/doctr-torch-db-mobilenet-v3-large | PyTorch | | db_resnet50 | Felix92/doctr-tf-db-resnet50 | TensorFlow|
识别模型
| 架构 | 模型ID | 语言 | 框架 | |--------------------|--------------------------------------------|--------------------|-----------| | crnn_mobilenet_v3_large | Felix92/doctr-torch-crnn-mobilenet-v3-large | 法语 | PyTorch | | crnn_vgg16_bn | Felix92/doctr-tf-crnn-vgg16-bn-french | 法语 | TensorFlow| | parseq | Felix92/doctr-torch-parseq-multilingual-v1 | 多语言 | PyTorch |
最佳实践建议
- 模型测试:在推送模型前,确保在多种测试集上验证其性能
- 文档说明:为你的模型添加详细的README说明,包括训练数据、性能指标和使用示例
- 版本控制:使用版本号(如-v1, -v2)来区分模型迭代
- 多语言支持:考虑训练支持多种语言的模型,这对社区更有价值
通过共享你的模型,你不仅可以帮助其他开发者节省时间和资源,还能促进OCR技术的共同进步。doctr项目鼓励这种开源精神,期待看到更多高质量的OCR模型加入社区。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考