你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

实战经验 | 1小时在STM32MPU上运行YOLOv8——训练篇

[复制链接]
STMCU小助手 发布时间:2025-7-31 08:35

1

前言

对于计算能力较差或计算资源有限的嵌入式平台,通用AI应用的开发通常分为训练端和推理端两个阶段。训练端是指模型的训练过程,这个过程通常在计算能力较强的服务器或云端进行;推理端是指使用训练好的模型进行预测或分类的过程,这个过程通常在嵌入式设备上进行。训练端和推理端在嵌入式平台上各自承担不同的任务,前者侧重于模型的训练和优化,后者侧重于模型的实际应用和实时推理。

本文将以YOLOv8的目标检测应用开发为例,讲述如何在1小时以内快速上手AI应用的开发——训练。

2

YOLOv8训练端

训练端的主要任务包括:数据收集和预处理,即收集大量的训练数据,对数据进行标注等操作;模型训练,我们将利用训练数据对YOLOv8模型进行训练,通过不断地调整模型参数,使其能够准确地预测或分类;模型验证和调优,使用验证数据集对模型进行评估和调优,确保模型的性能达到预期;模型的保存和导出,即将训练好的模型保存为文件,以便在推理端使用。本章的训练端任务将在Ubuntu 22.04系统的PC上进行。

2.1. 环境搭建

YOLO(You Only Look Once)是一种广泛应用于实时目标检测的深度学习模型。Ultralytics公司在YOLO模型的发展和推广中扮演了重要角色,推出了YOLOv8。

YOLOv8在网络架构、损失函数、数据增强和训练策略等方面进行了多项改进,使其在各种复杂场景下的检测性能更加出色。目前已可以根据Ultralytics的文档迅速搭建YOLO的训练开发环境,本章内容主要参考:Quickstart - Ultralytics YOLO Docs

2.1.1. 虚拟环境

虚拟环境是一种工具,用于在同一台计算机上隔离不同的项目的依赖包和环境。不同项目可能需要不同版本的库和依赖包。虚拟环境可以确保每个项目使用其特定版本的依赖,而不会相互冲突。此处我们推荐使用Anaconda。

点击此链接进入Anaconda官方下载地址,并下载Anaconda Linux版本: Download Now | Anaconda image.png

▲ 图1. Anaconda下载

PC $ > ./Anaconda3-xxxx.xx-x-Linux-x86_64.sh

阅读并接受License,指定下载路径,即可完成Anaconda安装。

PC $ > conda create -n <name> python=<version>

<name>请用自定义的虚拟环境名称代替,<version>请用需要使用的python版本代替,示例:

PC $ > conda create -n yolov8-py310-stm32mpu python=3.10

激活虚拟环境,将当前工作环境切换到新建的虚拟环境下:

PC $ > conda activate <name>

<name>请用自定义的虚拟环境名称代替,示例:

PC $ > conda activate yolov8-py310-stm32mpu

成功切换路径后,在Ubuntu终端指令行前会出现虚拟环境的名称,例如(yolov8-py310-stm32mpu),看到虚拟环境名称即为切换成功。

2.1.2. Ultralytics库

可根据需要选择pip安装或Conda安装,亦可根据PC硬件资源选择CPU/GPU版本安装,此处以Conda安装GPU版本Ultralytics库为例:

# Install all packages together using conda PC $ > conda install -c pytorch -c nvidia -c conda-forge pytorch torchvision pytorch-cuda=11.8 ultralytics

2.1.3. TensorFlow库和ONNXRUNTIME库

TFLite(TensorFlow Lite)是一种神经网络模型格式,是TensorFlow的轻量级版本,专为移动和嵌入式设备上的机器学习推理而设计。TFLite支持多种量化技术,如权重量化、激活量化和混合量化,以减少模型大小和提高推理效率。TFLite模型经过优化,适合在移动和嵌入式设备上高效运行。除了TFLite模型格式以外,部署阶段也可以选择使用标准的神经网络模型交换格式ONNX(Open Neural Network Exchange)。

由于部署阶段需要将训练好的权重文件构建为开放的标准的神经网络模型交换格式,且Ultralytics已提供TFLite模型和ONNX模型的export接口,故此处我们可一并安装相关的库。

由于源限制或其他原因,有时无法确定某一个库是否能通过pip或conda成功安装。因此,可以尝试同时使用这两种包管理工具来安装所需的库。

