# yolo_from_scratch **Repository Path**: luzhihaoTestingLab/yolo_from_scratch ## Basic Information - **Project Name**: yolo_from_scratch - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-21 - **Last Updated**: 2026-06-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Tiny YOLO — 从零实现目标检测 一个用于学习的轻量级 YOLO 目标检测模型,纯 PyTorch 实现。 ## 特点 - **极简**:~50 万参数,FP32 约 2MB,FP16 约 1MB - **全卷积**:无全连接层,检测头用 1x1 卷积 - **深度可分离卷积**:backbone 轻量化 - **代码清晰**:每个组件独立,注释详尽,适合学习 ## 架构 ``` Input (224×224×3) → Depthwise Separable Conv Backbone → 1×1 Conv Detection Head → Output (7×7×30) ``` 输出 7×7 网格,每格预测 2 个边界框 + 20 个类别(Pascal VOC 格式)。 ## 文件结构 ``` ├── yolo_model.py # 模型定义、损失函数、解码、NMS ├── train.py # 训练脚本(支持 VOC 和合成数据) ├── .gitignore └── README.md ``` ## 快速开始 ### 安装依赖 ```bash pip install torch torchvision numpy pillow ``` ### 合成数据训练(无需下载数据集) ```bash python train.py --synthetic --epochs 50 --batch_size 32 ``` ### Pascal VOC 训练 ```bash python train.py --epochs 50 --batch_size 32 ``` 首次运行会自动下载 VOC 2007 到 `./data/`。 ### 恢复训练 ```bash python train.py --resume checkpoint_final.pth --epochs 100 ``` ### 查看模型信息 ```bash python yolo_model.py ``` ## 训练输出 | 文件 | 说明 | |---|---| | `yolo_v1_best.pth` | 最佳模型权重(~2MB) | | `yolo_v1_final.pth` | 最终模型权重(~2MB) | | `checkpoint_epochN.pth` | 完整训练快照,用于恢复 | ## 命令行参数 | 参数 | 默认值 | 说明 | |---|---|---| | `--synthetic` | False | 使用合成数据 | | `--epochs` | 30 | 训练轮数 | | `--batch_size` | 16 | 批次大小 | | `--lr` | 0.001 | 学习率 | | `--resume` | None | 从 checkpoint 恢复 | | `--data_root` | ./data | VOC 数据集路径 | | `--num_workers` | 2 | DataLoader 进程数 | ## 关键概念 ### YOLO 核心思想 把目标检测当作回归问题:输入一张图,一次性输出所有框和类别。 ### 网格划分 图片被分成 S×S 个格子。每个格子负责预测中心点落在该格子的物体。 ### 输出张量 每个格子输出 `B×5 + C` 个值: - `x, y`:边界框中心在格子内的相对位置(0~1) - `w, h`:边界框宽高(相对整图,0~1) - `confidence`:框内有物体的置信度 - `class_probs`:C 个类别的概率 ### 损失函数 | 损失项 | 权重 | 说明 | |---|---|---| | 坐标损失 | 5 | x, y, w, h 的 MSE | | 有物体置信度 | 1 | 有物体格子的 confidence MSE | | 无物体置信度 | 0.5 | 无物体格子的 confidence MSE | | 分类损失 | 1 | 类别概率的 MSE | ## 与 YOLOv8 的差异 | | Tiny YOLO | YOLOv8n | |---|---|---| | 参数量 | 0.5M | 3.2M | | 文件大小 | ~2MB | ~6MB | | 检测头 | 单尺度 7×7 | 多尺度(80/40/20) | | 全连接层 | 无 | 无 | | Anchor | 无(直接回归) | Anchor-free | | 用途 | 学习 | 生产 | ## 参考资料 - [YOLOv1 论文](https://arxiv.org/abs/1506.02640) - [YOLOv8 Ultralytics](https://github.com/ultralytics/ultralytics) ## License MIT