如何训练缩放的YOLOv4对象检测模型

2021-01-15 20:23:52

最近,随着Scaled-YOLOv4的发布,对象检测技术又向前迈进了一步–一种最新的最新对象检测机器学习模型。

在此博客文章中,我们将研究创建Scaled-YOLOv4模型所涉及的突破,然后我们将通过一个示例来研究如何在自定义数据集中推广和训练模型以检测自定义对象。

在本教程中,我们将利用Roboflow进行计算机视觉数据管理,并利用Paperspace进行GPU计算资源。

在Roboflow上,我们发现Scaled-YOLOv4系列模型在推断速度与网络准确性的权衡连续体中,在EfficientDet和所有其他现有的对象检测网络(以平均平均精度衡量)方面均居首位。

如果您想进一步了解Scaled-YOLOv4为何如此出色,请查看我们在Roboflow博客上写的Scaled-YOLOv4细分。我们还建议您查阅Scaled-YOLOv4论文以探索原始作者提出的基准。

为了监督我们的自定义Scaled-YOLOv4对象检测器,我们将需要收集对象检测训练数据。如果您想直接按照本教程进行操作,则可以使用数据集页面右上方的Fork按钮来分叉公共航海数据集:

另外,如果您想使用自己的映像,我们建议收集代表您的模型在部署中将面临的条件的映像。您可以先从一小批图像开始,以评估可行性,然后再扩大规模,但总的来说,图像越多样化,最终结果就越好。

在本教程中,我们将使用来自公共航海数据集的图像。有了想要用来训练模型的图像后,就可以为它们加上标签了。

要标记图像,您将在要检测的对象周围绘制边界框。以下是为此类计算机视觉应用程序标记图像的一些技巧:

要在Roboflow中手动标记数据,您将首先上传原始图像并创建一个新的数据集。在新的数据集页面中,只需单击图像并绘制边界框即可开始标记。有关注释的更多详细信息,请查看标签文档。

对标记的数据集感到满意后,就可以继续在Roboflow中生成数据集版本。为此,请从Roboflow的数据集视图中选择下载。您也可以选择自己喜欢的任何预处理和扩充选项。

选择下载后,选择TXT>将Scaled-YOLOv4作为输出格式,然后选择“获取链接”以获取指向您数据的卷曲链接。

请保留此链接,因为您将使用它在短短一分钟内将数据集带入Paperspace笔记本。

要训​​练Scaled-YOLOv4模型,我们首先需要提供GPU资源以运行我们的训练工作。

由于使用家庭中较大的网络时,Scaled-YOLOv4培训要求会大幅增加,因此考虑到可用的按需GPU支持的实例的多样性,Paperspace是一个很自然的入门之地。

当然,您可以使用任何可用的GPU资源,但是仍然可以按照本教程进行操作。

登录到Paperspace后,导航到Gradient,然后选择Clusters,然后选择Create a Managed Cluster。

您将看到新的私有群集处于Provisioning状态-该群集需要几分钟的时间进行配置,因此请耐心等待。

设置群集后,可以在“笔记本”选项卡中启动笔记本进行培训。

在步骤1中,为您的笔记本命名,例如YOLOv4教程。您可能还希望将自动关机设置为1小时,以防止在以后忘记关闭机器电源的情况下过度充电。

在步骤2中,我们可以将容器选择留空。我们将在步骤4中指定一个自定义容器。

在第3步中,选择我的私有群集,然后选择您要在其上训练的GPU的私有群集。 较大的GPU将更快地训练您的模型-我们在本教程中使用了P4000。 在步骤4中,打开“高级选项”,然后将以下NVIDIA PyTorch容器复制到“工作区URL”字段中: 单击“创建笔记本”,Paperspace将在新的私有集群上加速您的培训环境。 此过程可能还需要几分钟。 一旦进入笔记本,我们需要进行一些安装,然后才能准备进行培训。 接下来,我们将为GPU安装mish-cuda,以便我们可以在笔记本GPU上快速运行mish激活功能。 最后,从Roboflow导入curl链接,以正确的格式导入数据。 这应该从ScaledYOLOv4 repo文件夹向上的一个目录中执行。 现在我们已经完成了所有设置,我们只需要调用一个命令就可以开始对自定义数据进行培训。

