[源码 🐋]( GitHub - WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information)
[论文 📘](arxiv.org/pdf/2402.13616.pdf)
论文摘要:本文介绍了一种新的目标检测算法YOLOv9,该算法利用可编程梯度信息来学习用户想要学习的内容。通过在网络的反向传播过程中引入可编程梯度信息,我们可以指导网络学习特定的目标,从而提高检测的准确性和效率。
1. 源码下载
- git clone GitHub - WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information
- cd yolov9
2. 配置
依赖库:torch
3. Data
YOLO format.
# class_id center_x center_y bbox_width bbox_height
Organize your directory of custom dataset as follows:
custom_dataset:/data/custom_data
├── images
│ ├── train
│ │ ├── train0.jpg
│ │ └── train1.jpg
│ └── test
│ ├── test0.jpg
│ └── test1.jpg
└── labels
├── train
│ ├── train0.txt
│ └── train1.txt
└── test
├── test0.txt
└── test1.txt
然后生成图像索引的txt文件
- Train
-
# python train.py --workers 8 --device 0 --batch 32 --data data/coco.yaml --img 640 --cfg models/detect/gelan-c.yaml --weights '' --name gelan-c --hyp hyp.scratch-high.yaml --min-items 0 --epochs 500 --close-mosaic 15
- # train gelan models
-
python train_dual.py --data data/coco_wj.yaml --img 640 --cfg models/detect/yolov9-c.yaml --weights '' --name yolov9-c --hyp hyp.scratch-high.yaml --min-items 0 --close-mosaic 15
- # train yolov9 models
-
- Evaluation
-
# evaluate converted yolov9 models python val.py --data data/coco.yaml --img 640 --batch 32 --conf 0.001 --iou 0.7 --device 0 --weights './yolov9-c-converted.pt' --save-json --name yolov9_c_c_640_val# evaluate yolov9 models #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# evaluate gelan models # python val.py --data data/coco.yaml --img 640 --batch 32 --conf 0.001 --iou 0.7 --device 0 --weights './gelan-c.pt' --save-json --name gelan_c_640_val
-
- Inference
- Python detect.py
- 下载权重yolov9-c.pt,并放在yolov9下,然后在代码中指定权重和图片
- 错误:nms:官方解释The first prediction is from aux branch, so choose second prediction.
-
# prediction = prediction[0] # select only inference outputprediction = prediction[0][1] # zqj20240226 prediction[0][0]两个结果不同
- Python detect.py
- Deploy
- 转onnx
- 使用第三方的转换+NMSPlugin
- 使用自带的export.py,可以生成onnx,但是转engine报错“/weight.28 ****”
- 转onnx
[博客 📰](https://github.com/thaitc-hust/yolov9-tensorrt/blob/main/torch2onnx.py)
Torch2onnx.py
add_nms_plugins.py # add BatchedNMSDynamic_TRT
也可以将这两个文件拷贝到yolov9下,生成onnx和onnx-nms
2. 转engine:trtexec
- 测试结果
- 耗时统计-640-batch4-rtx3060
显存1877MB cpu负载86% 内存12.1% 耗时57ms
未完待续