当前位置:   article > 正文

YOLOv9最全使用教程与部署_yolo9安装部署教程

yolo9安装部署教程

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/
  • 1
  • 2
  • 3

2、数据集准备

bash scripts/get_coco.sh
  • 1

下面是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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

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

(1)从https://github.com/ultralytics/yolov5/releases/download/v1.0/这个发行版中下载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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

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

path: ../datasets/coco
  • 1

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
  • 1

这里--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

遇到问题

问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
  • 1

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

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

遇到问题

问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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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
  • 1

测试单张图片代码如下:

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

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

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

pip install gitpython
pip install albumentations
  • 1
  • 2

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/312778
推荐阅读
相关标签
  

闽ICP备14008679号