新YOLOv9模型的更新
YOLO系列模型有了一个新成员,在2024年2月发布了一篇新论文,标题为“YOLOv9: 使用可编程梯度信息学习您想要学习的内容”,详细论文可以在这个链接中查看:https://arxiv.org/pdf/2402.13616.pdf。以下是一个快速概述:
- 解决方案的核心是引入了可编程梯度信息(PGI)和一种新的轻量级网络架构,称为广义高效层聚合网络(GELAN)。
- 可编程梯度信息(PGI):论文将PGI引入为一种方法,以减轻数据通过深度神经网络层时的信息丢失。PGI确保完整的输入信息可用于目标任务以计算目标函数,从而可以获得可靠的梯度信息,用于更新网络权重。
- 广义高效层聚合网络(GELAN):GELAN基于梯度路径规划设计,旨在优化参数利用。这种架构在轻量级模型中展示出优异的结果,特别是与PGI结合时,在MS COCO数据集上的对象检测任务中表现比现有的最先进方法更好。
- 优越的性能:在基于MS COCO数据集的对象检测上,GELAN和PGI的组合表现出优于其他方法的性能,特别是在参数利用和准确性方面,甚至超过了在大型数据集上预训练的模型。
MS COCO对象检测数据集的性能
与新YOLOv9进行实际交互
在本节中,我将向您展示如何使用Roboflow在您的自定义数据集上使用新模型,以下是详细步骤:
1.确保您的运行时类型设置为GPU:
您可以通过选择Runtime > Change runtime type来检查,确保选择了GPU选项。
现在运行以下部分以确认我们正在使用正确的机器类型,并使得在我们的数据集中更容易进行使用。
!nvidia-smi
import os
HOME = os.getcwd()
print(HOME)
2.设置和安装
现在是时候克隆YOLOv9存储库,并安装roboflow库,以便我们可以直接在笔记本中轻松下载我们的数据集,并下载模型权重。
!git clone https://github.com/SkalskiP/yolov9.git%cd yolov9
!pip install -r requirements.txt -q
!pip install -q roboflow
!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
!ls -la {HOME}/weights
3.创建您的Roboflow数据集
下一步是创建您想要使用的自定义数据集。
顺便一提,不必使用roboflow,只要您的训练和测试数据的文件结构符合YOLOv9文件结构标准,您也可以在自己的计算机上手动完成。我鼓励热心的读者这样做,但是对于本文,我们将继续使用Roboflow,因为它提供了更便捷的交互。
转到Roboflow项目页面,然后选择创建新项目:
然后您将被重定向到创建页面,请确保填写所有被请求的详细信息,以下是一个示例:
从这一点上开始,您将被要求上传您的数据集数据,因此请确保将所有相关的图像添加在那里,然后点击上传。
接下来,您需要对图像进行标注。这非常直观:
使用提示框围绕正确的对象创建方框。
然后将所选框分配给相应的类别。
下一步是生成阶段,您需要创建一个版本,在此阶段确保配置所有您认为与您的特定情况相关的预处理和增强步骤,然后继续。完成选择选项后,点击创建。
现在,在右上角选择导出数据集选项,检查显示下载代码选项和YOLOv9格式,然后点击继续。
您将获得一个下载代码,请复制它,并将其粘贴到笔记本的以下部分:
开始训练
最后,现在我们需要训练我们的自定义模型,请根据您的项目需求设置参数,并相应地更改批量大小、时期数和图像分辨率大小:
%cd {HOME}/yolov9
!python train.py \
--batch 16 --epochs 25 --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
训练过程可能需要一些时间,具体取决于您的数据集大小和所选择的参数配置。
要查看我们的模型在训练过程中的表现,以下是绘制出漂亮指标图的代码片段。我将展示我的结果和指标,但不要期望它们很好,因为我的数据集相当小且贫乏,目标只是展示训练新模型的可能性。
from IPython.display import Image
Image(filename=f"{HOME}/yolov9/runs/train/exp/results.png", width=1000)
训练结果
还有没有混淆矩阵?
from IPython.display import Image
Image(filename=f"{HOME}/yolov9/runs/train/exp/confusion_matrix.png", width=1000)
训练后的淆矩阵
如果要检查模型的预测,可以这样做:
from IPython.display import Image
Image(filename=f"{HOME}/yolov9/runs/train/exp/val_batch0_pred.jpg", width=1000)