# CRNN
## 论文
[An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition](https://arxiv.org/abs/1507.05717)
## 模型结构
CRNN模型,即将CNN与RNN网络结合,共同训练。主要用于在一定程度上实现端到端(end-
to-end)地对不定长的文本序列进行识别,不用先对单个文字进行切割,而是将文本识别转化为时序依赖的序列学习问题,就是基于图像的序列识别。这里有一个很精彩的改动,一共有四个最大池化层,但是最后两个池化层的窗口尺寸由2x2改为1x2,也就是图片的高度减半了四次,而宽度则只减半了两次(,这是因为文本图像多数都是高较小而宽较长,所以其feature map 也是这种高小宽长的矩形形状,如果使用1×2的池化窗口可以尽量保证不丢失在宽度方向的信息,更适合英文字母识别。
## 算法原理
CRNN(卷积循环神经网络)是一种用于光学字符识别(OCR)的深度学习模型,它结合了卷积神经网络(CNN)强大的特征提取能力、循环神经网络(RNN)对序列信息的建模能力,以及连接时序分类(CTC)损失函数来解决不定长序列对齐问题。CNN从输入图像中提取特征图,RNN对特征序列进行建模并预测字符概率分布,CTC则将这些概率分布转化为最终的文本序列。CRNN能够实现端到端的文字识别,无需显式地进行字符分割,同时能够处理不定长的文本序列,广泛应用于自然场景文字识别、文档扫描与识别等领域,具有较高的识别准确率和鲁棒性。
## 环境配置
### Docker(方法一)
推荐使用docker方式运行, 此处提供[光源](https://www.sourcefind.cn/#/service-list)拉取docker镜像的地址与使用步骤
```
docker pull image.sourcefind.cn:5000/dcu/admin/base/paddlepaddle:3.0.0-py3.10-dtk24.04.3-ubuntu20.04
docker run -it --shm-size=1024G -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal:/opt/hyhal --network=host --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name CRNN bash # 为以上拉取的docker的镜像ID替换
git clone https://developer.sourcefind.cn/codes/modelzoo/crnn_paddle
cd /path/your_code_data/
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install paddleocr
# 需要关联动态库包
export LD_LIBRARY_PATH=/opt/dtk-24.04.3/lib:/opt/dtk-24.04.3/cuda/extras/CUPTI/lib64:/opt/dtk-24.04.3/cuda/targets/x86_64-linux/lib:$LD_LIBRARY_PATH
```
Tips:以上dtk驱动、python、paddlepaddle等DCU相关工具版本需要严格一一对应。
### Dockerfile(方法二)
此处提供dockerfile的使用方法
```
git clone http://developer.sourcefind.cn/codes/modelzoo/kimi-vl-a3b-instruct_pytorch.git
docker build -t internvl:latest .
docker run --shm-size 500g --network=host --name=kimi-vl --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v 项目地址(绝对路径):/home/ -v /opt/hyhal:/opt/hyhal:ro -it bash
cd /path/your_code_data/
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install paddleocr
# 需要关联动态库包
export LD_LIBRARY_PATH=/opt/dtk-24.04.3/lib:/opt/dtk-24.04.3/cuda/extras/CUPTI/lib64:/opt/dtk-24.04.3/cuda/targets/x86_64-linux/lib:$LD_LIBRARY_PATH
```
### Anaconda(方法三)
此处提供本地配置、编译的详细步骤,例如:
关于本项目DCU显卡所需的特殊深度学习库可从[光合](https://developer.sourcefind.cn/tool/)开发者社区下载安装。
```
DTK驱动:dtk24.04.3
python:3.10
paddlepaddle:3.0.0
```
`Tips:以上dtk驱动、python、torch等DCU相关工具版本需要严格一一对应`
其它非深度学习库参照requirement.txt安装:
```
git clone http://developer.sourcefind.cn/codes/modelzoo/kimi-vl-a3b-instruct_pytorch.git
cd /path/your_code_data/
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install paddleocr
export LD_LIBRARY_PATH=/opt/dtk-24.04.3/lib:/opt/dtk-24.04.3/cuda/extras/CUPTI/lib64:/opt/dtk-24.04.3/cuda/targets/x86_64-linux/lib:$LD_LIBRARY_PATH
```
## 数据集
在本测试中可以使用(icdar2015)[train_data.rar]数据集,可在本项目已经提供并整理了可直接用于验证得数据集文件,可在train_data.rar压缩文件夹中目录下找到。
训练集应有如下文件结构:
```
|-train_data
|-icdar2015
|-rec
|- rec_gt_train.txt
|- train
|- word_001.png
|- word_002.jpg
|- word_003.jpg
| ...
```
## 训练
训练前需要完成两件事,首先是下载模型,然后是修改配置文件。
### 模型下载
下载地址 https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r34_vd_none_bilstm_ctc_v2.0_train.tar
```
cd PaddleOCR/
# 下载CRNN的预训练模型
wget -P ./pretrain_models/https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r34_vd_none_bilstm_ctc_v2.0_train.tar
# 解压模型参数
cd pretrain_models
tar -xf rec_r34_vd_none_bilstm_ctc_v2.0_train.tar && rm -rf rec_r34_vd_none_bilstm_ctc_v2.0_train.tar
```
### 配置文件
```
# 本项目的配置文件已经修改,其余的模型及任务可以参考该配置文件中的配置方式
configs/rec/rec_r34_vd_none_bilstm_ctc.yml
```
### 运行训练文件
```
CUDA_VISIBLE_DEVICES=1 python3 tools/train.py -c ./configs/rec/rec_r34_vd_none_bilstm_ctc.yml -o Global.pretrained_model=./pretrain_models/rec_r34_vd_none_bilstm_ctc_v2.0_train/best_accuracy
```
## 推理
### 单机单卡
```
# 预测使用的配置文件必须与训练一致
python3 tools/infer_rec.py -c configs/rec/rec_r34_vd_none_bilstm_ctc.yml -o Global.pretrained_model='./pretrain_models/rec_r34_vd_none_bilstm_ctc_v2.0_train/best_accuracy' Global.infer_img='./docs/images/ppocrv4.png'
```
## result
### 精度
无
## 应用场景
### 算法类别
`文字识别`
### 热点应用行业
`科研,教育,政府,金融`
## 预训练权重
CRNN PaddlePaddle下载地址为:[rec_r34_vd_none_bilstm_ctc](https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r34_vd_none_bilstm_ctc_v2.0_train.tar)
## 源码仓库及问题反馈
- https://developer.sourcefind.cn/codes/modelzoo/crnn_paddle
## 参考资料
- https://github.com/PaddlePaddle/PaddleOCR/