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

OrangePi AIpro小试牛刀-目标检测(YoloV5s)

非常高兴参加本次香橙派AI Pro,香橙派联合华为昇腾打造的一款AI推理开发板评测活动,以前使用树莓派Raspberry Pi4B 8G版本,这次有幸使用国产嵌入式开发板。

一窥芳容

img

img

这款开发板搭载的芯片是和华为昇腾的Atlas 200I DK A2同款的处理器,功耗低至8W

默认AI CPU和Control CPU 比例1:3,

芯片名称

310B1:表示芯片算力规格为20T。
310B4:表示芯片算力规格为8T

orangepi AI pro之后会推出20TOPS AI算力版本开发板

ubuntu系统构建

本次测评基于ubuntu系统烧写,linux镜像脚本编译,usb摄像头yolov5目标检测编写文章。

基于PC主机烧写Ubuntu22.04

烧写步骤
  1. 准备TF读卡器,32G或者更大的TF卡,Ubuntu官方镜像

  2. 镜像下载地址,选择ubuntu镜像

  3. 使用官方工具中的balenaEtcher烧写工具,使用portable版

选择32的磁盘

img

烧写速度15M/s,烧写完成之后会进行30min的校验。也可取消校验

  1. 插卡,启动开发板
登录方式

使用串口登录

软件MobaXterm,新建Session,选择Serial,CH340USB驱动,波特率115200

img

使用账户:HwHiAiUser ,密码:Mind@123

Linux镜像编译脚本的使用

前言

目前linux镜像编译脚本只在Ubuntu22.04的x64电脑上测试过,请保证自己ubuntu版本为22.04.

本次使用VMware Workstation 的ubuntu22.04虚拟机镜像编译脚本,虚拟机镜像磁盘最小为50G,软件源替换为清华源

镜像编译脚本压缩包

1.在下载页面选择Linux源码

img

2.然后下载image.build.tar.gz压缩包,使用filezilla传到ubuntu22.04 目录/opt下

3.解压

tar -zxf image-builder.tar.gz

4.进入src目录下会有3种镜像,必须先制作minimal镜像

模块名称**模块目录功能简介
最小镜像src/minimal可以在开发板上启动但缺少部分依赖的镜像
完整镜像src/complete完整依赖镜像
压缩扩容镜像src/compress带有压缩扩容功能的完整依赖镜像
制作最小镜像

1.将ubuntu language设置为English(UK)

2.tf读卡器插入电脑,usb口,vmware会弹出窗口将硬盘接入虚拟机

img

3.切换root用户,安装依赖包

su -i
apt-get install -y qemu-system qemu-user qemu-user-static binfmt-support

4.然后将emmc-head文件依赖的库文件拷贝到ubuntu22.04的/usr/lib64,库文件在==linux源码====library文件夹==

img

使用filezilla上传

img

5.运行emmc-head命令,输出以下内容,表示lib安装成功

img

6.进入sr/minimal,ubuntu预装进开发板的软件包deb可以放在

ubuntu/22.04/download

7.使用fdish -l查看硬盘挂载情况

找到32G tf卡所在挂载路径

img

8.执行以下命令,开始制作最小镜像

bash base.sh ubuntu/22.04/ /dev/sdb ubuntu/22.04/download/

img

9.最终输出,制作成功

Minimal image build successful!

查看磁盘分区,被划分成5个分区

img

TF插入主板,会重启一次,重启之后可以使用串口登录

YoloV5s目标检测

前言

使用usb摄像头,加orangepi AI pro开发板。

执行准备

确定具有桌面的镜像,使用HDMI0连接显示器、

HwHiAiUser用户登录开发板

切换到root用户

cd /opt/opi_testcd ResnetPicture/scriptsbash sample_run.sh

如果你是orangepi aipro ubuntu 22.04镜像 -> 安装ACClite

2.安装依赖

Sapt-get install ffmpeg libavcodec-dev libswscale-dev libavdevice-dev

检查ffmepg是否安装成功

dpkg -S ffmpeg

3.安装步骤:

# 拉取ACLLite仓库,并进入目录
git clone https://gitee.com/ascend/ACLLite.git
cd ACLLite# 设置环境变量,其中DDK_PATH中/usr/local请替换为实际CANN包的安装路径
export DDK_PATH=/usr/local/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub# 安装,编译过程中会将库文件安装到/lib目录下,所以会有sudo命令,需要输入密码
bash build_so.sh
样例下载

==切换用户到HwHiAiUser==

下载源码,从gitee上clone

git clone https://gitee.com/ascend/EdgeAndRobotics.git

切换到样例目录

cd EdgeAndRobotics/Samples/YOLO5USBCamera
cd model
运行样例

1.使用usb摄像头,直接从外设使用opencv读取图片帧处理

2.获取PyTorch框架的Yolov5模型(*.onnx),并转换为昇腾AI处理器能识别的模型(*.om)

  • 当设备内存小于8G时,可设置如下两个环境变量减少atc模型转换过程中使用的进程数,减小内存占用。

    export TE_PARALLEL_COMPILER=1
    export MAX_COMPILE_CORE_NUMBER=1
    
  • 原始模型下载及模型转换命令

    cd ../model
    wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/yolov5s.onnx --no-check-certificate
    wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/aipp.cfg --no-check-certificate
    atc --model=yolov5s.onnx --framework=5 --output=yolov5s --input_shape="images:1,3,640,640"  --soc_version=Ascend310B4  --insert_op_conf=aipp.cfg
    
    • atc命令中各参数的解释如下,详细约束说明请参见《ATC模型转换指南》
      • --model:Yolov5网络的模型文件的路径。
      • --framework:原始框架类型。5表示ONNX。
      • --output:yolov5s.om模型文件的路径。请注意,记录保存该om模型文件的路径,后续开发应用时需要使用。
      • --input_shape:模型输入数据的shape。
      • --soc_version:昇腾AI处理器的版本。version = Ascend310B4

