本项目旨在采用手撸YOLO模型的方式,来带大家一起在小型数据集上复现YOLO算法,目前计划里打算对YOLO V1,V3,V5,V8等进行手撸。
我们计划首先编写一套可以共用的数据 pipeline ( dataset
, dataloader
), 最终采取较为统一的基于 Pytorch的简单算法接口,并进行在关键通用数据集上的精度对齐。
欢迎感兴趣的有算力的小伙伴加入我们, 一起手撸YOLO模型!!
本仓库实现了论文 You Only Look Once: Unified, Real-Time Object Detection 中的内容,使用 PyTorch。代码遵循 Darknet 仓库的官方实现,与论文相比有一些细微差别:
- 最重要的区别在于模型的架构。具体来说,第一个全连接层被局部连接层取代。在论文中,YOLO 模型的架构如下:
- 在每个卷积层中,卷积操作后和激活函数之前使用了批量归一化操作。
- 学习率调度和网络训练的最大批次。
本仓库从零开始实现了论文中的内容,包括:
- 使用 VOC 训练集(train/val 2007 + train/val 2012)进行训练,以及
- 使用 VOC 测试集(test 2007)进行评估
- 已完成VOC数据集导入
- 各模块的代码撰写与网络结构的拼接
- 还需要适配COCO数据集
pip install -r requirements.txt
要下载和准备 VOC 数据集,请按以下顺序运行脚本:
./download_voc.sh ./data/voc
./organize_voc.sh ./data/voc
python3 simplify_voc_targets.py ./data/voc
如果需要小数据集进行训练(可选)
- --source_voc表示完整的voc原始数据的路径
- --target_voc表示筛选过后的小数据集存储路径
- --classes表示需要筛选的标签使用英文逗号隔开,例如: car,person,bus
python scripts/toy_voc.py --source_voc ./data/voc/VOC_Detection --target_voc ./data/voc/small_voc --classes car,person,bus
数据转换后的csv如下图所示:
Notebook大纲
采用默认的Config,第一个epoch耗时140s,156epoch大约需要6h。
batch_size=64显存需要约14G。
训练Epoch: 1%| | 1/156 [02:20<6:02:08, 140.18s/epoch, 训练损失=7.125, 测试损失=4.574, 当前学习率=0.000500, 耗时=140.18s]
Epoch 1/156:
训练损失: 7.125, 测试损失: 4.574
当前学习率: 0.000500
本轮训练耗时: 140.18s
MAP(Mean Average Precision) = 79.4%