Ascend-SACT/CRNN
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

硬件设备

设备型号NPU配置
Ascend 910B1卡

软件版本配套表

基础镜像:使用 cann:8.3.rc1镜像

docker pull quay.io/ascend/cann:8.3.rc1
配套版本环境准备指导
CANN8.3.RC1-
Python3.10.12-
torch2.1.0-

模型介绍

CRNN_Sierkinhane 是一个基于卷积循环网络的中文 OCR 模型。参考实现: https://github.com/Sierkinhane/CRNN_Chinese_Characters_Rec

环境准备

创建容器

  1. 创建cann8.3.rc1容器
docker run -itd  --net=host --name=crnn \
   	   --shm-size 50g \
   	   --device=/dev/davinci0 \
   	   --device=/dev/davinci_manager \
   	   --device=/dev/hisi_hdc \
   	   --device /dev/devmm_svm \
   	   -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
   	   -v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \
   	   -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
   	   -v /usr/local/sbin:/usr/local/sbin \
   	   -v /etc/hccn.conf:/etc/hccn.conf \
   	   -v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \
   	   -v /usr/local/dcmi:/usr/local/dcmi \
   	   -v /usr/local/Ascend/driver/tools/hccn_tool:/usr/local/Ascend/driver/tools/hccn_tool \
   	   -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
   	   -v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \
   	   -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
   	   -v /etc/ascend_install.info:/etc/ascend_install.info \
   	   -v /root/.cache:/root/.cache \
   	   --entrypoint /bin/bash quay.io/ascend/cann:8.3.rc1

准备项目

  1. 克隆 GitHub 仓库,切换到指定分支、指定 commit_id。
git clone https://github.com/Sierkinhane/CRNN_Chinese_Characters_Rec.git
cd CRNN_Chinese_Characters_Rec
git checkout stable
git reset --hard a565687c4076b729d4059593b7570dd388055af4
  1. 在 CRNN_Chinese_Characters_Rec 目录下新建一个 npu_infer 文件夹,把 Gitcode 仓库 CRNN_sierkinhane_for_Pytorch 目录下的所有文件复制到 npu_infer 文件夹。
git clone https://gitcode.com/Ascend/ModelZoo-PyTorch.git
cp -r ModelZoo-PyTorch/ACL_PyTorch/built-in/ocr/CRNN/CRNN_Sierkinhane_for_Pytorch/*  CRNN_Chinese_Characters_Rec/npu_infer

获取数据集

  1. 从 GitHub 仓库的百度网盘链接获取数据集,把图片数据放在 images/total_images 路径下。
ll images/total_images | grep "^-" | wc -l # 输出训练集和测试集的图片总数量为 3644007
wc -l lib/dataset/txt/test.txt # 输出测试集标签数量为 364400
  1. 由于数据条数超过10000条时aisbench无法进行推理,因此选择前1000条数据进行验证;
# 取1000条到tmp1000
cd images/test_images
mkdir ../tmp1000
ls | head -n 1000 | xargs -i cp {} ../tmp1000
cd -

# 数据预处理
python3 npu_infer/preprocess.py --test-image-dir images/tmp1000

模型转换

  1. 导出onnx 文件。运行后生成 crnn.onnx 文件。python3 npu_infer/pth2onnx.py
  2. 转换om 模型。运行后生成 om/crnn_bs${batch_size}.om 文件,这里用bs=1进行验证;
export batch_size=1
atc \
    --framework=5 \
    --model=crnn.onnx \
    --output=om/crnn_bs${batch_size} \
    --input_format=NCHW \
    --input_shape="input:${batch_size},1,32,160" \
    --soc_version=Ascend910B3

备注:--soc_version请根据实际芯片名称填写。

精度验证

  1. 使用前面生成的1000条数据集进行验证
# 模型推理
python3 -m ais_bench \
    --model=om/crnn_bs1.om \
    --input=images/preprocessed_tmp1000 \
    --output=ais_bench_output \
    --output_dirname=result \
    --output_batchsize_axis=1 \
    --outfmt=NPY

#数据后处理,验证精度
python3 npu_infer/postprocess.py --predict-dir ais_bench_output/result
  1. 测得精度为0.78,与官方测量的静态数据精度一致 image.png