STM32MPU(如 STM32MP2 系列)搭载 NPU,是边缘 AI 目标检测的理想硬件载体。本文基于 ST 应用笔记,详解在 Ubuntu 22.04 PC 端快速完成 YOLOv8 模型训练的流程,1 小时内即可实现 “环境搭建→数据训练→结果评估→模型导出” 全闭环,为后续 STM32MPU 推理部署提供适配性最优的模型文件。
资料获取:应用笔记 | 一小时在STM32MPU上运行YOLOv8-训练篇
1. 核心逻辑:训练端与推理端的分工适配
嵌入式 AI 开发需明确 “训练端(PC / 云端)+ 推理端(STM32MPU)” 的分工:
- 训练端:利用 PC 的 GPU 算力,完成数据预处理、模型训练与优化,核心目标是生成轻量化、高精度的模型(支持 TFLite/ONNX 格式,适配 STM32MPU 的 NPU 加速)。
- 推理端:将训练好的模型部署到 STM32MPU,通过 NPU 实现实时目标检测,无需重复训练,仅需完成模型格式转换与硬件适配。
- 关键适配点:训练时需控制模型输入分辨率(如 640×640)、选择轻量化预训练模型(如 YOLOv8n),确保导出的模型能在 STM32MPU 的内存与算力范围内高效运行。
2. 快速上手:1 小时训练流程分步拆解
2.1 环境搭建(20 分钟):隔离依赖,快速部署
核心是搭建独立虚拟环境,避免依赖冲突,同时安装 YOLOv8 训练与模型导出所需的全部库。
(1)创建 Anaconda 虚拟环境
- 下载安装:从 Anaconda 官网下载 Linux 版本,执行
./Anaconda3-xxxx-Linux-x86_64.sh完成安装。 - 创建环境:
conda create -n yolov8-py310-stm32mpu python=3.10(Python 3.10 兼容性最优)。 - 激活环境:
conda activate yolov8-py310-stm32mpu,终端显示环境名即激活成功。
(2)安装核心依赖库
- 基础训练库:安装 GPU 版本 Ultralytics(YOLOv8 官方库),
conda install -c pytorch -c nvidia -c conda-forge pytorch torchvision pytorch-cuda=11.8 ultralytics。 - 模型导出库:安装 TFLite 与 ONNX 相关工具,
conda/pip install tensorflow onnx2tf onnx onnxruntime tflite_support,确保支持 STM32MPU 适配的模型格式。
2.2 模型训练(30 分钟):一行命令启动,自动完成数据下载
无需手动准备数据集,通过命令行自动下载 COCO128 开源数据集,快速启动训练。
(1)核心训练命令
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=200 imgsz=640 device=0
(2)关键参数解读
data=coco128.yaml:指定数据集配置文件,包含 80 个类别标签与数据路径,Ultralytics 会自动下载数据集。model=yolov8n.pt:选择 YOLOv8 nano 轻量化预训练模型(310 万参数),适配 STM32MPU 算力,训练速度最快。epochs=200:训练轮次,平衡精度与时间(200 轮约 30 分钟,GPU 加速下效率翻倍)。imgsz=640:输入图像分辨率,640×640 是 STM32MPU NPU 的最优适配尺寸,兼顾精度与速度。device=0:指定 GPU 训练(多 GPU 可设device=0,1),无 GPU 时省略该参数(CPU 训练时间约延长至 2 小时)。
(3)训练过程监控
终端实时输出训练日志,关键关注 3 个指标:
- 损失值(box_loss/cls_loss/dfl_loss):随训练轮次逐渐下降并趋于稳定,表明模型收敛。
- 精度指标(Precision/Recall/mAP50-95):验证集上的平均精度,目标 mAP50-95≥0.7 即可满足嵌入式场景需求。
- 算力占用(GPU mem):YOLOv8n 训练时 GPU 内存占用约 2.5G,普通显卡均可支持。
2.3 训练结果评估(5 分钟):可视化判断模型性能
训练完成后,结果自动保存至runs/detect/train2(路径随训练次数递增),核心关注 4 类关键文件:
(1)可视化检测效果
- 训练集效果:
train_batchx.jpg展示模型在训练样本上的检测结果,可验证是否正确学习到目标标注。 - 验证集效果:
val_batchx_labels.jpg(真实标签)与val_batchx_pred.jpg(模型预测)对比,直观判断是否存在过拟合(训练集表现好、验证集差即为过拟合,可减少 epochs 或增加数据增强)。
(2)性能评估图表
- 混淆矩阵(confusion_matrix.png):展示各类别预测准确性,对角线元素占比越高,分类效果越好。
- 关键曲线:P 曲线(精度)、R 曲线(召回率)、PR 曲线(精度 - 召回率权衡)、F1 曲线(调和平均数),重点关注 F1 曲线峰值(理想值≥0.8),对应最佳置信度阈值。
(3)最优权重文件
weights/best.pt:保存训练过程中验证集性能最优的模型权重,是后续导出的核心文件;last.pt为最后一轮训练权重,不推荐直接使用。
2.4 模型导出(5 分钟):生成 STM32MPU 适配格式
通过 Ultralytics 的导出接口,将best.pt转换为 STM32MPU 支持的 TFLite 格式(或 ONNX 格式),无需额外修改模型结构。
(1)导出命令
yolo export model=weights/best.pt format=tflite
(2)导出结果
成功后生成best_float32.tflite文件(默认保存于weights/best_saved_model/),文件大小约 12MB,支持直接导入 STEdgeAI 工具进行后续的 STM32MPU 适配优化(如量化、算子调整)。
(3)格式选择建议
- 优先 TFLite:STM32CubeAI 工具对 TFLite 支持更完善,量化流程更简便。
- 备选 ONNX:若需更高兼容性,可导出 ONNX 格式(
format=onnx),STEdgeAI 同样支持转换。
3. 关键优化:让模型更适配 STM32MPU
3.1 模型轻量化优化
- 选择更小参数量模型:优先使用 YOLOv8n(nano)或 YOLOv8s(small),避免 YOLOv8l/m/x 等大模型(内存占用超 STM32MPU 上限)。
- 降低输入分辨率:将
imgsz从 640 调整为 480 或 320,模型体积与推理时间可减少 50%,精度仅轻微下降。
3.2 训练参数调优
- 减少 epochs:若追求更快训练速度,可将
epochs从 200 降至 100,训练时间缩短至 15 分钟,精度损失≤5%。 - 自定义数据集:若需适配特定场景(如工业零件检测),可按 YOLO 格式准备自定义数据集,修改
data参数为自定义配置文件(如data=my_dataset.yaml)。
3.3 避免常见问题
- 过拟合:若验证集精度持续下降,可增加
--dropout参数(启用 dropout 正则化),或减少训练轮次。 - 导出失败:确保依赖库版本匹配,若提示缺少某库,直接通过
pip install 库名补充安装。
4. 衔接部署:STM32MPU 推理的下一步
训练完成后,导出的 TFLite/ONNX 模型可通过以下流程部署到 STM32MPU:
- 模型转换:使用 STEdgeAI 工具将模型转换为 STM32MPU NPU 支持的格式,完成量化(如 INT8 量化,减少内存占用)。
- 工程搭建:在 STM32CubeIDE 中创建项目,配置 NPU 与相关外设(如摄像头输入、显示屏输出)。
- 推理测试:将转换后的模型导入工程,调用 STM32MPU 的 NPU 加速接口,实现实时目标检测。
5. YOLOv8 训练核心命令速查表(适配 STM32MPU 部署)
| 命令类别 | 命令格式 | 参数 / 操作说明 | 关键备注 |
|---|---|---|---|
| 一、环境搭建 | |||
| 1. 安装 Anaconda | ./Anaconda3-xxxx.xx-x-Linux-x86_64.sh |
执行下载的 Linux 版本 Anaconda 安装包,按提示接受协议、指定安装路径。 | 需从 Anaconda 官网下载对应版本(Python 3.12 兼容)。 |
| 2. 创建虚拟环境 | conda create -n <env_name> python=<version> |
<env_name>:自定义环境名(如yolov8-py310-stm32mpu);<version>:Python 版本(推荐 3.10)。 |
隔离项目依赖,避免版本冲突。 |
| 3. 激活虚拟环境 | conda activate <env_name> |
<env_name>:步骤 2 创建的环境名,激活后终端前缀显示环境名。 |
所有训练 / 导出操作需在激活环境后执行。 |
| 4. 安装训练核心库 | conda install -c pytorch -c nvidia -c conda-forge pytorch torchvision pytorch-cuda=11.8 ultralytics |
安装 GPU 版 PyTorch+Ultralytics(YOLOv8 官方库),支持 CUDA 11.8 加速。 | 无 GPU 时省略pytorch-cuda=11.8,使用 CPU 训练(时间延长至 2 小时左右)。 |
| 5. 安装模型导出库 | conda/pip install tensorflow onnx2tf onnx onnxruntime tflite_support |
安装 TFLite/ONNX 格式转换工具,适配 STM32MPU 后续部署需求。 | 若某库安装失败,切换conda/pip命令重试(如pip install onnx)。 |
| 二、模型训练 | |||
| 1. 基础训练命令(COCO128) | yolo detect train data=coco128.yaml model=yolov8n.pt epochs=200 imgsz=640 device=0 |
data:数据集配置文件(自动下载 COCO128);model:YOLOv8n 轻量化预训练模型;epochs:训练轮次;imgsz:输入分辨率(640 适配 STM32MPU);device=0:指定 GPU。 |
一行命令启动,自动完成数据下载、训练日志输出,200 轮约 30 分钟(GPU 加速)。 |
| 2. 自定义数据集训练 | yolo detect train data=<my_data.yaml> model=yolov8n.pt epochs=150 imgsz=480 |
<my_data.yaml>:自定义数据集配置文件(需包含类别、图像路径);imgsz=480:更低分辨率(减少模型体积)。 |
自定义数据集需按 YOLO 格式标注(标注文件为 txt 格式,与图像对应)。 |
| 3. 多 GPU 训练 | yolo detect train data=coco128.yaml model=yolov8n.pt device=0,1 |
device=0,1:指定使用第 1、2 块 GPU,加速训练(多 GPU 时训练时间减半)。 |
需确保所有 GPU 均支持 CUDA 11.8 及以上版本。 |
| 三、训练监控与评估 | |||
| 1. 查看训练结果路径 | cd runs/detect/train<N> |
<N>:训练次数(首次训练为train2),结果默认保存在此路径。 |
包含权重文件、可视化图表、日志等核心数据。 |
| 2. 查看关键评估图表 | 直接打开路径下的图像文件 | 重点查看:confusion_matrix.png(混淆矩阵)、PR_curve.png(精度 - 召回率曲线)、val_batch0_pred.jpg(验证集预测效果)。 |
通过图表判断模型是否过拟合(训练集好 / 验证集差需减少 epochs)。 |
| 四、模型导出(适配 STM32MPU) | |||
| 1. 导出 TFLite 格式 | yolo export model=weights/best.pt format=tflite |
model:指定训练好的最优权重(best.pt);format=tflite:导出 STM32MPU 适配的 TFLite 格式。 |
导出文件默认保存于weights/best_saved_model/,命名为best_float32.tflite(约 12MB)。 |
| 2. 导出 ONNX 格式 | yolo export model=weights/best.pt format=onnx |
format=onnx:导出 ONNX 格式,备选适配 STM32MPU(STEdgeAI 工具同样支持)。 |
ONNX 格式适合需进一步量化优化的场景,文件体积略大于 TFLite。 |
| 五、常见问题解决 | |||
| 1. GPU 训练失败 | nvidia-smi(检查 GPU 驱动);conda list pytorch(检查 CUDA 版本) |
若驱动版本不匹配,需升级 GPU 驱动至支持 CUDA 11.8;若 PyTorch 无 CUDA 支持,重新安装 GPU 版本。 | 无 GPU 时直接删除device=0参数,使用 CPU 训练。 |
| 2. 导出 TFLite 报错 | pip install --upgrade tflite_support(升级 TFLite 库) |
若提示 “缺少 tflite 转换模块”,升级相关库后重试导出命令。 | 确保 Ultralytics 版本≥8.0(pip install --upgrade ultralytics)。 |
使用说明
- 参数替换:命令中
<env_name>、<version>、<my_data.yaml>等占位符,需替换为实际项目信息(如环境名yolov8-py310-stm32mpu、Python 3.10)。 - 环境校验:执行训练前,通过
stedgeai --version(若已安装 STEdgeAI)确认工具链兼容性,避免后续部署格式不匹配。 - 权重选择:仅使用
weights/best.pt导出模型(验证集性能最优),last.pt为最后一轮权重,不推荐用于部署。
本方案通过 “轻量化模型选择 + 标准化流程 + STM32 适配优化”,实现 1 小时快速完成 YOLOv8 训练,核心优势在于无需复杂配置,仅需依赖 Ultralytics 生态的自动化工具,即可生成适配 STM32MPU 的高质量模型。无论是入门嵌入式 AI,还是快速落地工业目标检测场景,该流程都能大幅缩短开发周期,降低训练与部署的衔接成本。
1396