PC $ > conda/pip install tensorflow onnx2tf tf_keras onnx sng4onnx onnx_graphsurgeon onnxslim tflite_support onnxruntime

注:开发过程中遇到找不到相关库的报错信息时,都可以尝试通过conda或pip进行安装。

2.2. 模型训练

为了方便起见,此处直接使用COCO128数据集,Ultralytics提供的生态里,可以直接通过训练指令自动下载开源数据集。当然此处可根据实际需要自己制作数据集并将训练数据更改为自己的数据集,满足YOLOv8对数据集格式的要求即可。

PC $ > yolo detect train data=<dataset> model=<pretrained model name>epochs=<N> imgsz=640 device=0

在这条指令中:yolo是调用YOLO命令行的工具;detect是YOLO的子命令,表示进行目标检测任务;train也是一个子命令,表示进行模型训练;data用来指定训练数据集的配置文件,其中包含数据集的路径和标签类别信息;model用来指定预训练模型的路径或名称;epochs指定训练的次数;imgsz用来指定图片的分辨率;device是GPU训练专有的参数,用来指定训练所使用的设备,device=0表示使用第一个GPU进行训练,device=0,1,2,3表示使用第4(多)个GPU进行训练。例:

PC $ > yolo detect train data=coco128.yaml model=yolov8n.pt epochs=200 imgsz=640 device=0

image.png

▲ 图2. 训练过程 image.png image.png image.png

2.3. 训练结果

训练完毕后,训练结果将保存在当前路径下的runs/detect/train2文件中(此路径将根据用户执行训练指令的次数自动生成,生成路径会根据指令执行次数有所区别)。 image.png

▲ 图3. 训练结果

模型训练完毕得到的文件和图像提供了丰富的信息,帮助我们评估和理解YOLOv8模型的训练过程和性能。这些输出可以帮助我们监控训练进展,调整超参数,并最终选择性能最好的模型进行部署。其中,我们重点需要关注图像和曲线信息。 image.png

▲ 图4. 训练集/验证集检测效果

  • train_batch0.jpg,train_batch1.jpg,train_batch2.jpg,...:这些文件展示了模型在训练集上的检测效果。每个文件包含一个训练批次(batch)中的若干张图像,并显示了模型对这些图像的目标检测结果。通过查看模型在训练集上的检测效果,可以验证模型是否正确地学习到了标注信息。如果模型在训练集上表现良好,说明模型能够正确识别和定位训练数据中的目标。如果模型在某些样本上表现异常,可能是因为这些样本的标注有误或者不一致。通过这些可视化结果,你可以发现并修正这些问题。 image.png

▲ 图5. train_batch0 示例

  • val_batch0_labels.jpg,val_batch1_labels.jpg,val_batch2_labels.jpg,...:这些文件展示了验证集上的真实标签(ground truth)。每个文件包含一个验证批次中的若干张图像,并显示了这些图像的真实标注信息。这些文件用于对比模型的预测结果,评估模型的准确性。
  • val_batch0_pred.jpg,val_batch1_pred.jpg,val_batch2_pred.jpg,...:这些文件展示了模型在验证集上的预测结果。每个文件包含一个验证批次中的若干张图像,并显示了模型对这些图像的目标检测结果。通过这些文件,我们可以直观地看到模型在验证集上的表现,并与真实标签进行对比。如果模型在训练集上表现非常好,但在验证集上表现不佳,这可能是过拟合的迹象。通过查看在不同数据集上的检测效果,可以帮助我们识别这种情况,并采取措施(如正则化、数据增强等)来减轻过拟合。

注:在深度学**,批次(batch)是指在一次前向传播和反向传播中使用的一组样本。批次的划分是为了提高训练效率和稳定性。较小的批次大小可以更频繁地更新模型参数,但计算效率较低;较大的批次大小可以提高计算效率,但需要更多的内存。Ultralytics提供的YOLO中batch-size默认设置为16,可根据自己实际需求修改。

image.png

▲ 图6. 混淆矩阵

