Commit 84c7a8c8 authored by liucong's avatar liucong
Browse files

修改crnn工程格式

parent f1b9035f
......@@ -6,7 +6,7 @@
CRNN是文本识别领域的一种经典算法。该算法的主要思想是认为文本识别需要对序列进行预测,所以采用了预测序列常用的RNN网络。算法通过CNN提取图片特征,然后采用RNN对序列进行预测,最终使用CTC方法得到最终结果。模型的主要结构包括基于CNN的图像特征提取模块以及基于双向LSTM的文字序列特征提取模块,网络结构如下图所示。
<img src="./CRNN_01.jpg" alt="CRNN_01" />
<img src="./Images/CRNN_01.jpg" alt="CRNN_01" />
本示例采用了如下的开源实现:https://github.com/meijieru/crnn.pytorch, 作者提供了CRNN的预训练模型。
......@@ -123,7 +123,10 @@ CRNN是文本识别领域的一种经典算法。该算法的主要思想是认
// 推理
std::vector<migraphx::argument> inferenceResults = net.eval(inputData);
// 如果想要指定输出节点,可以给eval()函数中提供outputNames参数来实现
//std::vector<std::string> outputNames = {"output"};
//std::vector<migraphx::argument> inferenceResults = net.eval(inputData, outputNames);
// 获取推理结果
std::vector<cv::Mat> outs;
migraphx::argument result = inferenceResults[0];
......
......@@ -6,7 +6,7 @@
CRNN是文本识别领域的一种经典算法。该算法的主要思想是认为文本识别需要对序列进行预测,所以采用了预测序列常用的RNN网络。算法通过CNN提取图片特征,然后采用RNN对序列进行预测,最终使用CTC方法得到最终结果。模型的主要结构包括基于CNN的图像特征提取模块以及基于双向LSTM的文字序列特征提取模块,网络结构如下图所示。
<img src="./CRNN_01.jpg" alt="CRNN_01" />
<img src="./Images/CRNN_01.jpg" alt="CRNN_01"/>
本示例采用了如下的开源实现:https://github.com/meijieru/crnn.pytorch, 作者提供了CRNN的预训练模型。
......@@ -35,12 +35,23 @@ class Crnn:
def __init__(self, path):
# 解析推理模型
self.model = migraphx.parse_onnx(path)
# 获取模型输入/输出节点信息
print("inputs:")
inputs = self.model.get_inputs()
for key,value in inputs.items():
print("{}:{}".format(key,value))
print("outputs:")
outputs = self.model.get_outputs()
for key,value in outputs.items():
print("{}:{}".format(key,value))
# 获取模型的输入name
self.inputName = self.model.get_parameter_names()[0]
# 获取模型的输入尺寸
self.inputShape = self.model.get_parameter_shapes()[self.inputName].lens()
self.inputShape = inputs[self.inputName].lens()
...
```
......
# Convolutional Recurrent Neural Network(CRNN)
# CRNN
## 模型介绍
## 论文
CRNN是文本识别领域的一种经典算法,该算法的主要思想是认为文本识别需要对序列进行预测,所以采用了预测序列常用的RNN网络。算法通过CNN提取图片特征,然后采用RNN对序列进行预测,最终使用CTC方法得到最终结果。
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的图像特征提取模块以及基于双向LSTM的文字序列特征提取模块。
## Python版本推理
<img src="./Doc/Images/CRNN_01.jpg" style="zoom:100%;" align=middle>
下面介绍如何运行Python代码示例,Python示例的详细说明见Doc目录下的Tutorial_Python.md。
## 算法原理
CRNN是文本识别领域的一种经典算法,该算法的主要思想是认为文本识别需要对序列进行预测,所以采用了预测序列常用的RNN网络。该算法首先通过CNN提取图片特征,然后采用RNN对序列进行预测,最终使用CTC方法得到最终结果。
## 环境配置
### 下载镜像
### Docker
下载MIGraphX镜像:
拉取镜像:
```python
```plaintext
docker pull sugonhub/migraphx:3.2.1-centos7.6-dtk-23.04.1-py38
```
### 设置Python环境变量
创建并启动容器,安装相关依赖:
```plaintext
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 -it <Your Image ID> /bin/bash
# 激活dtk
source /opt/dtk/env.sh
```
## 数据集
根据提供的样本数据,进行文本识别。
## 推理
### Python版本推理
下面介绍如何运行Python代码示例,Python示例的详细说明见Doc目录下的Tutorial_Python.md。
#### 设置环境变量
```
export PYTHONPATH=/opt/dtk/lib:$PYTHONPATH
```
### 安装依赖
#### 运行示例
CRNN工程的Python推理示例仅提供静态推理,可使用如下命令运行:
......@@ -35,43 +60,24 @@ CRNN工程的Python推理示例仅提供静态推理,可使用如下命令运
cd <path_to_crnn_migraphx>/Python
# 安装依赖
pip install -r requirements.txt
```
### 运行示例
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
在Python目录下执行如下命令运行该示例程序:
```
# 运行示例
python Crnn_infer_migraphx.py
```
文本识别结果为:
```
a-----v--a-i-l-a-bb-l-e--- => available
```
## C++版本推理
### C++版本推理
下面介绍如何运行C++代码示例,C++示例的详细说明见Doc目录下的Tutorial_Cpp.md。
### 下载镜像
下载MIGraphX镜像:
```
docker pull sugonhub/migraphx:3.2.1-centos7.6-dtk-23.04.1-py38
```
### 构建工程
#### 构建工程
```
rbuild build -d depend
```
### 设置环境变量
#### 设置环境变量
将依赖库依赖加入环境变量LD_LIBRARY_PATH,在~/.bashrc中添加如下语句:
......@@ -85,7 +91,7 @@ export LD_LIBRARY_PATH=<path_to_crnn_migraphx>/depend/lib64/:$LD_LIBRARY_PATH
source ~/.bashrc
```
### 运行示例
#### 运行示例
成功编译CRNN工程后,执行如下命令运行该示例:
......@@ -103,27 +109,48 @@ cd build/
./CRNN 0
```
静态推理示例输入样本图像为:
2. 动态shape推理
```
# 执行动态推理示例程序
./CRNN 1
```
## result
### Python版本
![text0](./Resource/Images/CrnnDynamicPic/text0.jpg)
输入样本图像得到文本识别的结果
文本识别结果为:
<img src="./Resource/Images/text.jpg" style="zoom:100%;" align=middle>
```
a-----v--a-i-l-a-bb-l-e--- => available
```
2. 动态shape推理
### C++版本
```
# 开启环境变量
export MIGRAPHX_DYNAMIC_SHAPE=1
静态推理:
# 执行动态推理示例程序
./CRNN 1
输入样本图像得到文本识别的结果
<img src="./Resource/Images/CrnnDynamicPic/text0.jpg" style="zoom:100%;" align=middle>
```
a-----v--a-i-l-a-bb-l-e--- => available
```
文本识别结果:
动态推理:
可以连续对多张样本图像进行文本识别
<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>
```
available
......@@ -132,10 +159,20 @@ waiting
recognition
```
## 应用场景
### 算法类别
`ocr`
### 热点应用行业
`工业制造``金融``交通``教育``医疗`
## 源码仓库及问题反馈
https://developer.hpccube.com/codes/modelzoo/crnn_migraphx
https://developer.hpccube.com/codes/modelzoo/crnn_migraphx
## 参考
https://github.com/meijieru/crnn.pytorch
https://github.com/meijieru/crnn.pytorch
# 模型唯一标识
modelCode = 219
#模型名称
modelName=CRNN_MIGraphX
modelName=crnn_migraphx
#模型描述
modelDescription=CRNN模型是图像文本识别领域的经典算法,主要用于端到端地对不定长的文本序列进行识别。
#应用场景
appScenario=推理,0CR
appScenario=推理,0CR,文本识别
#框架类型
frameType=MIGraphX
\ No newline at end of file
frameType=migraphx
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment