YOLOv9最全使用教程与部署

本文详细介绍了YOLOv9的使用教程,包括模型构建特点、环境配置步骤、数据集准备、COCO数据集上的性能评估,以及训练、测试和ONNX模型部署。文章针对常见问题提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

YOLOv9最全使用教程与部署

论文链接:https://arxiv.org/abs/2402.13616
代码链接:https://github.com/WongKinYiu/yolov9

完全使用卷积结构进行构建,没有使用Transformer的结构,比带Transformer结构的RT-DETR、YOLOv8报告的性能都要好。(牛逼就完事了)

请添加图片描述

模型参数配置

MS COCO数据集

ModelTest SizeAPvalAP50valAP75valParam.FLOPs
YOLOv9-S64046.8%63.4%50.7%7.2M26.7G
YOLOv9-M64051.4%68.1%56.1%20.1M76.8G
YOLOv9-C64053.0%70.2%57.8%25.5M102.8G
YOLOv9-E64055.6%72.8%60.6%58.1M192.5G

目前官方只提供以上的YOLOv9-CYOLOv9-E模型。

1、配置环境

git clone https://github.com/WongKinYiu/yolov9.git
cd yolov9
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

2、数据集准备

bash scripts/get_coco.sh

下面是get_coco.sh的代码:

#!/bin/bash
# COCO 2017 dataset http://cocodataset.org
# Download command: bash ./scripts/get_coco.sh

# Download/unzip labels
d='./' # unzip directory
url=https://github.com/ultralytics/yolov5/releases/download/v1.0/
f='coco2017labels-segments.zip' # or 'coco2017labels.zip', 68 MB
echo 'Downloading' $url$f ' ...'
curl -L $url$f -o $f && unzip -q $f -d $d && rm $f & # download, unzip, remove in background

# Download/unzip images
d='./coco/images' # unzip directory
url=http://images.cocodataset.org/zips/
f1='train2017.zip' # 19G, 118k images
f2='val2017.zip'   # 1G, 5k images
f3='test2017.zip'  # 7G, 41k images (optional)
for f in $f1 $f2 $f3; do
  echo 'Downloading' $url$f '...'
  curl -L $url$f -o $f && unzip -q $f -d $d && rm $f & # download, unzip, remove in background
done
wait # finish background tasks

这里运行之后,需要操作如下:

(1)从https://github.com/WongKinYiu/yolov7/releases/download/v0.1/coco2017labels-segments.zip这个发行版中下载coco2017labels-segments.zip,里面是标签和文件路径的txt文件;

(2)从http://images.cocodataset.org/zips/这个网址上下载train2017.zip,val2017.zip,test2017.zip,但文件实在太大,建议直接手动输入网址进行下载,除此之外,还需要下载

配置完环境之后就可以训练和测试模型在COCO数据集上的表现了,截至到现在,官方只提供了yolov9-c.pt,yolov9-e.pt,gelan-c.pt,gelan-e.pt这四个预训练权重,下面只用yolov9-c.pt进行尝试,其他模型只需把对应的名字改一下就可以。

下面是笔者的数据集存放树:

coco
├── annotations(来自coco2017labels-segments)
│   ├── captions_train2017.json
│   ├── captions_val2017.json
│   ├── instances_train2017.json
│   ├── instances_val2017.json
│   ├── person_keypoints_train2017.json
│   └── person_keypoints_val2017.json
├── labels
│   ├── train2017(存放txt标签文件)
│   └── val2017(存放txt标签文件)
├── train2017
│   └── xxx.jpg
├── val2017
│   └── xxx.jpg
├── test2017
│   └── xxx.jpg
├── train2017.txt
├── val2017.txt
├── test-dev2017.txt

记得把yolov9/data/coco.yaml文件的数据集根路径改成自己coco数据集对应的根路径,需要修改第一行,笔者存放在项目文件的上一级目录datasets/coco中,具体代码如下:

path: ../datasets/coco

3、训练

(1)单卡训练

python train_dual.py --workers 8 --device 0 --batch 16 --data data/coco.yaml --img 640 --cfg models/detect/yolov9.yaml --weights '' --name yolov9 --hyp hyp.scratch-high.yaml --min-items 0 --epochs 500 --close-mosaic 15

这里--weights代表可以添加预训练权重的路径,这里默认是没有预训练权重,需要的话可以设置。

(2)多卡训练(没测试过,没资源):

python -m torch.distributed.launch --nproc_per_node 8 --master_port 9527 train_dual.py --workers 8 --device 0,1,2,3,4,5,6,7 --sync-bn --batch 128 --data data/coco.yaml --img 640 --cfg models/detect/yolov9-c.yaml --weights '' --name yolov9-c --hyp hyp.scratch-high.yaml --min-items 0 --epochs 500 --close-mosaic 15

