当前位置: 首页 > news >正文

【树莓派4B】MindSpore lite 部署demo

一个demo,mindspore lite 部署在树莓派4B ubuntu22.04中,为后续操作开个门!
在这里插入图片描述

环境

  • 开发环境:wsl-ubuntu22.04分发版
  • 部署环境:树莓派4B,操作系统为ubuntu22.04
  • mindspore lite版本:mindspore-lite-2.4.1-linux-aarch64.tar.gz
  • demo模型:mnist手写数字识别

步骤

1. 准备交叉编译环境

  • 安装交叉编译器
sudo apt install gcc-aarch64-linux-gnu
# 验证是否安装成功
(base) joke@ShineZhang:~/mindspore_deploy_demo_aarch64$ aarch64-linux-gnu-gcc --version
aarch64-linux-gnu-gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  • 设置交叉编译环境
# file: toolchain.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)

2. 下载demo并交叉编译

  • 下载
# 有用的话给个star呗
git clone https://gitee.com/Shine_Zhang/mindspore_aarch64_runtime_demo.git
  • 文件结构说明:
.
├── CMakeLists.txt 
├── README.md
├── build.sh # 执行编译
├── main.c
├── model
│   └── mnist.ms # mnist模型文件
└── toolchain.cmake # 编译工具链
  • 模型文件转换:
    MindSpore Lite端侧模型转换

执行交叉编译:

chomd +x build.sh
./build.sh

3. 部署环境配置

  • 准备环境
    编译后目录如下:
.
├── CMakeLists.txt
├── README.md
├── bin
│   └── mindspore_mnist_demo # es
├── build
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   ├── Makefile
│   ├── bin
│   ├── cmake_install.cmake
│   ├── mindspore-lite-2.4.1-linux-aarch64
│   ├── mindspore-lite-2.4.1-linux-aarch64.tar.gz
│   ├── mindspore_mnist_demo
│   └── mindspore_quick_start_c
├── build.sh
├── include
│   ├── api
│   ├── c_api
│   ├── dataset
│   ├── ir
│   ├── kernel_interface.h
│   ├── mindapi
│   ├── registry
│   ├── schema
│   └── third_party
├── lib
│   ├── libmindspore-lite.so # es
│   ├── libmindspore_glog.so -> /home/mindspore_deploy_demo_aarch64/lib/libmindspore_glog.so.0
│   └── libmindspore_glog.so.0 # es
├── main.c
├── model
│   └── mnist.ms # es
└── toolchain.cmake

将目录中标记es的文件拷贝至要部署的树莓派4B中

  • 配置运行环境

libmindspore-lite.solibmindspore_glog.so.0拷贝至/usr/local/lib


# 编辑~/.bashrc 增加环境变量
vim ~/.bashrc# ~/.bashrc 末尾增加以下内容后保存:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH# 重新加载当前用户的 ~/.bashrc 配置文件
source ~/.bashrc# 检验动态库是否加载成功
joke in ~ λ ldd mindspore_mnist_demolinux-vdso.so.1 (0x0000ffffb580b000)libmindspore-lite.so => /usr/local/lib/libmindspore-lite.so (0x0000ffffb5040000)libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffffb4e90000)/lib/ld-linux-aarch64.so.1 (0x0000ffffb57d2000)libmindspore_glog.so.0 => /usr/local/lib/libmindspore_glog.so.0 (0x0000ffffb4e30000)libdl.so.2 => /lib/aarch64-linux-gnu/libdl.so.2 (0x0000ffffb4e10000)libstdc++.so.6 => /lib/aarch64-linux-gnu/libstdc++.so.6 (0x0000ffffb4be0000)libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000ffffb4b40000)libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000ffffb4b10000)libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000ffffb4af0000)

4. 执行demo

joke in ~ λ ./mindspore_mnist_demo mnist.ms           
----------------------------------------------------------
Model Inputs (1):Input 0:Name: serving_default_keras_tensor:0Shape: [1, 28, 28]Data Type: 43Data Size: 3136 bytesModel Outputs (1):Output 0:Name: StatefulPartitionedCall_1:0Shape: [-1]Data Type: 43Data Size: 0 bytesEstimated Model Size: 3136 bytes
----------------------------------------------------------
inputs: Tensor 1:
Tensor shape: [1, 28, 28]
outputs: Tensor 1:
Tensor shape: [1, 10]
outputs[1]: -5.782
outputs[2]: 0.069
outputs[3]: 1.802
outputs[4]: -12.207
outputs[5]: -7.331
outputs[6]: -18.879
outputs[7]: 6.847
outputs[8]: -5.083
outputs[9]: -4.575
Predicted digit: 7 # 预测结果为数字 7
http://www.lryc.cn/news/504162.html

相关文章:

  • Idea汉化插件Datagrip汉化插件
  • 精彩回顾|Cocos开发者沙龙长沙站
  • 算法日记 49 day 图论(A*算法)
  • 服务器批量清理redis keys,无法适用客户端必须直连的情况
  • Grafana配置告警规则推送企微机器人服务器资源告警
  • 数字货币金融研究,深度学习虚拟币价格预测 数据集 市值top20 (2014年—2024年)
  • druid.properties图标是齿轮
  • 【图像处理】利用numpy、opencv、python实现车牌检测
  • ModuleNotFoundError: No module named ‘torchvision.transforms.functional_tensor‘
  • Android无障碍服务监听实现自动点击按钮
  • Deveco Studio首次编译项目初始化失败
  • Redis缓存应用场景【Redis场景上篇】
  • 线程与进程基础
  • electron 打包 webview 嵌入需要调用电脑摄像头拍摄失败问题
  • OpenCV的简单练习
  • JAVA:建造者模式(Builder Pattern)的技术指南
  • 12.11函数 结构体 多文件编译
  • Debezium系列之:使用Debezium采集oceanbase数据库
  • VMware虚拟机 Ubuntu没有共享文件夹的问题
  • spring使用rabbitmq当rabbitmq集群节点挂掉 spring rabbitmq怎么保证高可用
  • 简单vue3前端打包部署到服务器,动态配置http请求头后端ip方法教程
  • C语言关于溢出和不溢出的判断
  • 活动预告 |【Part1】Microsoft Azure 在线技术公开课:使用 Microsoft Fabric 实现数据湖仓
  • Unreal的Audio::IAudioCaptureStream在Android中录制数据异常
  • 6、AI测试辅助-测试报告编写(生成Bug分析柱状图)
  • 【第五节】docker应用系列篇: 使用Docker容器实现ElasticSearch+Kibana部署
  • openwrt 通过DHCP/DNS(Dnsmasq)屏蔽指定域名(hosts)
  • opencv——识别图片颜色并绘制轮廓
  • docker简单私有仓库的创建
  • etcd常见运维事件