Go to file
2026-03-17 22:20:31 +08:00
samples Add ROI comparison pages and previews 2026-03-17 22:20:31 +08:00
.gitignore 项目初始化;已经训练了三种yolo版本的2种尺寸的模型 2026-03-16 09:55:52 +08:00
01_download_dataset.py Use real person boxes for ROI dataset generation 2026-03-16 12:10:01 +08:00
02_train.bat Add ROI-based shoe training workflow 2026-03-16 11:16:50 +08:00
03_export_onnx.bat Add ROI-based shoe training workflow 2026-03-16 11:16:50 +08:00
04_convert_rknn.py 项目初始化;已经训练了三种yolo版本的2种尺寸的模型 2026-03-16 09:55:52 +08:00
05_prepare_ppe_shoe_subset.py Use real person boxes for ROI dataset generation 2026-03-16 12:10:01 +08:00
06_finetune_ppe.bat Add ROI-based shoe training workflow 2026-03-16 11:16:50 +08:00
07_build_public_shoe_dataset.py 项目初始化;已经训练了三种yolo版本的2种尺寸的模型 2026-03-16 09:55:52 +08:00
08_train_compare_models.py 项目初始化;已经训练了三种yolo版本的2种尺寸的模型 2026-03-16 09:55:52 +08:00
09_build_roi_shoe_dataset.py Use real person boxes for ROI dataset generation 2026-03-16 12:10:01 +08:00
10_run_shoe_compare.ps1 Add ROI-based shoe training workflow 2026-03-16 11:16:50 +08:00
11_run_shoe_compare_960.ps1 Add ROI-based shoe training workflow 2026-03-16 11:16:50 +08:00
12_train_roi_yolov8s_640.bat Fix ROI training batch launcher 2026-03-16 16:14:03 +08:00
13_preview_roi_samples.ps1 Use real person boxes for ROI dataset generation 2026-03-16 12:10:01 +08:00
14_build_roi_compare_visuals.py Add ROI comparison pages and previews 2026-03-17 22:20:31 +08:00
data.yaml.template 项目初始化;已经训练了三种yolo版本的2种尺寸的模型 2026-03-16 09:55:52 +08:00
README.md Document next ROI training direction 2026-03-17 22:18:46 +08:00

鞋子检测模型训练指南

当前主方案YOLOv8s-640 + 脚部 ROI 训练

当前项目的主训练方向已经调整为:

  • 只训练 yolov8s、输入尺寸固定 640x640
  • 训练数据不再直接使用“整张场景图”或“鞋子纯特写图”
  • 优先根据真实人体框裁出更接近线上输入分布的“脚部 ROI 图”,再训练鞋检测模型

这样做的原因是线上链路并不是直接在整张图上找鞋,而是:

  1. 先从人体框生成脚部 ROI
  2. 再在脚部 ROI 上做鞋检测

因此训练阶段也尽量模拟这个输入分布,保留一些裤脚、地面和周围背景,避免训练样本过于像商品特写。

ROI 规则

优先原则:

  • 最优方式:如果有人体框,直接按线上人体下部 ROI 规则裁图
  • 次优方式:如果只有鞋框,再按鞋框扩图,尽量模拟人体下部脚部 ROI 的视觉分布

线上人体下部 ROI 规则:

  • 已知人体框 (x, y, w, h)
  • roi_x = x - 0.24w
  • roi_y = y + 0.64h
  • roi_w = 1.48w
  • roi_h = 0.58h

这条规则的目标是:

  • 横向比人体略宽,尽量把双脚都包进去
  • 纵向覆盖人体下部到脚下地面
  • 让鞋模型看到的输入更接近真实线上两阶段链路

当前推荐的数据准备方式:

  1. PPE 数据保留 Person + shoe
python 05_prepare_ppe_shoe_subset.py --mode roi-source

输出目录:

  • datasets/ppe-person-shoes
  1. Open Images 重新下载,并保留 Person + shoe
python 01_download_dataset.py --source openimages --mode roi-source --max-samples 100000

默认输出目录:

  • datasets/openimages-person-shoes-yolo
  1. 构建 ROI 化训练集
python 09_build_roi_shoe_dataset.py --clean

构建规则:

  • 如果源数据里有真实 Person 框,直接按人体下部 ROI 规则裁图
  • 只有在没有人框时,才退回鞋框扩图 fallback

如果只有鞋框,没有人体框:

  • 仍然可以做鞋框 fallback 扩图
  • 但目标不是做鞋子纯特写,而是尽量近似“人体下部脚部 ROI”
  • 也就是保留一定裤脚、脚下地面和周围背景
  • 裁图会自动截到图像边界内

训练目标总结:

  • 不要做鞋子纯特写
  • 要做“脚部局部图”
  • 让训练输入尽量贴近线上“人体下部脚部 ROI”

新主流程

  1. 准备 ROI 源数据集
python 05_prepare_ppe_shoe_subset.py --mode roi-source
python 01_download_dataset.py --source openimages --mode roi-source --max-samples 100000
  1. 构建 ROI 化训练集
python 09_build_roi_shoe_dataset.py --clean

输出目录:

  • datasets/shoe-roi-mix
  1. 训练新的 ROI 模型
12_train_roi_yolov8s_640.bat

模型输出目录:

  • runs/roi_yolov8s_640

说明:

  • 新模型会写到新的项目目录,不覆盖之前已有模型
  • 如果 train_roi 已存在Ultralytics 会自动递增运行目录名

当前实验结论

