README.md 4.61 KB
Newer Older
liucong's avatar
liucong committed
1
# CRNN
shizhm's avatar
shizhm committed
2

liucong's avatar
liucong committed
3
## 论文
Your Name's avatar
Your Name committed
4

liucong's avatar
liucong committed
5
6
7
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
Your Name's avatar
Your Name committed
8
9
10
11
12

## 模型结构

CRNN模型的主要结构包括基于CNN的图像特征提取模块以及基于双向LSTM的文字序列特征提取模块。

liucong's avatar
liucong committed
13
<img src="./Doc/Images/CRNN_01.jpg" style="zoom:100%;" align=middle>
liucong's avatar
liucong committed
14

liucong's avatar
liucong committed
15
16
17
18
## 算法原理

CRNN是文本识别领域的一种经典算法,该算法的主要思想是认为文本识别需要对序列进行预测,所以采用了预测序列常用的RNN网络。该算法首先通过CNN提取图片特征,然后采用RNN对序列进行预测,最终使用CTC方法得到最终结果。

liucong's avatar
liucong committed
19
20
<img src="./Doc/Images/CRNN_02.png" style="zoom:100%;" align=middle>

liucong's avatar
liucong committed
21
## 环境配置
liucong's avatar
liucong committed
22

liucong's avatar
liucong committed
23
### Docker(方法一)
Your Name's avatar
Your Name committed
24

liucong's avatar
liucong committed
25
拉取镜像:
Your Name's avatar
Your Name committed
26

liucong's avatar
liucong committed
27
```plaintext
liucong's avatar
liucong committed
28
docker pull image.sourcefind.cn:5000/dcu/admin/base/migraphx:4.3.0-ubuntu20.04-dtk24.04.1-py3.10
Your Name's avatar
Your Name committed
29
30
```

liucong's avatar
liucong committed
31
32
33
创建并启动容器,安装相关依赖:

```plaintext
liucong's avatar
liucong committed
34
docker run --shm-size 16g --network=host --name=crnn_migraphx --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v $PWD/crnn_migraphx:/home/crnn_migraphx -v /opt/hyhal:/opt/hyhal:ro -it <Your Image ID> /bin/bash
liucong's avatar
liucong committed
35
36
37
38
39

# 激活dtk
source /opt/dtk/env.sh
```

liucong's avatar
liucong committed
40
41
42
43
44
45
### Dockerfile(方法二)

```
cd ./docker
docker build --no-cache -t crnn_migraphx:2.0 .

liucong's avatar
liucong committed
46
docker run --shm-size 16g --network=host --name=crnn_migraphx --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v $PWD/crnn_migraphx:/home/crnn_migraphx -v /opt/hyhal:/opt/hyhal:ro -it <Your Image ID> /bin/bash
liucong's avatar
liucong committed
47
48
49

# 激活dtk
source /opt/dtk/env.sh
liucong's avatar
liucong committed
50
51
```

liucong's avatar
liucong committed
52
53
54
55
56
57
58
59
60
61
62
## 数据集

根据提供的样本数据,进行文本识别。

## 推理

### Python版本推理

下面介绍如何运行Python代码示例,Python示例的详细说明见Doc目录下的Tutorial_Python.md。

#### 设置环境变量
shizhm's avatar
shizhm committed
63
64
65
66
67

```
export PYTHONPATH=/opt/dtk/lib:$PYTHONPATH
```

liucong's avatar
liucong committed
68
#### 运行示例
liucong's avatar
liucong committed
69
70
71
72
73

CRNN工程的Python推理示例仅提供静态推理,可使用如下命令运行:

```
# 进入python示例目录
shizhm's avatar
shizhm committed
74
cd <path_to_crnn_migraphx>/Python
liucong's avatar
liucong committed
75
76

# 安装依赖
liucong's avatar
liucong committed
77
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
shizhm's avatar
shizhm committed
78

liucong's avatar
liucong committed
79
# 运行示例
liucong's avatar
liucong committed
80
81
82
python Crnn_infer_migraphx.py 
```

liucong's avatar
liucong committed
83
### C++版本推理
liucong's avatar
liucong committed
84

liucong's avatar
liucong committed
85
注意:当使用操作系统不一样时,CMakeList需要做相应的修改:
liucong's avatar
liucong committed
86
87
88
89
90
91
92
93
94

```
# ubuntu操作系统
${CMAKE_CURRENT_SOURCE_DIR}/depend/lib64/ 修改为 ${CMAKE_CURRENT_SOURCE_DIR}/depend/lib/

# centos操作系统
${CMAKE_CURRENT_SOURCE_DIR}/depend/lib/ 修改为 ${CMAKE_CURRENT_SOURCE_DIR}/depend/lib64/
```

shizhm's avatar
shizhm committed
95
96
97
下面介绍如何运行C++代码示例,C++示例的详细说明见Doc目录下的Tutorial_Cpp.md。


liucong's avatar
liucong committed
98
#### 构建工程
Your Name's avatar
Your Name committed
99
100

```
Your Name's avatar
Your Name committed
101
rbuild build -d depend
Your Name's avatar
Your Name committed
102
103
```

liucong's avatar
liucong committed
104
#### 设置环境变量
Your Name's avatar
Your Name committed
105
106
107

将依赖库依赖加入环境变量LD_LIBRARY_PATH,在~/.bashrc中添加如下语句:

liucong's avatar
liucong committed
108
109
当操作系统是ubuntu系统时:

Your Name's avatar
Your Name committed
110
```
liucong's avatar
liucong committed
111
export LD_LIBRARY_PATH=<path_to_crnn_migraphx>/depend/lib/:$LD_LIBRARY_PATH
Your Name's avatar
Your Name committed
112
113
```

liucong's avatar
liucong committed
114
115
116
117
118
119
当操作系统是centos系统时:

```
export LD_LIBRARY_PATH=<path_to_crnn_migraphx>/depend/lib64/:$LD_LIBRARY_PATH
```

Your Name's avatar
Your Name committed
120
然后执行:
Your Name's avatar
Your Name committed
121
122

```
Your Name's avatar
Your Name committed
123
124
125
source ~/.bashrc
```

liucong's avatar
liucong committed
126
#### 运行示例
Your Name's avatar
Your Name committed
127

shizhm's avatar
shizhm committed
128
129
130
131
132
133
134
135
136
成功编译CRNN工程后,执行如下命令运行该示例:

```
# 进入crnn migraphx工程根目录
cd <path_to_crnn_migraphx> 

# 进入build目录
cd build/
```
Your Name's avatar
Your Name committed
137
138
139
140

1. 静态推理

```
liucong's avatar
liucong committed
141
./CRNN 0
Your Name's avatar
Your Name committed
142
143
```

liucong's avatar
liucong committed
144
145
146
147
148
149
150
151
152
153
2. 动态shape推理

```
# 执行动态推理示例程序
./CRNN 1
```

## result

### Python版本
Your Name's avatar
Your Name committed
154

liucong's avatar
liucong committed
155
输入样本图像得到文本识别的结果
Your Name's avatar
Your Name committed
156

liucong's avatar
liucong committed
157
<img src="./Resource/Images/text.jpg" style="zoom:100%;" align=middle>
Your Name's avatar
Your Name committed
158
159
160
161
162

```
a-----v--a-i-l-a-bb-l-e--- => available
```

liucong's avatar
liucong committed
163
### C++版本
Your Name's avatar
Your Name committed
164

liucong's avatar
liucong committed
165
静态推理:
Your Name's avatar
Your Name committed
166

liucong's avatar
liucong committed
167
168
169
170
171
172
输入样本图像得到文本识别的结果

<img src="./Resource/Images/CrnnDynamicPic/text0.jpg" style="zoom:100%;" align=middle>

```
a-----v--a-i-l-a-bb-l-e--- => available
Your Name's avatar
Your Name committed
173
174
```

liucong's avatar
liucong committed
175
176
177
178
179
180
181
182
183
184
185
动态推理:

可以连续对多张样本图像进行文本识别

<img src="./Resource/Images/CrnnDynamicPic/text0.jpg" style="zoom:100%;" align=middle>

<img src="./Resource/Images/CrnnDynamicPic/text1.jpg" style="zoom:80%;" align=middle>

<img src="./Resource/Images/CrnnDynamicPic/text2.jpg" style="zoom:60%;" align=middle>

<img src="./Resource/Images/CrnnDynamicPic/text3.jpg" style="zoom:80%;" align=middle>
Your Name's avatar
Your Name committed
186
187
188
189
190
191
192
193

```
available
migraphx
waiting
recognition
```

liucong's avatar
liucong committed
194
195
196
197
### 精度



liucong's avatar
liucong committed
198
199
200
201
202
203
204
205
## 应用场景

### 算法类别

`ocr`

### 热点应用行业

liucong's avatar
liucong committed
206
`金融`,`交通`,`教育`,`医疗`
liucong's avatar
liucong committed
207

shizhm's avatar
shizhm committed
208
## 源码仓库及问题反馈
Your Name's avatar
Your Name committed
209

liucong's avatar
liucong committed
210
https://developer.hpccube.com/codes/modelzoo/crnn_migraphx
Your Name's avatar
Your Name committed
211

liucong's avatar
liucong committed
212
## 参考资料
Your Name's avatar
Your Name committed
213

liucong's avatar
liucong committed
214
https://github.com/meijieru/crnn.pytorch