专栏首页AI研习社专栏 | 【综述】Pytorch YOLO项目推荐 建议收藏学习

专栏 | 【综述】Pytorch YOLO项目推荐 建议收藏学习

以下文章来源于GiantPandaCV ,作者BBuf本文来自 @BBuf 的社区专栏 GiantPandaCV

最近一些群友有询问我有没有哪些YOLO的算法推荐,考虑到现在Pytorch是做实验发论文最流行的深度学习框架,所以我就针对Pytorch实现的YOLO项目做了一个盘点和汇总,真心希望可以帮助到入门目标检测的同学。写作不易,要是觉得这篇文章有用就点个关注吧QAQ。

前言

这篇推文的目的是为了给目标检测领域的刚入门或者希望进一步提升自己的能力的同学做的一个YOLO项目推荐。推荐的项目都是当前流行,Star较高,用Pytorch框架实现的基于YOLO的检测项目,建议收藏和学习。

推荐项目

Pytorch-YOLOv3

  • 项目地址:https://github.com/eriklindernoren/PyTorch-YOLOv3
  • 项目特点:代码简洁,适合学习,最原始的YOLOV3实现,没有什么特殊Trick。
  • 在COCO数据集上的mAP50测试结果如下:

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

  • 总结:本项目适合刚学习目标检测的新手,可以快速上手,了解YOLOV3的原理,为进一步的实验和工作打下基础。

ultralytics-yolov3

  • 项目地址:https://github.com/ultralytics/yolov3
  • 项目特点:实现效果更好,适合工业应用。此项目,不仅仅实现了先进的数据增强方式如嵌入增强,还支持多种SOTA metric learning方式的回归损失如IOU Loss,GIOU Loss,DIOU Loss, CIOU Loss。另外在分类损失时也支持了Focal Loss来提升检测的敏感度。最后,此项目还支持了超参数进化机制,可以在你的数据上生成更好的的超参数,相当于有自动调参的功能,吸引力很强。
  • 在COCO数据集上的mAP测试结果如下:
    • mAP@0.5 run at --iou-thr 0.5, mAP@0.5...0.95 run at --iou-thr 0.7
    • Darknet results: https://arxiv.org/abs/1804.02767

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

  • 在Google云上的速度测试:

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

YOLOv3-model-pruning

  • 项目地址:https://github.com/Lam1360/YOLOv3-model-pruning
  • 项目特点:用 YOLOv3 模型在一个开源的人手检测数据集 oxford hand 上做人手检测,并在此基础上做模型剪枝。对于该数据集,对 YOLOv3 进行 channel pruning 之后,模型的参数量、模型大小减少 80% ,FLOPs 降低 70%,前向推断的速度可以达到原来的 200%,同时可以保持 mAP 基本不变。
  • 原理简介:这个代码基于论文 ICLR 2017《Pruning Filters for Efficient ConvNets》 进行改进实现的 channel pruning算法,类似的代码实现还有这个 yolov3-network-slimming(地址:https://github.com/talebolano/yolov3-network-slimming)。原始论文中的算法是针对分类模型的,基于 BN 层的 gamma 系数进行剪枝的。剪枝步骤就是稀疏训练->剪枝->微调。
  • 剪枝结果:

下面是对部分卷积层进行剪枝前后通道数的变化:

部分卷积层的通道数大幅度减少

剪枝前后指标对比:

参数数量

模型体积

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 基本不变。需要明确的是,上面表格中剪枝的效果是只是针对该数据集的,不一定能保证在其他数据集上也有同样的效果。

Slim YOLOV3

  • 项目地址:https://github.com/PengyiZhang/SlimYOLOv3
  • 项目特点:《SlimYOLOv3: Narrower, Faster and Better for Real-Time UAV Applications》是arXiv, 25 Jul 2019的论文,作者全部来自北理,论文链接:arxiv.org/abs/1907.1109。作者对YOLOv3的卷积层通道剪枝(以通道级稀疏化),大幅削减了模型的计算量(~90.8% decrease of FLOPs)和参数量( ~92.0% decline of parameter size),剪枝后的模型运行速度约为原来的两倍,并基本保持了原模型的检测精度。
  • 原理介绍:这篇论文基本上就是ICLR 2017《Pruning Filters for Efficient ConvNets》 这篇论文在YOLOV3-SPP上的一个应用。原理可以用下图解释:
  • 算法结果:

结果1

结果2

  • 论文展示效果:

可视化效果图

  • 总结:说白了这篇论文就是剪枝算法在YOLOV3-SPP上的应用,技术含量其实也就那样。。。但是新手的话还是推荐大家来学习一下。

Anchor聚类 kmeans-anchor-boxes

  • 项目地址:https://github.com/lars76/kmeans-anchor-boxes
  • 项目特点:针对自己的数据集聚类出最适配的Anchor,可以加快收敛速度并有可能提升模型效果。
  • 原理介绍:我之前写了一篇推文仔细的讲解这个,地址如下:目标检测算法之YOLO系列算法的Anchor聚类代码实战
  • 在VOC 2007数据集上获得的算法结果:

论文中的不同聚类算法获得的平均IOU对比

在结果测试时,YOLOv2采用的5种Anchor可以达到的Avg IOU是61,而Faster-RCNN采用9种Anchor达到的平均IOU是60.9,也即是说本文仅仅选取5种Anchor就可以达到Faster-RCNN中9种Anchor的效果。

ASFF

  • 论文地址:https://arxiv.org/abs/1911.09516
  • 项目地址:https://github.com/ruinmessi/ASFF
  • 项目特点:超强Tricks!
  • 贡献:这篇论文最大的创新点是提出了一种新的特征融合的方式ASFF,通过学习权重参数的方式将不同层的特征融合到一起,作者证明了这样的方法要优于通过concatenation或者element-wise的方式。不仅如此,作者还在YOLOv3的基础上吸取了很多优秀的经验,构建了一个非常强劲的目标检测baseline,这个baseline的mAP就达到了38(之前的YOLOV3mAP值是33%左右,ORZ),其中包括:
    • Guided Anchoring
    • Bags of Tricks
    • Additional IoU loss
  • 算法原理:这里不多介绍,之后会专门写一篇文章介绍一下,这里看一下论文的核心原理图:

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

  • 总结:ASPP这篇论文可以算是集百家之长,并且ASPP创新点也是拉满,让我第一次知道空间信息的叠加也是可学习的,结果也非常惊艳,推荐大家学习。

yolov3-channel-and-layer-pruning

  • 项目地址:https://github.com/tanluren/yolov3-channel-and-layer-pruning
  • 项目特点:本项目以ultralytics/yolov3为基础实现,根据论文Learning Efficient Convolutional Networks Through Network Slimming (ICCV 2017)原理基于bn层Gmma系数进行通道剪枝,下面引用了几种不同的通道剪枝策略,并对原策略进行了改进,提高了剪枝率和精度;在这些工作基础上,又衍生出了层剪枝,本身通道剪枝已经大大减小了模型参数和计算量,降低了模型对资源的占用,而层剪枝可以进一步减小了计算量,并大大提高了模型推理速度;通过层剪枝和通道剪枝结合,可以压缩模型的深度和宽度,某种意义上实现了针对不同数据集的小模型搜索。此外,除了剪枝作者进一步在YOLOV3中使用了知识蒸馏策略,进一步压缩模型,具体请看原项目。这是国内的检测大佬维护的开源项目,也可以加入到他们的讨论群去讨论。

YOLO-Lite

  • 论文原文:https://arxiv.org/pdf/1811.05588.pdf
  • 项目地址:https://github.com/reu2018DL/YOLO-LITE
  • 项目特点:论文致力于设计一个网络(cpu速度大于10FPS,PASCAL VOC精度大于30%),因此基于YOLO-v2,提出了一个cpu端的或者端侧的实时检测框架YOLO-LITE。在PASCAL VOC 上取得了33.81%的map,在COCO上取得了12.26%的map,实时性达到了21FPS。
  • 算法原理:作者在论文里面主要证明了两点,一是浅层网络(shallow networks)的对于非GPU快速目标检测应用的能力;二是,证明BN层对于shallow networks是不必要的。
  • 精度和推理时间展示:

DataSet

mAP

FPS

PASCAL VOC

33.57

21

COCO

12.26

21

  • 效果展示:

- 总结:精度很低,不过对于网络修改和模型加速有一定的参考价值。

YOLO Nano

  • 论文地址:https://arxiv.org/abs/1910.01271
  • 项目地址:https://github.com/liux0614/yolo_nano
  • 项目特点:来自滑铁卢大学与 Darwin AI 的研究者提出了名为 YOLO Nano 的网络,他们通过人与机器协同设计模型架构大大提升了性能。YOLO Nano 大小只有 4.0MB 左右,比 Tiny YOLOv2 和 Tiny YOLOv3 分别小了 15.1 倍和 8.3 倍,在计算上需要 4.57B 次推断运算,比后两个网络分别少了 34% 和 17%,在性能表现上,在 VOC2007 数据集取得了 69.1% 的 mAP,准确率比后两者分别提升了 12 个点和 10.7 个点。值得一提的是4M是int8量化后的大小。
  • 精度和推理时间展示:

精度和推理时间展示

  • 网络结构:

网络结构

  • 总结:这个开源工程并不是作者公开的,论文中的信息也不足以支撑实现代码的开发以及效果的复现,不过PEP和FCA模块可以作为我们设计网络去借鉴的思路。

附录

  • YOLOV3 608:http://pjreddie.com/darknet/yolo/
  • Bag of Freebies for Training Object Detection Neural Networks : https://arxiv.org/abs/1902.04103

后记

好了,上面推荐的项目基本就是我入门目标检测一起调研到的Pytorch 实现的以YOLO为BaseLine的最值得收藏和学习的项目了,希望对大家有帮助。

本文分享自微信公众号 - AI研习社(okweiwu),作者:BBuf

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Facebook 最新论文:Mask R-CNN实例分割通用框架,检测,分割和特征点定位一次搞定(多图)

    对Facebook而言,想要提高用户体验,就得在图像识别上做足功夫。 AI 研习社此前报道《Facebook AML实验室负责人:将AI技术落地的N种方法》(上...

    AI研习社
  • Transformer各层网络结构详解!面试必备!(附代码实现)

    《Attention Is All You Need》是一篇Google提出的将Attention思想发挥到极致的论文(https://arxiv.org/pd...

    AI研习社
  • 开发者自述:我是怎样理解支持向量机(SVM)与神经网络的

    SVM与神经网络 支持向量机并不是神经网络,这两个完全是两条不一样的路吧。不过详细来说,线性SVM的计算部分就像一个单层的神经网络一样,而非线性SVM就完全...

    AI研习社
  • 【综述】Pytorch YOLO项目推荐 建议收藏学习

    最近一些群友有询问我有没有哪些YOLO的算法推荐,考虑到现在Pytorch是做实验发论文最流行的深度学习框架,所以我就针对Pytorch实现的YOLO项目做了一...

    BBuf
  • 学界 | 华盛顿大学推出YOLOv3:检测速度快SSD和RetinaNet三倍(附实现)

    选自pjreddie 作者:Joseph Redmon、Ali Farhadi 近日,来自华盛顿大学的 Joseph Redmon 和 Ali Farhadi ...

    朱晓霞
  • 学界 | 华盛顿大学推出YOLOv3:检测速度快SSD和RetinaNet三倍(附实现)

    选自pjreddie 作者:Joseph Redmon、Ali Farhadi 机器之心编译 近日,来自华盛顿大学的 Joseph Redmon 和 Ali F...

    机器之心
  • 深入机器学习系列之异常检测

    今天要给大家介绍的是异常检测(Anomaly Detection), 它是机器学习的一个重要分支,实际应用领域广泛,更与我们的生活息息相关。那么什么是异常检测?...

    数据猿
  • 【智能】机器学习:信用风险建模中的挑战,教训和机遇

    由于数据可用性和计算能力的快速增长,机器学习现在在技术和业务中发挥着至关重要的作用。机器学习对信用风险建模应用程序有重大贡献。 使用两个大型数据集,我们分析了一...

    陆勤_数据人网
  • 目标检测(object detection)系列(九) YOLOv3:取百家所长成一家之言

    取百家所长成一家之言是一句书面意思上绝对褒义的话,形容一个论文却有些许的尴尬,但是YOLOv3确实是这样,没什么大的改动和创新点,而是融合借鉴了很多在其他的方案...

    chaibubble
  • [答疑]为什么面试的时候不考核心域的知识

    潘老师的《软件方法》强调主攻自己的核心域知识,而较为忽视非核心域知识—计算机基础等,工作中确实用不到,但是现在工作面试中就喜欢关注这些平时用不到的非核心域,每逢...

    用户6288414

扫码关注云+社区

领取腾讯云代金券