截至目前,项目内已经验证了几条比较明确的结论:

  • 只看公开验证集 mAP 不够,必须同时看真实 roi-shoes 业务图的框位置和召回情况
  • 训练输入做成“人体下部脚部 ROI”是正确方向整体上明显优于早期“鞋子单类紧框”训练
  • 扩大 Open Images 源图数量是有价值的,但必须配合 ROI 质量过滤,否则数据越多,噪声也越多
  • 100k filtered 这一条线已经比 20k filtered 更有潜力,尤其对“大 ROI、细节丰富鞋面”的适应性更好

当前几版模型的经验判断是:

  • 旧主力模型:对“小目标、模糊目标、简单轮廓”更稳
  • 100k filtered 系列:对“大一点、细节更丰富、纹理更复杂”的鞋更好
  • 100k filtered 的已跑版本里,100 epochs 是当前最均衡、最值得继续迭代的一版

后续训练方向

后续训练主线建议固定为:

  1. 100k filtered 训练集为基础继续迭代
  2. 100 epochs 版本权重作为下一轮微调底座
  3. 补充一批真实线上风格的脚部 ROI 标注图,做小规模业务微调
  4. 最终以真实 ROI 评测结果为主,而不是只看公开验证集 mAP

推荐优先补充的真实 ROI 图类型:

  • 小而模糊、边缘不清、低对比度的鞋
  • 大 ROI、鞋面细节丰富、纹理复杂的鞋
  • 单鞋与双鞋混合出现、地面背景复杂的脚部 ROI

建议的后续流程:

# 1. 继续维护 100k filtered 公开 ROI 数据底座
python 05_prepare_ppe_shoe_subset.py --mode roi-source
python 01_download_dataset.py --source openimages --mode roi-source --max-samples 100000
python 09_build_roi_shoe_dataset.py --clean

# 2. 使用 100k filtered 数据训练基础 ROI 模型
12_train_roi_yolov8s_640.bat

# 3. 在补充真实 ROI 标注后,再做业务微调
# 建议直接从 100k-100 这一版权重继续训练

当前项目建议保留两套判断标准:

  • 公开验证集指标:
    • 观察 precision / recall / mAP50 / mAP50-95
  • 真实业务 ROI 效果:
    • 看是否漏检
    • 看检测框是否真正落在鞋区域
    • 看不同目标类型下的稳定性,而不是只看总平均数

方案640x640 单模型部署时用2窗口

训练阶段

  • 输入640x640 完整图片
  • 模型YOLOv8s
  • 输出640x640 模型文件

部署阶段pipeline配置

  • 原图 1920x1080
  • 分成 2 个 960x1080 窗口
  • 每个窗口 resize 到 640x640 送入模型
  • 合并检测结果

目录结构

train/
├── README.md                 # 本文件
├── 01_download_dataset.py    # 下载鞋子数据集(推荐 Open Images
├── 02_train.bat              # Windows 一键训练脚本
├── 03_export_onnx.bat        # 导出 ONNX 脚本
├── 04_convert_rknn.py        # 转换为 RKNN 脚本
├── 05_prepare_ppe_shoe_subset.py # 提取 PPE 鞋子单类子集
├── 06_finetune_ppe.bat       # 用 PPE 鞋子子集做二阶段微调
├── data.yaml.template        # 数据集配置文件
└── samples/                  # 示例图片
    ├── calibration/          
    ├── test_images/          
    └── README.md

快速开始

1. 下载数据集

cd train
python 01_download_dataset.py --source openimages --max-samples 5000

2. 准备配置

脚本会自动生成 datasets/openimages-shoes-yolo/data.yaml

3. 训练640x640

02_train.bat

或手动:

yolo detect train \
    data=datasets/openimages-shoes-yolo/data.yaml \
    model=yolov8s.pt \
    epochs=150 \
    imgsz=640 \
    batch=16 \
    device=0

训练参数

  • 模型YOLOv8s速度和精度平衡
  • 输入640x640
  • 预计时间30-60分钟

4. 导出 ONNX

03_export_onnx.bat

5. 转换为 RKNN

在 Ubuntu PC 上:

python 04_convert_rknn.py runs/detect/train/weights/best.onnx -o shoe_detector_640.rknn -t rk3588

6. 部署2窗口配置

复制到 RK3588

scp shoe_detector_640.rknn orangepi@<rk3588_ip>:/home/orangepi/apps/OrangePi3588Media/models/

Pipeline 配置部署阶段用2窗口

{
  "id": "pre_shoe",
  "type": "preprocess",
  "windows": [
    {"x": 0, "y": 0, "w": 960, "h": 1080},
    {"x": 960, "y": 0, "w": 960, "h": 1080}
  ],
  "dst_w": 640,
  "dst_h": 640
}

7. 方案 APPE 二阶段微调

当 Open Images 基础模型训练完成后,可继续用 PPE 鞋子子集做场景微调:

python 05_prepare_ppe_shoe_subset.py
06_finetune_ppe.bat

PPE 鞋子子集来源:

  • boots
  • no_boots

这两个类会统一映射成单类:

  • shoe

类别说明Open Images

Open Images 官方鞋类层级中,Footwear 的子类包括:

  • Boot
  • Sandal
  • High heels
  • Roller skates

本项目推荐下载:

  • Footwear
  • Boot

可选补充:

  • Sandal

不建议默认加入:

  • High heels
  • Roller skates

训练时统一映射为单一类别:

  • 0: shoe

这样模型目标更聚焦,先尽量把鞋子稳定检出,再在后处理里判断是否为黑色鞋。


相关链接