遇到问题

问1:AttributeError: ‘FreeTypeFont’ object has no attribute ‘getsize’
解决方法1:pip install Pillow==9.5.0
参考链接:https://github.com/WongKinYiu/yolov9/issues/33

4、测试

python val_dual.py --data data/coco.yaml --img 640 --batch 32 --conf 0.001 --iou 0.7 --device 0 --weights './yolov9-c.pt' --save-json --name yolov9_c_640_val

需要安装pycocotools,如果没装的话会自动安装。

pip install pycocotools==2.0.7 -i https://pypi.tuna.tsinghua.edu.cn/simple/

遇到问题

问2:AttributeError: ‘list’ object has no attribute 'device'.
解决方法2:修改utils/generate.py文件第900行的相关内容,参考https://blog.csdn.net/weixin_41717861/article/details/136261437

修改后的代码如下:

  if isinstance(prediction, (list, tuple)):
        processed_predictions = []  # 用于存储处理后的张量列表
        for pred_tensor in prediction:
            # 对每个张量进行处理
            processed_tensor = pred_tensor[0]  # 假设你只关心张量中的第一个结果
            processed_predictions.append(processed_tensor)  # 将处理后的张量添加到列表中

        # 使用处理后的张量列表中的第一个张量作为预测结果
        prediction = processed_predictions[0]

    device = prediction.device

5、给定图片和视频进行测试

说明:路径(--source)这里需要根据个人需求进行修改,这里统一存放在inference这个文件夹内。

测试视频代码如下:

python detect.py --weights ./ckpt/yolov9-c.pt --conf 0.25 --img-size 640 --source  inference/video/demo.mp4 --device 0 --data data/coco.yaml

测试单张图片代码如下:

python detect.py --weights ./ckpt/yolov9-c.pt --conf 0.25 --img-size 640 --source inference/images/horses.jpg --device 0

运行结果:
请添加图片描述

注:运行过程中如果有第三方包找不到就会提示并进行安装,笔者在运行上述测试代码时就碰到了这样的问题,记录一下。
主要是安装这两个包:

pip install gitpython
pip install albumentations

6、模型部署

笔者做了一个python版的yolov9 ONNX模型部署,请参考下面链接:
https://github.com/Reversev/yolov9-onnxruntime
目前还没有时间写这个具体的教程(export文件需要进行修改),目前提供了转换好的ONNX模型文件,如果对你有帮助的话,请给我的Project点个星⭐️⭐️⭐️

7、总结

目前官方的代码相对比较乱,没有详细的说明,可能是想论文接收了再公布或者有其他原因。代码中很多都是照抄YOLOv5官方的代码,会导致有些代码运行时出问题,因此运行如果出现问题可以提issue,也可以对照YOLOv5代码找原因。

博文撰写时间:2024年2月24日
Yolov9官方之后会对代码进行更新(据说现在正在投稿),应该会出其他数据集和任务的应用代码。

8、参考链接

[1] https://github.com/WongKinYiu/yolov9

### YOLOv9在Ubuntu上的安装配置 #### 创建Python虚拟环境并激活 为了确保YOLOv9所需的依赖项不会其他项目冲突,建议先创建一个新的Conda虚拟环境。 ```bash conda create -n yolov9 python=3.8 conda activate yolov9 ``` #### 安装必要的库文件 对于YOLO系列模型来说,`ultralytics`是一个非常重要的官方支持库。可以通过pip命令来安装它: ```bash pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple/ ``` 需要注意的是,虽然上述命令适用于大多数情况下的YOLO版本安装[^1],但对于特定版本如YOLOv9可能需要额外的操作步骤或直接克隆GitHub仓库来进行本地编译安装。 #### 获取YOLOv9源码 由于YOLOv9并非由Ultralytics官方发布,因此通常情况下是从第三方开发者维护的分支获取最新代码。可以从GitHub上找到对应的存储库地址,并通过Git工具拉取最新的源代码: ```bash git clone https://github.com/some-developer/yolov9.git cd yolov9 ``` 请注意替换URL中的`some-developer`部分为实际提供者的名字或者组织名称。 #### 安装依赖关系 进入解压后的目录之后,执行如下指令以安装所有必需的Python包: ```bash pip install -r requirements.txt ``` 这一步骤会读取`requirements.txt`文件内的列表并将缺少的部分自动下载并安装到当前环境中去。 #### 测试安装是否成功 完成以上操作后,应该能够顺利导入YOLOv9模块而没有任何错误提示。可以尝试运行一些简单的推理脚本来验证整个过程是否顺利完成。 ```python from models.experimental import attempt_load model = attempt_load('yolov9.pt', map_location='cpu') # 加载预训练权重 print(model) ```
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IRevers

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值