文章目录
🚀🚀🚀前言
近期在做纤维定性定量项目的工程化部署,需要运用嵌入式技术,将我们的深度学习模型还有软件进行部署,通过调研发现深圳市迅龙软件有限公司旗下开源产品品牌Orange Pi非常符合需求,经过多项测试之后选择Orange Pi AIpro作为项目开发板,非常喜欢它的一句标语:“为AI而生”
深圳市迅龙软件有限公司成立于2005年,是全球领先的开源硬件、开源软件及智能产品品牌商,致力于让全世界每个极客、创客、电子爱好者享用来自中国的优质、低价的开源产品及智能产品,拓展无限可能,通过大规模的社会化协作去创建一个更加美好的信息化人类文明。目前迅龙业务遍及美国、英国、意大利、俄罗斯、日本、南非、东南亚等100多个国家和地区。更多详细信息可以参考公司链接网址:http://www.xunlong.tv/html/aboutUs/index.html
一、1️⃣ Orange Pi AIpro开发板相关介绍
香橙派的Orange Pi AIpro是一款专为人工智能(AI)应用开发设计的高性能开发板。它集成了先进的处理器、内存、存储以及丰富的接口,旨在满足AI边缘计算、深度学习、机器视觉、自然语言处理等多个领域的需求。
Orange Pi AIpro官方网址:http://www.orangepi.cn/index.html
1.1 🎓 核心配置
Orange Pi AIpro搭载了高性能的AI处理器,支持高达数十TOPS(每秒万亿次操作)的AI算力,能够高效运行复杂的AI模型和算法,除了AI处理器外,还配备了多核CPU,提供强大的通用计算能力,支持多任务并行处理。配备高容量的LPDDR4X内存和eMMC或SSD存储,确保数据的高速读写和模型的高效加载,提供HDMI、USB、GPIO、SATA/NVMe M.2插槽、TF卡插槽等多种接口,支持多种外设连接和扩展,满足不同场景下的需求,支持双HDMI输出,能够同时驱动两个高清显示屏,适用于需要视觉反馈的应用场景,支持Ubuntu、openEuler等主流操作系统,提供丰富的开发工具和文档,帮助开发者快速上手并进行项目开发,进一步拓宽了应用场景,可以应用到如下场景:
- AI边缘计算:在物联网设备中实现AI算法的本地化处理,减少数据传输延迟和带宽消耗。
- 深度学习与机器视觉:支持图像识别、视频分析、物体检测等任务,适用于安防监控、智能制造等领域。
- 自然语言处理:支持语音识别、语义理解等任务,适用于智能家居、智能客服等领域。
- 智能机器人:为智能小车、机械臂等机器人提供强大的计算能力和AI支持。
- 云计算与大数据:作为云计算节点的一部分,处理大规模数据并运行复杂的AI算法。
我这边收到的板子是8GB内存,8TOPS INT8算力,详细配置表格如下:
CPU | 4核64位处理器+ AI处理器 |
GPU | 集成图形处理器 |
AI算力 | 8-12TOPS算力 |
内存 | LPDDR4X:8GB/16GB(可选),速率:3200Mbps |
存储 | • SPI FLASH:32MB • SATA/NVME SSD(M.2接口2280) • eMMC插槽:32GB/64GB/128GB/256GB(可选),eMMC5.1 HS400 • TF插槽 |
WIFI+蓝牙 | Wi-Fi 5双频2.4G和5G BT4.2/BLE |
以太网收发器 | 10/100/1000Mbps以太网 |
显示 | • 2xHDMI2.0 Type-A TX 4K@60FPS • 1x2 lane MIPI DSI via FPC connector |
摄像头 | 2x2-lane MIPI CSI camera interface,兼容树莓派摄像头 |
USB | • USB 3.0 HOST x2 • USB Type-C 3.0 HOST x1 • Micro USB x1 串口打印功能 |
音频 | 3.5mm耳机孔音频输入/输出 |
按键 | 1x关机键、1xRESET键、2x启动方式拨动键、1x烧录按键 |
40PIN | 40PIN 功能扩展接口,支持以下接口类型: GPIO、UART、I2C、SPI、 I2S、PWM |
风扇 | 风扇接口x1 |
预留接口 | 2PIN电池接口 |
电源 | Type-C PD 20V IN ,标准65W |
支持的操作系统 | Ubuntu、openEuler |
产品尺寸 | 107*68mm |
重量 | 82g |
1.2 ✨开发板接口详情图
从使用文档中的开发板正反面照片也能看出该板子的集成度非常高,主板上集成了多种功能和接口,如处理器(标明为“4核64位处理器+AI处理器”)、内存模块(支持8GB/16GB LPDDR4X)、以及电源管理系统(包括“3.3V PWR”、“5V PWR”、“DDR PWR”、“AI PWR”、“CORE PWR”等多种供电模式),显示了它在处理复杂任务、提供强大性能和灵活配置方面的能力,搭载4核64位处理器,并且额外配备了AI处理器,这样的组合不仅保证了基础计算的高效性,还增加了对AI应用的支持,使得开发板在机器学习、图像处理等AI领域的应用成为可能(后面将进行AI模型部署测评)。而且支持WiFi5+蓝牙4.2,这款开发板在无线连接方面具备较高的标准和良好的兼容性,方便与各种外设和传感器进行无线通信,并且该开发板预留多个扩展接口,也能方便用户根据需要进行功能扩展和硬件升级。
1.3 ⭐️开箱展示
我第一眼看到包装盒给我的感觉是非常小巧可爱的,大概也就巴掌大一点,配备了一个快充充电器,一个开发板,还有一个32g的SD卡,该卡用来烧录镜像使用(注意:没有读卡器,后面烧录需要自己准备TF读卡器);
打开包装盒之后最吸引我的就是散热器,散热片设计具有精致的金属感,不仅美观,而且有助于设备的散热,保证长时间运行的稳定性,总体来说Orange Pi AIpro的做工精细,整体给人一种高品质的感觉,虽然具体材质信息未详细提及,但从外观的质感和散热片的设计可以推测,开发板采用了适合散热和耐用的材质,从整体的布局来看,该板接口布局集中在一侧,便于开发者在日常使用中插拔外设,这种设计提高了使用的便捷性,减少了线缆杂乱的问题。我这边做测试的并没有外壳包装,通过官网可以看到Orange Pi AIpro的专属定制外壳,非常精致并且便于携带。
二、2️⃣配置开发板详细教程
在开始下面工作之前可以先去Orange Pi 官网下载相关文件,找到下载与服务选项
,选择对应的开发板,我用的是Orange Pi AIpro
,下面也都是用该板子做测试与部署。
点进去之后一定要下载官方工具,官方镜像,以及用户手册,一定要认真阅读用户手册!!!,在实际操作中用户手册解决了我很多问题。用户手册一共写了165页,基本上把每一个部件的调试都写上了,非常的详细,而且很有逻辑,即使是新手小白也能照着文档操作。
2.1 🎓 烧录镜像系统
这一步只需要准备Orange Pi AIpro送的32g的SD卡、带有TF卡槽的读卡器、烧录软件balenEther(在官方工具中),这里我在使用balenEther烧录软件的时候一直有问题,最后一步一直提示烧录失败,建议以管理员权限打开,如果还不行可以更换昇腾的Ascend烧录软件,我在使用Ascend烧录软件是一次成功的;
2.2 ✨配置网络
烧录成功后,其实就已经基本上差不多了,但是为了后续能够方便文件上传等操作,我们需要配置网络,进行SSH连接,连接到我们的主机/笔记本电脑上去。
将烧录好的SD卡重新插回开发板中,将开发板用充电器连接电源,再准备一条网线连接到你的主机或者笔记本电脑上面,最后再准备一个显示器或者屏幕,用HDMI线将开发板与显示器连接(为了方便后续操作我这里在USB3.0接口插了一个无线键盘鼠标接收器),稍等一会就能看见系统显示界面了。
然后输入密码进入系统,默认的就是root
和HwHiAiUser
用户,这两个用户的密码都是Mind@123
;
进入系统之后就可以连接无线网了,这里有一点需要注意,你的主机和你的开发板连接的网络必须是同一个局域网,不然后面互联的时候会显示连接超时,一直连接不上。
连接无线网之后就可以鼠标右键在电脑桌面打开终端,输入ifconfig
查看ip地址,我这里IP地址是:192.168.11.93
,子网掩码是255.255.255.0
。
查看开发板的IP地址之后,我们需要修改主机的ip,在以太网连接中找到Internet协议版本4,修改属性,默认的是自动获取ip,我们需要手动修改,将ip地址的前三位与开发板的ip保持一致,最后一位设置为100(或者其他),子网掩码与开发板保持一致,然后保存。
调出windows的命令行窗口,输入ipconfig
查看IP地址是否修改成功,为了保证主机/笔记本与开发板能连通,可以使用ping
命令ping开发板,查看能否发送字节。
2.3 ⭐️使用SSH连接主板
这里我们使用官方提供的工具进行远程连接开发板,在官方工具中我们找到MobaXterm
软件,打开之后选择Session,然后在 Session Setting 中选择 SSH,在 Remote host 中输入开发板的 IP 地址,在 Specify username 中输入 Linux 系统的用户名 root 或 HwHiAiUser。连接之后需要输入登录密码,也就是默认的Mind@123
,当出现如下界面时,就表示连接成功了,就可以对开发板进行命令操作了。
三、3️⃣部署yolov8深度学习纤维分割检测模型
3.1🚀 yolov8模型介绍
3.1.1 概述
YOLOv8是Ultralytics公司最新推出的YOLO系列目标检测算法,它在继承YOLO系列算法优点的基础上,引入了新的功能和改进点,以进一步提升性能和灵活性,YOLO(You Only Look Once)系列模型自2015年推出以来,因其高效的目标检测能力在计算机视觉领域广受欢迎。YOLOv8作为该系列的最新版本,于2023年1月10日由Ultralytics公司开源,进一步优化了检测精度和速度,使其在多个应用场景中表现出色。具体创新包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行。yolov8最大的优点就是将当前最先进的SOTA模型融合在一起,变成最先进的 (SOTA) 模型。在相同的参数量会发现yolov8的模型要优于之前的yolo版本。
YOLOv8 旨在快速、准确且易于使用,使其成为各种对象检测和跟踪、实例分割、图像分类和姿势估计任务的绝佳选择;
3.1.2 核心改进
关于yolov8的核心改进如下:
- 提供了一个全新的 SOTA 模型,包括 P5 640 和 P6 1280 分辨率 的目标检测网络和基于 YOLACT 的实例分割模型。和 YOLOv5 一样,基于缩放系数也提供了
N/S/M/L/X
尺度的不同大小模型,用于满足不同场景需求 - 骨干网络和 Neck 部分可能参考了
YOLOv7 ELAN
设计思想,将 YOLOv5 的 C3 结构换成了梯度流更丰富的 C2f 结构,并对不同尺度模型调整了不同的通道数,属于对模型结构精心微调,不再是无脑一套参数应用所有模型,大幅提升了模型性能。 - Head 部分相比 YOLOv5 改动较大,换成了目前主流的解耦头结构,将分类和检测头分离,同时也从
Anchor-Based
换成了Anchor-Free
。 - Loss 计算方面采用了 TaskAlignedAssigner 正样本分配策略,并引入了
Distribution Focal Loss
。 - 训练的数据增强部分引入了 YOLOX 中的最后 10 epoch 关闭 Mosiac 增强的操作,可以有效地提升精度。
官方给的yolov8图比较详细,整体架构由三部分组成,分别是backbone主干特征提取网络(CSPDarknet)、Neck特征融合网络(PANet)、head解耦检测头;
-
骨干部分:YOLOv8引入了一个新的骨干网络,可能参考了YOLOv7 ELAN设计思想,将YOLOv5的C3结构换成了梯度流更丰富的C2f结构,并对不同尺度模型调整了不同的通道数。这种改进提高了模型的特征提取能力,增强了模型对复杂场景的处理能力。采用了CSPNet(Cross Stage Partial Network)技术,有效减少了计算成本,同时提升了模型的特征表达能力。
-
检测头:YOLOv8的Head部分相比YOLOv5发生了较大变化,从原先的耦合头变成了解耦头,并且从Anchor-Based转变为Anchor-Free。这种变化简化了检测流程,提高了检测精度。
-
损失函数:YOLOv8在Loss计算方面采用了TaskAlignedAssigner正样本分配策略,并引入了Distribution Focal Loss。这些改进有助于更准确地评估模型性能,促进模型收敛。
3.2 🎓 创建虚拟环境并安装相关库
我们烧录的系统是自带的有anaconda环境的,首先,我们可以查看python版本,默认的是3.9.2,我比较习惯用3.11的版本做项目,为了不影响基础配置环境,我重新创建了一个python=3.11的yolov8虚拟环境,创建命令如下:
conda create -n yolov8 python=3.11
创建好虚拟环境之后,使用conda activate yolov8
命令激活虚拟环境,这里可以看到虚拟环境当中的python版本是3.11.9的;
接下来就需要安装yolov8运行所需要的相关库了,官方给的安装库只需要安装ultralytics
,使用命令pip install ultralytics
;这个是官方给的命令,但是我在实际使用过程中发现只按照这个库代码是无法运行的,会继续提示你按照其他库,所以还需要使用如下命令:pip install timm==0.9.8 thop efficientnet_pytorch==0.7.1 einops grad-cam==1.4.8 dill==0.3.6 albumentations==1.3.1 pytorch_wavelets==1.3.0
,一次性将所有依赖库都安装完毕;
3.3 ✨下载yolov8源码
从https://github.com/ultralytics/ultralytics下载官方源码之后,通过MobaXterm软件ssh连接,将源码拷贝到主板系统当中,可以拖拽直接拷贝到主板系统的downloads文件夹下面,建议将yolov8n.pt也给下载下来,后面半精度训练的时候需要用到yolov8n.pt权重。
3.4 ⭐️train与detect代码撰写
yolov8的yolov5在使用的时候不太一样,yolov8主要靠命令行去执行训练与检测命令,为了方便设置参数和操作,我参考v5的模式将yolov8的train与detect的代码写出来了。
3.4.1 train.py代码
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
if __name__ == '__main__':
model = YOLO('ultralytics/cfg/models/v8/yolov8-seg.yaml')
model.load('weights/yolov8n-seg.pt') # loading pretrain weights
model.train(data='ultralytics/cfg/dataset/fiber-seg.yaml',
# cache=False, # 设置为True会占用很多内存 如何设置为True无法进行重复性实验
imgsz=640,
epochs=300,
batch=4,
close_mosaic=10,
workers=2,
device='0',
optimizer='SGD', # using SGD
# lr0=0.001,
# resume='runs/train/exp7/weights/last.pt', # last.pt path
# amp=False, # close amp
# fraction=0.2,
project='runs/train',
name='exp',
patience=0,
)
3.4.2 detect.py
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
if __name__ == '__main__':
model = YOLO('weights/best.pt') # select your model.pt path
model.predict(source='images/fiber/1.jpg', #source设置为0表示调用摄像头
imgsz=640,
project='runs/detect',
name='exp',
save=True,
line_width=5,
show_conf=False,
# conf=0.2,
# visualize=True # 生成模型特征图
)
3.5 🎯纤维分割模型训练
将train.py代码写好之后,直接在终端运行python train.py
就能进行模型训练,参数设置的batch_size=4
,线程worker=2
,一共训练300epoch
,我这边准备的是项目需要的纤维分割数据集,训练速度虽然比不上我自己主机的4090显卡,但是要比一般的笔记本电脑快很多。而且训练之后的结果效果和我在4090上的结果基本上保持一致,分割与检测的map和精确度都在99%左右。
3.6 🔥纤维分割模型检测推理
关于图片还有视频的推理用的都是python detect.py
命令,图片推理成功后去到对应的文件夹,可以看到基本上没有识别误差,并且分割效果很好。
关于视频检测:只需要将要检查的文件换成视频文件就能进行推理,这里发现推理的速度挺快的,基本上几秒钟就能给出视频推理结果。
3.7 🎯调用摄像头检测
我这边是接了一个USB3.0的1080p的工业相机摄像头,大概200万像素。只需要将detect.py
中的source
设置为0就能调用摄像头。
需要注意的是yolov8和yolov5检测不太一样,我这边摄像头可以显示检测的结果数据(如下图),但是没有检测界面,期初我以为是摄像头问题,调试了一下摄像头发现可以正常拍摄,后来看了一下yolov8的源代码发现并没有可以显示界面的工具,所以我用OpenCV写了一个视频实时检测界面。
OpenCV实时监测代码:timedetect.py
import cv2
from ultralytics import YOLO
# 加载 YOLOv8 模型
model = YOLO("weights/yolov8n.pt")
# 获取摄像头内容,参数 0 表示使用默认的摄像头
cap = cv2.VideoCapture(0)
while cap.isOpened():
success, frame = cap.read() # 读取摄像头的一帧图像
if success:
model.predict(source=frame, show=True) # 对当前帧进行目标检测并显示结果
# 通过按下 'q' 键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release() # 释放摄像头资源
cv2.destroyAllWindows() # 关闭OpenCV窗口
调用训练好的模型,执行python timedetect.py
就能显示实时检测的结果了。
四、4️⃣相关模型测试
其实安装好开发板系统之后,系统当中是给了一些AI算法测试案例的,例如检测模型SSD、文本识别CNNCTC、图像分类ResNet50、图像曝光算法-HDR、图像分割算法FCN等,这些模型我都测试了一下,除了SSD目标检测算法报了一个错误,其他的都没有任何问题;
4.1 🎓 如何使用官方案例
首先登录 Linux 系统桌面,然后打开终端,使用cd ~
返回上一级目录,然后进入cd samples
文件夹当中。在当前目录下有 8 个文件夹和 1 个 shell 文件,分别对应 8 个 AI 应用样例和Jupyter Lab 启动脚本 start_notebook.sh。
然后执行start_notebook.sh
脚本启动 Jupyter Lab
,在执行该脚本后,终端会出现如下打印信息,在打印信息中会有登录 Jupyter Lab 的网址链接,将链接复制到浏览器打开即可。
4.2 ✨官方案例运行结果
我这里就放一部分运行结果,感兴趣的话可以全部跑一遍。
五、5️⃣开发板使用感受
个人也是使用Orange Pi AIpro开发部署了自己的深度学习项目,下面也将给出客观的评价。
☀️优点
先说优点,Orange Pi AI Pro 搭载的处理器和AI加速器能够高效运行复杂的YOLO模型,同时保持相对较低的功耗,这对于需要长时间运行的边缘设备尤为重要,它也支持多种编程语言(如Python、C++)和深度学习框架(如TensorFlow, PyTorch, Darknet等),便于开发者快速上手,并且官方提供的操作系统非常好用,我在安装各种依赖包的时候速度非常快,而且相较于windows操作系统,没有那么多的报错,基本上配置环境都是一步过!!!并且提供了多个USB接口、HDMI接口等,方便连接各种外设和传感器,满足多样化的应用场景需求,此外,还支持通过TF卡扩展存储空间,满足大数据量存储的需求。同时开发文档和官方工具给的非常全面,虽然在烧录过程中出了一点小插曲;在实际项目使用的过程中,检测的速度很快,并且系统很刘畅,而且相关配置也没有那么复杂,给我的整体感受是非常好的!!!
⚡️缺点
官方文档和针对特定模型(如YOLO、transformers)的详细部署教程可能不够详尽,初学者可能会遇到一些障碍,在一些极端使用场景下(如高温、高湿环境),硬件的稳定性可能会受到影响,需要额外的散热措施和防护措施,我在训练模型的时候明显感觉到温度上升的比较快,
总体来说,Orange Pi AI Pro 是一款性价比较高的边缘计算开发板,适合用于部署YOLO等实时目标检测模型,尽管存在一些缺点和挑战,但通过不断的学习和实践,我相信可以充分发挥其优势,为各种应用场景提供强大的支持。