PaddleOCR学习笔记

Paddle

功能特性

PP-OCR系列模型列表

https://github.com/PaddlePaddle/PaddleOCR#️-pp-ocr系列模型列表更新中
PP-OCR系列模型列表(V4,2023年8月1日更新)

配置文件内容与生成

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/config.md

文字检测

关键要点: 配置文件、预训练模型、数据加载

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/detection.md

实际使用过程中,建议加载官方提供的预训练模型,在自己的数据集中进行微调,关于检测模型的微调方法,请参考:模型微调教程

也可以选择加载backbone预训练模型再训练,不过收敛速度会很慢

微调指令(推荐):

python3 tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml \
     -o Global.pretrained_model=./pretrain_models/ch_PP-OCRv3_det_distill_train/ch_PP-OCRv3_det_distill_train/student.pdparams

有两种预测方式:

1.直接加载checkpoints模型做预测

python3 tools/infer_det.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o Global.infer_img="./doc/imgs_en/img_10.jpg" Global.pretrained_model="./output/ch_PP-OCR_V3_det/latest"

2.先导出模型再加载inference模型做预测

python3 tools/infer/predict_det.py --det_algorithm="DB" --det_model_dir="./output/det_db_inference/" --image_dir="./doc/imgs/" --use_gpu=True

文本识别

微调指令(推荐):

python3 tools/train.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml \
     -o Global.pretrained_model=./pretrain_models/ch_PP-OCRv3_rec_train/best_accuracy.pdparams

有两种预测方式:

1.直接加载checkpoints模型做预测

python3 tools/infer_rec.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.infer_img="./train_data/ic15_rec/train/word_34.png" Global.pretrained_model="./output/rec_ppocr_v3_distillation/latest"

2.先导出模型再加载inference模型做预测

关键信息抽取

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/ppstructure/kie/README_ch.md

简介

文本检测、识别、端到端识别、结构化分析四种方向

中英文超轻量PP-OCRv3模型:

  • 总模型大小仅17M,仅1个检测模型(3.8M)+方向分类器(1.4M)+1个识别模型(12M)组成
  • 同时支持中英文识别
  • 支持倾斜、竖排等多种方向文字识别
  • 支持GPU(T4 卡平均预测耗时87ms)、CPU预测

PaddleOCR发布的PP-OCRv3超轻量模型由1个文本检测模型(3.8M)、1个方向分类器(1.4M)和1个文本识别模型(12.0M)组成,共17M。其中,文本检测模型是基于2020年发表于AAAI上的DB[1]算法进行改进得到的,文本识别模型基于2022年发表于IJCAI上的SVTR[4]算法进行改进得到的

PaddleOCR

1、检测

PaddleOCR提供了EAST、DB、SAST、PSE和FCE五种文本检测算法

2、方向分类

3、识别

PaddleOCR提供了CRNN、Rosseta、StarNet、RARE、SRN、NRTR、SAR、SEED八种文本识别算法

中文OCR数据集

ICDAR2019-LSVT:共45w中文街景图像,包含5w(2w测试+3w训练)全标注数据(文本坐标+文本内容),40w弱标注数据(仅文本内容)。

ICDAR2017-RCTW-17:共包含12,000+图像,大部分图片是通过手机摄像头在野外采集的,有些是截图。这些图片展示了各种各样的场景,包括街景、海报、菜单、室内场景和手机应用程序的截图。

中文街景文字识别:ICDAR2019-LSVT行识别任务的数据集,共包括29万张图片,其中21万张图片作为训练集(带标注),8万张作为测试集(无标注)。数据集采自中国街景,并由街景图片中的文字行区域(例如店铺标牌、地标等等)截取出来而形成。所有图像都经过一些预处理,将文字区域利用仿射变化,等比映射为一张高为48像素的图片。

中文文档文字识别:共约364万张图片,按照99:1划分成训练集和验证集。数据利用中文语料库(新闻 + 文言文),通过字体、大小、灰度、模糊、透视、拉伸等变化随机生成。包含汉字、英文字母、数字和标点共5990个字符。

ICDAR2019-ArT:共包含10,166张图像,训练集5603图,测试集4563图。由Total-Text、SCUT-CTW1500、Baidu Curved Scene Text (ICDAR2019-LSVT部分弯曲数据) 三部分组成,包含水平、多方向和弯曲等多种形状的文本。

拉取镜像

docker pull registry.baidubce.com/paddlepaddle/paddle:2.5.2-gpu-cuda11.2-cudnn8.2-trt8.0

启动容器

docker run --gpus all --shm-size=4g --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 --name paddle -it -v $PWD:/paddle registry.baidubce.com/paddlepaddle/paddle:2.5.2-gpu-cuda11.2-cudnn8.2-trt8.0-v1 /bin/bash

教程

https://www.paddlepaddle.org.cn/tutorials/projectdetail/3977289

准备运行环境

conda create --name paddle python=3.8
conda activate paddle
python -m pip install paddlepaddle==2.5.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
git clone https://github.com/PaddlePaddle/PaddleOCR
cd PaddleOCR
pip install -r requirements.txt
pip install jupyter notebook
pip install Pillow==9.5.0

下载模型

download_model.sh

#!/bin/bash

# 创建inference目录
mkdir inference

# 进入inference目录
cd inference

# 下载中英文检测模型并解压
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar
tar xf ch_PP-OCRv3_det_infer.tar

