跳转到内容

YOLOv11-seg 训练部署指南

文档信息

本教程说明实例分割模型 YOLOv11-seg 的训练方法,以及部署到 CSUN RV1126B 开发板的步骤。

项目内容
文档名YOLOv11-seg 训练部署指南
公司株式会社日昇テクノロジー
URLhttp://www.dragonwake.com
E-mailinfo@dragonwake.com
创建日期2026/06/08
版本Ver1.0
修改内容新建

修改履历

NO版本修改内容修改日期
1Ver1.0新建2026/06/08

本文档的信息可能会因文档改进而在不事先通知的情况下变更。最新版请参考公司主页 https://www.dragonwake.com

未经株式会社日昇テクノロジー书面许可,严禁以任何形式复制本文档。

1. YOLOv11-seg 概要

YOLOv11-seg 是 YOLO(You Only Look Once)系列的新成员,面向实时实例分割任务设计。它在保持 YOLO 系列高速推理特点的同时,通过网络结构和分割头实现像素级目标检测与分割,适用于自动驾驶、医学图像、工业检测等对精度和速度都有要求的场景。

本手册说明实例分割算法 YOLOv11-seg 的训练流程,以及部署到 CSUN RV1126B 开发板的步骤。关于数据标注方法,请参考既有相关文章。

图1-1 YOLOv11-seg 训练、转换与部署整体流程

图1-1 YOLOv11-seg 训练、转换与部署整体流程

2. 资料下载

本手册所需资料和源代码可从下面链接下载。

AIDemo_yolov11-seg_All.zip

解压后的目录结构如下。

|-- 02-training 训练用源码
|-- 03-model_convert AI 模型转换用源码
|-- 04-AI_deploy AI 模型部署用源码

图2-1 下载资料解压后的目录结构

图2-1 下载资料解压后的目录结构

3. YOLOv11-seg 模型训练

YOLOv11-seg 的训练源码中,导出部分相对于 Ultralytics 官方 GitHub 版本做了部分修改。因此,建议使用本资料指定的训练源码。

3.1 数据集准备

开始 YOLOv11-seg 训练前,需要准备 crack(裂缝数据集)等训练数据。该数据集也包含在训练工程压缩包中。目录结构如下图所示。

图3-1 crack-seg 数据集目录结构

图3-1 crack-seg 数据集目录结构

crack-seg 的标签数据格式如下图所示。每行第一个值为类别 ID,后续值为轮廓 polygon 坐标。

图3-2 YOLO 分割标签格式(类别与轮廓坐标)

图3-2 YOLO 分割标签格式(类别与轮廓坐标)

如果需要将 JSON 格式标注数据转换为 label 格式,可以使用 ./data/json_2_yolo.py 脚本。

3.2 训练参数配置

数据转换完成后,需要设置模型训练用的 data.yamldefault.yamlyolo11.yaml

  • data.yaml: 指定训练数据、验证数据路径、类别数和类别名称。
  • default.yaml: 指定 YOLO11 的训练参数,可根据需要调整。
  • yolo11.yaml: 定义 YOLO11 的模型结构,训练时需要修改类别数。

3.3 模型训练

完成上述步骤后,打开 train.py,设置 data.yamldefault.yamlyolo11.yaml 的路径。

from pathlib import Path
import os
from ultralytics import YOLO
import ultralytics.data.utils as data_utils
# OMP 関連エラー(例: "OMP: Hint This means...")が発生する場合に使用します。
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
# Ultralytics のデータセット基準ディレクトリを相対パスに設定します。
# これにより、data.yaml の path: ../demo/crack-seg が
# ./datasets/../demo/crack-seg として解釈され、最終的に ./demo/crack-seg を参照します。
data_utils.DATASETS_DIR = Path("datasets")
if __name__ == '__main__':
# 学習設定ファイル、データセット設定ファイル、モデル構造ファイルを指定します。
# 本スクリプトは ultralytics_yolo11 のプロジェクトルートで実行してください。
cfg = "./demo/crack-seg/default.yaml"
data = "./demo/crack-seg/data.yaml"
# weight = "./demo/weights/yolo11n-seg.pt" # .pt または yolo11-seg.yaml を指定できます。
weight = "./demo/crack-seg/yolo11-seg.yaml"
print("YOLO11-seg セグメンテーションモデルの学習を開始します。")
print(f"学習設定ファイル: {cfg}")
print(f"データセット設定ファイル: {data}")
print(f"モデルファイル: {weight}")
model = YOLO(weight)
results = model.train(
data=data,
cfg=cfg
)
print("YOLO11-seg セグメンテーションモデルの学習が完了しました。")