3.编译源码

~/EdgeAndRobotics/Samples/YOLOVSUSBCamera/models$ cd ../scripts
ls
sample_run.bash sample_build.sh
编译样例源码
bash sample_build.sh

4.运行样例

在直连电脑场景,执行以下脚本运行样例。此时会以结果打屏的形式呈现推理效果。

bash sample_run.sh stdout

最后终于成功

img

img

总结错误

bash sample_build.sh

  1. 文件无法写入问题

权限,之前转换模型时使用的root

img

img

解决

sudo chown -R HwHiAiUser:HwHiAiUser buildsudo chown -R HwHiAiUser:HwHiAiUser out
  1. ACLLite库没安装错误

sudo bash sample_build.sh
[sudo] password for HwHiAiUser:
[INFO] Sample preparation
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- set default INC_PATH: /usr/local/Ascend/ascend-toolkit/latest
-- set default LIB_PATH: /usr/local/Ascend/ascend-toolkit/latest/runtime/lib64/stub
-- Found OpenCV: /usr (found version "4.5.4")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/HwHiAiUser/EdgeAndRobotics/Samples/YOLOV5USBCamera/build/intermediates/host

img

解决方法在上面 安装ACLLite

  1. 模型加载失败

原因是转换模型时root用户,生成的yolov5s.om模型是root用户

img

img

解决方法:

sudo chown -R HwHiAiUser:HwHiAiUser yolov5s.om

4.** cv::Exception**
我在串口执行sample_run.sh时

terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.5.4) ./modules/highgui/src/window_gtk.cpp:635: error: (-2:Unspecified error) Can't initialize GTK backend in function 'cvInitSystem'

sample_run.sh: line 5: 19325 Aborted (core dumped) ./main $1
[INFO] The program runs failed

将其切换到桌面系统,因为要启动一个输出图像页面

img

其他样例

使用AscendCL显示不同功能

样例功能样例名称
“Hello World” For AscendCLsampleResnetQuickStart以ResNet50网络模型为例进行模型推理,实现对物体进行分类,并给出TOP5类别置信度和相应类别信息
Object Detection with Acllite Acllite目标检测sampleYOLOV7以YOLOV7网络模型为例,使能Acllite对图片进行预处理,并通过模型转换使能静态AIPP功能,使能AIPP功能后,YUV420SP_U8格式图片转化为RGB,然后减均值和归一化操作,并将该信息固化到转换后的离线模型中,对YOLOV7网络执行推理,对图片进行物体检测和分类,并给出标定框和类别置信度。

具体学习可参考-> samples: CANN Samples (gitee.com)

参考资料

[1]深圳市迅龙软件有限公司. (2024). OrangePi AI Pro 昇腾用户手册 V0.3.1[用户手册]. 深圳: 深圳市迅龙软件有限公司.

[2]华为技术有限公司. (2024). EdgeAndRobotics[源代码]. Gitee平台. https://gitee.com/ascend/EdgeAndRobotics

深圳迅龙科技有限公司. (2024). Orange Pi AI Pro产品介绍与技术支持[EB/OL]. 橙派官网, http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-AIpro.html.

相关文章:

  • docker 容器 network host 模式启动
  • 揭开 Docker 容器的神秘面纱:深入理解容器原理
  • vue3+ele-plus+sortableJs对el-table使用sortableJs插件对表格拖拽时限定某列或某行不允许拖拽
  • 八股操作系统和计算机网络
  • van-list 遇到的问题
  • JavaScript 深拷贝和浅拷贝的实现、使用场景和存在的问题
  • 国产MCU芯片(2):东软MCU概览
  • 股指期货功能
  • Noisee AI – AI音乐影片MV在线生成工具,专门为Suno的好搭子来了~
  • 力扣 SQL题目
  • Memcached:内存缓存的强大引擎及其深度解析
  • java.nio.charset.UnmappableCharacterException
  • 16、架构-可观测性-事件日志详细解析
  • javaWeb项目-springboot+vue人事管理系统功能介绍
  • Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported
  • 5、React组件事件详解
  • Angular 响应式表单 基础例子
  • ES6简单总结(搭配简单的讲解和小案例)
  • Javascript基础之Array数组API
  • Terraform入门 - 1. 安装Terraform
  • XForms - 更强大的Form
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 漂亮刷新控件-iOS
  • 前端面试之CSS3新特性
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 转载:[译] 内容加速黑科技趣谈
  • #Linux(Source Insight安装及工程建立)
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (3)llvm ir转换过程
  • (4)Elastix图像配准:3D图像
  • (42)STM32——LCD显示屏实验笔记
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (六)激光线扫描-三维重建
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)程序员技术练级攻略
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .Net Core与存储过程(一)
  • .NET 动态调用WebService + WSE + UsernameToken
  • .net程序集学习心得
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .net下的富文本编辑器FCKeditor的配置方法
  • /dev/sda2 is mounted; will not make a filesystem here!
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • ?.的用法
  • @RequestMapping用法详解
  • @ResponseBody
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • []Telit UC864E 拨号上网