YOLOv4-tiny模型训练与部署指南

在本文中,将详细介绍如何使用YOLOv4-tiny模型训练自己的数据,以检测自定义的对象。YOLOv4-tiny特别适合于计算资源有限的研究或部署场景,并且愿意为了速度牺牲一些检测性能。

如果希望跳过所有这些步骤,Roboflow是训练和部署计算机视觉模型的最简单方式。工具可以让在几小时内而不是几周内启动并运行,并且帮助模型随着看到的数据越来越多而不断改进。

YOLOv4-tiny与原始YOLOv4相比如何?在性能指标上,YOLOv4-tiny的推理时间大约是YOLOv4的8倍,而在MS COCO(一个非常困难的数据集)上的性能大约是2/3。在更易处理的小型自定义检测任务上,性能下降甚至更小。在本教程的自定义示例中,几乎看不到由于模型大小减小而导致的性能下降。

在模型架构上,YOLOv4 tiny和YOLOv4之间的主要区别在于网络大小大幅减小。CSP主干中的卷积层被压缩,YOLO层的数量从三个减少到两个,并且用于预测的锚框数量也减少了。可以在配置文件中自己查看这两个网络之间的差异:YOLOv4 tiny配置和YOLOv4配置。如果正在尝试检测小物体,应该保留第三个YOLO层,如yolov3-tiny_3l.cfg。

Scaled-YOLOv4发布:请查看创建YOLOv4-tiny所涉及的建模工作,在论文Scaled-YOLOv4中。Scaled-YOLOv4在曲线上超越了EfficientDet。查看Scaled-YOLOv4。

安装Darknet依赖项和YOLOv4-tiny框架:建议与YOLO v4 tiny Colab笔记本一起使用本文。本文中的许多细节也适用于一般How to Train YOLO v4教程,因此如果正在寻找更深入的细节,这是一个有用的资源。为了设置Darknet环境,需要这些依赖项:OpenCV、Cuda Toolkit、cuDNN、GPU资源、GPU架构。幸运的是,Google Colab为处理了前四个,所以只需要担心GPU架构。

对于Google Colab用户,添加了一个单元格,将根据检测到的GPU自动指定架构。如果在本地机器上(不是Colab),请查看机器的Makefile。需要根据GPU的计算能力更改以下行:

ARCH= -gencode arch=compute_60,code=sm_60

然后克隆Darknet仓库(对配置和打印语句进行了一些微调),并制作Darknet程序。如果成功,将看到很多奇怪的打印输出,包括:

g++ -std=c++11 -std=c++11 -Iinclude/ -I3rdparty/stb/include -DOPENCV `pkg-config --cflags opencv4 2> /dev/null

最后,将下载tiny YOLO的前29层,从COCO预训练权重开始训练:

yolov4-tiny.conv.29 100%[===================>] 18.87M 16.0MB/s in 1.2s

下载自定义数据集以供YOLOv4 tiny使用:在本教程中,使用的是Roboflow公共数据集上托管的公共血细胞检测数据集。如果想直接跟进,请分叉该数据集。否则,可以上传自定义对象的任何注释格式。要将数据上传到Roboflow,请创建一个免费的Roboflow账户。

需要用边界框标记数据吗?开始使用Roboflow Annotate、LabelMe、VoTT或LabelImg教程进行标记。使用Roboflow Annotate标记图像非常简单。一旦上传,可以选择预处理和增强步骤。在这个例子中,使用auto-orient和resize到416x416。

为示例数据集BCCD选择的设置。为了生成数据集版本,点击Generate,然后Download,选择YOLO Darknet格式。这为提供了一个curl链接,可以将其移植到Colab笔记本中进行下载。

导出为YOLO Darknet,并“显示下载代码”。一旦压缩了下载,将curl链接粘贴到笔记本中并运行它!从Roboflow下载数据 - 如果数据已经在Darknet框架中,可以跳过这一步。然后编写一些代码,编写obj.data文件,以指向Darknet用于训练的数据。

一切就绪!编写自定义YOLOv4-tiny训练配置。这里的重要收获是,YOLO模型会根据自定义数据集中的类别数量略微调整网络架构。因此,还应该根据类别数量调整训练的长度。因此,根据数据集创建了以下自定义变量:num_classes、max_batches(训练多长时间)、迭代步骤、层过滤器,并将它们写入配置文件,如YOLOv4存储库所指示。

训练自定义YOLOv4 tiny检测器:一旦有了环境、数据和训练配置,就可以继续使用以下命令训练自定义YOLOv4 tiny检测器:

!./darknet detector train data/obj.data cfg/custom-yolov4-tiny-detector.cfg yolov4-tiny.conv.29 -dont_show -map

启动训练:YOLOv4-tiny训练快速!在Tesla P-100上大约1小时的训练时间用于350张图像。见证了与YOLOv4相比,YOLOv4 tiny的训练速度提高了10-20倍。这真是了不起。YOLOv4 tiny是一个非常高效的模型,可以开始试验并感受数据。

模型训练时,注意mAP(平均精度均值)的计算。如果它稳步上升,这是一个好兆头,如果它开始恶化,那么模型已经过拟合到训练数据。

使用保存的权重从YOLOv4-tiny检测自定义对象:当训练完成后,darknet框架将在模型在验证集上实现最高mAP的地方丢弃backup/custom-yolov4-tiny-detector_best.weights。可以使用这些保存的权重来推断测试图像的检测:

!./darknet detect cfg/custom-yolov4-tiny-detector.cfg backup/custom-yolov4-tiny-detector_best.weights {img_path} -dont-show

推断:YOLOv4-tiny在测试图像上的推断 - 非常好!而且推断运行得很快,非常快:test/BloodImage_00113_jpg.rf.a6d6a75c0ebfc703ecff95e2938be34d.jpg:预测时间为3.131000毫秒。3ms,批量大小1,Tesla-P100!从那里,可以将权重从Colab移植出来,用于应用程序,而无需下次重新训练。

结论:恭喜!现在知道如何在自定义数据集上训练YOLOv4 tiny。它的训练速度非常快,并且比几乎所有其他模型都快。请继续关注YOLOv4 tiny与YOLOv5s的比较。可能还会喜欢访问有关如何训练的教程:Train YOLOv4 Darknet Tutorial、Train YOLOv5 PyTorch Tutorial。并了解更多关于建模的信息:Deep Dive on YOLOv4、Deep Dive On YOLOv5。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485