在 RV1126B Docker 开发环境中执行以下命令开始训练。

Terminal window
cd /home/csun/linuxshare/work/rv1126b/jp/embedded/images/develop_environment
./run.sh 2204
cd /opt/linuxshare/work/rv1126b/jp/AI/demo/Tutorial/yolov11-seg/02-training/ultralytics_yolo11
python train.py

图3-3 YOLOv11-seg 训练开始时的终端输出

图3-3 YOLOv11-seg 训练开始时的终端输出

训练完成后的评估结果如下。

图3-4 YOLOv11-seg 训练完成时的评估结果

图3-4 YOLOv11-seg 训练完成时的评估结果

生成的模型文件如下。

./crack/train2/weights/best.pt

图3-5 训练后生成的 best.pt / last.pt 文件

图3-5 训练后生成的 best.pt / last.pt 文件

3.4 PC 端模型推理

训练完成后,训练过程和验证集效果最好的模型会保存到 default.yaml 中设置的 project 目录。执行 predict-seg.py 可以初步确认模型效果。predict-seg.py 中会设置模型路径、输入图片、推理设备和图像尺寸,并执行图像预处理、模型推理和结果绘制。

请根据实际情况确认模型文件路径。

from ultralytics import YOLO
# 学習済みセグメンテーションモデルと推論画像を指定します。
# 本スクリプトは ultralytics_yolo11 のプロジェクトルートで実行してください。
model_path = "./crack/train2/weights/best.pt"
image_path = "./demo/crack-seg/test/images/3848.rf.eebe99038cd40502695607594e000258.jpg"
print("YOLO11-seg モデルの推論を開始します。")
print(f"入力モデル: {model_path}")
print(f"入力画像: {image_path}")
model = YOLO(model_path) # 学習済みモデルを読み込みます。
# モデル推論を実行します。
results = model(image_path)
for result in results:
boxes = result.boxes # 検出ボックスの出力です。
masks = result.masks # セグメンテーションマスクの出力です。
keypoints = result.keypoints # 姿勢推定キーポイントの出力です。
probs = result.probs # 画像分類の確率出力です。
obb = result.obb # 回転ボックスの出力です。
result.show() # 画面に表示します。
result.save(filename="result.jpg") # 推論結果を保存します。
print("YOLO11-seg モデルの推論が完了しました。")

执行命令如下。

Terminal window
python predict-seg.py

执行结果如下图所示。

图3-6 PC 端推理执行日志

图3-6 PC 端推理执行日志

图3-7 PC 端 YOLOv11-seg 推理结果图像

图3-7 PC 端 YOLOv11-seg 推理结果图像

3.5 PT 模型转换为 ONNX

在 PC 端执行 export.py,将 PT 模型导出为 ONNX 或 RKNN 转换用格式。代码示例中指定 format = 'rknn'

from ultralytics import YOLO
if __name__ == '__main__':
# エクスポート形式を指定します。
# 選択可能な形式例: 'torchscript', 'onnx', 'openvino', 'engine', 'coreml',
# 'saved_model', 'pb', 'tflite', 'edgetpu', 'tfjs', 'paddle', 'ncnn', 'rknn'
format = 'rknn'
# 学習済みモデルを指定します。
# 本スクリプトは ultralytics_yolo11 のプロジェクトルートで実行してください。
weight = "./crack/train2/weights/best.pt" # .pt または yolo11-seg.yaml を指定できます。
print("YOLO11-seg モデルのエクスポートを開始します。")
print(f"入力モデル: {weight}")
print(f"エクスポート形式: {format}")
model = YOLO(weight)
results = model.export(format=format)
print("YOLO11-seg モデルのエクスポートが完了しました。")

执行命令如下。

Terminal window
python export.py

执行结果如下图所示。

图3-8 将 PT 模型导出为 RKNN 转换用格式的终端输出

