在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件)

这篇具有很好参考价值的文章主要介绍了在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

由于部署的硬件是华为昇腾 NPU(Ascend310),参考网址https://www.paddlepaddle.org.cn/lite/v2.10/demo_guides/huawei_ascend_npu.html#npu-paddle-lite

先拉取paddlelite用来编译库

git clone https://github.com/PaddlePaddle/Paddle-Lite.git
cd Paddle-Lite

先在amd64上部署的,于是编译并生成 PaddleLite+NNAdapter+HuaweiAscendNPU for amd64 and arm64 的部署库

./lite/tools/build_linux.sh --arch=x86 --with_extra=ON --with_log=ON --with_exception=ON --with_nnadapter=ON --nnadapter_with_huawei_ascend_npu=ON --nnadapter_huawei_ascend_npu_sdk_root=/home/ds/Ascend/ascend-toolkit/6.0.RC1.alpha003

编译到一半的时候会出现未知原因的编译错误,并不会报error而是直接停止,于是放弃编译HuaweiAscendNPU库,只编译PaddleLite+NNAdapter

./lite/tools/build_linux.sh --arch=x86 --with_extra=ON --with_log=ON --with_exception=ON --with_nnadapter=ON 

编译出来的库与头文件在该地址中
在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件),华为,bash,linux,paddlepaddle,paddle
在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件),华为,bash,linux,paddlepaddle,paddle

  • (该步可省略)下载测试案例demo
    https://paddlelite-demo.bj.bcebos.com/devices/generic/PaddleLite-generic-demo_v2_10_0.tar.gz
    里面有这几个案例代码可以供学习
    在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件),华为,bash,linux,paddlepaddle,paddle
cd /home/ds/Desktop/paddleModel/PaddleLite-generic-demo/image_classification_demo/shell

案例目录结构
在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件),华为,bash,linux,paddlepaddle,paddle

./run.sh mobilenet_v1_fp32_224 linux amd64

输入上述命令行即可开始测试
在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件),华为,bash,linux,paddlepaddle,paddle
在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件),华为,bash,linux,paddlepaddle,paddle
在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件),华为,bash,linux,paddlepaddle,paddle

这些案例中就有编译好的各个平台的库与头文件,如果测试通过的话说明相对应的库可以在该平台直接用。如果不可以用,就用上面源码直接编译出来的库。
然后下载Paddle-Lite-Demo,这个里面有很多案例,包括ocr的案例
在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件),华为,bash,linux,paddlepaddle,paddle
下载地址
https://github.com/PaddlePaddle/Paddle-Lite-Demo

https://github.com/PaddlePaddle/Paddle-Lite-Demo/tree/develop/ocr/armlinux/shell/cxx/ppocr_demo
由于涉及到多平台的适配性,原项目目录结构比较复杂,cmakeList文件也写的很复杂,我把项目结构进行了重新排布
在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件),华为,bash,linux,paddlepaddle,paddle
CMakeLists.txt也重新改写了,只保留了必要的部分

cmake_minimum_required(VERSION 3.5)

set(CMAKE_CXX_STANDARD 17)
project(Ocr_Ascend)
add_definitions(-g)
# 默认arm
#set(path lib/arm)
set(opencvVersion opencv410)#设置opencv版本
# 头文件
include_directories(./include)
include_directories(./PaddleLite/include)
include_directories(/home/ds/Desktop/opencv-4.1.0/include/opencv4)
include_directories(/home/ds/Desktop/opencv-4.1.0/include/opencv2)


# 库文件
link_directories(./PaddleLite/lib)
link_directories(/home/ds/Desktop/opencv-4.1.0/build/lib)


aux_source_directory (src SRC_LIST)
add_executable (AscendOcr ${SRC_LIST})
# c++17
# target_link_libraries(AscendOcr  opencv_highgui opencv_core opencv_imgproc opencv_imgcodecs opencv_calib3d opencv_features2d opencv_videoio protobuf glog gflags paddle_inference pthread paddle_light_api_shared paddle_api_full_bundled)
target_link_libraries(AscendOcr  opencv_highgui opencv_core opencv_imgproc opencv_imgcodecs opencv_calib3d opencv_features2d opencv_videoio  paddle_light_api_shared)

