README.md 6.01 KB
Newer Older
yaoht's avatar
yaoht committed
1
# YOLOv9
yaoht's avatar
yaoht committed
2

yaoht's avatar
yaoht committed
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
## 论文

https://arxiv.org/abs/2402.13616

## 模型结构

YOLOv9引入了可编程梯度信息 (PGI) 和广义高效层聚合网络 (GELAN) 等开创性技术,标志着实时目标检测领域的重大进步。

<img src=./Doc/yolov9-model.png style="zoom:100%;" align=middle>

## 算法原理

YOLOv9从可逆函数角度理论上分析了现有的CNN架构,基于这种分析,YOLOv9作者还设计了PGI和辅助可逆分支,并取得了优秀的结果;
YOLOv9用到的PGI解决了深度监督只能用于极深的神经网络架构的问题,因此使得新的轻量级架构才更适合落地;
YOLOv9中设计的GELAN仅使用传统卷积,就能实现比基于最先进技术的深度可分卷积设计更高的参数使用率,同时展现出轻量级、快速和精确的巨大优势;
基于所提出的PGI和GELAN,YOLOv9在MS COCO数据集上的性能在所有方面都大大超过了现有的实时目标检测器。

<img src=./Doc/pgi.png style="zoom:100%;" align=middle>

PGI主要包括三个组成部分,即:主分支, 辅助可逆分支, 多级辅助信息。PGI推理过程仅使用主分支,因此不需要任何额外的推理成本。

<img src=./Doc/gelan.png style="zoom:100%;" align=middle>
YOLOv9提出了新网络架构——GELAN。GELAN通过结合两种神经网络架构,即结合用梯度路径规划(CSPNet)和(ELAN)设计了一种广义的高效层聚合网络(GELAN);GELAN综合考虑了轻量级、推理速度和准确度。GELAN整体架构如上图所示。YOLOv9将ELAN的能力进行了泛化,原始ELAN仅使用卷积层的堆叠,而GELAN可以使用任何计算块作为基础Module。

## 环境配置

### Docker(方法一)

拉取镜像:

```shell
yaoht's avatar
yaoht committed
34
docker pull image.sourcefind.cn:5000/dcu/admin/base/migraphx:4.3.0-ubuntu20.04-dtk24.04.1-py3.10
yaoht's avatar
yaoht committed
35
36
37
38
39
```

创建并启动容器:

```shell
yaoht's avatar
yaoht committed
40
docker run --shm-size 16g --network=host --name=yolov9_migraphx --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v /opt/hyhal:/opt/hyhal:ro -v $PWD/yolov9_migraphx:/home/yolov9_migraphx -it <Your Image ID> /bin/bash
yaoht's avatar
yaoht committed
41
42
43
44
45
46
47
48
49
50
51

# 激活dtk
source /opt/dtk/env.sh
```

### Dockerfile(方法二)

```shell
cd ./docker
docker build --no-cache -t yolov9_migraphx:2.0 .

yaoht's avatar
yaoht committed
52
docker run --shm-size 16g --network=host --name=yolov9_migraphx --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v /opt/hyhal:/opt/hyhal:ro -v $PWD/yolov9_migraphx:/home/yolov9_migraphx -it <Your Image ID> /bin/bash
yaoht's avatar
yaoht committed
53
54
55
56
57
58
59
60

# 激活dtk
source /opt/dtk/env.sh
```

## 数据集

根据提供的样本数据,进行目标检测。
yaoht's avatar
yaoht committed
61
模型下载:链接: https://pan.baidu.com/s/15IghjVixiY2z4DSySZ6XHg?pwd=e7mu 提取码: e7mu 将下载的yolov9-c-dynamic.onnx和yolov9-c.onnx放到目录<path_to_yolov9_migraphx>/Resource/Models下。
yaoht's avatar
yaoht committed
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103

## 推理

### Python版本推理

下面介绍如何运行Python代码示例,Python示例的详细说明见Doc目录下的Tutorial_Python.md。

#### 设置环境变量

