From eca80895e7a7a35aaf84998987035608527f47b5 Mon Sep 17 00:00:00 2001 From: fenghaolin Date: Sat, 26 Jun 2021 09:11:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0CRNN=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/CRNN/ATC CRNN from PyTorch.md | 347 ++++++++++++++++++++++++++ docs/zh/CRNN/figures/icon-caution.gif | Bin 0 -> 580 bytes docs/zh/CRNN/figures/icon-danger.gif | Bin 0 -> 580 bytes docs/zh/CRNN/figures/icon-note.gif | Bin 0 -> 394 bytes docs/zh/CRNN/figures/icon-notice.gif | Bin 0 -> 406 bytes docs/zh/CRNN/figures/icon-tip.gif | Bin 0 -> 253 bytes docs/zh/CRNN/figures/icon-warning.gif | Bin 0 -> 580 bytes 7 files changed, 347 insertions(+) create mode 100644 docs/zh/CRNN/ATC CRNN from PyTorch.md create mode 100644 docs/zh/CRNN/figures/icon-caution.gif create mode 100644 docs/zh/CRNN/figures/icon-danger.gif create mode 100644 docs/zh/CRNN/figures/icon-note.gif create mode 100644 docs/zh/CRNN/figures/icon-notice.gif create mode 100644 docs/zh/CRNN/figures/icon-tip.gif create mode 100644 docs/zh/CRNN/figures/icon-warning.gif diff --git a/docs/zh/CRNN/ATC CRNN from PyTorch.md b/docs/zh/CRNN/ATC CRNN from PyTorch.md new file mode 100644 index 0000000000..c509374a0d --- /dev/null +++ b/docs/zh/CRNN/ATC CRNN from PyTorch.md @@ -0,0 +1,347 @@ +# CRNN +- [交付件基本信息](#交付件基本信息.md) +- [概述](#概述.md) +- [推理环境准备](#推理环境准备.md) +- [快速上手](#快速上手.md) +- [版本说明](#版本说明.md) +

交付件基本信息

+ +发布者(Publisher):Huawei + +应用领域(Application Domain):OCR + +版本(Version):1.2 + +修改时间(Modified):2021.04.15 + +大小(Size):34MB, 17MB + +框架(Framework):PyTorch\_1.6.0 + +模型格式(Model Format):onnx, om + +精度(Precision):FP16 + +处理器(Processor):昇腾310 + +应用级别(Categories):Official + +描述(Description):基于PyTorch CRNN模型,使用ATC工具转换得到的,可以在昇腾AI设备上运行的离线模型 + +

概述