# 注意测试
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) 

原demo项目每次运行,终端需要输入的参数过于繁杂
在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件),华为,bash,linux,paddlepaddle,paddle
容易出现意外的错误,于是我在代码中将这些参数写死了
在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件),华为,bash,linux,paddlepaddle,paddle
由原始的Paddle格式模型到paddlelite可以使用的格式模型需要使用opt转换工具进行转模型,opt转换工具可以直接在该地址的assets里面下载,在那个平台就下载那个平台的
https://github.com/PaddlePaddle/Paddle-Lite/releases/tag/v2.13-rc
在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件),华为,bash,linux,paddlepaddle,paddle
下完之后可以直接运行

./opt --model_file=./en_number_mobile_v2.0_rec_slim_infer/inference.pdmodel  --param_file=./en_number_mobile_v2.0_rec_slim_infer/inference.pdiparams  --optimize_out=./en_number_mobile_v2.0_rec_slim_infer_opt --valid_targets=x86  --optimize_out_type=naive_buffer

注意valid_targets这个参数要随着使用平台进行修改,使用上述命令就可产生nb格式的模型
在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件),华为,bash,linux,paddlepaddle,paddle
如果要在华为NPU上执行模型,需要在opt工具转换的时候将如下选项设置成valid_targets=arm,huawei_ascend_npu。如果只是在CPU上执行,需要设置如下选项valid_targets=arm

paddle_lite_opt --model_file=./MobileNetV2/inference.pdmodel --param_file=./MobileNetV2/inference.pdiparams --valid_targets=arm,huawei_ascend_npu --optimize_out=./MobileNetV2/MobileNetV2

参考网址:https://zhuanlan.zhihu.com/p/432033215

然后运行,会报莫名其妙的错,Run() double free or corruption (!prev)或者Segmentation fault (core dumped),后来我一个地方一个地方的手动打断点,发现是字符识别的时候,如果一张图有多个detection模型识别出来的区域,往往第一个detection识别出来的字符是对的,然后从第二个就开始出问题,最后Run() double free or corruption (!prev)或者Segmentation fault (core dumped)终止,甚至看了paddlelite的源码,并没有什么可以修改的地方,我认为这是paddlelite或者这个项目在x86平台中有bug,需要paddlelite相关人员进行修复。
虽然不能顺利运行,但是我想到了一个方法,既然只有第一次能成功识别,后面的都不能,那我每次for循环一次都初始化一下那个识别容器
在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件),华为,bash,linux,paddlepaddle,paddle
然后能够顺利执行完成!
在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件),华为,bash,linux,paddlepaddle,paddle
然后在arm平台上运行,重新编译了arm平台上的paddlelite库。

sudo ./lite/tools/build_linux.sh --arch=armv8  --with_extra=ON --with_log=ON --with_exception=ON --with_nnadapter=ON

然后同样步骤运行我改写的ocr项目,发现就不会出现我上面提到的错误,看来这个错误仅仅在amd64 平台用x86库时会出现。
之后我会尝试编译出HuaweiAscendNPU库,待续。文章来源地址https://www.toymoban.com/news/detail-738658.html

