README.md 3.36 KB
Newer Older
dengjf's avatar
dengjf committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# CRNN_pytorch

## 论文

[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模型主要包括三个部分,分别称作卷积层、循环层、转录层。

![model_structure.jpg](asserts%2Fmodel_structure.jpg)

## 算法原理

CRNN网络将CNN和RNN网络结合,共同训练,使用CNN对输入图像提取特征,使用RNN对特征序列进行预测并输出预测标签,使用CTCLoss讲标签分布转换为最终的标签序列,其中RNN采用的双层各256单元的双向LSTM

![Algorithm.jpg](asserts%2FAlgorithm.jpg)

## 环境配置

### Docker (方法一)

```
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.10.0-centos7.6-dtk-22.10.1-py39-latest
docker run -it -v /path/your_code_data/:/path/your_code_data/ --shm-size=32G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash

cd /path/workspace/
pip3 install -r requirements.txt
```

### Dockerfile (方法二)

```
cd ./docker
docker build --no-cache -t crnn_paddle:last .
docker run -it -v /path/your_code_data/:/path/your_code_data/ --shm-size=32G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
```

### Anaconda (方法三)

1、关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装: https://developer.hpccube.com/tool/

```
DTK软件栈:dtk22.10
python:python3.8
pytorch:1.10.1
```

Tips:以上dtk软件栈、python、pytorch等DCU相关工具版本需要严格一一对应

2、其他非特殊库直接按照requirements.txt安装

```
pip3 install -r requirements.txt
```



## 数据集

Synth90k(合成文本数据集-该数据集包含900万张由一组90k常见英语单词生成的图像)

[训练数据](https://www.robots.ox.ac.uk/~vgg/data/text/)



数据集的目录结构如下:

```
├── IIIT5K_lmdb
│   ├── data.mdb
│   ├── error_image_log.txt
│   └── lock.mdb
└── MJ_LMDB
    ├── data.mdb
    └── lock.mdb


```

## 训练

### 单机单卡

```
export HIP_VISIBLE_DEVICES=0
export USE_MIOPEN_BATCHNORM=1
python3 train.py --adadelta --trainRoot ../Datasets/Synth90k/MJ_LMDB --valRoot ../Datasets/Synth90k/IIIT5K_lmdb --cuda --ngpu 1 --batchSize 64 --workers 8
```

### 单机多卡

```
#以单机四卡为例子
export HSA_FORCE_FINE_GRAIN_PCIE=1
export USE_MIOPEN_BATCHNORM=1
export HIP_VISIBLE_DEVICES=6,7
python -m torch.distributed.launch --nproc_per_node=2 train_ddp.py --adadelta --trainRoot ../Datasets/Synth90k/MJ_LMDB --valRoot ../Datasets/Synth90k/IIIT5K_lmdb --cuda --ngpu 1 --batchSize 64 --workers 8 
```

## 推理

#### 单卡推理
[权重下载地址](https://pan.baidu.com/s/1pLbeCND)
```
python demo.py
```
## result
此处以crnn模型进行推理测试<br>

| 输入 | 输出 |
|:--:|:--:|
|![demo.png](data%2Fdemo.png)|![result.jpg](asserts%2Fresult.jpg)|

### 精度

|   模型    | 数据类型 |  ACC   |   Loss   |
|:-------:|:----:|:------:|:--------:|
|  crnn   |  单精  | 0.9376 | 0.000768 |


## 应用场景
### 算法分类
OCR

### 热点应用行业
金融,零售,交通

## 源码仓库及问题反馈

https://developer.hpccube.com/codes/modelzoo/crnn_pytorch

## 参考

[GitHub - crnn.pytorch](https://github.com/meijieru/crnn.pytorch/tree/master)