0. 写在前面
今天笔者为大家分享国外的James Gallagher和Piotr Skalski编写的YOLOv9使用教程!原博客链接为
https://blog.roboflow.com/train-yolov9-model
。
YOLOv9开源了一种新的CV模型架构,比现有流行的YOLO模型(YOLOv8、YOLOv7和YOLOv5)在MS COCO数据集上取得了更高的mAP。
本指南展示了如何在自定义数据集上训练YOLOv9模型,将通过一个训练视觉模型的例子来识别一个球场上的足球运动员。有了这一点,可以用这个指南使用你想要的任何数据集。
话不多说,让我们开始!
1. 什么是YOLOv9?
YOLOv9是由Chien-Yao Wang, I-Hau Yeh, and Hong-Yuan Mark Liao开发的计算机视觉模型。Hong-Yuan Mark Liao和Chien-Yao Wang还对YOLOv4、YOLOR和YOLOv7等流行的模型架构进行了研究。YOLOv9引入了两种新的架构:YOLOv9和GELAN,这两种架构都可以从论文发布的YOLOv9 Python库中使用。
使用YOLOv9模型,可以训练出一个目标检测模型。此时不支持分割、分类等任务类型。YOLOv9有四种模型,按参数个数排序是:v9-S、v9-M、v9-C、v9-E。目前v9 - S和v9 - M的权重暂不可用。其中最小的模型在MS COCO数据集的验证集上达到了46.8 %的AP,而最大的模型达到了55.6 %。这为目标检测性能提供了一个新的先进水平。下面的图表展示了来自YOLOv9研究团队的研究结果。
YOLOv9在撰写本指南时没有官方许可证。截至2023年2月22日,一位主要研究人员指出:"我认为应该是GPL3,我会检查并更新许可文件。"。这表明许可证将很快确定。
2. 如何安装YOLOv9
YOLOv9被打包为一系列脚本,您可以使用这些脚本进行工作。在撰写本指南时,没有官方的Python包或包装器可供您与模型进行交互。
要使用YOLOv9,您需要下载项目存储库。然后,您可以运行训练作业或从现有的COCO检查点进行推理。
本教程假定您正在使用Google Colab。如果您在笔记本环境之外的本地机器上工作,请根据需要调整命令。
YOLOv9中存在一个错误,阻止您对图像进行推理,但Roboflow团队正在维护一个非官方的分支,其中包含一个补丁,直到修复发布。要从我们的补丁分支安装YOLOv9,请运行以下命令:
git clone https://github.com/SkalskiP/yolov9.gitcd yolov9 pip3 install -r requirements.txt -q
让我们设置一个HOME目录来工作:
import os HOME = os.getcwd()print (HOME)
接下来,需要下载模型权重。目前只有v9 - C和v9 - E权重可用。可以使用以下命令进行下载:
!mkdir -p {HOME}/weights !wget -P {HOME}/weights -q https://github.com/WongKinYiu/yolov9/releases/download/v0.1/yolov9-c.pt !wget -P {HOME}/weights -q https://github.com/WongKinYiu/yolov9/releases/download/v0.1/yolov9-e.pt !wget -P {HOME}/weights -q https://github.com/WongKinYiu/yolov9/releases/download/v0.1/gelan-c.pt !wget -P {HOME}/weights -q https://github.com/WongKinYiu/yolov9/releases/download/v0.1/gelan-e.pt
现在可以使用项目库中的脚本在YOLOv9模型上运行推理和训练。
3.在YOLOv9模型上推理
在示例图像上使用v9 - C COCO检查点进行推理。创建一个新的数据目录,并将示例图像下载到您的笔记本中。你可以用我们的狗图片作为例子,也可以用你想要的任何其他图片。
!mkdir -p {HOME}/data !wget -P {HOME}/data -q https://media.roboflow.com/notebooks/examples/dog.jpeg SOURCE_IMAGE_PATH = f"{HOME}/dog.jpeg"
我们现在可以在我们的图像上进行推理:
!python detect.py --weights {HOME}/weights/gelan-c.pt --conf 0.1 --source {HOME}/data/dog.jpeg --device 0 Image(filename=f"{HOME}/yolov9/runs/detect/exp/dog.jpeg" , width=600)
我们的模型能够成功地识别出图像中的人、狗和汽车。有鉴于此,该模型错误地将背带识别为手提包,并且未能检测到背包。
让我们试试参数最多的v9 - E模型:
!python detect.py --weights {HOME}/weights/yolov9-e.pt --conf 0.1 --source {HOME}/data/dog.jpeg --device 0 Image(filename=f"{HOME}/yolov9/runs/detect/exp2/dog.jpeg" , width=600)
该模型能够成功识别人、狗、汽车和背包。
4. 如何训练YOLOv9模型
您可以使用YOLOv9项目目录中的train.py文件来训练YOLOv9模型。
第1步:下载数据集
要开始训练模型,您将需要一个数据集。对于本指南,我们将使用一个关于足球运动员的数据集。生成的模型将能够在场地上识别足球运动员。
如果您没有数据集,请查看Roboflow Universe,这是一个共享了超过200,000个计算机视觉数据集的社区。您可以找到涵盖从书脊到足球运动员再到太阳能电池板的数据集。
运行以下代码来下载我们在本指南中使用的数据集:
%cd {HOME}/yolov9 roboflow.login() rf = roboflow.Roboflow() project = rf.workspace("roboflow-jvuqo" ).project("football-players-detection-3zvbc" ) dataset = project.version(1).download("yolov7" )
当您运行此代码时,将会要求您通过Roboflow进行身份验证。请跟随在您的终端中出现的链接进行验证。如果您没有账户,将被带到一个页面,您可以在该页面创建一个账户。然后,再次点击链接以使用Python包进行身份验证。
此代码以YOLOv7格式下载数据集,该格式与YOLOv9模型兼容。
您可以使用任何按照YOLOv7格式格式化的数据集来进行此操作。
第2步:使用YOLOv9 Python脚本训练模型
让我们为我们的数据集训练一个模型,训练20个epochs。我们将使用GELAN-C架构进行此操作,该架构是YOLOv9 GitHub仓库发布的两种架构之一。GELAN-C的训练速度快。GELAN-C的推理时间也很快。
您可以使用以下代码进行此操作:
%cd {HOME}/yolov9 !python train.py \ --batch 16 --epochs 20 --img 640 --device 0 --min-items 0 --close-mosaic 15 \ --data {dataset.location}/data.yaml \ --weights {HOME}/weights/gelan-c.pt \ --cfg models/detect/gelan-c.yaml \ --hyp hyp.scratch-high.yaml
你的模型将开始训练。模型训练时,将看到每个epoch的训练指标。一旦模型完成训练,就可以使用YOLOv9生成的图来评估训练结果。
运行下面的代码来查看你的训练图:
Image(filename=f"{HOME}/yolov9/runs/train/exp/results.png" , width=1000)
运行下面的代码来查看你的混淆矩阵:
运行以下代码,查看您的模型在验证集中的一批图像上的结果:
Image(filename=f"{HOME}/yolov9/runs/train/exp/val_batch0_pred.jpg" , width=1000)
第3步:在自定义模型上运行推理
既然我们有了一个训练好的模型,我们就可以进行推理。为此,我们可以使用YOLOv9库中的detection . py文件。
运行以下代码对验证集中的所有图像进行推理:
!python detect.py \ --img 1280 --conf 0.1 --device 0 \ --weights {HOME}/yolov9/runs/train/exp/weights/best.pt \ --source {dataset.location}/valid/images import glob from IPython.display import Image, displayfor image_path in glob.glob(f'{HOME}/yolov9/runs/detect/exp4/*.jpg' )[:3]: display(Image(filename=image_path, width=600))print ("\n" )
我们在大小为640的图像上训练了我们的模型,这使得我们可以用较少的计算资源来训练模型。在推理过程中,我们将图像尺寸增加到1280,使得我们可以从我们的模型中得到更准确的结果。
下面是我们模型结果的三个例子:
我们的模型成功地识别了球员、裁判员和守门员。
5. 结论
YOLOv9是由Chien-Yao Wang, I-Hau Yeh, and Hong-Yuan Mark Liao发布的一种新的计算机视觉模型架构。可以使用YOLOv9架构训练目标检测模型。
在本指南中,我们演示了如何在自定义数据集上运行推理和训练YOLOv9模型。我们克隆了YOLOv9项目代码,下载了模型权重,然后使用默认的COCO权重进行推理。然后,我们使用足球运动员检测数据集训练了一个微调的模型。我们回顾了训练图和混淆矩阵,然后在来自验证集的图像上测试了模型。