• 正文
  • 相关推荐
申请入驻 产业图谱

有意思!512MB的树莓派CM0上,也能部署YOLO26?

10小时前
320
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

特别感谢文章作者:无垠的广袤 / 李金磊,辛苦制作的教程,非常适合新人及树莓派爱好者学习使用!

项目介绍

准备工作:OpenCV 安装、Ultralytics 软件包安装、预训练模型下载等;

YOLO26:目标检测、实例分割、图像分类、姿态估计、旋转框检测等;

为了快速实现图像分类,需完成 OpenCV 部署和 Ultralytics 软件包的安装等操作。

准备工作

包括硬件连接、OpenCV 安装、Ultralytics 库部署、YOLO26 模型下载等。

硬件连接

连接 WiFi 实现无线网络通信;

使用 Type-C 数据线实现设备供电;

OpenCV 安装

OpenCV 是一个开源计算机视觉库,广泛应用于图像处理、视频分析和机器学习等领域。

为了避免影响系统 Python,采用虚拟环境的方案。

创建并激活虚拟环境

python3 -m venv venv     # 创建虚拟环境 venvsource venv/bin/activate # 激活虚拟环境 venv

安装 opencv

pip install opencv-python opencv-contrib-python

验证安装

python3 -c "import cv2,sys,numpy;print('OpenCV:',cv2.__version__,'NumPy:',numpy.__version__)"

输出版本号

详见:https://opencv.org/

Ultralytics 部署

Ultralytics 基于多年在计算机视觉和人工智能领域的基础研究,打造出尖端、先进的 YOLO 模型;具有 速度快、精度高、操作简便 等特点。

在目标检测、跟踪、实例分割、图像分类 和 姿态估计 等任务中表现出色。

安装 ultralytics 软件包(虚拟环境下)

pip install --no-cache-dir --no-deps torch # 省内存pip install ultralytics

验证安装

python3 -c "import ultralytics, sys, torch; print('ultralytics', ultralytics.__version__, '| torch', torch.__version__, '| Python', sys.version.split()[0])"

输出相应版本号

详见:https://github.com/ultralytics/ultralytics

YOLO26

Ultralytics YOLO26 是 YOLO 系列实时对象检测器的最新演进,从头开始专为边缘和低功耗设备而设计。它引入了简化的设计,消除了不必要的复杂性,同时集成了有针对性的创新,以实现更快、更轻、更易于访问的部署。

YOLO26 的架构遵循三个核心原则:

简洁性: YOLO26是 端到端 模型,直接生成预测结果,无需非极大值抑制(NMS)。通过消除这一后处理步骤,推理变得更快、更轻量。

部署效率: 端到端设计消除了管道的整个阶段,从而大大简化了集成,减少了延迟。

训练创新: YOLO26 引入了 MuSGD 优化器,带来了增强的稳定性和更快的收敛,将语言模型中的优化进展转移到计算机视觉领域。

任务特定优化: YOLO26 针对专业任务引入了有针对性的改进,包括用于 Segmentation 的语义分割损失和多尺度原型模块,用于高精度 姿势估计 的残差对数似然估计 (RLE),以及通过角度损失优化解码以解决 旋转框检测 中的边界问题。

这些创新共同提供了一个模型系列,该模型系列在小对象上实现了更高的精度,提供了无缝部署,并且在 CPU 上的运行速度提高了 43%,使其更适合资源受限环境。

详见:https://docs.ultralytics.com/zh/models/yolo26/

模型获取

下载所需模型文件;

wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26n.ptwget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26n-seg.ptwget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26n-cls.ptwget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26n-pose.ptwget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26n-obb.pt

将文件存放在 ./model 路径。

流程图

目标检测

目标检测是一项涉及识别图像或视频流中目标的位置和类别的任务。

目标检测器的输出是一组边界框,这些边界框包围了图像中的目标,以及每个框的类别标签和置信度分数。

详见:https://docs.ultralytics.com/tasks/detect/

代码

终端执行 touch or.py 新建程序文件,并添加如下代码

import cv2from ultralytics import YOLOmodel = YOLO('./model/yolo26n.pt')      # 加载模型img = cv2.imread('./img/road.jpg')      # 加载图片results = model(img, imgsz=640, conf=0.25)   # 返回 Boxesannotated = results[0].plot()                # 画框和标签cv2.imshow("YOLO Detection", annotated)   # 弹窗显示cv2.waitKey(0)cv2.destroyAllWindows()

保存代码。

效果

终端执行 python or.py 指令,对图片进行物体识别

终端打印识别到的物体、置信度、耗时等信息

弹窗显示识别结果

实例分割

实例分割是识别图像中的各个对象,并将它们与图像的其余部分分割开来。

