PaddleOCR学习笔记

Paddle

功能特性

PP-OCR系列模型列表

https://github.com/PaddlePaddle/PaddleOCR#%EF%B8%8F-pp-ocr%E7%B3%BB%E5%88%97%E6%A8%A1%E5%9E%8B%E5%88%97%E8%A1%A8%E6%9B%B4%E6%96%B0%E4%B8%AD
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产业方案中低代码完成模型训练、推理、高性能部署全流程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/217888.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode Hot100 226.翻转二叉树

题目: 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 递归:深度优先遍历 迭代:广度优先遍历 方法:迭代 class Solution {public TreeNode invertTree(TreeNode root) {if (root null…

python_selenium自动化测试框架

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

【数据结构】什么是队列?

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 📌队列的定义 📌队列的抽象数据类型 📌队列的顺序存储结构 📌队列的链式存储结构 结语 人生,是一个又一个小小的队列…

论文笔记——FasterNet

为了设计快速神经网络,许多工作都集中在减少浮点运算(FLOPs)的数量上。然而,作者观察到FLOPs的这种减少不一定会带来延迟的类似程度的减少。这主要源于每秒低浮点运算(FLOPS)效率低下。 为了实现更快的网络,作者重新回顾了FLOPs的运算符,并证明了如此低的FLOPS主要是由…

用户与组管理:如何在服务器系统中管理用户和权限

你是否想过,当你登录到一个服务器系统时,你是如何被识别和授权的?你是否知道,你可以通过创建和管理用户和组来简化和优化你的系统管理工作?你是否想了解一些常用的用户和组管理命令和技巧?如果你的答案是肯…

基于OGG实现Oracle实时同步MySQL

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

基于Pytest+Requests+Allure实现接口自动化测试

一、整体结构 框架组成:pytestrequestsallure 设计模式: 关键字驱动 项目结构: 工具层:api_keyword/ 参数层:params/ 用例层:case/ 数据驱动:data_driver/ 数据层:data/ 逻…

上新!2023年汉字小达人市级比赛在线模拟题增加2个刷题试卷

各位小学三年级到五年级的上海学霸孩子们,刚刚结束了上海小学生古诗文大会的复赛,就紧锣密鼓地全身心投入到上海小学生汉字小达人的市级比赛的备赛中了。 为了助各位孩子一臂之力,我把在线模拟题进行了更新,新增了两个可以刷题的试…

LeetCode Hot100 105.从前序与中序遍历序列构造二叉树

题目&#xff1a;给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 代码&#xff1a; class Solution {private Map<Integer, Integer> indexM…

burp suite 2023.10 Intruder模块详解)

burp suite 2023 Intruder模块详解 Intruder 模块是Burp suite的一个重要功能&#xff0c;用于自动化攻击和对目标应用程序进行大规模的攻击测试。 其主要功能包括&#xff1a; Payloads 设置&#xff1a; 用户可以定义不同类型的 payload&#xff0c;例如字典、数字范围、定…

spring本地事务与单/多线程

请直接看原文 原文链接:多线程与数据库事务以及数据库连接之间的关系 - 知乎 (zhihu.com) -------------------------------------------------------------------------------------------------------------------------------- 今天我们来梳理一下&#xff0c; 多线程、数…

Selenium+Pytest自动化测试框架实战

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…