图3-8 将 PT 模型导出为 RKNN 转换用格式的终端输出

转换后的模型文件会保存在同一目录下。

图3-9 导出后生成的 best.onnx 文件

图3-9 导出后生成的 best.onnx 文件

4. RKNN-Toolkit 模型转换

4.1 RKNN-Toolkit 模型转换环境构建

要在 CSUN RV1126B 开发板上运行 ONNX 模型,需要先转换为 RKNN 模型。因此,需要提前构建 RKNN-Toolkit 模型转换工具环境。TensorFlow、TensorFlow Lite、Caffe、Darknet 等模型也可以用类似流程转换,本教程以 ONNX 模型为例进行说明。

模型转换环境的构建方法请参考《AI 模型转换环境构建指南》。

4.2 ONNX 模型转换为 RKNN 模型

本文支持 .rknn 扩展名模型的评估与执行。TensorFlow、TensorFlow Lite、Caffe、Darknet、ONNX、PyTorch 等常见训练模型,可使用提供的 RKNN-Toolkit2 转换为 RKNN 模型。其他框架训练的模型也可以先转换为 ONNX,再转换为 RKNN。

详细转换方法请参考《RKNN 模型转换教程示例》。

4.2.1 模型转换包解压

模型转换 Demo 从“2. 资料下载”下载并解压。

Terminal window
cd /data/project/sales/csun/rv1126b/jp/AI/demo/Tutorial/yolov11-seg/03-model_convert
unzip quant_dataset.zip
tar -xJf yolov11_seg_model_convert.tar.xz

图4-1 模型转换包解压后的目录结构

图4-1 模型转换包解压后的目录结构

4.2.2 进入模型转换工具 Docker 环境

使用以下命令将工作目录挂载到 Docker 镜像中。将 /data/project/sales/csun/rv1126b/jp/AI/demo/Tutorial 作为工作区域,并映射到容器中的 /test。同时通过 /dev/bus/usb:/dev/bus/usb 将 USB 设备挂载到容器中。

Terminal window
docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb -v /data/project/sales/csun/rv1126b/jp/AI/demo/Tutorial:/test rknn-toolkit2:2.3.2-cp38 /bin/bash

图4-2 RKNN-Toolkit2 Docker 容器启动

图4-2 RKNN-Toolkit2 Docker 容器启动

4.2.3 生成量化图片列表

在 Docker 环境内进入模型转换工作目录。

Terminal window
cd /test/yolov11-seg/03-model_convert/yolov11_seg_model_convert

执行 gen_list.py 生成量化图片列表。

Terminal window
python gen_list.py

图4-3 量化图片列表生成命令的执行结果

图4-3 量化图片列表生成命令的执行结果

生成的量化图片列表会保存为 pic_path.txt

图4-4 生成的 pic_path.txt 量化图片列表

图4-4 生成的 pic_path.txt 量化图片列表

4.2.4 ONNX 模型转换为 RKNN 模型

rknn_convert.py 默认执行 INT8 量化。主要脚本内容如下。

import sys
from rknn.api import RKNN
# ONNX_MODEL = 'best.onnx'
ONNX_MODEL = 'yolov11s.onnx'
DATASET = './pic_path.txt'
RKNN_MODEL = './yolov11s_rv1126b.rknn'
# RKNN_MODEL = './dog_rope.rknn'
QUANTIZE_ON = True
if __name__ == '__main__':
# Create RKNN object
rknn = RKNN(verbose=False)
# Pre-process config
print('--> Config model')
rknn.config(mean_values=[[0, 0, 0]], std_values=[
[255, 255, 255]], target_platform='rv1126b')
print('done')
# Load model
print('--> Loading model')
ret = rknn.load_onnx(model=ONNX_MODEL)
if ret != 0:
print('Load model failed!')
exit(ret)
print('done')
# Build model
print('--> Building model')
ret = rknn.build(do_quantization=QUANTIZE_ON, dataset=DATASET)
if ret != 0:
print('Build model failed!')
exit(ret)
print('done')
# Export rknn model
print('--> Export rknn model')
ret = rknn.export_rknn(RKNN_MODEL)
if ret != 0:
print('Export rknn model failed!')
exit(ret)
print('done')
# Release
rknn.release()

best.onnx 放到模型转换目录,并执行以下命令进行模型转换。

