记录如何在RK3588板子上跑通paddle的OCR模型

官网文档地址

一、Ubuntu20.04系统中完成环境搭建(板子也是20.04)

  • 安装模型转换环境

    conda create -n rknn2 python==3.9
    conda activate rknn2

  • 安装Ubuntu依赖包

    sudo apt-get install libxslt1-dev zlib1g zlib1g-dev libglib2.0-0 libsm6 libgl1-mesa-glx libprotobuf-dev gcc g++

安装RKNNtoolkit2

RKNNtoolkit2的作用是将onnx模型转为rknn模型

复制代码
pip install numpy==1.19.4 --only-binary=:all: -i https://pypi.tuna.tsinghua.edu.cn/simple

git clone https://github.com/rockchip-linux/rknn-toolkit2

安装 python3.9版本对应的 RKNN-Toolkit2

复制代码
cd rknn-toolkit2/rknn-toolkit2/packages/

pip install -r requirements_cp39-1.6.0.txt -i https://pypi.mirrors.ustc.edu.cn/simple 

pip install rknn_toolkit2-1.6.0+81f21f4d-cp39-cp39-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple
PC 端安装 Paddle2ONNX

安装paddle2onnx

这一步为下面模型转换做打算:

paddle2onnx的作用:

paddle模型------>onnx模型

RKNNtoolkit2的作用:

onnx模型------>rknn模型

安装paddle2onnx的过程极为简单,在终端输入:

复制代码
pip install paddle2onnx -i https://pypi.tuna.tsinghua.edu.cn/simple

至此,ubuntu上面的环境已经搭建完毕。

2、在板子上完成环境搭建

FastDeploy库的编译(在rk3588板子上进行)

rk3588性能强劲,可以直接在板子上借助图形界面编译FastDeploy库

使用git clone https://github.com/PaddlePaddle/FastDeploy.git指令拉取代码

复制代码
sudo apt-get update
sudo apt-get install cmake

拉去代码在本地后执行如下操作:拉去代码在本地后执行如下操作:

复制代码
​cd FastDeploy
 
# 如果您使用的是develop分支输入以下命令   git checkout develop
 
mkdir build && cd build

cmake ..  -DENABLE_ORT_BACKEND=OFF \
          -DENABLE_RKNPU2_BACKEND=ON \
          -DENABLE_VISION=ON \
          -DRKNN2_TARGET_SOC=RK3588 \
          -DCMAKE_INSTALL_PREFIX=${PWD}/fastdeploy-0.0.0

build if soc is RK3588

复制代码
make -j8

build if soc is RK356X

复制代码
make -j4


make install

执行完毕后FastDeploy库就编译完成了。请留意现在的地址,后面编译ocr程序时会用上

按照官方教程安装三个模型:
此处装模型操作均在Ubuntu系统上,注意不是在板子上!!!

复制代码
#新建一个文件夹
mkdir ppocr
cd ppocr
# 下载PP-OCRv3文字检测模型
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar
tar -xvf ch_PP-OCRv3_det_infer.tar
# 下载文字方向分类器模型
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar
tar -xvf ch_ppocr_mobile_v2.0_cls_infer.tar
# 下载PP-OCRv3文字识别模型
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar
tar -xvf ch_PP-OCRv3_rec_infer.tar

上面操作结束后会得到三个装有paddle模型的文件夹,随即进入paddle----onnx模型步骤

复制代码
paddle2onnx --model_dir ch_PP-OCRv3_det_infer \
            --model_filename inference.pdmodel \
            --params_filename inference.pdiparams \
            --save_file ch_PP-OCRv3_det_infer/ch_PP-OCRv3_det_infer.onnx \
            --enable_dev_version True
paddle2onnx --model_dir ch_ppocr_mobile_v2.0_cls_infer \
            --model_filename inference.pdmodel \
            --params_filename inference.pdiparams \
            --save_file ch_ppocr_mobile_v2.0_cls_infer/ch_ppocr_mobile_v2.0_cls_infer.onnx \
            --enable_dev_version True
paddle2onnx --model_dir ch_PP-OCRv3_rec_infer \
            --model_filename inference.pdmodel \
            --params_filename inference.pdiparams \
            --save_file ch_PP-OCRv3_rec_infer/ch_PP-OCRv3_rec_infer.onnx \
            --enable_dev_version True

然后固定onnx模型的形状:

这里需要注意的是,根据ubuntu系统上python版本的不同,python指令可能会替换为python3

