修改train脚本

This commit is contained in:
haotian 2026-03-13 11:37:35 +08:00
parent 9de41aed90
commit 48b58f74a2
5 changed files with 322 additions and 309 deletions

View File

@ -1,156 +1,259 @@
#!/usr/bin/env python3
"""
下载 Roboflow Safety Shoes Detection 数据集
下载鞋子检测数据集
支持:
- Ultralytics Construction-PPE (推荐, 直接下载)
- Open Images V7 (通过 FiftyOne)
使用方法:
python 01_download_dataset.py --api-key YOUR_API_KEY
# 下载 Construction-PPE (推荐)
python 01_download_dataset.py --source ultralytics
或者手动下载:
1. 访问 https://universe.roboflow.com/nedrick-chandra-gpg1l/safety-shoes-detection-5qgkg
2. 点击 Download 选择 YOLOv8 格式
3. 解压到 datasets/ 目录
# 下载 Open Images V7 鞋子类别
python 01_download_dataset.py --source openimages --max-samples 5000
"""
import argparse
import os
import sys
import zipfile
from pathlib import Path
def download_with_roboflow(api_key: str, dataset_dir: str = "datasets"):
"""使用 Roboflow API 下载数据集"""
try:
from roboflow import Roboflow
except ImportError:
print("错误: 未安装 roboflow 包")
print("请运行: pip install roboflow")
sys.exit(1)
def download_ultralytics_cppe(dataset_dir: str = "datasets/construction-ppe"):
"""
下载 Ultralytics Construction-PPE 数据集
完全开放直接下载无需注册
"""
import urllib.request
import ssl
print("="*60)
print("正在下载 Safety Shoes Detection 数据集...")
print("="*60)
url = "https://github.com/ultralytics/assets/releases/download/v0.0.0/construction-ppe.zip"
zip_path = "construction-ppe.zip"
print("="*70)
print("下载 Construction-PPE 数据集")
print("="*70)
print(f"来源: {url}")
print(f"目标: {dataset_dir}")
print()
# 创建目录
os.makedirs(dataset_dir, exist_ok=True)
# 下载
print("[1/3] 下载中... (约 178MB)")
try:
rf = Roboflow(api_key=api_key)
project = rf.workspace("nedrick-chandra-gpg1l").project("safety-shoes-detection-5qgkg")
dataset = project.version(2).download("yolov8", location=dataset_dir)
# 禁用 SSL 验证(某些环境需要)
ssl_context = ssl.create_default_context()
ssl_context.check_hostname = False
ssl_context.verify_mode = ssl.CERT_NONE
print(f"\n✓ 数据集下载完成: {dataset.location}")
return dataset.location
with urllib.request.urlopen(url, context=ssl_context, timeout=300) as response:
total_size = int(response.headers.get('content-length', 0))
downloaded = 0
chunk_size = 8192
with open(zip_path, 'wb') as f:
while True:
chunk = response.read(chunk_size)
if not chunk:
break
f.write(chunk)
downloaded += len(chunk)
if total_size > 0:
percent = (downloaded / total_size) * 100
print(f"\r 进度: {percent:.1f}% ({downloaded}/{total_size} bytes)", end="")
print("\n ✓ 下载完成")
except Exception as e:
print(f"\n✗ 下载失败: {e}")
print("\n请尝试手动下载:")
print("1. 访问 https://universe.roboflow.com/nedrick-chandra-gpg1l/safety-shoes-detection-5qgkg")
print("2. 点击 'Download' → 选择 'YOLOv8' 格式")
print("3. 解压到 datasets/ 目录")
return None
def modify_yaml_for_single_class(dataset_path: str):
"""修改为单类检测配置"""
yaml_path = os.path.join(dataset_path, "data.yaml")
if not os.path.exists(yaml_path):
print(f"警告: 找不到 {yaml_path}")
print(f"\n ✗ 下载失败: {e}")
print("\n请手动下载:")
print(f" 1. 访问: {url}")
print(f" 2. 下载 construction-ppe.zip")
print(f" 3. 解压到 {dataset_dir}/")
return False
with open(yaml_path, 'r') as f:
content = f.read()
# 解压
print(f"\n[2/3] 解压中...")
try:
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(dataset_dir)
print(" ✓ 解压完成")
except Exception as e:
print(f" ✗ 解压失败: {e}")
return False
# 创建新的单类配置
new_content = """# 单类鞋子检测数据集配置
# 原数据集: Safety Shoes Detection (Roboflow)
# 修改: 合并 safety-shoes 和 no-safety-shoes 为单一的 shoe 类别
# 清理
print(f"\n[3/3] 清理临时文件...")
os.remove(zip_path)
print(" ✓ 完成")
return True
train: ../train/images
val: ../valid/images
test: ../test/images
def create_yaml_config(dataset_dir: str, single_class: bool = False):
"""创建单类检测配置文件"""
yaml_content = """# 单类鞋子检测数据集配置
# 基于 Construction-PPE 数据集修改
# 原类别: helmet, gloves, vest, boots, goggles, none, Person, no_helmet, no_goggle, no_gloves, no_boots
# 修改为单一的 shoe 类别(只使用 boots 和 no_boots 的标注)
path: construction-ppe # 数据集根目录
train: images/train # 训练集 (1132张)
val: images/val # 验证集 (143张)
test: images/test # 测试集 (141张)
# 单类配置
nc: 1
names: ['shoe']
# Roboflow 元信息
roboflow:
workspace: nedrick-chandra-gpg1l
project: safety-shoes-detection-5qgkg
version: 2
license: CC BY 4.0
url: https://universe.roboflow.com/nedrick-chandra-gpg1l/safety-shoes-detection-5qgkg/dataset/2
# 原始数据信息
original_dataset:
name: Construction-PPE
source: Ultralytics
url: https://docs.ultralytics.com/datasets/detect/construction-ppe/
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/construction-ppe.zip
# 使用说明:
# 1. 此配置将 boots (cls=3) 和 no_boots (cls=10) 都映射为 shoe (cls=0)
# 2. 训练时只检测鞋子,不关心是否安全鞋
# 3. 安全鞋判断通过后续颜色分析完成
"""
# 备份原文件
backup_path = yaml_path + ".backup"
with open(backup_path, 'w') as f:
f.write(content)
yaml_path = os.path.join(dataset_dir, "data.yaml")
# 写入新配置
with open(yaml_path, 'w') as f:
f.write(new_content)
f.write(yaml_content)
print(f"✓ 已修改为单类检测: {yaml_path}")
print(f" 原配置备份: {backup_path}")
return True
print(f"\n✓ 配置文件创建: {yaml_path}")
return yaml_path
def check_dataset_structure(dataset_path: str):
"""检查数据集结构是否正确"""
required_dirs = ['train/images', 'train/labels', 'valid/images', 'valid/labels']
def download_openimages(classes: list, max_samples: int, dataset_dir: str):
"""通过 FiftyOne 下载 Open Images"""
try:
import fiftyone as fo
import fiftyone.zoo as foz
except ImportError:
print("错误: 未安装 fiftyone")
print("请运行: pip install fiftyone")
return False
print("\n检查数据集结构...")
print("="*70)
print("下载 Open Images V7 数据集")
print("="*70)
print(f"类别: {classes}")
print(f"最大样本数: {max_samples}")
print()
try:
dataset = foz.load_zoo_dataset(
"open-images-v7",
split="train",
label_types=["detections"],
classes=classes,
max_samples=max_samples,
dataset_dir=dataset_dir
)
# 导出为 YOLO 格式
print("\n导出为 YOLO 格式...")
dataset.export(
export_dir=dataset_dir + "-yolo",
dataset_type=fo.types.YOLOv5Dataset,
label_field="detections"
)
print(f"✓ 数据集保存: {dataset_dir}-yolo")
return True
except Exception as e:
print(f"✗ 下载失败: {e}")
return False
def check_dataset(dataset_dir: str):
"""检查数据集完整性"""
print("\n" + "="*70)
print("检查数据集")
print("="*70)
required_dirs = [
'images/train', 'images/val', 'images/test',
'labels/train', 'labels/val', 'labels/test'
]
all_ok = True
for dir_name in required_dirs:
full_path = os.path.join(dataset_path, dir_name)
full_path = os.path.join(dataset_dir, dir_name)
if os.path.exists(full_path):
count = len(os.listdir(full_path))
count = len([f for f in os.listdir(full_path) if os.path.isfile(os.path.join(full_path, f))])
print(f"{dir_name}: {count} 个文件")
else:
print(f"{dir_name}: 不存在")
return False
all_ok = False
return True
return all_ok
def main():
parser = argparse.ArgumentParser(description="下载 Safety Shoes Detection 数据集")
parser.add_argument("--api-key", help="Roboflow API Key")
parser.add_argument("--dir", default="datasets/safety-shoes-detection",
parser = argparse.ArgumentParser(
description="下载鞋子检测数据集",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
示例:
# 下载 Construction-PPE (推荐,直接可用)
python 01_download_dataset.py --source ultralytics
# 下载 Open Images 鞋子类别
python 01_download_dataset.py --source openimages --max-samples 5000
# 指定保存目录
python 01_download_dataset.py --source ultralytics --dir ./my-datasets/shoes
"""
)
parser.add_argument("--source", choices=["ultralytics", "openimages"],
default="ultralytics",
help="数据源 (默认: ultralytics)")
parser.add_argument("--dir", default="datasets/construction-ppe",
help="数据集保存目录")
parser.add_argument("--no-modify", action="store_true",
help="不修改 data.yaml保持原始类别")
parser.add_argument("--max-samples", type=int, default=5000,
help="Open Images 最大样本数 (默认: 5000)")
parser.add_argument("--classes", nargs="+",
default=["Footwear", "Sandal", "Shoe", "Boot"],
help="Open Images 类别 (默认: Footwear Sandal Shoe Boot)")
args = parser.parse_args()
# 如果提供了 API key使用 API 下载
if args.api_key:
dataset_path = download_with_roboflow(args.api_key, args.dir)
if dataset_path is None:
sys.exit(1)
success = False
if args.source == "ultralytics":
success = download_ultralytics_cppe(args.dir)
if success:
create_yaml_config(args.dir, single_class=False)
check_dataset(args.dir)
elif args.source == "openimages":
success = download_openimages(args.classes, args.max_samples, args.dir)
# 输出下一步
if success:
print("\n" + "="*70)
print("数据集准备完成!")
print("="*70)
print(f"数据集路径: {args.dir}")
print("\n下一步:")
print(f" 1. 检查配置: cat {args.dir}/data.yaml")
print(f" 2. 开始训练: 02_train.bat")
print(f" 3. 或手动: yolo detect train data={args.dir}/data.yaml model=yolov8n.pt epochs=150 imgsz=640")
return 0
else:
# 检查是否已手动下载
dataset_path = args.dir
if not os.path.exists(dataset_path):
print(f"错误: 找不到数据集目录 {dataset_path}")
print("\n请使用以下方式之一获取数据集:")
print("1. 使用 API 下载: python 01_download_dataset.py --api-key YOUR_KEY")
print("2. 手动下载并解压到: datasets/safety-shoes-detection/")
sys.exit(1)
# 检查数据集结构
if not check_dataset_structure(dataset_path):
print("\n✗ 数据集结构不正确")
sys.exit(1)
# 修改为单类检测
if not args.no_modify:
modify_yaml_for_single_class(dataset_path)
print("\n" + "="*60)
print("数据集准备完成!")
print("="*60)
print(f"数据集路径: {dataset_path}")
print(f"配置文件: {dataset_path}/data.yaml")
print("\n下一步:")
print(f" yolo detect train data={dataset_path}/data.yaml model=yolov8n.pt epochs=150 imgsz=640")
print("\n✗ 数据集准备失败")
return 1
if __name__ == "__main__":
main()
sys.exit(main())