Terminal window
cp ../../02-training/ultralytics_yolo11/crack/train2/weights/best.onnx ./
python rknn_convert.py

图4-5 ONNX 模型转换为 RKNN 模型的日志

图4-5 ONNX 模型转换为 RKNN 模型的日志

转换成功后,会生成可在 CSUN RV1126B 开发板上运行的 RKNN 模型。

图4-6 转换后生成的 RKNN 模型文件

图4-6 转换后生成的 RKNN 模型文件

5. YOLOv11-seg 模型部署

5.1 模型部署示例说明

本节说明将 YOLOv11-seg 模型部署到 RV1126B 开发板的步骤。本文使用的模型是仅经过简单训练的示例模型,不保证模型精度。

5.2 准备工作

5.2.1 硬件准备

准备 RV1126B 开发板、Type-C 数据线、LAN 网线,并通过 MobaXterm 使用 SSH 登录 RV1126B 开发板。详细步骤请参考入门指南。

通过 LAN 网线连接。

图5-1 通过 LAN 网线连接的网络结构

图5-1 通过 LAN 网线连接的网络结构

通过 Type-C 串口线连接。

图5-2 通过 Type-C 串口线连接的结构

图5-2 通过 Type-C 串口线连接的结构

5.2.2 开发环境准备

首次阅读本文档时,请参考《入门指南》,按照其中步骤搭建编译环境。

在 PC 端 Ubuntu 系统中执行 run.sh 脚本,进入 RV1126B 编译环境。

Terminal window
cd ~/develop_environment
./run.sh 2204

图5-3 RV1126B Docker 开发环境启动

图5-3 RV1126B Docker 开发环境启动

5.3 示例程序编译

将下载的包移动到 RV1126B Docker 开发环境后,执行以下命令解压。

Terminal window
cd /opt/linuxshare/work/rv1126b/jp/AI/demo/Tutorial/yolov11-seg/04-AI_deploy
tar -xJf yolov11_seg_C_demo.tar.xz

解压后的结果如下图所示。

图5-4 AI 部署示例程序解压结果

图5-4 AI 部署示例程序解压结果

在 RV1126B Docker 开发环境中进入示例程序目录并执行编译。

Terminal window
sudo mount -t nfs -o vers=3,proto=tcp,mountproto=tcp,nolock,retrans=5,timeo=5 192.168.11.85:/ /mnt
cd /opt/linuxshare/work/rv1126b/jp/AI/demo/Tutorial/yolov11-seg/04-AI_deploy/yolov11_seg_C_demo/
./build.sh

图5-5 YOLOv11-seg 示例程序编译结果

图5-5 YOLOv11-seg 示例程序编译结果

编译成功后,将执行程序目录 yolov11_seg_demo_release/ 复制到 RV1126B 开发板的 /userdata 目录。

Terminal window
cp yolov11_seg_demo_release/ /mnt/userdata/ -rf

5.4 在开发板上运行 YOLOv11-seg 模型

通过串口调试或 SSH 调试进入板端 shell,并进入示例程序部署目录。

Terminal window
cd /userdata/yolov11_seg_demo_release/

示例程序执行命令如下。

Terminal window
chmod 777 yolov11_seg_demo
./yolov11_seg_demo yolov11n_seg_rv1126b.rknn crack.jpg

执行结果如下图所示。

图5-6 开发板上的 YOLOv11-seg demo 执行结果

图5-6 开发板上的 YOLOv11-seg demo 执行结果

算法执行时间约为 117 ms。

图5-7 开发板上的算法执行时间

图5-7 开发板上的算法执行时间

执行后,可以在 RV1126B 编译环境中通过以下命令获取测试图像。

Terminal window
cp /mnt/userdata/yolov11_seg_demo_release/result.jpg .
cp /mnt/userdata/yolov11_seg_demo_release/mask_bgr.jpg .

图5-8 将推理结果图像复制到 PC 端的命令

图5-8 将推理结果图像复制到 PC 端的命令

图5-9 板端生成的分割掩码图像

图5-9 板端生成的分割掩码图像

图5-10 板端生成的裂缝分割结果图像

图5-10 板端生成的裂缝分割结果图像

至此,YOLOv11-seg 模型已在开发板上正常运行。