+ +CRNN网络是一种用于在图像画面上识别和分辨出字符串的网络模型,模型的输入为一张3通道RGB图片,尺寸为\(32, 100, 3\)。CRNN的采取backbone网络提取图像特征。由于backbone部分得到的Feature Map是不能直接进行RNN预测的,我们需要进行一步Map-to-Seq操作,CNN Feature Map的N\*C\*H\*W转化为\(NH\)\*W\*C,同时依然将W维作为RNN中的时序维度。这之后使用BLSTM结构对其进行预测,并最终使用CTC找到最高概率的序列并输出。 + +- 参考论文:[Baoguang Shi, Xiang Bai, Cong Yao "An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition" arXiv:1507.05717](https://arxiv.org/abs/1507.05717) + +- 参考实现: + + ``` + url=https://github.com/Sierkinhane/CRNN_Chinese_Characters_Rec.git + branch=master + commit_id=90c83db3f06d364c4abd115825868641b95f6181 + ``` + + +- 适配昇腾 AI 处理器的实现: + + ``` + url=https://gitee.com/ascend/modelzoo.git + branch=master + commit_id=9706793659e5788fcd0b8800f4aec34918de7c02 + code_path=built-in/PyTorch/Official/cv/image_classification/CRNN_for_PyTorch + ``` + + +通过Git获取对应commit\_id的代码方法如下: + +``` +git clone {repository_url} # 克隆仓库的代码 +cd {repository_name} # 切换到模型的代码仓目录 +git checkout {branch} # 切换到对应分支 +git reset --hard {commit_id} # 代码设置到对应的commit_id +cd {code_path} # 切换到模型代码所在路径,若仓库下只有该模型,则无需切换 +``` + +## 输入输出数据 + +- 输入数据 + + + + + + + + + + + + + + +

输入数据

+

大小

+

数据类型

+

数据排布格式

+

input

+

batchsize x 1 x 32 x 100

+

FLOAT32

+

NCHW

+
+ +- 输出数据 + + + + + + + + + + + + + + +

输出数据

+

大小

+

数据类型

+

数据排布格式

+

output1

+

26 x batchsize x 37

+

FLOAT32

+

ND

+
+ + +

推理环境准备

+ +- 本样例配套的CANN版本为[3.2.0](https://www.hiascend.com/software/cann/commercial) 。 +- 硬件环境和运行环境准备请参见《[CANN 软件安装指南](https://support.huawei.com/enterprise/zh/ascend-computing/cann-pid-251168373?category=installation-upgrade)》。 +- 该模型需要以下依赖。 + + **表 1** 依赖列表 + + + + + + + + + + + + + + + + + + + +

依赖名称

+

版本

+

ONNX

+

1.6.0

+

Pytorch

+

1.6.0

+

opencv-python

+

4.5.1

+

torchvision

+

0.7.0

+
+ + >![](figures/icon-note.gif) **说明:** + >请用户根据自己的运行环境自行安装所需依赖。 + + +

快速上手

+ +## 获取源码 + +1. 单击“立即下载”,下载源码包。 +2. 上传源码包到服务器任意目录并解压(如:/home/HwHiAiUser)。 + + ``` + ├── atc_crnn.sh //onnx模型转换om模型脚本 + ├── benchmark.aarch64 //离线推理工具(适用ARM架构) + ├── benchmark.x86_64 //离线推理工具(适用x86架构) + ├── crnn_final_bs1.om //用于推理的离线模型 + ├── crnn_npu_dy.onnx //onnx格式的模型文件 + ├── crnn.py //crnn模型文件 + ├── get_info.py //生成推理输入的数据集二进制info文件 + ├── gpu_checkpoint_12_acc_0.7923.pth //训练后的权重文件 + ├── parse_testdata.py //数据集预处理脚本 + ├── postpossess_CRNN_pytorch.py //benchmark验证推理结果脚本 + ├── pth2onnx.py //用于转换pth模型文件到onnx模型文件 + ├── acl_env_arm.sh //设置ACL环境变量(适用ARM架构) + ├── acl_env_x86.sh //设置ACL环境变量(适用x86架构) + ├── acl_net.py //acl接口文件 + ├── post_CRNN_pytorch_acl.py //推理及验证精度脚本 + └── ReadMe.md + ``` + + >![](figures/icon-note.gif) **说明:** + >benchmark离线推理工具使用请参见《[CANN V100R020C20 推理benchmark工具用户指南](https://support.huawei.com/enterprise/zh/doc/EDOC1100180792)》。 + + +## 准备数据集 + +1. 获取原始数据集。 + + 本模型支持多种开源OCR mdb数据集(例如IIIT5K\_lmdb),请用户自行准备好图片数据集,IIIT5K\_lmdb验证集目录参考。 + + ``` + ├── IIIT5K_lmdb # 验证数据集 + ├── data.mdb # 数据文件 + └── lock.mdb # 锁文件 + ``` + + 上传数据集到服务器任意目录并解压(如:_/home/HwHiAiUser/dataset_)。 + +2. 数据预处理。 + + OCR使用的数据集一般是Imdb或者mdb格式,昇腾ModelZoo PyTorch模型统一提供基于ACL接口编写的Benchmark工具,用于om模型推理,所以需要先把mdb格式的文件通过脚本处理成二进制文件。使用parse\_testdata.py脚本将数据集转换为二进制文件。 + + 1. 修改脚本参数。 + + 执行命令。 + + ``` + vim parse_testdata.py + ``` + + 修改脚本中test\_dir和output\_bin参数值。 + + ``` + test_dir = '/home/HwHiAiUser/dataset/IIIT5K_lmdb' # 修改为实际数据实际存放路径 + output_bin = './input_bin/' # 修改为二进制输出路径 + ``` + + 2. 执行parse\_testdata.py脚本。 + + ``` + python3.7 parse_testdata.py + ``` + + 执行成功后,二进制文件生成在_./input\_bin_文件夹下,标签数据label.txt生成在当前目录下。 + + + +## 模型推理 + +1. 模型转换。 + + 使用PyTorch将模型权重文件.pth转换为.onnx文件,再使用ATC工具将.onnx文件转为离线推理模型文件.om文件。 + + 1. 获取权重文件。 + + 从源码中获取gpu\_checkpoint\_12\_acc\_0.7923.pth文件。 + + 2. 导出onnx文件。 + + pth2onnx.py脚本将.pth文件转换为.onnx文件,执行如下命令。 + + ``` + python3.7 pth2onnx.py ./gpu_checkpoint_12_acc_0.7923.pth ./crnn_npu_dy.onnx + ``` + + 第一个参数为输入权重文件路径,第二个参数为输出onnx文件路径。该脚本导出动态batch轴的onnx模型,方便部署,用户可以根据需要修改。 + + 运行成功后,在当前目录生成crnn\_npu\_dy.onnx模型文件。 + + >![](figures/icon-notice.gif) **须知:** + >使用ATC工具将.onnx文件转换为.om文件,需要.onnx算子版本需为11。在pth2onnx.py脚本中torch.onnx.export方法中的输入参数opset\_version的值需为11,请勿修改。 + + 3. 使用ATC工具将ONNX模型转OM模型。 + 1. 修改atc\_crnn.sh脚本,通过ATC工具使用脚本完成转换,具体的脚本示例如下。 + + ``` + # 配置环境变量 + export PATH=/usr/local/python3.7.5/bin:/usr/local/Ascend/ascend-toolkit/latest/atc/ccec_compiler/bin:/usr/local/Ascend/ascend-toolkit/latest/atc/bin:$PATH + export PYTHONPATH=/usr/local/Ascend/ascend-toolkit/latest/atc/python/site-packages/:$PYTHONPATH + export LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/latest/atc/lib64:$LD_LIBRARY_PATH + export ASCEND_OPP_PATH=/usr/local/Ascend/ascend-toolkit/latest/opp + export DUMP_GE_GRAPH=2 + export SLOG_PRINT_TO_STDOUT=1 + export REPEAT_TUNE=true + + # 使用atc工具进行模型转换 + /usr/local/Ascend/ascend-toolkit/latest/atc/bin/atc --model=$1 --auto_tune_mode="GA,RL" --framework=5 --output=$2 --input_format=NCHW --input_shape="actual_input_1:1,1,32,100" --log=info --soc_version=Ascend310 + ``` + + 参数说明: + + - --model:为ONNX模型文件。 + - --framework:5代表ONNX模型。 + - --output:输出的OM模型。 + - --input\_format:输入数据的格式。 + - --input\_shape:输入数据的shape。 + - --auto\_tune\_mode:使用auto tune工具。 + - --log:日志级别。 + - --soc\_version:处理器型号。 + + >![](figures/icon-note.gif) **说明:** + >脚本中环境变量仅供参考,请以实际安装环境配置环境变量。详细介绍请参见《CANN V100R020C20 开发辅助工具指南 \(推理\)](https://support.huawei.com/enterprise/zh/doc/EDOC1100180777/6dfa6beb)》。 + >**Auto Tune**工具在“RL”模式需要安装TensorFlow框架。详细介绍请参见《CANN V100R020C20 开发辅助工具指南 \(推理\)](https://support.huawei.com/enterprise/zh/doc/EDOC1100180777/6dfa6beb)》中 + >“Auto Tune工具使用指南”章节。 + + 2. 执行atc\_crnn.sh脚本,将.onnx文件转为离线推理模型文件.om文件。 + + 添加执行权限。 + + ``` + chmod u+x atc_crnn.sh + ``` + + 执行脚本。 + + ``` + ./atc_crnn.sh ./crnn_npu_dy.onnx crnn_final_bs1 + ``` + + 第一个参数为待转换的onnx模型,第二个参数为输出om文件的名称。运行成功后生成crnn\_final\_bs1.om。 + + + +2. 开始推理验证。 + + 1. 设置环境变量。 + + - x86环境。 + + ``` + source acl_env_x86.sh + ``` + + - arm环境。 + + ``` + source acl_env_arm.sh + ``` + + + ​ 请根据《[CANN 软件安装指南](https://support.huawei.com/enterprise/zh/ascend-computing/cann-pid-251168373?category=installation-upgrade)》手册中Ascend-cann-toolkit_\_\{version\}_\_linux-_\{arch\}_.run实际安装位置修改对应环境变量脚本。 + + 2. 执行推理并测试精度 + + 运行脚本post\_CRNN\_pytorch\_acl.py进行精度测试,精度会打印并保存在json文件中。运行post\_CRNN\_pytorch\_acl.py脚本前请确保acl\_net.py和该脚本在同一目录中。 + + ``` + python3.7.5 post_CRNN_pytorch_acl.py --pre_dir ./input_bin --batchsize 1 --modelpath crnn_final_bs1.om --label label.txt --json_output_file result + ``` + + 参数说明: + + - --pre\_dir:预处理脚本处理后的文件夹。 + - --batchsize:推理batchsize。 + - --modelpath:模型路径。 + - --label:标签文件。 + - --json\_output\_file:保存结果的json文件名称。 + + >![](figures/icon-note.gif) **说明:** + > + >精度测试时,暂不支持使用benchmark推理,该步骤使用脚本进行测试。 \ No newline at end of file diff --git a/docs/zh/CRNN/figures/icon-caution.gif b/docs/zh/CRNN/figures/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 GIT binary patch literal 580 zcmV-K0=xZ3Nk%w1VIu$?0Hp~4{QBgqmQ+MG9K51r{QB&)np^||1PlfQ%(86!{`~yv zv{XhUWKt}AZaiE{EOcHp{O-j3`t;<+eEiycJT4p@77X;(jQsMfB$R?oG%6hQ z+MMLZbQBH@)Vg&1^3?qHb(5!%>3r0+`eq=&V&E}0Dypi0000000000 z00000A^8LW000R9EC2ui03!e$000L5z=Uu}ED8YtqjJd<+B}(9bIOb$3-31_h|V>=0A{ z1Hh0#H30>fNT})^fRU_83uewx9oRr{f{Sx1Ml`t)EQ zGkHZ67&~y{W5Jpq4H_WfuLxp*3<7O}GEl;1ESe36fLNs=B0&LQM1Buf(R)qg(BRd`t1OPjI1m_q4 literal 0 HcmV?d00001 diff --git a/docs/zh/CRNN/figures/icon-danger.gif b/docs/zh/CRNN/figures/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 GIT binary patch literal 580 zcmV-K0=xZ3Nk%w1VIu$?0Hp~4{QBgqmQ+MG9K51r{QB&)np^||1PlfQ%(86!{`~yv zv{XhUWKt}AZaiE{EOcHp{O-j3`t;<+eEiycJT4p@77X;(jQsMfB$R?oG%6hQ z+MMLZbQBH@)Vg&1^3?qHb(5!%>3r0+`eq=&V&E}0Dypi0000000000 z00000A^8LW000R9EC2ui03!e$000L5z=Uu}ED8YtqjJd<+B}(9bIOb$3-31_h|V>=0A{ z1Hh0#H30>fNT})^fRU_83uewx9oRr{f{Sx1Ml`t)EQ zGkHZ67&~y{W5Jpq4H_WfuLxp*3<7O}GEl;1ESe36fLNs=B0&LQM1Buf(R)qg(BRd`t1OPjI1m_q4 literal 0 HcmV?d00001 diff --git a/docs/zh/CRNN/figures/icon-note.gif b/docs/zh/CRNN/figures/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda GIT binary patch literal 394 zcmZ?wbhEHblx7fPSjxcg=ii?@_wH=jwxy=7CMGH-B`L+l$wfv=#>UF#$gv|VY%C^b zCQFtrnKN(Bo_%|sJbO}7RAORe!otL&qo<>yq_Sq+8Xqqo5h0P3w3Lvb5E(g{p01vl zxR@)KuDH0l^z`+-dH3eaw=XqSH7aTIx{kzVBN;X&hha0dQSgWuiw0NWUvMRmkD|> literal 0 HcmV?d00001 diff --git a/docs/zh/CRNN/figures/icon-notice.gif b/docs/zh/CRNN/figures/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 GIT binary patch literal 406 zcmV;H0crk6Nk%w1VIu$@0J8u9|NsB@_xJDb@8;&_*4Ea}&d#;9wWXz{jEszHYim+c zQaU<1At50E0000000000A^8Le000gEEC2ui03!e%000R7038S%NU)&51O^i-Tu6`s z0)`MFE@;3YqD6xSC^kTNu_J>91{PH8XfZ(p1pp2-SU@u3#{mEUC}_}tg3+I#{z}{Ok@D_ZUDg- zt0stin4;pC8M{WLSlRH*1pzqEw1}3oOskyNN?j;7HD{BBZ*OEcv4HK!6Bk6beR+04 z&8}k>SkTusVTDmkyOz#5fCA$JTPGJVQvr3uZ?QzzPQFvD0rGf_PdrcF`pMs}p^BcF zKtKTd`0wipR%nKN&Wj+V}pX;WC3SdJV!a_8Qi zE7z`U*|Y^H0^}fB$R?oG%6hQ z+MMLZbQBH@)Vg&1^3?qHb(5!%>3r0+`eq=&V&E}0Dypi0000000000 z00000A^8LW000R9EC2ui03!e$000L5z=Uu}ED8YtqjJd<+B}(9bIOb$3-31_h|V>=0A{ z1Hh0#H30>fNT})^fRU_83uewx9oRr{f{Sx1Ml`t)EQ zGkHZ67&~y{W5Jpq4H_WfuLxp*3<7O}GEl;1ESe36fLNs=B0&LQM1Buf(R)qg(BRd`t1OPjI1m_q4 literal 0 HcmV?d00001 -- Gitee