复制代码
# 固定模型的输入shape
python -m paddle2onnx.optimize --input_model ch_PP-OCRv3_det_infer/ch_PP-OCRv3_det_infer.onnx \
                               --output_model ch_PP-OCRv3_det_infer/ch_PP-OCRv3_det_infer.onnx \
                               --input_shape_dict "{'x':[1,3,960,960]}"

python -m paddle2onnx.optimize --input_model ch_ppocr_mobile_v2.0_cls_infer/ch_ppocr_mobile_v2.0_cls_infer.onnx \
                               --output_model ch_ppocr_mobile_v2.0_cls_infer/ch_ppocr_mobile_v2.0_cls_infer.onnx \
                               --input_shape_dict "{'x':[1,3,48,192]}"

python -m paddle2onnx.optimize --input_model ch_PP-OCRv3_rec_infer/ch_PP-OCRv3_rec_infer.onnx \
                               --output_model ch_PP-OCRv3_rec_infer/ch_PP-OCRv3_rec_infer.onnx \
                               --input_shape_dict "{'x':[1,3,48,320]}"

python3指令:

复制代码
python3 -m paddle2onnx.optimize --input_model ch_ppocr_mobile_v2.0_cls_infer/ch_ppocr_mobile_v2.0_cls_infer.onnx \
                               --output_model ch_ppocr_mobile_v2.0_cls_infer/ch_ppocr_mobile_v2.0_cls_infer.onnx \
                               --input_shape_dict "{'x':[1,3,48,192]}"

python3 -m paddle2onnx.optimize --input_model ch_PP-OCRv3_rec_infer/ch_PP-OCRv3_rec_infer.onnx \
                               --output_model ch_PP-OCRv3_rec_infer/ch_PP-OCRv3_rec_infer.onnx \
                               --input_shape_dict "{'x':[1,3,48,320]}"

python3 -m paddle2onnx.optimize --input_model ch_PP-OCRv3_det_infer/ch_PP-OCRv3_det_infer.onnx \
                               --output_model ch_PP-OCRv3_det_infer/ch_PP-OCRv3_det_infer.onnx \
                               --input_shape_dict "{'x':[1,3,960,960]}"

至此执行完毕后,paddle模型转到onnx模型完毕,接下来是onnx模型转到rknn模型。

将这个rknpu2_tools文件夹的内容搬到ppocr文件夹下

随后输入以下三条指令:

复制代码
python3 rknpu2_tools/export.py --config_path rknpu2_tools/config/ppocrv3_det.yaml --target_platform rk3588

python3 rknpu2_tools/export.py --config_path rknpu2_tools/config/ppocrv3_rec.yaml --target_platform rk3588


python3 rknpu2_tools/export.py --config_path rknpu2_tools/config/ppocrv3_cls.yaml --target_platform rk3588

当三条指令结束运行时,终端内容应该都是:

复制代码
D RKNN: [03:17:31.652] ----------------------------------------
D RKNN: [03:17:31.652] <<<<<<<< end: N4rknn21RKNNMemStatisticsPassE
I rknn buiding done.
W init_runtime: Target is None, use simulator!
Export OK!

参考:记录如何在RK3588板子上跑通paddle的OCR模型。重点是对齐rknntoolkit版本和板子上的librknnrt.so库_paddleocr rk3588-CSDN博客

相关推荐
失散132 小时前
深度学习——03 神经网络(2)-损失函数
人工智能·深度学习·神经网络·损失函数
hans汉斯7 小时前
基于深度学习的苹果品质智能检测算法研究
人工智能·深度学习·算法
2401_831896037 小时前
深度学习(5):激活函数
人工智能·深度学习
deephub8 小时前
Dots.ocr:告别复杂多模块架构,1.7B参数单一模型统一处理所有OCR任务22
人工智能·深度学习·神经网络·ocr
蒋星熠8 小时前
Rust 异步生态实战:Tokio 调度、Pin/Unpin 与零拷贝 I/O
人工智能·后端·python·深度学习·rust
巫婆理发22210 小时前
浅层神经网络
人工智能·深度学习·神经网络
未来之窗软件服务11 小时前
自建知识库,向量数据库 体系建设(二)之BERT 与.NET 8
人工智能·深度学习·bert·知识库·向量数据库·仙盟创梦ide·东方仙盟
失散1314 小时前
深度学习——03 神经网络(3)-网络优化方法
网络·深度学习·神经网络
m0_6038887114 小时前
LLaMA-Adapter V2 Parameter-Efficient Visual Instruction Model
人工智能·深度学习·ai·llama·论文速览
xw337340956417 小时前
《卷积神经网络(CNN):解锁视觉与多模态任务的深度学习核心》
人工智能·pytorch·深度学习·神经网络·cnn