深度学习CTPN+CRNN模型实现图片内文字的定位与识别(OCR)
源码(PyTorch实现)github 地址:
在公众号 datadw 里 回复 OCR 即可获取。
1:样本获取
**算法论文:**
Synthetic Data for Text Localisation in Natural Images
Github: https://github.com/ankush-me/SynthText
**词库:**
https://pan.baidu.com/s/10anmu + 英文词汇 经过处理后得到大约500兆
6000万词组
**字体:**
ubntu系统下支持中文的字体,选了大概10种字体左右
**背景图片库:**
http://zeus.robots.ox.ac.uk/textspot/static/db/bg_img.tar.gz
大约有一万张分割好的图片
**算法大致过程:**
随机从背景图片库中选出一张图片,随机从词库中选出一些词组,与背景图片分割
的块进行匹配,选好字体,颜色,大小,变换等信息,将词组写入背景块中,
扣取背景块矩形框作为一个个样本。
**样本类似**
2:网络设计:
网络: 1:input: 输入文字块,归一化到32*w 即height缩放到32,宽度按高度的比率缩 放,当然,也可以缩放到自己想要的宽度,如128(测试时统一缩放到[32,128],训练时为批次训练,缩放到[32,Wmax]) 下面以32*128(w,h)分析 2:conv3层时数据大小为256*8*32,两个pooling层宽高各除以4 3:pooling2层时 步长为(2,1) dilation (1,1) 所以此时输出为256*4*33 4:bn层不改变输出的大小(就是做个归一化,加速训练收敛,个人理解),同样p3层时,w+1,所以pooling3层时,输出为512*2*34 5:conv7层时,kernel 为2*2,stride(1,1) padding(0,0) Wnew = (2 + 2 * padW - kernel ) / strideW + 1 = 1 Hnew = 33 所以conv7层输出为512*1*33 6: 后面跟两个双向Lstm,隐藏节点都是256 Blstm1输出33*1*256 Blstm2输出33*1*5530 5530 = 字符个数 + 非字符 = 5529 + 1 最终的输出结果直观上可以想象成将128分为33份,每一份对应5530个类别的概率
3:实验结果
自动生成差不多150万个样本,测试集1500张左右,测试集全对率62%左右。因为硬件限制,所以样本较少,感觉样本数量应该要几千万甚至上亿,模型才会比较稳定。150万个样本训练也没收敛,还有2.5左右的cost.
4:CTPN+CRNN整合场景文字检测识别结果
没有进行版面分析,所以识别结果没有按顺序输出 其中标点符号训练集较少,错得较多。整体识别率感觉还行,如果加大训练样本至几千万,上亿,模型应该会比较稳定,识别也会比较好
http://blog.csdn.net/u013293750/article/details/73188934
- 升级Nginx1.9.5以上版本,开启博客网站http2.0时代
- Oracle Data Guard压缩归档测试(二)(r12笔记第27天)
- Oracle Data Guard压缩归档效果对比(r12笔记第26天)
- PHP7.0正式版编译安装升级及WordPress问题解决分享
- MySQL自增列的重复值问题(r12笔记第25天)
- 借助腾讯云CDN开启全站https及问题解决分享
- 分分钟搭建MySQL Group Replication测试环境(二)(r12笔记第41天)
- php5编译安装常见错误和解决办法集锦
- MySQL自增列主从不一致的测试(r12笔记第37天)
- 分享Mac/Linux系统Shell终端利器SecureCRT以及注册破解方法
- MySQL中GTID和自增列的数据测试(r12笔记第38天)
- 分享一个入门级可控多线程shell脚本方案
- PhalGo-介绍
- 实测Nginx服务器开启pagespeed加速效果
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- centos中yum命令删除还原的补救方法介绍
- Linux 创建子进程执行任务的实现方法
- Linux系统下安装jdbc与tomcat的图文教程
- Linux系统下利用C程序输出某进程的内存占用信息
- .NET Standard中配置TargetFrameworks输出多版本类库
- .NET Standard SDK 样式项目中的目标框架
- 偿还技术债(2)-EventBus自己实现一个?
- AkShare-债券数据-收盘收益率曲线
- Vue 项目报错:‘$‘ is not defined ( no-undef )
- SpringBoot 项目开启热部署
- 小程序文件下载并保存文件名打开
- 分享个 CTF 小工具 bruteHASH
- centos配置mutt和msmtp实现邮件发送
- CentOS8 安装 jdk8 / java8的教程(推荐)
- Ubuntu18.04 一键升级Python所有第三方包 及安装python包的方法