```shell
export PYTHONPATH=/opt/dtk/lib:$PYTHONPATH
```

#### 安装依赖

```shell
# 进入python示例目录
cd <path_to_yolov9_migraphx>/Python

# 安装依赖
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
```

#### 运行示例

YOLOv9模型的推理示例程序是YoloV9_infer_migraphx.py,使用如下命令运行该推理示例:


1. 静态推理

```shell
python YoloV9_infer_migraphx.py --staticInfer
```

2. 动态推理

```shell
python YoloV9_infer_migraphx.py --dynamicInfer
```

### C++版本推理

yaoht's avatar
yaoht committed
104
105
106
107
108
109
110
111
112
113
注意:当使用操作系统不一样时,CMakeList需要做相应的修改:

```
# ubuntu操作系统
${CMAKE_CURRENT_SOURCE_DIR}/depend/lib64/ 修改为 ${CMAKE_CURRENT_SOURCE_DIR}/depend/lib/

# centos操作系统
${CMAKE_CURRENT_SOURCE_DIR}/depend/lib/ 修改为 ${CMAKE_CURRENT_SOURCE_DIR}/depend/lib64/
```

yaoht's avatar
yaoht committed
114
115
116
117
118
119
120
121
122
123
124
125
126
127
下面介绍如何运行C++代码示例,C++示例的详细说明见Doc目录下的Tutorial_Cpp.md。


#### 构建工程

```shell
cd <path_to_yolov9_migraphx>
rbuild build -d depend
```

#### 设置环境变量

将依赖库依赖加入环境变量LD_LIBRARY_PATH,在~/.bashrc中添加如下语句:

yaoht's avatar
yaoht committed
128
129
130
131
132
133
134
135
当操作系统是ubuntu系统时:

```shell
export LD_LIBRARY_PATH=<path_to_yolov9_migraphx>/depend/lib/:$LD_LIBRARY_PATH
```

当操作系统是centos系统时:

yaoht's avatar
yaoht committed
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
```shell
export LD_LIBRARY_PATH=<path_to_yolov9_migraphx>/depend/lib64/:$LD_LIBRARY_PATH
```

然后执行:

```shell
source ~/.bashrc
```

#### 运行示例

YOLOv9示例程序编译成功后,执行如下指令运行该示例:

```shell
# 进入yolov9 migraphx工程根目录
cd <path_to_yolov9_migraphx>

# 进入build目录
cd build/
```

1. 静态推理

```shell
./YOLOV9 0
```

2. 动态推理

```shell
./YOLOV9 1
```

## result

### Python版本

静态推理:

python程序运行结束后,会在当前目录生成YOLOV9静态推理检测结果可视化图像。

<img src="./Resource/Images/Result_python.jpg" alt="Result" style="zoom: 50%;" />

动态推理:

python程序运行结束后,会在当前目录生成YOLOv9动态推理检测结果可视化图像。

<img src="./Resource/Images/Result0_python.jpg" alt="Result0" style="zoom: 50%;" />

<img src="./Resource/Images/Result1_python.jpg" alt="Result1" style="zoom: 50%;" />

### C++版本

静态推理:

C++程序运行结束后,会在build目录生成YOLOV9静态推理检测结果可视化图像。

<img src="./Resource/Images/Result.jpg" alt="Result" style="zoom:50%;" />

动态推理:

C++程序运行结束后,会在build目录生成YOLOv9动态shape推理检测结果可视化图像。

<img src="./Resource/Images/Result0.jpg" alt="Result0" style="zoom:50%;" />

<img src="./Resource/Images/Result1.jpg" alt="Result1" style="zoom:50%;" />

### 精度



## 应用场景

### 算法类别

`目标检测`

### 热点应用行业

`交通`,`教育`,`化工`

## 源码仓库及问题反馈

chenzk's avatar
chenzk committed
220
https://developer.sourcefind.cn/codes/modelzoo/yolov9_migraphx
yaoht's avatar
yaoht committed
221
222
223
224

## 参考资料

https://github.com/WongKinYiu/yolov9