crnn文字识别,crnn ocr

  crnn文字识别,crnn ocr

  地址如下所示。

  33558 dashi.com/demo/13870.html

  参考GitHub源代码:https://github.com/YoungMiao/crnn

  根据demo大师文章的要求,我进一步补充推荐,这个平台很不错。

  1.环境构建1.1基础环境Ubuntu 14.04安装cuda opencv 2.4 pytorchlmdbwrap _ ctcmdbapt-getinstallmdb

  1.2pytorchpip,linux,cuda8.0,python 2.7: pip安装http://download . py torch.org/whl/cu80/torch-0.1.12.pppp

  参考:http://pytorch.org/

  1.3 wrap _ ctcgitclone https://github.com/Baidu-research/warp-CTC.git ` CD warp-ctcmkdirbuild;该版本可以生成。make GPU版本已添加到环境变量中。

  export cuda _ home=/usr/local/cuda

  参考:https://github.com/seann,Aren/warp-CTC/tree/py torch _ bindings/pytoret on

  1.4注意cffi库文件不足。确保在使用pip install cffi安装安装pytorch_binding之前设置了CUDA_HOME。编译安装不会报错,但是调用gpu会导致wrap_ctc中没有gpu属性的错误。2.crnn预测(

  运行/contrib/crnn/demo.py

  原始图像是:

  鉴定结果如下。

  #负载模型model _ path=。/samples/netcrnn _ 9 _ 112580 . PTH # Image to identified img _ path=。/data/demo.png#类别分类号待识别nclass=len(alphabet) 1保留位,LSTM设置隐藏层数nh=128,使用

  3.方案实施(crnn培训(以21类英语为例)))))))))))注

  请补充完整的实现过程。下面的实现没有具体的实现过程,具体的代码和思路要说清楚。如何清理数据,如何建模等。

  1.数据预处理操作/contrib/crnn/tool/tolmdb.py

  #生成的lmdb输出路径outputPath=。/train_lmdb# image和相应的标签imgdata=open(。/train.txt) 2。运行培训模型/contrib

  python crnn _ main . py[-param val]-train root训练集路径- valroot验证集路径- workers CPU工作核心数,Default=2 default=256-Niter训练轮数,default=25 - lr LR学习率,default=0.01-beta1-CUDA使用GPU,Action default=1-crnn预训练模型-字母表设置分类- diters -实验模型保存目录- displayInterval设置重复多少次。default=500-n _ test default=10-val间隔设置验证次数,default=500-保存间隔设置保留次数。

  ,default=500 - adam 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-tain root[训练集路径]-val root[验证集路径]-nh128-cuda-。

  修改/contrib/crnn/keys.py增加或减少alphabet的类别=ACIMRey,经口投喂毛蚶的血液运输重量。

  注意:训练和预测中使用的类别数和LSTM隐藏层数应该一致。

  4.项目结构

  从上到下,大致说明一下。

  1.crnn.py是crnn网络结构模块。

  #双向LSTM

  class双向TM(nn。模块)

  #CRNN网络

  CRNN类(NN。模块)

  Crnn网络设计:

  CRNN由CNN BiLSTM CTC组成:

  网络结构:

  输入:输入文本块,归一化为32*w,即高度缩放为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层3,输出是512*2*34。

  在conv7层,内核为22,步幅(1,1)填充(0,0)

  wnew=(2 ^ 2 padW-kernel)/strideW 1=1

  Hnew=33

  因此,conv7层输出为512133。

  后面是两个双向Lstm,隐藏节点都是256。

  Bl1输出33*1256

  Bl2输出33*1*5530 5530=字符数非字符数=5529 1

  最终的输出结果可以直观的想象为将128分成33份的概率,每份对应5530个类别。

  2.tolmdb.py生成训练lmdb数据模块

  进入图片列表文件,大致格式如下:3.crnn_main.py主程序模块

  第104行~第117行增加了类别添加和删除的增量训练。

  4.dataset.py数据加载模块类alignCollate: Scale W类RandomSequentialSample按比例采样:随机采样批次

  5.utils.py编解码器模块

  5.获取数据部分的数据有两种方式:生成自然场景文本。

  GitHub:https://github.com/ankush-me/SynthText生成常规文本:

  吉图布:https://github.com/YoungMiao/synthdata-zh

  CRNN有两种带时间记录的中英文字符识别方法。

  代码地址如下:

  http://www.demodashi.com/demo/13870.html

  注:本文版权归作者所有,由大师demo发行。拒绝转载,需作者授权。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: