# K230 Yolo Pipeline

> 智能 K230 YOLO 训练部署助手。自动配置环境(WSL/Linux)、划分数据集、训练YOLO、导出ONNX、转kmodel。当用户说：训练YOLO、转kmodel、K230部署、训练模型、帮我训练时触发。

- Skill: `ginger-hao/k230-yolo-pipeline` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add ginger-hao/k230-yolo-pipeline`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ginger-hao/k230-yolo-pipeline/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: ginger-hao (https://skillmd.com/u/ginger-hao)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/ginger-hao/k230-yolo-pipeline

---


# K230 YOLO 智能训练部署助手

## 概述

当用户说「帮我训练YOLO部署到K230」时，你应当：

1. **自动检测并配置环境** — Conda、CUDA、YOLO、nncase 一键装好
2. 分析用户的数据集，询问关键参数
3. 自动完成：划分数据集 → YOLO训练 → ONNX导出 → kmodel转换
4. 报告结果和部署说明

**全程无需用户手动安装任何依赖。**

---

## Phase 0: 自动环境配置

这是本 skill 的核心升级。用户不需要提前装任何东西。

### 0.1 检测平台

```bash
uname -a                    # Linux / WSL ?
cat /proc/version 2>/dev/null | grep -i microsoft  # WSL检测
```

三种情况：

| 平台 | 策略 |
|------|------|
| **Linux** | 直接执行所有命令 |
| **WSL** | 通过 `wsl` 命令转发，路径自动转换 `/mnt/c/...` |
| **Windows 原生** | 引导用户安装 WSL: `wsl --install` |

### 0.2 检测 Conda

```bash
# 查找 Conda
ls ~/miniconda3/bin/conda ~/anaconda3/bin/conda /opt/conda/bin/conda 2>/dev/null
which conda 2>/dev/null

# 如果没找到 → 自动安装 Miniconda
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`)

```bash
# 如果环境不存在 → 自动创建
conda create -n yolov8 python=3.10 -y
conda run -n yolov8 pip install ultralytics torch torchvision onnx onnxsim
```

### 0.4 自动配置 kmodel 转换环境 (`nncase_env`)

```bash
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 检测

```bash
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
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: 分析输入

扫描数据集文件夹：

```bash
# 统计
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: 询问用户

```yaml
必问:
  类别名称: 每个 class_id 对应什么？
  输出目录: 默认 ./yolo_output

可选(默认值可直接跳过):
  基础模型: yolov8s (n/s/m/l/x)
  训练轮数: 100
  输入尺寸: 224 (K230 推荐)
  其他: batch, lr, 量化选项等
```

## Phase 3: 划分数据集

```bash
python <skill_path>/scripts/split_dataset.py \
    --input <输入目录> --output <输出目录> \
    --names "类别1,类别2,..."
```

验证输出文件完整性。

## Phase 4: WSL/Linux 训练

```bash
# 根据平台选择执行方式
TRAIN_CMD="conda run -n yolov8"
# WSL 下加 wsl 前缀
[ -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

# 导出 ONNX
$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

```bash
# 准备校准数据
mkdir -p <输出目录>/calibration_data
cp <输出目录>/images/val/* <输出目录>/calibration_data/ 2>/dev/null || true

# nncase 编译
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` 或字符串替换均可。

## 注意事项

1. **Conda 安装需要网络**：如果用户网络受限，引导手动安装
2. **CUDA 可选**：没有 GPU 也能跑，只是慢
3. **nncase 目前仅 Linux/WSL**：Windows 原生不支持
4. **标签格式**：必须是 YOLO 格式 `class x_center y_center w h` (归一化)

