python场景文字识别_场景文字识别Attention_飞桨-源于产业实践的开源深度学习平台...
场景文字识别-Attention
类别 计算机视觉(PaddleCV)
应用 文字 图片识别 营业执照识别 车牌识别 票据识别
模型概述
使用Attention 识别图片中单行英文字符,用于端到端的自然场景文本识别。
模型说明
## 代码结构
```
├── data_reader.py # 下载、读取、处理数据。
├── crnn_ctc_model.py # 定义了OCR CTC model的网络结构。
├── attention_model.py # 定义了OCR attention model的网络结构。
├── train.py # 用于模型的训练。
├── infer.py # 加载训练好的模型文件,对新数据进行预测。
├── eval.py # 评估模型在指定数据集上的效果。
└── utils.py # 定义通用的函数。
```
## 简介
本章的任务是识别图片中单行英文字符,这里我们分别使用CTC model和attention model两种不同的模型来完成该任务。
这两种模型的有相同的编码部分,首先采用卷积将图片转为特征图, 然后使用`im2sequence op`将特征图转为序列,通过`双向GRU`学习到序列特征。
两种模型的解码部分和使用的损失函数区别如下:
- CTC model: 训练过程选用的损失函数为CTC(Connectionist Temporal Classification) loss, 预测阶段采用的是贪婪策略和CTC解码策略。
- Attention model: 训练过程选用的是带注意力机制的解码策略和交叉信息熵损失函数,预测阶段采用的是柱搜索策略。
训练以上两种模型的评估指标为样本级别的错误率。
## 数据
数据的下载和简单预处理都在`data_reader.py`中实现。
### 数据示例
我们使用的训练和测试数据如`图1`所示,每张图片包含单行不定长的英文字符串,这些图片都是经过检测算法进行预框选处理的。
图 1
在训练集中,每张图片对应的label是汉字在词典中的索引。 `图1` 对应的label如下所示:
```
80,84,68,82,83,72,78,77,68,67
```
在上边这个label中,`80` 表示字符`Q`的索引,`67` 表示英文字符`D`的索引。
### 数据准备
**A. 训练集**
我们需要把所有参与训练的图片放入同一个文件夹,暂且记为`train_images`。然后用一个list文件存放每张图片的信息,包括图片大小、图片名称和对应的label,这里暂记该list文件为`train_list`,其格式如下所示:
```
185 48 00508_0215.jpg 7740,5332,2369,3201,4162
48 48 00197_1893.jpg 6569
338 48 00007_0219.jpg 4590,4788,3015,1994,3402,999,4553
150 48 00107_4517.jpg 5936,3382,1437,3382
...
157 48 00387_0622.jpg 2397,1707,5919,1278
```
文件train_list
上述文件中的每一行表示一张图片,每行被空格分为四列,前两列分别表示图片的宽和高,第三列表示图片的名称,第四列表示该图片对应的sequence label。
最终我们应有以下类似文件结构:
```
|-train_data
|- train_list
|- train_imags
|- 00508_0215.jpg
|- 00197_1893.jpg
|- 00007_0219.jpg
| ...
```
在训练时,我们通过选项`--train_images` 和 `--train_list` 分别设置准备好的`train_images` 和`train_list`。
>**注:** 如果`--train_images` 和 `--train_list`都未设置或设置为None, reader.py会自动下载使用[示例数据](http://paddle-ocr-data.bj.bcebos.com/data.tar.gz),并将其缓存到`$HOME/.cache/paddle/dataset/ctc_data/data/` 路径下。
**B. 测试集和评估集**
测试集、评估集的准备方式与训练集相同。
在训练阶段,测试集的路径通过train.py的选项`--test_images` 和 `--test_list` 来设置。
在评估时,评估集的路径通过eval.py的选项`--input_images_dir` 和`--input_images_list` 来设置。
**C. 待预测数据集**
预测支持三种形式的输入:
第一种:设置`--input_images_dir`和`--input_images_list`, 与训练集类似, 只不过list文件中的最后一列可以放任意占位字符或字符串,如下所示:
```
185 48 00508_0215.jpg s
48 48 00197_1893.jpg s
338 48 00007_0219.jpg s
...
```
第二种:仅设置`--input_images_list`, 其中list文件中只需放图片的完整路径,如下所示:
```
data/test_images/00000.jpg
data/test_images/00001.jpg
data/test_images/00003.jpg
```
第三种:从stdin读入一张图片的path,然后进行一次inference.
## 模型训练与预测
### 训练
使用默认数据在GPU单卡上训练:
```
env CUDA_VISIBLE_DEVICES=0 python train.py
```
使用默认数据在CPU上训练:
```
env OMP_NUM_THREADS=python train.py --use_gpu False --parallel=False
```
使用默认数据在GPU多卡上训练:
```
env CUDA_VISIBLE_DEVICES=0,1,2,3 python train.py --parallel=True
```
默认使用的是`CTC model`, 可以通过选项`--model="attention"`切换为`attention model`。
执行`python train.py --help`可查看更多使用方式和参数详细说明。
图2为使用默认参数在默认数据集上训练`CTC model`的收敛曲线,其中横坐标轴为训练迭代次数,纵轴为样本级错误率。其中,蓝线为训练集上的样本错误率,红线为测试集上的样本错误率。测试集上最低错误率为22.0%.
图 2
图3为使用默认参数在默认数据集上训练`attention model`的收敛曲线,其中横坐标轴为训练迭代次数,纵轴为样本级错误率。其中,蓝线为训练集上的样本错误率,红线为测试集上的样本错误率。测试集上最低错误率为16.25%.
图 3
## 测试
通过以下命令调用评估脚本用指定数据集对模型进行评估:
```
env CUDA_VISIBLE_DEVICES=0 python eval.py \
--model_path="./models/model_0" \
--input_images_dir="./eval_data/images/" \
--input_images_list="./eval_data/eval_list"
```
执行`python train.py --help`可查看参数详细说明。
### 预测
从标准输入读取一张图片的路径,并对齐进行预测:
```
env CUDA_VISIBLE_DEVICES=0 python infer.py \
--model_path="models/model_00044_15000"
```
执行上述命令进行预测的效果如下:
```
----------- Configuration Arguments -----------
use_gpu: True
input_images_dir: None
input_images_list: None
model_path: /home/work/models/fluid/ocr_recognition/models/model_00052_15000
------------------------------------------------
Init model from: ./models/model_00052_15000.
Please input the path of image: ./test_images/00001_0060.jpg
result: [3298 2371 4233 6514 2378 3298 2363]
Please input the path of image: ./test_images/00001_0429.jpg
result: [2067 2067 8187 8477 5027 7191 2431 1462]
```
从文件中批量读取图片路径,并对其进行预测:
```
env CUDA_VISIBLE_DEVICES=0 python infer.py \
--model_path="models/model_00044_15000" \
--input_images_list="data/test.list"
```
## 预训练模型
|模型| 错误率|
|- |:-: |
|[ocr_ctc_params](https://paddle-ocr-models.bj.bcebos.com/ocr_ctc.zip) | 22.3% |
|[ocr_attention_params](https://paddle-ocr-models.bj.bcebos.com/ocr_attention.zip) | 15.8%|
>在本文示例中,均可通过修改`CUDA_VISIBLE_DEVICES`改变当前任务使用的显卡号。
python场景文字识别_场景文字识别Attention_飞桨-源于产业实践的开源深度学习平台...相关推荐
- retinanet 部署_目标检测RetinaNet_飞桨-源于产业实践的开源深度学习平台
目标检测-RetinaNet 类别 计算机视觉(PaddleCV) 应用 图像搜索 安防监控 自动驾驶 智慧城市 机器人视觉 模型概述 经典的一阶段框架,由ResNet主干网络.FPN结构.和两个分别 ...
- deepfashion 深度学习_基于Alluxio加速混合云下的Intel Analytics Zoo开源深度学习平台...
本文描述了Alluxio如何在混合云环境中,加速oneAPI支撑的英特尔Analytics Zoo开源平台深度学习模型训练.本文会讨论有关新架构和工作流的细节,以及Alluxio的性能优势和基准测试结 ...
- python 加权随机算法_加权随机算法 - 飞儿飞的个人空间 - OSCHINA - 中文开源技术交流社区...
加权随机算法一般应用在以下场景:有一个集合S,里面比如有A,B,C,D这四项.这时我们想随机从中抽取一项,但是抽取的概率不同,比如我们希望抽到A的概率是50%,抽到B和C的概率是20%,D的概率是10 ...
- 深度学习平台demo(一)- C#如何调用python文件
上一篇博客提到了一个小插曲,就是要用c#做界面,底层用python来做一个深度学习的平台.这篇博客先不戳核心,暂时先回顾下怎么用c#来调用python.我亲手实验了如下三种方式,然后引出我后面做深度学 ...
- 【深度学习实践】基于深度学习的车牌识别(python,车牌检测+车牌识别)
车牌识别具有广泛的应用前景,基于传统方法的车牌识别效果一般比较差,随着计算机视觉技术的快速发展,深度学习的方法能够更好的完成车牌识别任务. 本文提供了车牌识别方案的部署链接,您可以在网页上体验该模型的 ...
- pythonic的典故_旷视开源深度学习框架「天元」,提供人人可用的AI“生产力工具”【星特写】...
原标题:旷视开源深度学习框架「天元」,提供人人可用的AI"生产力工具"[星特写] 今日,旷视宣布开源自研深度学习框架MegEngine(Brain++核心组件之一),中文名天元-- ...
- semiplannar 什么是_图像识别VPU——易用的嵌入式AI支持深度学习平台介绍
公司玩了大半年的嵌入式AI平台,现在产品进入量产模式,也接触了很多嵌入式方案,有了一些心得体会,本人不才,在这里介绍一下一款简单易用的嵌入式AI方案--Movidius Myriad 2 VPU(MA ...
- 性别识别_文字性别识别_语音性别识别 - 云+社区 - 腾讯云
广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 通过神经网络对声音进行分类,比对声纹特征,实时判断说话人的性别特征,识别准确率高达 ...
- 韩语在线翻译图片识别_一键截图识别屏幕文字,支持实时翻译还能朗读
☝点击"极客喵荐"关注公众号获取最新实用技巧 口令:126 支持:Windows 图文说明 在平常的学习生活中,我们总会遇到这些情况,浏览一些网页或者图片的时候,没法复制其中的文字 ...
- python 人脸轮廓提取_实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你!...
以前写过一篇关于实现人脸识别的文章,里面用到的技术是经过调用百度 API 实现的,本次将借助于 dlib 程序包实现人脸区域检测.特征点提取等功能,html dlib 封装了许多优秀的机器学习算法, ...
最新文章
- log parser 微软iis 日志分析
- python和excel的区别-Python与Excel 不得不说的事情
- ASP.NET URL重写实现IHttpHandler接口
- android SharedPreferences数据存储
- 任意用户密码重置的10种姿势
- php 特殊字符大全,关于php 特殊字符的文章推荐
- Running /usr/bin/wineserver -w. This will hang until all wine processes XXXX terminate
- 《统计学习方法》代码全解析——第十一部分条件随机场
- OpenCV之滑动条的创建和使用
- 视差滚动效果原理解析和效果实现
- java代码规范插件_阿里java代码规范IDEA插件之傻瓜教程
- mysql数据库原理设计与应用在线pdf_《数据库原理与应用》[51MB]PDF完整版下载-码农之家...
- Table [xx] contains physical column name referred to by multiple physical column names 错误处理
- oracle 加权久期,久期 - MBA智库百科
- 4g dtu无线透明通讯模块传输RS232/485手机APP全网通CAT1
- 在 PDF 中添加文本的 3 种简单方法
- 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest:Gym 101667B
- 使用计算机怎样制表格,如何在电脑上制作简单的表格?
- 斩不断、理还乱,论家事,别有一番滋味在心头。
- erp软件的主要功能
热门文章
- 【微信防封域名】【微信不死域名】【微信域名白名单】
- cmd查看电脑ip配置
- 开源ESB服务总线记录
- 炸了~Redis bigkey导致生产事故-bigkey问题全面分析
- 塔防java_塔防游戏--java游戏
- html转换vmax,CSS里px、em、rem、%、vw、vh、vmin、vmax这些单位的区别
- html博客音乐播放器代码大全,播放器代码大全
- 手机音乐播放器页面html代码,仿酷狗html5手机音乐播放器主要部分代码
- 函数论_E.C.Tichmarsh_Page 4 级数一致收敛的魏尔斯特拉斯 M-判别法 的推广
- 堪比端游!欧美十大RPG网页游戏推荐