以下文章来源于GiantPandaCV ,作者BBuf本文来自 @BBuf 的社区专栏 GiantPandaCV
最近一些群友有询问我有没有哪些YOLO的算法推荐,考虑到现在Pytorch是做实验发论文最流行的深度学习框架,所以我就针对Pytorch实现的YOLO项目做了一个盘点和汇总,真心希望可以帮助到入门目标检测的同学。写作不易,要是觉得这篇文章有用就点个关注吧QAQ。
这篇推文的目的是为了给目标检测领域的刚入门或者希望进一步提升自己的能力的同学做的一个YOLO项目推荐。推荐的项目都是当前流行,Star较高,用Pytorch框架实现的基于YOLO的检测项目,建议收藏和学习。
Model | mAP (min. 50 IoU) |
---|---|
YOLOv3 608 (paper) | 57.9 |
YOLOv3 608 (this impl.) | 57.3 |
YOLOv3 416 (paper) | 55.3 |
YOLOv3 416 (this impl.) | 55.5 |
Backbone | GPU | FPS |
---|---|---|
ResNet-101 | Titan X | 53 |
ResNet-152 | Titan X | 37 |
Darknet-53 (paper) | Titan X | 76 |
Darknet-53 (this impl.) | 1080ti | 74 |
giraffe.png
dog
--iou-thr 0.5
, mAP@0.5...0.95 run at --iou-thr 0.7
Size | COCO mAP@0.5...0.95 | COCO mAP@0.5 | |
---|---|---|---|
YOLOv3-tinyYOLOv3YOLOv3-SPPYOLOv3-SPP-ultralytics | 320 | 14.028.730.536.3 | 29.151.852.355.5 |
YOLOv3-tinyYOLOv3YOLOv3-SPPYOLOv3-SPP-ultralytics | 416 | 16.031.233.939.8 | 33.055.456.959.6 |
YOLOv3-tinyYOLOv3YOLOv3-SPPYOLOv3-SPP-ultralytics | 512 | 16.632.735.641.3 | 34.957.759.561.3 |
YOLOv3-tinyYOLOv3YOLOv3-SPPYOLOv3-SPP-ultralytics | 608 | 16.633.137.041.7 | 35.458.260.761.5 |
https://cloud.google.com/deep-learning-vm/
Machine type: preemptible n1-standard-16 (16 vCPUs, 60 GB memory)
CPU platform: Intel Skylake
GPUs: K80 (0.35/hr), V100 ($0.83/hr) CUDA with Nvidia Apex FP16/32
HDD: 1 TB SSD
Dataset: COCO train 2014 (117,263 images)
Model: yolov3-spp.cfg
Command: python3 train.py --img 416 --batch 32 --accum 2
GPU | n | --batch --accum | img/s | epochtime | epochcost |
---|---|---|---|---|---|
K80 | 1 | 32 x 2 | 11 | 175 min | $0.58 |
T4 | 12 | 32 x 264 x 1 | 4161 | 48 min32 min | 0.36 |
V100 | 12 | 32 x 264 x 1 | 122178 | 16 min11 min | $0.23$0.31 |
2080Ti | 12 | 32 x 264 x 1 | 81140 | 24 min14 min | -- |
yolov3.cfg
yolov3-tiny.cfg
yolov3-spp.cfg
下面是对部分卷积层进行剪枝前后通道数的变化:
部分卷积层的通道数大幅度减少
剪枝前后指标对比:
参数数量 | 模型体积 | Flops | 前向推断耗时(2070 TI) | mAP | |
---|---|---|---|---|---|
Baseline (416) | 61.5M | 246.4MB | 32.8B | 15.0 ms | 0.7692 |
Prune (416) | 10.9M | 43.6MB | 9.6B | 7.7 ms | 0.7722 |
Finetune (416) | 同上 | 同上 | 同上 | 同上 | 0.7750 |
加入稀疏正则项之后,mAP 反而更高了(在实验过程中发现,其实 mAP上下波动 0.02 是正常现象),因此可以认为稀疏训练得到的 mAP 与正常训练几乎一致。将 prune 后得到的模型进行 finetune 并没有明显的提升,因此剪枝三步可以直接简化成两步。剪枝前后模型的参数量、模型大小降为原来的 1/6 ,FLOPs 降为原来的 1/3,前向推断的速度可以达到原来的 2 倍,同时可以保持 mAP 基本不变。需要明确的是,上面表格中剪枝的效果是只是针对该数据集的,不一定能保证在其他数据集上也有同样的效果。
结果1
结果2
可视化效果图
论文中的不同聚类算法获得的平均IOU对比
在结果测试时,YOLOv2采用的5种Anchor可以达到的Avg IOU是61,而Faster-RCNN采用9种Anchor达到的平均IOU是60.9,也即是说本文仅仅选取5种Anchor就可以达到Faster-RCNN中9种Anchor的效果。
ASPP
精度和速度对比
在COCO数据集的精度测试。
System | test-dev mAP | Time (V100) | Time (2080ti) |
---|---|---|---|
YOLOv3 608 | 33.0 | 20ms | 26ms |
YOLOv3 608+ BoFs | 37.0 | 20ms | 26ms |
YOLOv3 608 (our baseline) | 38.8 | 20ms | 26ms |
YOLOv3 608+ ASFF | 40.6 | 22ms | 30ms |
YOLOv3 608+ ASFF* | 42.4 | 22ms | 30ms |
YOLOv3 800+ ASFF* | 43.9 | 34ms | 38ms |
YOLOv3 MobileNetV1 416 + BoFs | 28.6 | - | 22 ms |
YOLOv3 MobileNetV2 416 (our baseline) | 29.0 | - | 22 ms |
YOLOv3 MobileNetV2 416 +ASFF | 30.6 | - | 24 ms |
DataSet | mAP | FPS |
---|---|---|
PASCAL VOC | 33.57 | 21 |
COCO | 12.26 | 21 |
- 总结:精度很低,不过对于网络修改和模型加速有一定的参考价值。
精度和推理时间展示
网络结构
好了,上面推荐的项目基本就是我入门目标检测一起调研到的Pytorch 实现的以YOLO为BaseLine的最值得收藏和学习的项目了,希望对大家有帮助。