赞
踩
论文链接:https://arxiv.org/abs/2402.13616
代码链接:https://github.com/WongKinYiu/yolov9
完全使用卷积结构进行构建,没有使用Transformer的结构,比带Transformer结构的RT-DETR
、YOLOv8报告的性能都要好。(牛逼就完事了)
MS COCO数据集
Model | Test Size | APval | AP50val | AP75val | Param. | FLOPs |
YOLOv9-S | 640 | 46.8% | 63.4% | 50.7% | 7.2M | 26.7G |
YOLOv9-M | 640 | 51.4% | 68.1% | 56.1% | 20.1M | 76.8G |
YOLOv9-C | 640 | 53.0% | 70.2% | 57.8% | 25.5M | 102.8G |
YOLOv9-E | 640 | 55.6% | 72.8% | 60.6% | 58.1M | 192.5G |
目前官方只提供以上的YOLOv9-C
和YOLOv9-E
模型。
git clone https://github.com/WongKinYiu/yolov9.git
cd yolov9
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
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/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
记得把yolov9/data/coco.yaml
文件的数据集根路径改成自己coco数据集对应的根路径,需要修改第一行
,笔者存放在项目文件的上一级目录datasets/coco中,具体代码如下:
path: ../datasets/coco
(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
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
说明:路径(--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
笔者做了一个python版的yolov9 ONNX模型部署,请参考下面链接:
https://github.com/Reversev/yolov9-onnxruntime
目前还没有时间写这个具体的教程(export文件需要进行修改),目前提供了转换好的ONNX模型文件,如果对你有帮助的话,请给我的Project点个星⭐️⭐️⭐️
目前官方的代码相对比较乱,没有详细的说明,可能是想论文接收了再公布或者有其他原因。代码中很多都是照抄YOLOv5官方的代码,会导致有些代码运行时出问题,因此运行如果出现问题可以提issue,也可以对照YOLOv5代码找原因。
博文撰写时间:2024年2月24日
Yolov9官方之后会对代码进行更新(据说现在正在投稿),应该会出其他数据集和任务的应用代码。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。