场景文字识别-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_飞桨-源于产业实践的开源深度学习平台...相关推荐

  1. retinanet 部署_目标检测RetinaNet_飞桨-源于产业实践的开源深度学习平台

    目标检测-RetinaNet 类别 计算机视觉(PaddleCV) 应用 图像搜索 安防监控 自动驾驶 智慧城市 机器人视觉 模型概述 经典的一阶段框架,由ResNet主干网络.FPN结构.和两个分别 ...

  2. deepfashion 深度学习_基于Alluxio加速混合云下的Intel Analytics Zoo开源深度学习平台...

    本文描述了Alluxio如何在混合云环境中,加速oneAPI支撑的英特尔Analytics Zoo开源平台深度学习模型训练.本文会讨论有关新架构和工作流的细节,以及Alluxio的性能优势和基准测试结 ...

  3. python 加权随机算法_加权随机算法 - 飞儿飞的个人空间 - OSCHINA - 中文开源技术交流社区...

    加权随机算法一般应用在以下场景:有一个集合S,里面比如有A,B,C,D这四项.这时我们想随机从中抽取一项,但是抽取的概率不同,比如我们希望抽到A的概率是50%,抽到B和C的概率是20%,D的概率是10 ...

  4. 深度学习平台demo(一)- C#如何调用python文件

    上一篇博客提到了一个小插曲,就是要用c#做界面,底层用python来做一个深度学习的平台.这篇博客先不戳核心,暂时先回顾下怎么用c#来调用python.我亲手实验了如下三种方式,然后引出我后面做深度学 ...

  5. 【深度学习实践】基于深度学习的车牌识别(python,车牌检测+车牌识别)

    车牌识别具有广泛的应用前景,基于传统方法的车牌识别效果一般比较差,随着计算机视觉技术的快速发展,深度学习的方法能够更好的完成车牌识别任务. 本文提供了车牌识别方案的部署链接,您可以在网页上体验该模型的 ...

  6. pythonic的典故_旷视开源深度学习框架「天元」,提供人人可用的AI“生产力工具”【星特写】...

    原标题:旷视开源深度学习框架「天元」,提供人人可用的AI"生产力工具"[星特写] 今日,旷视宣布开源自研深度学习框架MegEngine(Brain++核心组件之一),中文名天元-- ...

  7. semiplannar 什么是_图像识别VPU——易用的嵌入式AI支持深度学习平台介绍

    公司玩了大半年的嵌入式AI平台,现在产品进入量产模式,也接触了很多嵌入式方案,有了一些心得体会,本人不才,在这里介绍一下一款简单易用的嵌入式AI方案--Movidius Myriad 2 VPU(MA ...

  8. 性别识别_文字性别识别_语音性别识别 - 云+社区 - 腾讯云

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 通过神经网络对声音进行分类,比对声纹特征,实时判断说话人的性别特征,识别准确率高达 ...

  9. 韩语在线翻译图片识别_一键截图识别屏幕文字,支持实时翻译还能朗读

    ☝点击"极客喵荐"关注公众号获取最新实用技巧 口令:126 支持:Windows 图文说明 在平常的学习生活中,我们总会遇到这些情况,浏览一些网页或者图片的时候,没法复制其中的文字 ...

  10. python 人脸轮廓提取_实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你!...

    以前写过一篇关于实现人脸识别的文章,里面用到的技术是经过调用百度 API 实现的,本次将借助于 dlib  程序包实现人脸区域检测.特征点提取等功能,html dlib 封装了许多优秀的机器学习算法, ...

最新文章

  1. log parser 微软iis 日志分析
  2. python和excel的区别-Python与Excel 不得不说的事情
  3. ASP.NET URL重写实现IHttpHandler接口
  4. android SharedPreferences数据存储
  5. 任意用户密码重置的10种姿势
  6. php 特殊字符大全,关于php 特殊字符的文章推荐
  7. Running /usr/bin/wineserver -w. This will hang until all wine processes XXXX terminate
  8. 《统计学习方法》代码全解析——第十一部分条件随机场
  9. OpenCV之滑动条的创建和使用
  10. 视差滚动效果原理解析和效果实现
  11. java代码规范插件_阿里java代码规范IDEA插件之傻瓜教程
  12. mysql数据库原理设计与应用在线pdf_《数据库原理与应用》[51MB]PDF完整版下载-码农之家...
  13. Table [xx] contains physical column name referred to by multiple physical column names 错误处理
  14. oracle 加权久期,久期 - MBA智库百科
  15. 4g dtu无线透明通讯模块传输RS232/485手机APP全网通CAT1
  16. 在 PDF 中添加文本的 3 种简单方法
  17. 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest:Gym 101667B
  18. 使用计算机怎样制表格,如何在电脑上制作简单的表格?
  19. 斩不断、理还乱,论家事,别有一番滋味在心头。
  20. erp软件的主要功能

热门文章

  1. 【微信防封域名】【微信不死域名】【微信域名白名单】
  2. cmd查看电脑ip配置
  3. 开源ESB服务总线记录
  4. 炸了~Redis bigkey导致生产事故-bigkey问题全面分析
  5. 塔防java_塔防游戏--java游戏
  6. html转换vmax,CSS里px、em、rem、%、vw、vh、vmin、vmax这些单位的区别
  7. html博客音乐播放器代码大全,播放器代码大全
  8. 手机音乐播放器页面html代码,仿酷狗html5手机音乐播放器主要部分代码
  9. 函数论_E.C.Tichmarsh_Page 4 级数一致收敛的魏尔斯特拉斯 M-判别法 的推广
  10. 堪比端游!欧美十大RPG网页游戏推荐