PaddleOCR学习笔记

news2024/11/16 3:44:52

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.coloradmin.cn/o/1252013.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我叫:希尔排序【JAVA】

1.我兄弟存在的问题 2.毛遂自荐 希尔排序提希尔(Donald Shell)于1959年提出的一种排序算法。 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的&…

串口虚拟化工具

串口虚拟工具(Configure Virtual Serial Port Driver v7.2) 可以虚拟化串口 串口成对添加,添加之后可以在设备管理器中查看 链接:https://pan.baidu.com/s/1WE9c28MEoSEY7fGhy4kjag 提取码:yahn DebugTool-v.16 作用:可以检验…

Linux踩坑:arm下gcc编译添加 -Ox 优化后,程序无法正常运行

arm下gcc编译添加 -Ox 优化后,程序无法正常运行 一、问题描述 今天学习正点原子的阿尔法开发板裸机开发的时候,遇到了一个问题,在没有使用 -Ox 优化的时候,编译出来的程序能够正常运行,但是添加了-Ox之后&#xff0c…

思维模型 心里摆效应

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。情绪受外界影响。 1心里摆效应的应用 1.1 心理摆效应在管理团队中的应用 谷歌公司是一家以创新和创造力著称的科技公司,其“20%时间”政策是该公司管理团队的一个经典案例。该…

面试必问:如何快速定位BUG?BUG定位技巧及N板斧!

01 定位问题的重要性 很多测试人员可能会说,我的职责就是找到bug,至于找原因并修复,那是开发的事情,关我什么事? 好,我的回答是,如果您只想做一个测试人员最基本最本分的事情,那么可…

Arduio开发STM32所面临的风险

据说micro_ros用到了arduino,然后用arduino搞stm32需要用到这个Arduino STM32的东西,然后这里申明了:这些代码没有经过严格测试,如果是向心脏起搏器,自动驾驶这样要求严格的的情况下,这个东西不能保证100%不发生问题&a…

Redis实战篇(一)短信登录

Redis实战篇(一)短信登录 1.1、导入黑马点评项目 1.1.1 、导入SQL 1.1.2、有关当前模型 手机或者app端发起请求,请求我们的nginx服务器,nginx基于七层模型走的事HTTP协议,可以实现基于Lua直接绕开tomcat访问redis&a…

《尚品甄选》:后台系统——结合redis实现用户登录

文章目录 一、统一结果实体类二、统一异常处理三、登录功能实现四、CORS解决跨域五、图片验证码六、登录校验功能实现6.1 拦截器开发6.2 拦截器注册 七、ThreadLocal 要求: 用户输入正确的用户名、密码以及验证码,点击登录可以跳转到后台界面。未登录的用…

6、独立按键控制LED亮灭

独立按键 轻触按键&#xff1a;相当于是一种电子开关&#xff0c;按下时开关接通&#xff0c;松开是开关断开 实现原理&#xff1a;是通过轻触按键内部的金属弹片受力弹动来实现接通和断开 代码&#xff1a; #include <REGX52.H>void main() {//等同于P20XFE;P2_00…

张弛声音变现课,枪战电影高能量、快速节奏

在执行枪战片的声音配音任务时&#xff0c;配音员应该致力于传递出戏剧性的紧张氛围与动作场面的激烈感。枪战场景往往是高能量、快速节奏的&#xff0c;这就要求配音不仅要与视觉动作紧密结合&#xff0c;还要通过声音来增强动作的逼真度和观众的紧迫感。以下是针对枪战电影进…

IT行业多项目管理的方法与策略:优化资源分配与提升项目成功率

多项目管理已成为项目经理们面临的常态&#xff0c;IT行业如何高效进行项目管理呢&#xff1f; 多项目管理过程中存在的问题 1、多类型项目并行&#xff0c;项目流程掺杂混乱&#xff0c;项目进度难以监控&#xff0c;反应缓慢&#xff0c;容易产生延误风险。 2、团队资源有…

LeetCode-1689. 十-二进制数的最少数目 C/C++实现 超详细思路及过程[M]

&#x1f388;归属专栏&#xff1a;深夜咖啡配算法 &#x1f697;个人主页&#xff1a;Jammingpro &#x1f41f;记录一句&#xff1a;上一篇博客这里好像没改&#xff0c;那就不改了。 文章目录 LeetCode-1689. 十-二进制数的最少数目&#x1f697;题目&#x1f686;题目描述&…

2016年11月16日 Go生态洞察:Go字体的创新之旅

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

SpringBoot修改启动图标

公司基于SpringBoot框架再次定制了一个框架,那要怎么让自己封装的框架逼格高一点? 那门面就要与众不同, 哈哈哈!!!! 艺术文字网站: patorjk.com 我这里使用字体是 "怪物" 貌似框架也是使用这个字体,外国人的文化底蕴就是xxxx,推崇妖魔鬼怪

WorldWind Android上加载白模数据

这篇文章介绍下如何加载白模数据。这个白模数据的格式是shapefile格式的文件。白模数据拷贝到手机本地&#xff0c;然后读取白模数据&#xff0c;进行加载展示。 worldwind android本身是不支持加载白模数据的&#xff0c;但是可以根据现有提供的加载Polygons的方式&#xff0c…

自定义精美商品分类列表组件 侧边栏商品分类组件 category组件(适配vue3)

随着技术的发展&#xff0c;开发的复杂度也越来越高&#xff0c;传统开发方式将一个系统做成了整块应用&#xff0c;经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改&#xff0c;造成牵一发而动全身。通过组件化开发&#xff0c;可以有效实现单…

【Linux】 sudo命令使用

sudo sudo是linux系统管理指令&#xff0c;是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具&#xff0c;如halt&#xff0c;reboot&#xff0c;su等等。这样不仅减少了root用户的登录 和管理时间&#xff0c;同样也提高了安全性。sudo不是对shell的一个代替…

Spring cloud - Feign

Feign的作用 Feign是Netflix公司开发的声明式web客户端组件&#xff0c;Spring对Feign做了无缝集成&#xff1a; Feign is a declarative web service client. It makes writing web service clients easier. To use Feign create an interface and annotate it. It has plugg…

【TC3xx芯片】TC3xx芯片的Endinit功能详解

目录 前言 正文 1.功能概述 2. WDTxCON0 的密码访问&#xff08;Password Access to WDTxCON0&#xff09; 2.1 Static Password 2.2 Automatic Password Sequencing 2.3 Time-Independent Pasword 2.4 Time Check Password 3. WDTxCON0的检查访问&#xff08;Check A…

【C++初阶】STL详解(八)List的模拟实现

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…