资源技术动态【综述】Pytorch YOLO项目推荐 建议收藏学习

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

2020-02-19 | |  94 |   0

原标题: 【综述】Pytorch YOLO项目推荐 建议收藏学习

来源:AI 研习社     链接:https://www.yanxishe.com/columnDetail/17967

前言

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

推荐项目

Pytorch-YOLOv3

ModelmAP (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
  • 推理时间:

BackboneGPUFPS
ResNet-101Titan X53
ResNet-152Titan X37
Darknet-53 (paper)Titan X76
Darknet-53 (this impl.)1080ti74
  • 可视化效果:

1582096986460322.png1582097006275665.png


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

ultralytics-yolov3

  • 项目地址:https://github.com/ultralytics/yolov3

  • 项目特点:实现效果更好,适合工业应用。此项目,不仅仅实现了先进的数据增强方式如嵌入增强,还支持多种 SOTA metric learning 方式的回归损失如 IOU Loss,GIOU Loss,DIOU Loss, CIOU Loss。另外在分类损失时也支持了 Focal Loss 来提升检测的敏感度。最后,此项目还支持了超参数进化机制,可以在你的数据上生成更好的的超参数,相当于有自动调参的功能,吸引力很强。

  • 在 COCO 数据集上的 mAP 测试结果如下:


SizeCOCO mAP
@0.5...0.95
COCO mAP
@0.5
YOLOv3-tiny
YOLOv3
YOLOv3-SPP
YOLOv3-SPP-ultralytics
32014.0
28.7
30.5
36.3
29.1
51.8
52.3
55.5
YOLOv3-tiny
YOLOv3
YOLOv3-SPP
YOLOv3-SPP-ultralytics
41616.0
31.2
33.9
39.8
33.0
55.4
56.9
59.6
YOLOv3-tiny
YOLOv3
YOLOv3-SPP
YOLOv3-SPP-ultralytics
51216.6
32.7
35.6
41.3
34.9
57.7
59.5
61.3
YOLOv3-tiny
YOLOv3
YOLOv3-SPP
YOLOv3-SPP-ultralytics
60816.6
33.1
37.0
41.7
35.4
58.2
60.7
61.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.20/hr), T4 ($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

GPUn--batch --accumimg/sepoch
time
epoch
cost
K80132 x 211175 min$0.58
T41
2
32 x 2
64 x 1
41
61
48 min
32 min
$0.28
$0.36
V1001
2
32 x 2
64 x 1
122
178
16 min
11 min
$0.23
$0.31
2080Ti1
2
32 x 2
64 x 1
81
140
24 min
14 min
-
-
  • 可视化:

image.png

image.png

image.png

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 系数进行剪枝的。剪枝步骤就是稀疏训练-> 剪枝-> 微调。

  • 剪枝结果:

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

1582097118828710.png

剪枝前后指标对比:


参数数量模型体积Flops前向推断耗时(2070 TI)mAP
Baseline (416)61.5M246.4MB32.8B15.0 ms0.7692
Prune (416)10.9M43.6MB9.6B7.7 ms0.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 上的一个应用。原理可以用下图解释:

image.png

  • 算法结果:

02.png

1582097194226854.png

  • 论文展示效果:

1582097212495626.png

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

Anchor 聚类 kmeans-anchor-boxes

image.png

在结果测试时,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

  • 算法原理:这里不多介绍,之后会专门写一篇文章介绍一下,这里看一下论文的核心原理图:

1582097267496226.png

  • 算法结果:

06.png

在 COCO 数据集的精度测试。

Systemtest-dev mAPTime (V100)Time (2080ti)
YOLOv3 60833.020ms26ms
YOLOv3 608+ BoFs37.020ms26ms
YOLOv3 608 (our baseline)38.820ms26ms
YOLOv3 608+ ASFF40.622ms30ms
YOLOv3 608+ ASFF*42.422ms30ms
YOLOv3 800+ ASFF*43.934ms38ms
YOLOv3 MobileNetV1 416 + BoFs28.6-22 ms
YOLOv3 MobileNetV2 416 (our baseline)29.0-22 ms
YOLOv3 MobileNetV2 416 +ASFF30.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 是不必要的。

  • 精度和推理时间展示:

DataSetmAPFPS
PASCAL VOC33.5721
COCO12.2621
  • 效果展示:

07.png

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

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 量化后的大小。

  • 精度和推理时间展示:

1582097332249130.png

  • 网络结构:

1582097361894286.png

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

附录

后记

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

THE END

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:图卷积网络(GCN)情感识别

下一篇:研究人员使用AI对照片中的人脸进行去模糊处理

用户评价
全部评价

热门资源

  • 应用笔画宽度变换...

    应用背景:是盲人辅助系统,城市环境中的机器导航...

  • GAN之根据文本描述...

    一些比较好玩的任务也就应运而生,比如图像修复、...

  • 端到端语音识别时...

    从上世纪 50 年代诞生到 2012 年引入 DNN 后识别效...

  • 人体姿态估计的过...

    人体姿态估计是计算机视觉中一个很基础的问题。从...

  • 谷歌发布TyDi QA语...

    为了鼓励对多语言问答技术的研究,谷歌发布了 TyDi...