使用Scaled-YOLOv4进行自定义目标检测

在这篇文章中,将探讨如何利用Scaled-YOLOv4模型来检测世界上的任何物体,前提是拥有合适的训练数据。例如,可以使用无人机从上方检测船只和水上摩托艇。

准备自定义的Scaled-YOLOv4数据集

为了训练目标检测器,需要标记的图像数据,这些数据将教会模型需要检测的内容。如果只是想学习这项新技术,并希望直接跟随本教程,可以使用公共的空中海洋数据集。

在收集自己的图像时,建议收集代表模型在部署中将面临的条件的图像。越多样化越好。可以从一小批图像开始,以评估问题的可行性,然后再进行扩展。

要使用自己的数据进行本教程,需要在Roboflow上注册并创建一个公共工作区,或者在现有的账户中创建一个新的公共工作区。如果数据是私有的,可以升级到付费计划,以便导出数据以使用此类外部训练程序,或者尝试使用Roboflow的内部训练解决方案。

在Roboflow中,现在可以直接标记数据。上传数据到Roboflow后,在创建新数据集时,将在Roboflow中绘制围绕想要检测的物体的边界框。

一旦对标记的数据集感到满意,可以通过选择预处理和增强选项来创建数据集版本。选择数据集版本并点击生成后,选择Scaled-YOLOv4格式,将获得一个curl链接,将其带入Colab笔记本中。

安装Scaled-YOLOv4依赖项

一旦进入笔记本,需要进行一些安装,然后才能开始训练。幸运的是,Google Colab为提供了许多安装,比如PyTorch。确保在驱动器中保存副本,并检查运行时是否使用免费的GPU。

然后克隆Scaled-YOLOv4仓库,并切换到yolov4-large分支。接下来,将安装mish-cuda以使GPU能够快速运行mish激活函数。之后,将安装pyaml,这是读取数据所需的。

最后,从Roboflow导入curl链接,以正确的格式将数据带入笔记本中。

启动Scaled-YOLOv4训练

现在已经设置好了一切,只需要调用一个命令就可以开始对自定义数据进行训练。

!python train.py --img 416 --batch 16 --epochs 50 --data '../data.yaml' --cfg ./models/yolov4-csp.yaml --weights '' --name yolov4-csp-results --cache

以下选项是可能的:

  • img: 定义输入图像大小
  • batch: 确定批量大小
  • epochs: 定义训练周期的数量。(注意:通常,这里3000+很常见!)
  • data: 设置yaml文件的路径
  • cfg: 指定模型配置
  • weights: 指定自定义权重的路径。
  • name: 结果名称
  • nosave: 仅保存最终检查点
  • cache: 缓存图像以加快训练速度

一旦训练开始,希望看到mAP(平均精度均值)指标上升,如果它趋于平稳,可以停止脚本。训练结束后,可以查看Tensorboard指标,再次关注mAP:

使用Scaled-YOLOv4模型进行推理

现在已经训练了Scaled-YOLOv4模型,可以利用模型对新图像进行推理。为此,将模型指向数据集的测试集,并指向检测脚本指向自定义权重(也可以在这里指定视频):

!python detect.py --weights ./runs/exp0_yolov4-csp-results/weights/best.pt --img 416 --conf 0.4 --source ../test/images

推理发生得很快(特别是在GPU上)

导出权重和部署

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

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

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