confusion_matrix.png是一个未归一化的混淆矩阵图像文件,未归一化的混淆矩阵显示了模型在不同类别上的预测数量,每个单元格的值表示该类别的预测数量,可以用于评估模型在各类别上的绝对表现。

  • 行:行表示真实标签,即数据集中的实际类。
  • 列:列表示预测标签,即模型预测的类别。
  • 对角线元素:对角线上的元素表示模型正确分类的数量,即真实标签与预测标签一致的样本数量。
  • 非对角线元素:非对角线上的元素表示模型错误分类的数量。
  • 颜色强度:颜色的强度表示数量的多少。颜色越深,表示该单元格的数量越多。例如,person类别的对角线单元格颜色较深,表示模型对person类别的正确分类数量较多。

通过分析混淆矩阵,我们可以了解模型在哪些类别上表现良好,哪些类别上存在误分类,从而进行相应的调整和改进。

confusion_matrix_normalized.png是一个归一化的混淆矩阵图像文件,归一后的混淆矩阵可以更直观地展示各类别之间的混淆程度,每个单元格的值表示该类别的预测数量占该类别总数的比例。 image.png

▲ 图7. 其他曲线

  • P_curve.png:精度曲线展示了模型在不同阈值下的精度变化情况,有助于评估模型的预测准确性。精度通常随着阈值的增加而增加,因为更高的阈值意味着模型更严格地判断正类,但这也可能导致召回率下降。理想情况下,精度曲线应该平滑上升。
  • R_curve.png:召回率曲线展示了模型在不同阈值下的召回率变化情况,有助于评估模型的检测能力。召回率通常随着阈值的增加而下降,因为更高的阈值意味着模型更严格地判断正类,导致漏掉更多的正类样本。理想情况下,召回率曲线应该平滑下降。
  • PR_curve.png:PR曲线展示了模型在不同阈值下的精度和召回率之间的权衡关系,有助于选择最佳阈值。理想情况下,PR曲线应该尽可能靠近右上角,这意味着在高召回率的同时保持高精度。曲线下方的面积(AUC-PR)越大越好。
  • F1_curve.png:F1分数是精度和召回率的调和平均数,F1曲线展示了模型在不同阈值下的F1分数变化情况,有助于选择最佳阈值。F1分数越高越好,理想情况下,曲线应该在某个阈值处达到峰值,这个峰值对应的阈值就是最佳阈值。图中标注的点(例如,0.512)表示在该置信度阈值下,模型的平均F1分数达到了最高值(例如,0.88),可以选择这个置信度阈值作为模型的预测阈值,以优化模型的综合性能。

注:精度是指模型预测为正类的样本中,实际为正类的比例;召回率是指实际为正类的样本中,被模型正确预测为正类的比例。灰色线代表每一个类别对应值的变化情况,粗线代表所有类别的平均/整体表现情况。

abels.jpg是标签分布图像文件,是标签分布图像文件;labels_correlogram.jpg是标签相关图像文件,展示了不同类别标签之间的相关性,可以帮助理解数据集中的类别分布和共现关系。

Weights文件夹是本次模型训练中保存的模型的权重文件,供训练结束后进行评估和推理,best.pt文件保存了在训练过程中表现最好的模型权重,每当模型在验证集上的性能(通常是基于某个指标,如F1分数、精度、召回率或损失)达到新的最佳值时,当前的模型权重会被保存到best.pt文件中。

2.4. 模型导出

Ultralytics提供的生态里,可以直接通过导出指令导出模型,包括但不限于ONNX模型和TFlite模型。在ST提供的AI生态中,ONNX和TFlite两种模型格式都可以直接支持,我们可选用二者之一作为后续部署流程中模型转换的输入,在此我们以TFlite模型导出为例。 image.png

▲ 图8. 面向STM32MP25X的AI模型部署流程

PC $ > yolo export model=<path to weights .pt>/<name>.ptformat=<format>

可根据开发的实际路径修改权重文件路径、权重文件名称以及想得到的模型格式。例:

PC $ > yolo export model=weights/best.pt format=tflite

image.png

▲ 图9. 模型导出

从图中可知模型已成功导出且被保存在对应文件中:TensorFlow Lite: export success ✅ 0.0s, saved as 'weights / best_saved_model / best_float32.tflite'(12.3 MB)。需要注意保存路径,在后续的模型部署的操作中,此模型将作为部署操作的起点。

3

小结

本文以YOLOv8为例,介绍了将模型部署在STM32MPU上的前期准备——模型获取,即训练端的操作。如果客户有图像相关的应用,包括检测分割以及姿态估计,均可参照此文档,尝试使用YOLO模型进行AI应用的开发。

收藏 评论0 发布时间:2025-7-31 08:35

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版