cd ./ScaledYOLOv4/!python train.py --img 416-第16批--epochs 50 --data' ../ data.yaml' --cfg ./models/yolov4-csp.yaml --weights'' --name yolov4-csp结果--cache

-img:定义输入图像的大小-批处理:确定批处理的大小-时期:定义训练时期的数量。 (注意:通常在这里3000+)!-数据:设置yaml文件的路径-cfg:指定模型的配置-权重:指定权重的自定义路径。-名称:结果名称-nosave:仅保存最终检查点缓存:缓存图像以进行更快的训练

训练开始后,您想观察一下mAP(平均平均精度)指标的上升情况,如果它趋于平稳,则可以停止脚本。

训练后,您可以查看Tensorboard指标,再次关注mAP:

#启动tensorboard#在开始训练后启动#日志保存在" runs"%load_ext tensorboard%tensorboard文件夹中--logdir运行

如果要使用较大版本的网络,请在培训中切换cfg参数。在models文件夹中,您会看到各种模型配置选项,包括yolov4-p5,yolov4-p6和著名的yolov4-p7。要训​​练这些较大的模型,单个GPU可能不适合您,您可能需要启动多GPU服务器并通过分布式启动在多GPU上进行训练:

python -m torch.distributed.launch --nproc_per_node 4 train.py-批处理大小64 --img 896 896 --data coco.yaml --cfg yolov4-p5.yaml --weights'&#39 ; --sync-bn-设备0、1、2、3-名称yolov4-p5

既然您已经训练了Scaled YOLOv4模型,就可以利用模型对新图像进行推断。为此,我们将模型指向数据集的测试集,并将检测脚本指向我们的自定义权重(您也可以在此处指定视频):

/ content / ScaledYOLOv4Namespace(agnostic_nms = False,增量= False,类=无,conf_thres = 0.4,device ='&#39 ;, img_size = 416,iou_thres = 0.5,output ='推断/输出&# 39; save_txt = False,源=' ../ test / images&#39 ;,更新= False,view_img = False,权重= [' ./ runs / exp1_yolov4-csp-results / weights / best.pt'])使用CUDA设备0 _CudaDeviceProperties(name =' Tesla V100-SXM2-16GB',total_memory = 16130MB)融合图层...模型摘要:235个图层,5.24921e + 07参数, 5.04494e + 07渐变图片1/32 /content/test/images/DJI_0262_JPG.rf.3878c367b5f00b7ce0f5c9bdcb4d8486.jpg:416x416完成。 (0.020秒)图像2/32 /content/test/images/DJI_0262_JPG.rf.47ce7cf6d8e3e310ab9b2b5c15ebba72.jpg:416x416完成。 (0.020秒)图像3/32 /content/test/images/DJI_0262_JPG.rf.560b36a2e292c1b3dee7eae7e1f3fbf0.jpg:416x416 1个扩展坞,完成。 (0.021s)图片4/32 /content/test/images/DJI_0262_JPG.rf.5f24b2ccccf544d3bb0c3cb740be0f4b.jpg:416x416 1部升降机,完成。 (0.021s)图片5/32 /content/test/images/DJI_0262_JPG.rf.66b031d30a28587d2c06f38af05cb4ec.jpg:416x416 1个扩展坞,已完成。 (0.021s)图片6/32 /content/test/images/DJI_0262_JPG.rf.8c378a23b8822f63a44ad24c8787fab3.jpg:416x416 1部升降机,完成。 (0.025秒)

最后,在笔记本末尾,我们可以下载自定义模型权重。这些目前在PyTorch框架中,您可以使用与培训相同的软件来调用它们。您还可以将这些权重转换为其他框架,例如Tensor RT,ONNX,TorchScript,TensorFlow Saved Graph,TFLite。

这些其他格式的实现将是具有新依赖性的新软件。旅程已经开始!

一旦有了在笔记本上训练网络的感觉,就可以考虑在存储库中形式化训练和推理流程,并利用Paperspace的自动缩放功能来部署网络进行推理。

恭喜你!您已经了解了如何使用Scaled-YOLOv4在自定义对象上训练最新技术。