Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ModelZoo
crnn_migraphx
Commits
f3239ab0
Commit
f3239ab0
authored
Jun 13, 2023
by
shizhm
Browse files
修改readme
parent
c1464a9c
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
6 additions
and
158 deletions
+6
-158
Doc/Tutorial_Cpp.md
Doc/Tutorial_Cpp.md
+3
-79
Doc/Tutorial_Python.md
Doc/Tutorial_Python.md
+1
-77
README.md
README.md
+2
-2
No files found.
Doc/Tutorial_Cpp.md
View file @
f3239ab0
# CRNN文本识别
# CRNN文本识别
本示例基于CRNN文本识别模型实现了两种MIGraphX推理:静态推理和动态shape推理。静态推理时CRNN模型只接受固定尺寸的图像输入,而动态shape推理则可以输入不同尺寸的图像进行识别。
本份文档首先对CRNN算法进行简介,然后介绍了如何导出静态和动态的CRNN onnx格式模型,最后介绍了两种模式下的推理流程,并给出静态推理和动态推理的结果。
本示例基于CRNN文本识别模型实现了两种MIGraphX推理:静态推理和动态shape推理。静态推理时CRNN模型只接受固定尺寸的图像输入,而动态shape推理则可以输入不同尺寸的图像进行识别。
## 模型简介
## 模型简介
...
@@ -8,83 +8,7 @@ CRNN是文本识别领域的一种经典算法。该算法的主要思想是认
...
@@ -8,83 +8,7 @@ CRNN是文本识别领域的一种经典算法。该算法的主要思想是认
<img
src=
"./CRNN_01.jpg"
alt=
"CRNN_01"
/>
<img
src=
"./CRNN_01.jpg"
alt=
"CRNN_01"
/>
本示例采用了如下的开源实现:https://github.com/meijieru/crnn.pytorch, 作者提供了CRNN的预训练模型,下载CRNN的预训练模型保存到CRNN工程的weights目录。
本示例采用了如下的开源实现:https://github.com/meijieru/crnn.pytorch, 作者提供了CRNN的预训练模型。
## 模型转换
本示例采用的开源实现未提供CRNN导出onnx模型的程序,所以需要在CRNN工程下创建export.py文件,在文件中添加导出crnn.onnx模型的程序,该程序根据参数输入的不同,可以分别导出满足CRNN动态和静态两种推理所需的onnx模型,代码如下。
```
import
torch
import
models
.
crnn
as
crnn
import
argparse
def
export_onnx
(
modelpath
,
is_dynamic
):
model
=
crnn
.
CRNN
(
32
,
1
,
37
,
256
)
model
.
load_state_dict
(
torch
.
load
(
modelpath
))
dummy_input
=
torch
.
randn
(
1
,
1
,
32
,
100
)
input_names
=
[
"input"
]
output_names
=
[
"output"
]
if
is_dynamic
:
dynamic_axes
=
{
"input"
:
[
3
]}
torch
.
onnx
.
export
(
model
,
dummy_input
,
"crnn_dynamic.onnx"
,
verbose
=
True
,
dynamic_axes
=
dynamic_axes
,
input_names
=
input_names
,
output_names
=
output_names
)
else
:
torch
.
onnx
.
export
(
model
,
dummy_input
,
"crnn.onnx"
,
verbose
=
True
,
dynamic_axes
=
None
,
input_names
=
input_names
,
output_names
=
output_names
)
if
__name__
==
"__main__"
:
parser
=
argparse
.
ArgumentParser
()
parser
.
add_argument
(
'--weights'
,
nargs
=
'+'
,
type
=
str
,
default
=
'./weights/crnn.pth'
,
help
=
'model.pt path(s)'
)
parser
.
add_argument
(
'--dynamic'
,
action
=
"store_true"
,
help
=
'ONNX/TF/TensorRT: dynamic axes'
)
opt
=
parser
.
parse_args
()
export_onnx
(
opt
.
weights
,
opt
.
dynamic
)
```
export.py程序中dummy_input表示onnx模型的输入尺寸,数据排布为NCHW。在导出静态模型时,模型的输入尺寸是固定的,本示例为了和开源实现中提供的demo示例保持一致设为(1, 1, 32, 100)。在导出用于动态shape推理的模型时,将CRNN模型的NCH维度固定(1, 1, 32),W维度设为动态维度dynamic_axes。
通过添加导出onnx模型程序后,按照如下步骤可将crnn.pth转化为onnx格式:
1.
安装DTK版的Pytorch,下载地址:https://cancon.hpccube.com:65024/4/main/pytorch
2.
安装依赖
```
# 进入migraphx samples工程根目录
cd <path_to_migraphx_samples>
# 进入示例程序目录
cd Python/Ocr/CRNN
# 环境配置
pip install -r requirements.txt
```
3.
静态模型转换
```
python export.py --weights ./weights/crnn.pth
```
4.
动态模型转换
```
python export.py --weights ./weights/crnn.pth --dynamic
```
模型导出后,可以通过netron工具:https://netron.app/ 进行模型可视化,检查模型的输入输出。
**动态模型通过设置既可以执行动态推理,也可以执行静态推理,本示例中的静态推理和动态shape推理则是基于导出的动态模型实现。**
## 模型初始化
## 模型初始化
...
@@ -274,7 +198,7 @@ inferenceResults是crnn.onnx模型的MIGraphX推理结果,CRNN模型包含一
...
@@ -274,7 +198,7 @@ inferenceResults是crnn.onnx模型的MIGraphX推理结果,CRNN模型包含一
### 动态shape推理
### 动态shape推理
动态shape推理需要处理多张图像,每次输入新图像执行与静态推理一致的操作,相关过程定义在
Sample
.cpp文件中,代码如下:
动态shape推理需要处理多张图像,每次输入新图像执行与静态推理一致的操作,相关过程定义在
main
.cpp文件中,代码如下:
```
```
void Sample_Crnn_Dynamic()
void Sample_Crnn_Dynamic()
...
...
Doc/Tutorial_Python.md
View file @
f3239ab0
...
@@ -8,83 +8,7 @@ CRNN是文本识别领域的一种经典算法。该算法的主要思想是认
...
@@ -8,83 +8,7 @@ CRNN是文本识别领域的一种经典算法。该算法的主要思想是认
<img
src=
"./CRNN_01.jpg"
alt=
"CRNN_01"
/>
<img
src=
"./CRNN_01.jpg"
alt=
"CRNN_01"
/>
本示例采用了如下的开源实现:https://github.com/meijieru/crnn.pytorch, 作者提供了CRNN的预训练模型,下载CRNN的预训练模型保存到CRNN工程的weights目录。
本示例采用了如下的开源实现:https://github.com/meijieru/crnn.pytorch, 作者提供了CRNN的预训练模型。
## 模型转换
本示例采用的开源实现未提供CRNN导出onnx模型的程序,所以需要在CRNN工程下创建export.py文件,在文件中添加导出crnn.onnx模型的程序,该程序根据参数输入的不同,可以分别导出满足CRNN动态和静态两种推理所需的onnx模型,代码如下。
```
import
torch
import
models
.
crnn
as
crnn
import
argparse
def
export_onnx
(
modelpath
,
is_dynamic
):
model
=
crnn
.
CRNN
(
32
,
1
,
37
,
256
)
model
.
load_state_dict
(
torch
.
load
(
modelpath
))
dummy_input
=
torch
.
randn
(
1
,
1
,
32
,
100
)
input_names
=
[
"input"
]
output_names
=
[
"output"
]
if
is_dynamic
:
dynamic_axes
=
{
"input"
:
[
3
]}
torch
.
onnx
.
export
(
model
,
dummy_input
,
"crnn_dynamic.onnx"
,
verbose
=
True
,
dynamic_axes
=
dynamic_axes
,
input_names
=
input_names
,
output_names
=
output_names
)
else
:
torch
.
onnx
.
export
(
model
,
dummy_input
,
"crnn.onnx"
,
verbose
=
True
,
dynamic_axes
=
None
,
input_names
=
input_names
,
output_names
=
output_names
)
if
__name__
==
"__main__"
:
parser
=
argparse
.
ArgumentParser
()
parser
.
add_argument
(
'--weights'
,
nargs
=
'+'
,
type
=
str
,
default
=
'./weights/crnn.pth'
,
help
=
'model.pt path(s)'
)
parser
.
add_argument
(
'--dynamic'
,
action
=
"store_true"
,
help
=
'ONNX/TF/TensorRT: dynamic axes'
)
opt
=
parser
.
parse_args
()
export_onnx
(
opt
.
weights
,
opt
.
dynamic
)
```
export.py程序中dummy_input表示onnx模型的输入尺寸,数据排布为NCHW。在导出静态模型时,模型的输入尺寸是固定的,本示例为了和开源实现中提供的demo示例保持一致设为(1, 1, 32, 100)。在导出用于动态shape推理的模型时,将CRNN模型的NCH维度固定(1, 1, 32),W维度设为动态维度dynamic_axes。
通过添加导出onnx模型程序后,按照如下步骤可将crnn.pth转化为onnx格式:
1.
安装DTK版的Pytorch,下载地址:https://cancon.hpccube.com:65024/4/main/pytorch
2.
安装依赖
```
# 进入migraphx samples工程根目录
cd <path_to_migraphx_samples>
# 进入示例程序目录
cd Python/Ocr/CRNN
# 环境配置
pip install -r requirements.txt
```
3.
静态模型转换
```
python export.py --weights ./weights/crnn.pth
```
4.
动态模型转换
```
python export.py --weights ./weights/crnn.pth --dynamic
```
模型导出后,可以通过netron工具:https://netron.app/ 进行模型可视化,检查模型的输入输出。
## 预处理
## 预处理
...
...
README.md
View file @
f3239ab0
...
@@ -75,13 +75,13 @@ rbuild build -d depend
...
@@ -75,13 +75,13 @@ rbuild build -d depend
**Centos**
:
**Centos**
:
```
```
export LD_LIBRARY_PATH=<path_to_migraphx
_samples
>/depend/lib64/:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=<path_to_
crnn_
migraphx>/depend/lib64/:$LD_LIBRARY_PATH
```
```
**Ubuntu**
:
**Ubuntu**
:
```
```
export LD_LIBRARY_PATH=<path_to_migraphx
_samples
>/depend/lib/:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=<path_to_
crnn_
migraphx>/depend/lib/:$LD_LIBRARY_PATH
```
```
然后执行:
然后执行:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment