README.md 4.24 KB
Newer Older
dcuai's avatar
dcuai committed
1
# crnn
dengjf's avatar
dengjf committed
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

## 论文

[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 (方法一)

```
dcuai's avatar
dcuai committed
24
25
docker pull image.sourcefind.cn:5000/dcu/admin/base/vscode-pytorch:2.1.0-ubuntu20.04-dtk24.04.2
docker run -it -v /path/your_code_data/:/path/your_code_data/  -v /opt/hyhal:/opt/hyhal:ro --shm-size=32G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
dengjf's avatar
dengjf committed
26
27
28
29
30
31
32
33
34

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

### Dockerfile (方法二)

```
cd ./docker
dengjb's avatar
dengjb committed
35
docker build --no-cache -t crnn_pytorch:last .
dcuai's avatar
dcuai committed
36
docker run -it -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal:/opt/hyhal:ro  --shm-size=32G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
dengjf's avatar
dengjf committed
37
38
39
40
41
42
43
```

### Anaconda (方法三)

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

```
dcuai's avatar
dcuai committed
44
45
46
47
DTK软件栈:dtk24.04.2
python:3.10
pytorch:2.1.0
torchvision:0.16.0
dengjf's avatar
dengjf committed
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
```

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

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

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



## 数据集

Synth90k(合成文本数据集-该数据集包含900万张由一组90k常见英语单词生成的图像)
dengjb's avatar
update  
dengjb committed
63
64
65
66
67
68
- 数据集快速下载中心:
  - [SCNet AIDatasets](http://113.200.138.88:18080/aidatasets)
- 数据集快速通道下载地址:
  - [数据集快速下载地址](http://113.200.138.88:18080/aidatasets/project-dependency/synth90k)
- 官方下载地址
  - [训练数据](https://www.robots.ox.ac.uk/~vgg/data/text/)
dengjf's avatar
dengjf committed
69
70
71
72
73



数据集的目录结构如下:

dengjb's avatar
dengjb committed
74
75
76
77
78
79
80
训练之前需要对数据集进行格式转换,具体操作如下:

1、copy create_dataset.py文件到数据集解压路径下的mnt/ramdisk/max/下

2、修改dataset_output路径,然后运行代码:`python create_dataset.py`

3、得到输出数据集
dengjf's avatar
dengjf committed
81
```
dengjb's avatar
dengjb committed
82
83
84
85
└── Synth90k/train
    ├── data.mdb
    └── lock.mdb
└── Synth90k/val
dengjf's avatar
dengjf committed
86
87
88
89
90
91
92
93
94
95
96
97
    ├── data.mdb
    └── lock.mdb

```

## 训练

### 单机单卡

```
export HIP_VISIBLE_DEVICES=0
export USE_MIOPEN_BATCHNORM=1
dengjb's avatar
dengjb committed
98
python3 train.py --adadelta --trainRoot ../Datasets/Synth90k/train --valRoot ../Datasets/Synth90k/val --cuda --ngpu 1 --batchSize 64 --workers 8
dengjf's avatar
dengjf committed
99
100
101
102
103
104
105
106
```

### 单机多卡

```
#以单机四卡为例子
export HSA_FORCE_FINE_GRAIN_PCIE=1
export USE_MIOPEN_BATCHNORM=1
dengjb's avatar
dengjb committed
107
export HIP_VISIBLE_DEVICES=0,1,2,3
dcuai's avatar
dcuai committed
108
python -m torch.distributed.launch --nproc_per_node=4 train_ddp.py --adadelta --trainRoot ../Datasets/Synth90k/train --valRoot ../Datasets/Synth90k/val --cuda --ngpu 4 --batchSize 64 --workers 8 
dengjf's avatar
dengjf committed
109
110
111
112
113
```

## 推理

#### 单卡推理
dengjb's avatar
update  
dengjb committed
114
115
116
117
118
119
- 模型权重快速下载中心
  - [SCNet AIModels](http://113.200.138.88:18080/aimodels) 
- 模型权重快速通道下载地址
  - [模型权重快速下载地址](http://113.200.138.88:18080/aimodels/findsource-dependency/crnn_pytorch)
- 官方下载地址:
  - [权重下载地址](https://pan.baidu.com/s/1pLbeCND)
dengjb's avatar
dengjb committed
120

dengjf's avatar
dengjf committed
121
```
dengjb's avatar
dengjb committed
122
# 权重放置地址-[初始放在./data下]、测试图片等可在demo中进行更改
dengjf's avatar
dengjf committed
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
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

dengjb's avatar
dengjb committed
150
## 参考资料
dengjf's avatar
dengjf committed
151
152

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