实例分割模型的输出是一组掩码或轮廓,它们勾勒出图像中每个对象,以及每个对象的类别标签和置信度分数。

详见:https://docs.ultralytics.com/tasks/segment/

代码

终端执行 touch seg.py 新建程序文件,并添加如下代码

import cv2from ultralytics import YOLOmodel = YOLO('./model/yolo26n-seg.pt')     # 分割模型img = cv2.imread('./img/bicycle.jpg')results = model(img, imgsz=640, conf=0.25)   # 推理分割annotated = results[0].plot(boxes=False, labels=False)      # maskcv2.namedWindow("YOLO26-Seg", cv2.WINDOW_NORMAL)cv2.imshow("YOLO26-Seg", annotated)cv2.waitKey(0)cv2.destroyAllWindows()

保存代码。

效果

终端执行 python seg.py 指令,对目标进行图像分割

终端打印识别到的物体、坐标、耗时等信息

弹窗显示图像分割结果

图像分类

图像分类是将整个图像分类到一组预定义的类别中。

图像分类器的输出是单个类别标签和一个置信度分数。

详见:https://docs.ultralytics.com/zh/tasks/classify/

代码

终端执行 touch cls.py 新建程序文件,并添加如下代码

import cv2from ultralytics import YOLOmodel = YOLO('./model/yolo26n-cls.pt')      # 加载模型img = cv2.imread('./img/road.jpg')      # 加载图片results = model(img, imgsz=640, conf=0.25)   # 返回 Boxesannotated = results[0].plot()                # 画框和标签cv2.imshow("YOLO-Classify", annotated)   # 弹窗显示cv2.waitKey(0)cv2.destroyAllWindows()

保存代码。

效果

终端执行 python cls.py 指令,对图片目标进行分类;

终端打印识别到的物体、置信度、耗时、坐标等信息

弹窗显示图像分类结果

姿态估计

姿势估计是一项涉及识别图像中特定点的位置的任务,这些点通常称为关键点。关键点可以代表对象的各个部分,例如关节、地标或其他独特特征。

姿势估计模型的输出是一组点,这些点代表图像中对象上的关键点,通常还包括每个点的置信度分数。

详见:https://docs.ultralytics.com/tasks/pose/

代码

终端执行 touch pos.py 新建程序文件,并添加如下代码

import cv2from ultralytics import YOLOmodel = YOLO('./model/yolo26n-pose.pt')   # 关键点模型img = cv2.imread('./img/dance.jpg')results = model(img, imgsz=640, conf=0.25)   # 返回 Keypoints# annotated = results[0].plot(kpt_radius=4, kpt_line=True)  # 画点+连线annotated = results[0].plot(    boxes=False,      # 无外框    labels=False,     # 无标签    conf=False,       # 无置信度    kpt_radius=4,     # 点大小    kpt_line=True     # 骨架连线)cv2.imshow("YOLO-Pose", annotated)cv2.waitKey(0)cv2.destroyAllWindows()

保存代码。

效果

终端执行 python pos.py 指令,对人体姿态进行关键点标注;

终端打印识别到的人体数量、推理速度、置信度、耗时等信息

弹窗显示姿态估计结果

旋转框检测

定向对象检测通过引入一个额外的角度来更准确地定位图像中的对象,从而比标准对象检测更进一步。

定向目标检测器的输出是一组旋转的边界框,这些边界框精确地包围了图像中的目标,以及每个框的类别标签和置信度分数。

详见:https://docs.ultralytics.com/tasks/obb/

代码

终端执行 touch obb.py 新建程序文件,并添加如下代码

import cv2from ultralytics import YOLOmodel = YOLO('./model/yolo26n-obb.pt')      # 加载模型img = cv2.imread('./img/parking.jpg')      # 加载图片results = model(img, imgsz=640, conf=0.25)   # 返回 Boxesannotated = results[0].plot(labels=False)    # 画框cv2.imshow("YOLO-obb", annotated)   # 弹窗显示cv2.waitKey(0)cv2.destroyAllWindows()

保存代码。

效果

终端执行 python obb.py 指令,对图片进行目标识别和框选;

终端打印识别到的车辆种类、数量、置信度、耗时等信息

弹窗显示旋转框标注结果

总结

本文介绍了工业树莓派 CM0 NANO 单板计算机结合 OpenCV 和 Ultralytics 库实现 YOLO26 板端部署,并实现目标识别、姿态估计、实例分割、图像分类、旋转框检测的项目设计,包括环境部署、模型获取、关键代码、效果演示等,为相关产品在边缘 AI 领域的快速开发和应用设计提供了参考。

 

官方网站:https://edatec.cn/zh/cm0

淘宝店铺:https://edatec.taobao.com/

相关推荐