View File

@ -3,22 +3,19 @@ chcp 65001 >nul
cls
echo ============================================================
echo 训练鞋子检测模型 (YOLOv8)
echo 训练鞋子检测模型 (YOLOv8 + 640x640)
echo ============================================================
echo.
:: 设置数据集路径
set DATASET=datasets/safety-shoes-detection/data.yaml
set DATASET=datasets/construction-ppe/data.yaml
:: 检查数据集是否存在
if not exist %DATASET% (
echo [错误] 找不到数据集配置文件: %DATASET%
echo.
echo 请先下载数据集:
echo 1. 访问 https://universe.roboflow.com/nedrick-chandra-gpg1l/safety-shoes-detection-5qgkg
echo 2. 点击 Download -^> YOLOv8 格式
echo 3. 解压到 datasets/safety-shoes-detection/
echo 4. 运行 python 01_download_dataset.py --no-modify
echo python 01_download_dataset.py --source ultralytics
pause
exit /b 1
)
@ -28,48 +25,47 @@ echo.
:: 选择模型
echo 选择模型:
echo 1. YOLOv8n (轻量级, 速度快, 推荐)
echo 2. YOLOv8s (精度更高, 稍慢)
echo 1. YOLOv8n (轻量级, 速度快)
echo 2. YOLOv8s (推荐, 速度和精度平衡)
echo 3. YOLOv8m (高精度, 较慢)
echo.
set /p MODEL_CHOICE="输入选择 (1-3, 默认 1): "
set /p MODEL_CHOICE="输入选择 (1-3, 默认 2): "
if "%MODEL_CHOICE%"=="" set MODEL_CHOICE=1
if "%MODEL_CHOICE%"=="" set MODEL_CHOICE=2
if "%MODEL_CHOICE%"=="1" (
set MODEL=yolov8n.pt
set DESC=YOLOv8n (轻量级)
set DESC=YOLOv8n
)
if "%MODEL_CHOICE%"=="2" (
set MODEL=yolov8s.pt
set DESC=YOLOv8s (标准)
set DESC=YOLOv8s (推荐)
)
if "%MODEL_CHOICE%"=="3" (
set MODEL=yolov8m.pt
set DESC=YOLOv8m (高精度)
set DESC=YOLOv8m
)
echo.
echo [信息] 使用模型: %DESC%
echo.
:: 设置训练参数
:: 训练参数
set EPOCHS=150
set IMGSZ=640
set BATCH=16
echo 训练参数:
echo - Epochs: %EPOCHS%
echo - Image Size: %IMGSZ%
echo - Image Size: %IMGSZ%x%IMGSZ%
echo - Batch Size: %BATCH%
echo - Device: GPU (cuda:0)
echo.
echo ============================================================
echo 开始训练
echo 开始训练
echo ============================================================
echo.
:: 开始训练
yolo detect train data=%DATASET% model=%MODEL% epochs=%EPOCHS% imgsz=%IMGSZ% batch=%BATCH% device=0
if %ERRORLEVEL% neq 0 (
@ -81,13 +77,11 @@ if %ERRORLEVEL% neq 0 (
echo.
echo ============================================================
echo 训练完成!
echo 训练完成!
echo ============================================================
echo.
echo 模型保存在: runs/detect/train/weights/
echo - best.pt (最佳模型)
echo - last.pt (最后模型)
echo 模型保存在: runs/detect/train/weights/best.pt
echo.
echo 下一步: 运行 03_export_onnx.bat 导出 ONNX 格式
echo 下一步: 运行 03_export_onnx.bat 导出 ONNX
echo.
pause

View File

@ -3,19 +3,15 @@ chcp 65001 >nul
cls
echo ============================================================
echo 导出 ONNX 模型 (YOLOv8)
echo 导出 ONNX 模型 (640x640)
echo ============================================================
echo.
:: 设置模型路径
set MODEL_PATH=runs/detect/train/weights/best.pt
:: 检查模型是否存在
if not exist %MODEL_PATH% (
echo [错误] 找不到模型文件: %MODEL_PATH%
echo.
echo 请先训练模型:
echo 运行 02_train.bat
echo [错误] 找不到模型: %MODEL_PATH%
echo 请先运行 02_train.bat 训练
pause
exit /b 1
)
@ -23,53 +19,17 @@ if not exist %MODEL_PATH% (
echo [信息] 输入模型: %MODEL_PATH%
echo.
:: 导出 ONNX
echo ============================================================
echo 导出 ONNX
echo ============================================================
echo.
yolo export model=%MODEL_PATH% format=onnx imgsz=640 opset=12 simplify=True
yolo export model=%MODEL_PATH% format=onnx imgsz=640 opset=12 simplify
if %ERRORLEVEL% neq 0 (
echo.
echo [错误] 导出失败!
pause
exit /b 1
)
echo.
echo ============================================================
echo 导出完成!
echo ============================================================
echo [成功] ONNX 模型: runs/detect/train/weights/best.onnx
echo.
:: 检查输出文件
set ONNX_PATH=runs\detect\train\weights\best.onnx
if exist %ONNX_PATH% (
echo [成功] ONNX 模型: %ONNX_PATH%
:: 获取文件大小
for %%I in (%ONNX_PATH%) do (
set SIZE=%%~zI
)
echo [信息] 文件大小: %SIZE% bytes
) else (
echo [警告] 找不到输出文件
)
echo.
echo ============================================================
echo 下一步操作
echo ============================================================
echo.
echo 1. 复制 ONNX 文件到 Ubuntu 机器:
echo scp %ONNX_PATH% user@ubuntu-pc:~/rknn_convert/
echo.
echo 2. 在 Ubuntu 上转换为 RKNN:
echo python 04_convert_rknn.py best.onnx -o shoe_detector.rknn -t rk3588
echo.
echo 3. 部署到 RK3588:
echo scp shoe_detector.rknn orangepi@^<rk3588_ip^>:/home/orangepi/apps/OrangePi3588Media/models/
echo 下一步: 在 Ubuntu 上运行 04_convert_rknn.py 转换
echo.
pause

View File

@ -1,157 +1,135 @@
# 鞋子检测模型训练指南
## 方案640x640 单模型部署时用2窗口
**训练阶段**
- 输入640x640 完整图片
- 模型YOLOv8s
- 输出640x640 模型文件
**部署阶段**pipeline配置
- 原图 1920x1080
- 分成 2 个 960x1080 窗口
- 每个窗口 resize 到 640x640 送入模型
- 合并检测结果
---
## 目录结构
```
train/
├── README.md # 本文件
├── 01_download_dataset.py # 下载数据集脚本
├── 02_train.bat # Windows 训练脚本
├── 01_download_dataset.py # 下载 Construction-PPE 数据集
├── 02_train.bat # Windows 一键训练脚本
├── 03_export_onnx.bat # 导出 ONNX 脚本
├── 04_convert_rknn.py # 转换为 RKNN 脚本
├── data.yaml.template # 数据集配置文件模板
└── samples/ # 示例图片(用于测试)
├── data.yaml.template # 数据集配置文件
└── samples/ # 示例图片
├── calibration/
├── test_images/
└── README.md
```
---
## 快速开始
### 1. 环境准备Windows + GPU
### 1. 下载数据集
```bash
# 安装 PyTorch (CUDA 11.8)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# 安装 ultralytics
pip install ultralytics
cd train
python 01_download_dataset.py --source ultralytics
```
### 2. 下载数据集
**手动下载(推荐):**
1. 访问https://universe.roboflow.com/nedrick-chandra-gpg1l/safety-shoes-detection-5qgkg
2. 点击 **"Download"** → 选择 **"YOLOv8"** 格式
3. 解压到 `datasets/safety-shoes-detection/` 目录
**或使用脚本(需要 API Key**
或手动下载:
```bash
python 01_download_dataset.py --api-key YOUR_API_KEY
wget https://github.com/ultralytics/assets/releases/download/v0.0.0/construction-ppe.zip
unzip construction-ppe.zip -d datasets/construction-ppe/
```
### 3. 准备数据集配置
### 2. 准备配置
复制模板并修改路径:
```bash
cp data.yaml.template datasets/safety-shoes-detection/data.yaml
# 编辑 data.yaml确保路径正确
cp data.yaml.template datasets/construction-ppe/data.yaml
```
### 4. 训练模型
### 3. 训练640x640
**一键训练:**
```bash
02_train.bat
```
**或手动训练**
或手动:
```bash
# YOLOv8n - 轻量级,速度快
yolo detect train data=datasets/safety-shoes-detection/data.yaml model=yolov8n.pt epochs=150 imgsz=640 batch=16 device=0
# YOLOv8s - 精度更高(可选)
# yolo detect train data=datasets/safety-shoes-detection/data.yaml model=yolov8s.pt epochs=150 imgsz=640 batch=16 device=0
yolo detect train \
data=datasets/construction-ppe/data.yaml \
model=yolov8s.pt \
epochs=150 \
imgsz=640 \
batch=16 \
device=0
```
训练完成后,模型保存在:`runs/detect/train/weights/best.pt`
**训练参数**
- 模型YOLOv8s速度和精度平衡
- 输入640x640
- 预计时间30-60分钟
### 5. 导出 ONNX
### 4. 导出 ONNX
```bash
03_export_onnx.bat
```
输出:`runs/detect/train/weights/best.onnx`
### 6. 转换为 RKNN
**在 Ubuntu PC 上运行:**
### 5. 转换为 RKNN
在 Ubuntu PC 上:
```bash
# 安装 RKNN Toolkit2
pip install rknn-toolkit2==2.2.0
# 转换FP16 模式 - 推荐)
python 04_convert_rknn.py runs/detect/train/weights/best.onnx -o shoe_detector.rknn -t rk3588
# 或 INT8 量化(需要校准数据集)
# python 04_convert_rknn.py runs/detect/train/weights/best.onnx -o shoe_detector.rknn -t rk3588 -q -d dataset.txt
python 04_convert_rknn.py runs/detect/train/weights/best.onnx -o shoe_detector_640.rknn -t rk3588
```
### 7. 部署到 RK3588
### 6. 部署2窗口配置
复制到 RK3588
```bash
scp shoe_detector.rknn orangepi@<rk3588_ip>:/home/orangepi/apps/OrangePi3588Media/models/
scp shoe_detector_640.rknn orangepi@<rk3588_ip>:/home/orangepi/apps/OrangePi3588Media/models/
```
然后在 `configs/full_pipeline_1080p.json` 中更新模型路径。
Pipeline 配置部署阶段用2窗口
```json
{
"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
}
```
---
## 训练参数说明
## 类别说明Construction-PPE
| 参数 | YOLOv8n | YOLOv8s | 说明 |
|------|---------|---------|------|
| 模型大小 | 3.2MB | 11MB | 文件大小 |
| 推理速度 | ~30-40ms | ~50-60ms | RK3588 NPU |
| mAP | ~0.75 | ~0.82 | 精度 |
| 推荐场景 | 实时检测 | 高精度 | 选择建议 |
---
## 数据集说明
### Safety Shoes Detection
- **来源**: Roboflow Universe
- **类别**: safety-shoes / no-safety-shoes
- **图片数**: 约 1000+ 张
- **场景**: 工地安全鞋检测
### 转换为单类检测
我们将两类合并为单一的 `shoe` 类别:
- 检测所有鞋子(安全鞋、运动鞋、布鞋等)
- 后续通过颜色分析判断是否为劳保鞋
---
## 常见问题
### Q1: 训练时显存不足?
降低 batch size
```bash
yolo detect train ... batch=8 # 默认 16改为 8
```
### Q2: 如何提高精度?
1. 增加训练 epoch`epochs=200`
2. 使用更大模型:`model=yolov8s.pt`
3. 增大输入尺寸:`imgsz=768`
4. 收集更多现场图片 fine-tune
### Q3: RKNN 转换失败?
1. 确保使用正确的 opset (12)
2. 使用 `simplify=True` 导出 ONNX
3. 检查 RKNN Toolkit2 版本与板端驱动匹配
### Q4: 检测不到鞋子?
1. 降低置信度阈值:`conf=0.15`
2. 检查 class_filter 是否正确设置
3. 确认输入图像尺寸与模型匹配
使用原始11类
- 0: helmet
- 1: gloves
- 2: vest
- 3: **boots** ← 主要关注
- 4: goggles
- 5: none
- 6: **Person**
- 7: no_helmet
- 8: no_goggle
- 9: no_gloves
- 10: **no_boots**
---
## 相关链接
- [Ultralytics YOLOv8 文档](https://docs.ultralytics.com/)
- [RKNN Toolkit2 文档](https://github.com/airockchip/rknn-toolkit2)
- [Roboflow Universe - Safety Shoes](https://universe.roboflow.com/nedrick-chandra-gpg1l/safety-shoes-detection-5qgkg)
- [Construction-PPE 数据集](https://docs.ultralytics.com/datasets/detect/construction-ppe/)
- [Ultralytics YOLOv8](https://docs.ultralytics.com/)

View File

@ -1,38 +1,16 @@
# 单类鞋子检测数据集配置
# 基于 Roboflow Safety Shoes Detection 数据集修改
# 将原有的两类 (safety-shoes / no-safety-shoes) 合并为单一的 shoe 类别
# Construction-PPE 数据集配置
# 数据集路径
train: ../train/images
val: ../valid/images
test: ../test/images
path: construction-ppe
train: images/train
val: images/val
test: images/test
# 类别配置
nc: 1 # 类别数
names: ['shoe'] # 类别名称列表
# 11类原始类别
nc: 11
names: [
'helmet', 'gloves', 'vest', 'boots', 'goggles', 'none',
'Person', 'no_helmet', 'no_goggle', 'no_gloves', 'no_boots'
]
# Roboflow 元信息(可选)
roboflow:
workspace: nedrick-chandra-gpg1l
project: safety-shoes-detection-5qgkg
version: 2
license: CC BY 4.0
url: https://universe.roboflow.com/nedrick-chandra-gpg1l/safety-shoes-detection-5qgkg/dataset/2
# 使用说明:
# 1. 将此文件复制到数据集根目录,命名为 data.yaml
# 2. 确保 train/val/test 路径正确
# 3. 运行训练: yolo detect train data=data.yaml model=yolov8n.pt epochs=150 imgsz=640
#
# 目录结构应为:
# safety-shoes-detection/
# ├── data.yaml # 本文件
# ├── train/
# │ ├── images/ # 训练图片
# │ └── labels/ # YOLO 格式标注文件
# ├── valid/
# │ ├── images/ # 验证图片
# │ └── labels/ # YOLO 格式标注文件
# └── test/
# ├── images/ # 测试图片
# └── labels/ # YOLO 格式标注文件
# 数据下载链接
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/construction-ppe.zip