CRNN中英文字识别

crnn实现细节(pytorch)

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/warpctc/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

原始图片为:
这里写图片描述
这里写图片描述
识别结果为:
CRNN中英文字识别_第1张图片

# 加载模型
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()

替换模型时,注意模型分类的类别数目

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.pyalphabet = 'ACIMRey万下依口哺摄次状璐癌草血运重'增加或者减少类别
3. 注意事项
训练和预测采用的类别数和LSTM隐藏层数需保持一致

Github地址:https://github.com/YoungMiao/crnn

你可能感兴趣的:(网络结构)