你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
首页
热门
推荐
精选
登录
|
注册
CRNN中英文字符识别
立即下载
用AI写一个
该例子支持:好用才打赏哦
现在下载学习
发布时间:2018-08-22
40人
|
浏览:12636次
|
收藏
|
分享
技术:Python2+pytorch
运行环境:Ubuntu14.04+CUDA+opencv2.4 + pytorch + lmdb +wrap_ctc
概述
crnn实现中英文字符识别
详细
参考GitHub源码:https://github.com/YoungMiao/crnn > 应demo大师文章要求,我再补充下,推荐下,这个平台挺好 ## 1.环境搭建 #### 1.1 基础环境 * Ubuntu14.04 + CUDA * opencv2.4 + pytorch + lmdb +wrap_ctc 安装lmdb `apt-get install lmdb` #### 1.2 安装pytorch pip,linux,cuda8.0,python2.7:pip install http://download.pytorch.org/whl/cu80/torch-0.1.12.post2-cp27-none-linux_x86_64.whl 参考:http://pytorch.org/ #### 1.3 安装wrap_ctc git clone https://github.com/baidu-research/warp-ctc.git` cd warp-ctc mkdir build; cd build cmake .. make GPU版在环境变量中添加 export CUDA_HOME="/usr/local/cuda" cd pytorch_binding python setup.py install 参考:https://github.com/SeanNaren/warp-ctc/tree/pytorch_bindings/pytorch_binding #### 1.4 注意问题 1. 缺少cffi库文件 使用`pip install cffi`安装 2. 安装pytorch_binding前,确认设置CUDA_HOME,虽然编译安装不会报错,但是在调用gpu时,会出现wrap_ctc没有gpu属性的错误 ## 2. crnn预测(以21类中英文为例) 模型地址:链接:https://eyun.baidu.com/s/3dEUJJg9 密码:vKeD 运行`/contrib/crnn/demo.py` 原始图片为:  识别结果为:  # 加载模型 model_path = './samples/netCRNN_9_112580.pth' # 需识别的图片 img_path = './data/demo.png' # 识别的类别 alphabet = 'ACIMRey万下依口哺摄次状璐癌草血运重' # 设置模型参数 图片高度imgH=32, nc, 分类数目nclass=len(alphabet)+1 一个预留位, LSTM设置隐藏层数nh=128, 使用GPU个数ngpu=1 model = crnn.CRNN(32, 1, 22, 128, 1).cuda() 替换模型时,注意模型分类的类别数目 ## 3、程序实现(crnn 训练(以21类中英文为例)) 注意:-------------------------------------- 请补充完整个实现过程,以下实现,没有说到具体的实现过程,应该把具体的代码说清楚,思路说清楚。数据怎样清洗的,怎样建模的等等 ###1. 数据预处理 运行`/contrib/crnn/tool/tolmdb.py` # 生成的lmdb输出路径 outputPath = "./train_lmdb" # 图片及对应的label imgdata = open("./train.txt") ###2. 训练模型 运行`/contrib/crnn/crnn_main.py` python crnn_main.py [--param val] --trainroot 训练集路径 --valroot 验证集路径 --workers CPU工作核数, default=2 --batchSize 设置batchSize大小, default=64 --imgH 图片高度, default=32 --nh LSTM隐藏层数, default=256 --niter 训练回合数, default=25 --lr 学习率, default=0.01 --beta1 --cuda 使用GPU, action='store_true' --ngpu 使用GPU的个数, default=1 --crnn 选择预训练模型 --alphabet 设置分类 --Diters --experiment 模型保存目录 --displayInterval 设置多少次迭代显示一次, default=500 --n_test_disp 每次验证显示的个数, default=10 --valInterval 设置多少次迭代验证一次, default=500 --saveInterval 设置多少次迭代保存一次模型, default=500 --adam 使用adma优化器, action='store_true' --adadelta 使用adadelta优化器, action='store_true' --keep_ratio 设置图片保持横纵比缩放, action='store_true' --random_sample 是否使用随机采样器对数据集进行采样, action='store_true' 示例:python /contrib/crnn/crnn_main.py --tainroot [训练集路径] --valroot [验证集路径] --nh 128 --cuda --crnn [预训练模型路径] 修改`/contrib/crnn/keys.py`中`alphabet = 'ACIMRey万下依口哺摄次状璐癌草血运重'`增加或者减少类别 3. 注意事项 训练和预测采用的类别数和LSTM隐藏层数需保持一致 ## 4、项目结构  从上往下大概说明下 1.crnn.py是crnn网络结构模块 `#双向的LSTM` `class BidirectionalLSTM(nn.Module)` `#CRNN网络` `class CRNN(nn.Module)` crnn网络设计: CRNN由CNN+BiLSTM+CTC构成:  网络结构:  * input: 输入文字块,归一化到`32*w` 即height缩放到32,宽度按高度的比率缩放,也可以缩放到自己想要的宽度,训练时为批次训练,缩放到[32,Wmax]),示例为(32,128) * 经过两个conv层和两个poling层,conv3层时数据大小为256\*8*32,两个pooling层步长为2 * pooling2层步长为(2,1),(个人看法:作者使用的英文训练,英文字符的特征是高大于宽的特征,倘若使用中文训练,建议使用(2,2),我的代码中默认为(2,2),示例以(2,1)为例,所以此时输出为256\*4*33 * bn层不改变输出的大小(就是做个归一化,加速训练收敛),p3层时,w+1,所以pooling3层时,输出为512\*2*34 * conv7层时,kernel 为2*2,stride(1,1) padding(0,0) Wnew = (2 + 2 * padW - kernel ) / strideW + 1 = 1 Hnew = 33 所以conv7层输出为512*1*33 * 后面跟两个双向Lstm,隐藏节点都是256 Blstm1输出33\*1*256 Blstm2输出 33*\*1*5530 5530 = 字符个数 + 非字符 = 5529 + 1 最终的输出结果直观上可以想象成将128分为33份,每一份对应5530个类别的概率 2.tolmdb.py生成训练lmdb数据模块 * 输入图片list的文档,大概格式如下  3.crnn_main.py主程序模块 * 增加了对类别增删的增量训练,line104~line117 4.dataset.py数据加载模块 * class alignCollate:按照比例缩放w * class randomSequentialSampler:随机采样batch 5.utils.py编解码模块 ##5、数据部分 数据获取方法有两种: 1. 生成自然场景文本 GitHub:https://github.com/ankush-me/SynthText 2. 生成常规文本: GitHub:https://github.com/YoungMiao/synthdata-zh 有时间在记录两种方法
本实例支付的费用只是购买源码的费用,如有疑问欢迎在文末留言交流,如需作者在线代码指导、定制等,在作者开启付费服务后,可以点击“购买服务”进行实时联系,请知悉,谢谢
感谢
5
手机上随时阅读、收藏该文章 ?请扫下方二维码
相似例子推荐
评论
作者
maple
购买服务
购买服务
服务描述:
互相学习
服务价格:
¥1
我要联系
1
例子数量
40
帮助
5
感谢
评分详细
可运行:
4.5
分
代码质量:
4.5
分
文章描述详细:
4.5
分
代码注释:
4.5
分
综合:
4.5
分
作者例子
CRNN中英文字符识别