# 下载中英文方向分类器模型并解压
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar
tar xf ch_ppocr_mobile_v2.0_cls_infer.tar

# 下载中英文识别模型并解压
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar
tar xf ch_PP-OCRv3_rec_infer.tar

推理指令

检测+识别
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" --det_model_dir="./inference/ch_PP-OCRv3_det_infer/"  --rec_model_dir="./inference/ch_PP-OCRv3_rec_infer/" --rec_image_shape="3,48,320"
说明:
image_dir支持传入单张图像和图像所在的文件目录,当image_dir指定的是图像目录时,运行上述指令会预测当前文件夹下的所有图像中的文字,并将预测的可视化结果保存在inference_results文件夹下

预测结果示例如下:

训练自定义模型

生产自定义的模型可分为三步:训练文本检测模型、训练文本识别模型、模型串联预测

训练文字检测模型

下载预训练的backbone模型

mkdir pretrain_models
wget -P ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x0_5_pretrained.pdparams
wget -P ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_ssld_pretrained.pdparams

python3 tools/train.py -c configs/det/det_mv3_db.yml -o Global.epoch_num=1 Global.eval_batch_step=[0,50]
测试文字检测模型
python3 tools/infer_det.py -c configs/det/det_mv3_db.yml -o Global.infer_img="./doc/imgs_en/img_10.jpg"  Global.checkpoints="./output/db_mv3/best_accuracy"
训练文字识别模型

下载预训练的backbone模型

wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/rec_mv3_none_bilstm_ctc.tar
cd pretrain_models && tar -xf rec_mv3_none_bilstm_ctc.tar && rm -rf rec_mv3_none_bilstm_ctc.tar && cd ..

python3 tools/train.py -c configs/rec/rec_icdar15_train.yml -o Global.pretrained_model=./pretrain_models/rec_mv3_none_bilstm_ctc/best_accuracy Global.eval_batch_step=[0,200]
测试文字识别模型
python3 tools/infer_rec.py -c configs/rec/rec_icdar15_train.yml -o Global.checkpoints=./output/rec/ic15/best_accuracy Global.infer_img=./doc/imgs_words/en/word_1.png

测试

PP-ChatOCRv2在线识别效果测试: https://aistudio.baidu.com/application/detail/10368

PP-OCRv4在线识别效果测试: https://aistudio.baidu.com/application/detail/7658

思考问题

不确定预训练的backbone是否导入成功,感觉收敛速度很慢

回答: 是导入成功了的,想要收敛快,最好是进行微调训练

还没有在自己制作的数据集上训练过

思考关键词、LLM进行结构化分析的可能性

回答: LLM确实很不错,但是我看了下关键信息抽取也是一个不错的选择,数据构建可以借助LLM来制作

用的是v3还没接触v4

回答: 两者的使用方式差别不大,主要还是配置文件的切换

开源的ocr识别项目: https://github.com/tesseract-ocr/tesseract

回答: 可以再多了解下除Paddle之外的一些OCR开源项目

可以拿飞机票来测试LLM结构化分析的效果

回答: 脑洞开大点儿,让LLM模型去学习实体关联,我只需要准备相应形式的数据就可以,从数据中自动学习模式

训练配置yaml文件

推理py代码

PP-ChatOCRv2

一个SDK,覆盖20+高频应用场景,支持5种文本图像智能分析能力和部署,包括通用场景关键信息抽取(快递单、营业执照和机动车行驶证等)、复杂文档场景关键信息抽取(解决生僻字、特殊标点、多页pdf、表格等难点问题)、通用OCR、文档场景专用OCR、通用表格识别。针对垂类业务场景,也支持模型训练、微调和Prompt优化

PP-OCRv4

提供mobile和server两种模型

PP-OCRv4-mobile:速度可比情况下,中文场景效果相比于PP-OCRv3再提升4.5%,英文场景提升10%,80语种多语言模型平均识别准确率提升8%以上

PP-OCRv4-server:发布了目前精度最高的OCR模型,中英文场景上检测模型精度提升4.9%, 识别模型精度提升2% 可参考快速开始 一行命令快速使用,同时也可在飞桨AI套件(PaddleX)中的通用OCR产业方案中低代码完成模型训练、推理、高性能部署全流程

相关推荐
Charles Ray31 分钟前
C++学习笔记 —— 内存分配 new
c++·笔记·学习
重生之我在20年代敲代码31 分钟前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
我要吐泡泡了哦2 小时前
GAMES104:15 游戏引擎的玩法系统基础-学习笔记
笔记·学习·游戏引擎
骑鱼过海的猫1232 小时前
【tomcat】tomcat学习笔记
笔记·学习·tomcat
贾saisai4 小时前
Xilinx系FPGA学习笔记(九)DDR3学习
笔记·学习·fpga开发
北岛寒沫4 小时前
JavaScript(JS)学习笔记 1(简单介绍 注释和输入输出语句 变量 数据类型 运算符 流程控制 数组)
javascript·笔记·学习
烟雨666_java4 小时前
JDBC笔记
笔记
GEEKVIP4 小时前
Android 恢复挑战和解决方案:如何从 Android 设备恢复删除的文件
android·笔记·安全·macos·智能手机·电脑·笔记本电脑
铁匠匠匠5 小时前
从零开始学数据结构系列之第六章《排序简介》
c语言·数据结构·经验分享·笔记·学习·开源·课程设计
Moliay6 小时前
【资料分析】刷题日记2
笔记·公考·行测·常识·资料分析