到了这里,关于在amd64与arm上用paddlelite部署paddelOCR(Ascend硬件)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 确定Mac\Linux系统的架构类型是 x86-64(amd64),还是 arm64 架构

    我们在下载软件或镜像时会有很多版本,那需要根据我们的系统架构选择正确的软件或镜像版本。 要确定你的系统使用的是 x86-64(amd64) 还是 arm64 架构,可以使用以下方法之一: 使用 uname 命令: 打开终端,并运行以下命令: 在MAC中: 如果输出结果是 x86_64 ,则表示你的系

    2024年02月08日
    浏览(30)
  • Linux软件包名称含AMD,ARM,x64的详解

    下载clickhouse-backup时看到不同软件包,有的是x86,有的是amd64,有的是arm64,这些有啥区别呢? clickhouse-backup-2.4.2-1.x86_64.rpm clickhouse-backup_2.4.2_amd64.deb clickhouse-backup_2.4.2_arm64.deb x86 和 ARM 都是CPU设计的一个架构。x86 用的是复杂指令集。ARM用的是精简指令集。 x86_64简称x64是基于

    2024年02月03日
    浏览(26)
  • CentOS(4)——关于Linux软件下载时:amd64、x86、x86_64、arm64 的说明

    目录 一、简介 二、常见的CPU架构 三、Linux查看CPU架构命令 ①arch命令 ②uname -a 命令 ③lscpu 在安装GitLab Runner的时候,去清华源下载RPM包时发现同一个软件有许多不同架构的安装包,常见的有amd64、x86、x86_64、arm64这些架构,这就类似于Windows下安装软件需要区分32bit和64bit。在

    2024年02月03日
    浏览(42)
  • Linux系统查看版本、位数(32位或64位)、架构(arm或amd)的命令

    这里是Ubuntu linux系统; 输入命令: 显示: 输入命令: 显示: 输入命令: 显示: 补充:amd (intelx86架构)和arm版本区别。 x86和arm架构定位不同: arm基于精简指令(RISC),本身定位于嵌入式平台,简化了硬件逻辑的设计,减少了晶体管,从而降低功耗,流水线等控制并不复杂

    2024年02月16日
    浏览(36)
  • ARM和X86、X86和X64、Intel和AMD、CPU和GPU介绍

    X86 和 ARM 都是CPU设计的一个架构。X86 用的是复杂指令集。ARM用的是精简指令集。 指令集其实就是机器码,机器码上是汇编,汇编之上是程序语言例如java、c、c#。 复杂指令集是在硬件层面上设计了很多指令,所以编程会简单些。 精简指令集是在硬件层面上设计的指令比较少

    2024年02月04日
    浏览(25)
  • FFmpeg在 Windows 环境编译(64位)支持h264,h265,和Intel QSV,Nvidia Cuda,AMD amf 硬件加速

    目录 目录 前言 一. 源码包下载 1. FFmpeg源码下载 2. MSYS2安装   2.1 执行下面命令配置环境   2.2 安装完成后将MSYS2安装路径下的mingw64/bin配置到windows环境变量中   2.3 安装其他工具( 默认全部安装 ): 3. 安装CMake工具   3.1 将CMake加入环境变量 4. 下载x264,x265   4.1 x264源码下载:

    2024年02月11日
    浏览(40)
  • The requested image‘s platform (linux/arm64/v8) does not match the detected host platform (linux/amd

    这一段完整的报错是: The requested image’s platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) and no specific platform was requested 翻译过来就是说:请求的映像的平台(linux/arm64/v8)与检测到的主机平台(linux/amd64)不匹配,未请求特定平台。 背景: 这段报错是发生在内

    2024年02月01日
    浏览(36)
  • abpvnext框架的项目部署到linux arm64版的docker中

    参考: windows10下安装的docker 导出镜像到另一个电脑_docker镜像拷贝另一台机器的镜像-CSDN博客 前提条件: 1、vs2022,我的电脑本机安装有windows版docker desktop 。 2、linux中已经安装好docker,安装了sftp。这部分可以自行去查资料安装。 3、项目里有dockerfile支持文件。我的支持文件

    2024年02月03日
    浏览(20)
  • aarch64 arm64 部署 stable diffusion webui 笔记 【1】准备 venv 安装pytorch 验证cuda

    aarch64 pytorch(没有aarch64对应版本,自行编译) pytorch-v2.0.1 cuda arm64 aarch64 torch 2.0.1+cu118 源码编译笔记【2】验证cuda安装 成功_hkNaruto的博客-CSDN博客 [root@ceph3 stable-diffusion-webui]# /usr/local/Python-3.10.12/bin/python3 -m venv venv [root@ceph3 stable-diffusion-webui]# source venv/bin/activate (venv)[root@ceph3 stab

    2024年02月07日
    浏览(30)
  • TI AM64x工业核心板硬件说明书(双核ARM Cortex-A53 + 单/四核Cortex-R5F + 单核Cortex-M4F,主频1GHz)

    创龙科技SOM-TL64x是一款基于TI Sitara系列AM64x双核ARM Cortex-A53 + 单/四核Cortex-R5F + 单核Cortex-M4F设计的多核工业级核心板,通过工业级B2B连接器引出5x TSN Ethernet、9x UART、2x CAN-FD、GPMC、PCIe/USB 3.1等接口。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环

    2024年02月11日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包