当前位置: 首页 > news >正文

七、OCR-PaddlePaddle训练源码解析系列-文字识别

一、linux调试

1、数据集下载

ICDAR 2015- OCR数据集-文本识别:https://aistudio.baidu.com/aistudio/datasetdetail/168666

1.1、数据格式目录

在这里插入图片描述

2、准备预训练模型

cd PaddleOCR/
# 下载英文PP-OCRv3的预训练模型
wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_rec_train.tar
# 解压模型参数
cd pretrain_models
tar -xf en_PP-OCRv3_rec_train.tar && rm -rf en_PP-OCRv3_rec_train.tar

3、训练

python3 tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml -o Global.pretrained_model=./pretrain_models/en_PP-OCRv3_rec_train/best_accuracy Global.save_epoch_step=300 Train.dataset.data_dir=./train_data/rec/ Train.dataset.label_file_list=[./train_data/rec/rec_gt_train.txt] Eval.dataset.data_dir=./train_data/rec/ Eval.dataset.label_file_list=[./train_data/rec/rec_gt_test.txt]

二、win10调试

1、训练

python3 train.py -c ../configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml -o Global.pretrained_model=../pretrain_models/en_PP-OCRv3_rec_train/best_accuracy Global.use_gpu=false Global.character_dict_path=../ppocr/utils/en_dict.txt Train.dataset.data_dir=../train_data/rec/ Train.dataset.label_file_list=[../train_data/rec/rec_gt_train.txt] Train.loader.batch_size_per_card=2 Eval.dataset.data_dir=../train_data/rec/ Eval.dataset.label_file_list=[../train_data/rec/rec_gt_test.txt]

2、模型目录理解

PaddleOCR将网络划分为四部分,分别在ppocr/modeling下。 进入网络的数据将按照顺序(transforms->backbones->necks->heads)依次通过这四个部分。

├── architectures # 网络的组网代码
├── transforms # 网络的图像变换模块
├── backbones # 网络的特征提取模块
├── necks # 网络的特征增强模块
└── heads # 网络的输出模块

3、ctcloss

文章理解:https://zhuanlan.zhihu.com/p/137430917
视频理解:https://aistudio.baidu.com/aistudio/education/lessonvideo/1000471
强制一一对应,输入和输出对齐的训练
穷举,寻找最大的
在这里插入图片描述

Why ctc loss, ctc loss vs cross entropy
现实中有很多任务都可以看作是序列到序列的对齐训练。主要可以分为两类:NLP领域常见的机器翻译和对话。对于这类任务,在训练阶段,我们通常使用cross-entropy + teacher forcing来训练模型。这类任务的特点是源序列和目标序列没有严格的对齐关系。他们本质上可以看作是 conditional language model. 也就是目标序列作为条件语言模型,更看重连贯性、流利度,其次是与源序列的对应关系(所以他们会有多样性研究)。
识别领域常见的语音识别,OCR,手语识别。对于这类任务,我们则主要使用ctc loss作为损失函数来训练模型。这类任务的特点是源序列和目标序列有严格的对齐关系。对于语音或手语,目标序列有语言模型的特点,但是更看重与源序列的准确的对应关系。第二类任务其实也可以用cross entropy来训练,但是往往效果不太好。我们可以发现,对于第二类任务,最理想的情况是将源序列先进行分割,这样单独的对某一个音节,手语或者字符进行识别,准确率就会很高了。但是现实是,源序列更多的是未分割的情况。针对这类任务,[Alex Graves, 2006] 提出了Connectionist Temporal Classification.使用ctc进行训练有两个要求:源序列长度 >> 目标序列长度源序列的order与目标序列的order一致,且存在顺序对齐的关系

让所有路径的概率和最大化, 最后就成了一个极大似然的问题了

nn.CTCLoss(blank=0, reduction=‘mean’, zero_infinity=False)
功能: Connectionist Temporal Classification。主要是解决时序类数据的分类问题,特别是label 和output 不对齐的问题(Alignment problem)

4、训练loss

损失函数决定了整体的方向,决定了数据的构造方式以及模型的搭建方式,为何选择这样的损失函数,是背后的原理和规律。
在这里插入图片描述
在这里插入图片描述

相关文章:

  • 数据结构与算法之非递归遍历二叉树
  • Unity技术手册 - 创建物体有几种方式?
  • threejs中各种的对像详细介绍
  • 代码优化~关注核心逻辑,封装常用规则
  • Android车载开发基础学习——蓝牙通信是如何实现的?
  • 智慧政务、数字化优先与数字机器人,政务领域正在开启“政务新视界”
  • DES算法是对称算法吗,能否通过在线工具进行DES解密?
  • 【车间调度】基于GA/PSO/SA/ACO/TS优化算法的车间调度比较(Matlab代码实现)
  • springBoot 的默认线程池-ThreadPoolTaskExecutor
  • 暑期结束为你的新学期立下Flag吧
  • 大数字符串加法
  • ROS1云课→28机器人代价地图配置
  • 设计新鲜事(News Feed)系统
  • 【气动学】基于matlab GUI弹道问题(含初始角度、速度、空气阻力、水平风)【含Matlab源码 2117期】
  • 力扣leetcode 1619. 删除某些元素后的数组均值
  • [译] 怎样写一个基础的编译器
  • 【面试系列】之二:关于js原型
  • C# 免费离线人脸识别 2.0 Demo
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • extjs4学习之配置
  • Flannel解读
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript类型识别
  • JavaWeb(学习笔记二)
  • linux安装openssl、swoole等扩展的具体步骤
  • Linux后台研发超实用命令总结
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • nodejs调试方法
  • SQLServer之索引简介
  • Vue2.0 实现互斥
  • 从零搭建Koa2 Server
  • 记一次用 NodeJs 实现模拟登录的思路
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 如何在 Tornado 中实现 Middleware
  • 什么软件可以剪辑音乐?
  • 微服务核心架构梳理
  • 一些css基础学习笔记
  • 用Python写一份独特的元宵节祝福
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #162 (Div. 2)
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (1)bark-ml
  • (12)目标检测_SSD基于pytorch搭建代码
  • (阿里云万网)-域名注册购买实名流程
  • (二)springcloud实战之config配置中心
  • (翻译)terry crowley: 写给程序员
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (五)网络优化与超参数选择--九五小庞
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程