| name | k230-yolo-pipeline |
| description | 智能 K230 YOLO 训练部署助手。自动配置环境(WSL/Linux)、划分数据集、训练YOLO、导出ONNX、转kmodel。当用户说:训练YOLO、转kmodel、K230部署、训练模型、帮我训练时触发。 |
K230 YOLO 智能训练部署助手
概述
当用户说「帮我训练YOLO部署到K230」时,你应当:
- 自动检测并配置环境 — Conda、CUDA、YOLO、nncase 一键装好
- 分析用户的数据集,询问关键参数
- 自动完成:划分数据集 → YOLO训练 → ONNX导出 → kmodel转换
- 报告结果和部署说明
全程无需用户手动安装任何依赖。
Phase 0: 自动环境配置
这是本 skill 的核心升级。用户不需要提前装任何东西。
0.1 检测平台
uname -a
cat /proc/version 2>/dev/null | grep -i microsoft
三种情况:
| 平台 | 策略 |
|---|
| Linux | 直接执行所有命令 |
| WSL | 通过 wsl 命令转发,路径自动转换 /mnt/c/... |
| Windows 原生 | 引导用户安装 WSL: wsl --install |
0.2 检测 Conda
ls ~/miniconda3/bin/conda ~/anaconda3/bin/conda /opt/conda/bin/conda 2>/dev/null
which conda 2>/dev/null
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p ~/miniconda3
~/miniconda3/bin/conda init bash
0.3 自动配置 YOLO 训练环境 (yolov8)
conda create -n yolov8 python=3.10 -y
conda run -n yolov8 pip install ultralytics torch torchvision onnx onnxsim
0.4 自动配置 kmodel 转换环境 (nncase_env)
conda create -n nncase_env python=3.10 -y
conda run -n nncase_env pip install nncase onnx onnxsim opencv-python-headless
0.5 CUDA 检测
conda run -n yolov8 python -c "
import torch
print(f'CUDA: {torch.cuda.is_available()}')
print(f'GPU: {torch.cuda.get_device_name(0) if torch.cuda.is_available() else "N/A"}')
"
- CUDA 可用 → GPU 训练 ⚡
- CUDA 不可用 → 自动退化为 CPU 训练(并提醒用户装 CUDA)
0.6 环境完整性验证
运行 scripts/setup_env.sh 可以一键完成所有上述检测和安装。如果检测到环境有问题,引导用户运行此脚本:
bash <skill_path>/scripts/setup_env.sh
也可以由你(Claude)逐项执行上面的检查和安装命令。
0.7 向用户报告
✅ 环境就绪!
平台: WSL (Ubuntu)
Conda: /home/user/miniconda3
yolov8: ultralytics 8.4.21 + torch 2.4.1 (CUDA)
nncase: nncase 2.8.0 + onnxsim 0.5.0
GPU: NVIDIA RTX 4060 ⚡
Phase 1: 分析输入
扫描数据集文件夹:
ls <input>/*.{jpg,png,bmp} 2>/dev/null | wc -l
ls <input>/*.txt 2>/dev/null | wc -l
head -3 <input>/*.txt 2>/dev/null
报告:图片数、标签数、配对率、类别数、格式是否正常。
Phase 2: 询问用户
必问:
类别名称: 每个 class_id 对应什么?
输出目录: 默认 ./yolo_output
可选(默认值可直接跳过):
基础模型: yolov8s (n/s/m/l/x)
训练轮数: 100
输入尺寸: 224 (K230 推荐)
其他: batch, lr, 量化选项等
Phase 3: 划分数据集
python <skill_path>/scripts/split_dataset.py \
--input <输入目录> --output <输出目录> \
--names "类别1,类别2,..."
验证输出文件完整性。
Phase 4: WSL/Linux 训练
TRAIN_CMD="conda run -n yolov8"
[ -n "$IS_WSL" ] && TRAIN_CMD="wsl $TRAIN_CMD"
$TRAIN_CMD yolo train \
model=yolov8s.pt \
data=<data.yaml路径> \
epochs=<指定轮数> imgsz=<指定尺寸> batch=-1 device=0 \
project=./runs name=train exist_ok=True
$TRAIN_CMD yolo export \
model=./runs/train/weights/best.pt \
format=onnx imgsz=<尺寸> opset=11 simplify=true
训练中断处理
- 检查
runs/train/weights/ 下是否有 last.pt
- 可以 resume:
yolo train resume model=runs/train/weights/last.pt
Phase 5: 转换 kmodel
mkdir -p <输出目录>/calibration_data
cp <输出目录>/images/val/* <输出目录>/calibration_data/ 2>/dev/null || true
KMCONV_CMD="conda run -n nncase_env"
[ -n "$IS_WSL" ] && KMCONV_CMD="wsl $KMCONV_CMD"
$KMCONV_CMD python <skill_path>/scripts/to_kmodel.py \
--model <输出目录>/best.onnx \
--input_width <尺寸> --input_height <尺寸> \
--dataset <输出目录>/calibration_data \
--ptq_option 1
转换失败处理
| 错误 | 处理 |
|---|
| PTQ 量化失败 | 重试 --ptq_option 0 (float32) |
| ONNX 算子不支持 | 用 onnxslim 进一步精简 |
| OOM | 减少 --calib_samples |
Phase 6: 报告
🎯 K230 YOLO 训练部署完成!
─────────────────────────────────
📦 输出: ./yolo_output
best.kmodel (22.8 MB) ← K230 部署
best.onnx (42.1 MB)
best.pt (21.5 MB)
test_images/ (12 张)
📌 部署命令:
cp ./yolo_output/best.kmodel /sdcard/kmodel/
⚠️ 注意:
K230 代码的 model_input_size 需设为 {imgsz}x{imgsz}
conf_thresh 建议 0.5~0.6
关键脚本
| 脚本 | 功能 | 执行位置 |
|---|
scripts/setup_env.sh | 自动配置全部环境 (Conda + YOLO + nncase + CUDA) | WSL/Linux |
scripts/split_dataset.py | 数据集划分 + data.yaml | 任意平台 |
scripts/to_kmodel.py | ONNX → kmodel (nncase PTQ量化) | WSL/Linux |
路径处理
Windows → WSL 路径转换规则:
C:\Users\xxx\datasets → /mnt/c/Users/xxx/datasets
用 wslpath 或字符串替换均可。
注意事项
- Conda 安装需要网络:如果用户网络受限,引导手动安装
- CUDA 可选:没有 GPU 也能跑,只是慢
- nncase 目前仅 Linux/WSL:Windows 原生不支持
- 标签格式:必须是 YOLO 格式
class x_center y_center w h (归一化)