YOLOv4-Microsoft COCO数据集上最准确的实时神经网络

Darknet YOLOv4比Google TensorFlow EfficientDet和FaceBook Pytorch / Detectron RetinaNet / MaskRCNN更快/更准确。

关于介质的同一文章介质
代码github.com/AlexeyAB/darknet
文章arxiv.org/abs/2004.10934


我们将展示比较和使用神经网络检测物体的一些细微差别。

我们的目标是开发一种用于实际产品的对象检测算法,而不仅仅是推动科学发展。YOLOv4神经网络(608x608)的准确度是Microsoft-COCO-testdev 43.5%AP / 65.7%AP50。在Tesla V100上为

62 FPS -YOLOv4(608x608批次= 1)- 在RTX 2080 Ti上使用Darknet- frame
400 FPS -YOLOv4(416x416批次= 4)-在TensorRT + tkDNN上使用
32 FPS -YOLOv4(416x416批次= 1) Jetson AGX Xavier-使用TensorRT + tkDNN




首先,一些有用的链接。




我们的YOLOv4神经网络和我们自己的Darknet DL框架(C / C ++ / CUDA)在FPS速度和AP50:在Microsoft COCO数据集上的准确度优于DL框架和神经网络:Google TensorFlow EfficientDet,FaceBook Detectron RetinaNet / MaskRCNN,PyTorch Yolov3-ASFF和其他许多产品... YOLOv4在Microsoft COCO测试中以62 FPS TitanV或34 FPS RTX 2070的速度达到了43.5%AP / 65.7%AP50的精度。与其他现代探测器不同,YOLOv4可以训练任何具有以下能力的人具有8-16 GB VRAM的nVidia游戏图形卡的任何人。现在,不仅大型公司可以在数百个GPU / TPU上训练神经网络,以使用大型微型批次来实现更高的精度,所以我们将人工智能的控制权返回给普通用户,因为对于YOLOv4,不需要大型微型批次,可以限制为2-8。

YOLOV4最适合实时使用,因为网络位于AP(准确性)/ FPS(速度)图中的帕累托最优曲线上。



许多神经网络的准确性(AP)和速度(FPS)图表,用于检测在GPU TitanV / TeslaV100,TitanXP / TeslaP100,TitanX / TeslaM40上测量的对象,以显示AP50的两个主要准确性指标:95和AP50

为了公平起见,我们从文章和仅在具有相同架构的GPU上进行比较。

大多数实际任务对检测器具有最低的必要要求-这些是可接受的最低精度和速度。通常,对于实时系统,最低允许速度为30 FPS(每秒帧)或更高。

从图中可以看出,在FPS 30或更高的实时系统中:

  • YOLOv4-608 RTX 2070 450$ (34 FPS) 43.5% AP / 65.7% AP50
  • EfficientDet-D2 TitanV 2250$ (42 FPS) 43.0% AP / 62.3% AP50
  • EfficientDet-D0 RTX 2070 450$ (34 FPS) 33.8% AP / 52.2% AP50

那些。与EfficientDet-D2(Google-TensorFlow)相比,YOLOv4所需的设备便宜5倍,且精度更高。您可以使用EfficientDet-D0(Google-TensorFlow),则设备成本相同,但准确性将降低10%AP。
另外,某些工业系统在散热或使用被动冷却系统方面有限制-在这种情况下,即使有钱也不能使用TitanV。

在使用TensorRT + tkDNN的RTX 2080 Ti GPU上使用YOLOv4(416x416)时,我们的速度提高了2倍,而在batch = 4时,速度提高了3x-4倍-坦白地说,我们不在arxiv上的文章中介绍这些结果。单位:

YOLOv4神经网络(416x416)FP16(张量核心)批处理= 1达到32 FPS计算器nVidia Jetson AGX Xavier使用库+ tkDNN TensorRT:github.com/ceccocats/tkDNN
速度稍慢,使得使用CUDA编译的OpenCV-dnn库:docs .opencv.org / master / da / d9d / tutorial_dnn_yolo.html

有时,在使用大批量时或在使用专用软件(TensorRT)进行测试时,可以指示文章中某些神经网络的速度(FPS),这可以优化网络并显示出增加的FPS值。将TRT上的某些网络与没有TRT的其他网络进行比较是不公平的。与批次= 1相比,使用较大的批次大小会增加FPS,但也会增加延迟(而不是减少延迟)。如果批次= 1的网络显示40 FPS,而批次= 32的网络显示60 FPS,则对于批次= 1,延迟将为25ms,对于批次= 32,延迟为〜500ms,因为每秒仅处理约2个数据包(每个32个图像),这就是为什么在许多工业系统中不使用批处理= 32的原因。因此,我们仅在批处理= 1且不使用TensorRT的情况下比较了图上的结果。

任何过程都可以由人或计算机控制。当计算机系统由于低速而造成较大的延迟而犯了太多错误时,则不能委托它完全控制动作,在这种情况下,该人控制流程,并且计算机系统仅给出提示-这是一个推荐系统-该人可以工作,并且仅该系统告诉哪里出错了。当系统快速且高精度地工作时,这样的系统可以独立控制过程,只有人来照料。因此,准确性和系统速度始终很重要。如果您觉得YOLOv4 416x416的120 FPS对于您的任务而言太高了,并且最好更慢,更准确地采用该算法,那么在实际任务中,您很有可能会使用比Tesla V100 250瓦弱的功能,例如RTX 2060 / Jetson-Xavier 30-80 Watt,在这种情况下,您将在YOLOv4 416x416上获得30 FPS,而其他神经网络则以1-15 FPS或根本无法启动。

训练各种神经网络的特征


您必须在多个Tesla V100 32GB GPU上以mini-batch = 128大小训练EfficientDet,而YOLOv4仅在一个mini-batch = 8 =批/细分的Tesla V100 32GB GPU上进行训练,并且可以在常规游戏中进行训练显卡8-16GB GPU-VRAM。
下一个细微差别是训练神经网络以检测其自身对象的难度。无论在相同的1080 Ti GPU上训练其他网络多少时间,您都不会获得上图所示的准确性。大多数网络(EfficientDet,ASFF等)都需要在4-128个GPU上进行训练(使用syncBN具有较大的迷你批处理大小),并且有必要针对每种网络分辨率进行新的训练,而不能同时满足这两个条件,就不可能达到它们声明的AP或AP50精度。


您可以在其他检测器中看到物体的检测精度与最小批量大小的相关性,即 使用128个视频卡而不是8个视频卡,学习速度提高了10倍,最终精度提高了1.5 AP-MegDet:大型微型批处理对象检测器arxiv.org/abs/1711.07240

Yolo ASFF:arxiv.org/abs/1911.09516
继[43]之后,我们在训练过程中引入了一些技巧,例如混合算法[12],余弦[26]学习率进度表和同步批量归一化技术[30]。

EfficientDet:arxiv.org/abs/1911.09070
在每次每次卷积后,以批次范数衰减0.99和epsilon 1e-3添加同步的批次归一化。

每个模型在32个TPUv3内核上训练了300个时期,批次总大小为128。

cloud.google.com/tpu/docs/types-zones#europe
v3-32 TPU type (v3) – 32 TPU v3 cores – 512 GiB Total TPU memory

您必须使用512 GB TPU / GPU-RAM来训练EfficientDet模型,并在批次= 128时进行同步批次归一化,而mini-batch = 8且仅32 GB GPU-RAM用于训练YOLOv4。尽管如此,尽管YOLOv4仅训练了1次,每1个GPU的分辨率为512x512(Tesla V100 32GB / 16GB),但它比公共网络更快/更准确。同时,使用较小的微型批处理大小和GPU-VRAM不会像其他神经网络那样导致准确性的急剧下降:


来源:arxiv.org/abs/2004.10934

因此,您可以在PC上本地训练人工智能,而无需下载数据集到云-这可以确保对您的个人数据的保护,并为所有人提供人工智能培训。

只需训练一次网络分辨率为512x512的网络,然后就可以在以下范围内使用不同的网络分辨率:[416x416-512x512-608x608]。

大多数其他模型需要针对每种网络分辨率分别进行每次训练,因此,训练时间要长很多倍。

物体检测算法的测量精度特征


您总是可以找到一张图像,其中一种算法效果不佳,另一种算法效果很好,反之亦然。因此,为了测试检测算法,使用了约20,000张图像和80种不同类型的对象的大集合-MSCOCO test-dev数据集。

因此,算法不会尝试仅记住每个图像的哈希值以及其上的坐标(过度拟合),因此始终会在算法和训练过程中未看到的图像和标签上检查对象检测的准确性-这确保了算法可以检测到图像/视频上的对象没看过。

因此,在公共领域,没有人会犯错,在公共领域,您只检测到test-dev测试图像,然后将结果发送到CodaLab评估服务器,在该服务器上,程序本身会将您的结果与任何人都无法访问的测试注释进行比较。 。

MSCOCO数据集包括3个部分

  1. 教程:120,000张图像和一个json文件,其中包含每个对象的坐标
  2. 验证集:5,000个图像和一个json文件,其中包含每个对象的坐标
  3. 测试套件:41,000个不带对象坐标的jpg图像(其中一些图像用于确定任务的准确性:对象检测,实例分割,关键点等)

YOLOv4开发的特点


在开发YOLOv4时,我必须在C / C ++ / CUDA上同时开发YOLOv4神经网络和Darknet框架。因为 在Darknet中,没有自动区分和自动执行链规则的功能,因此必须手动实施所有渐变。另一方面,我们可以摆脱严格遵循链条规则,改变反向传播并尝试非常平凡的事情来提高学习稳定性和准确性。

创建神经网络时的其他发现


  • 并非总是最好的用于对对象进行分类的网络将最好地用作用于检测对象的网络的骨干网
  • 使用经过训练的权重具有提高分类精度的功能可能会对检测器精度产生不利影响(在某些网络上)
  • 并非各种研究中陈述的所有功能都会提高网络准确性。
  • .
  • BFLOPS , BFLOPS
  • , receptive field , stride=2 / conv3x3, weights (filters) .

YOLOv4


使用受过训练的YOLOv4模型的对象检测内置于OpenCV-dnn库github.com/opencv/opencv/issues/17148中,因此您可以直接从OpenCV使用YOLOv4,而无需使用Darknet框架。OpenCV库支持在CPU,GPU(nVidia GPU),VPU(Intel Myriad X)上实现神经网络。更多详细信息:docs.opencv.org/master/da/d9d/tutorial_dnn_yolo.html

OpenCV(dnn)框架:


Darknet框架:


tkDNN + TensorRT-使用YOLOv4进行对象检测的最大速度:TensorRT + tkDNN github.com/ceccocats/tkDNN

  • RTX 2080 Ti上为400 FPS-YOLOv4(416x416批次= 4)
  • 在Jetson AGX Xavier上为32 FPS-YOLOv4(416x416批次= 1)

可以扩展使用YOLOv4来检测3D旋转Bboxes或关键点/面部标志,例如:

github.com/ouyanghuiyu/darknet_face_with_landmark


All Articles