README.md 6.06 KB
Newer Older
shangxl's avatar
shangxl committed
1
2
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
# DeepLabv3

## 论文

DeepLabv3:Rethinking Atrous Convolution for Semantic Image Segmentation

- https://arxiv.org/abs/1706.05587

## 模型结构

DeepLabV3 是 DeepLab 系列语义分割算法的第三代版本,主要用于语义分割任务。

<img src="./Doc/Images/deeplabv3_01.jpg" style="zoom:80%;" align=middle>

## 算法原理
DeepLabv3 的核心原理如下:

1. **空洞卷积(Atrous convolution)**:传统卷积通过滑动窗口提取特征,但感受野有限。Deeplabv3 采用空洞卷积在不增加计算量和参数的前提下,显著扩大卷积的感受野,能捕捉更广泛的上下文信息,同时保持特征图的空间分辨率。
2. **空洞空间金字塔池化(Atrous Spatial Pyramid Pooling)**:通过不同空洞率的卷积,同时处理小物体(小感受野)和大物体(大感受野)的特征,再将所有分支的输出拼接融合,使模型对物体尺度变化更鲁棒。
3.  **编码器-解码器(Encoder-Decoder)**:编码器‌负责特征提取,采用空洞空间金字塔池化 (ASPP)模块,通过不同膨胀率的空洞卷积获取多尺度上下文信息;解码器‌通过插值上采样和卷积操作恢复物体边界细节,与编码器输出的特征图融合后生成高分辨率分割结果。

## 环境配置

### Docker(方法一)

拉取镜像:

```
29
docker pull image.sourcefind.cn:5000/dcu/admin/base/migraphx:5.0.0-ubuntu22.04-dtk25.04.1-py3.10
shangxl's avatar
shangxl committed
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
```

创建并启动容器:

```
docker run --shm-size 16g --network=host --name=deeplabv3_migraphx --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v $PWD/deeplabv3_migraphx:/home/deeplabv3_migraphx -v /opt/hyhal:/opt/hyhal:ro -it <Your Image ID> /bin/bash

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

### Dockerfile(方法二)

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

docker run --shm-size 16g --network=host --name=deeplabv3_migraphx --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v $PWD/deeplabv3_migraphx:/home/deeplabv3_migraphx -v /opt/hyhal:/opt/hyhal:ro -it <Your Image ID> /bin/bash

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

53
## 转换onnx模型
54
```
shangxl's avatar
shangxl committed
55
56
57
# 安装onnx
pip install onnx

58
59
# 进入deeplabv3 migraphx工程根目录
cd <path_to_deeplabv3_migraphx> 
shangxl's avatar
shangxl committed
60

61
62
# 进入Python目录
cd Python/
shangxl's avatar
shangxl committed
63

64
65
66
67
68
# 运行convert.py 生成模型文件 文件保存在Resource/Models目录下
python convert.py
```


shangxl's avatar
shangxl committed
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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
## 数据集

根据提供的样本数据,进行图像分割。

## 推理

### Python版本推理

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

#### 设置环境变量

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

#### 运行示例

```Python
# 进入deeplabv3 migraphx工程根目录
cd <path_to_deeplabv3_migraphx> 

# 进入示例程序目录
cd Python/

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

# 运行示例
python DeepLabV3.py
```

### C++版本推理

注意:当使用操作系统不一样时,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/
```

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

#### 安装Opencv依赖

```python
cd <path_to_deeplabv3_migraphx>
sh ./3rdParty/InstallOpenCVDependences.sh
```


#### 安装OpenCV并构建工程

```
rbuild build -d depend
```

#### 设置环境变量

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

当操作系统是ubuntu系统时:

```
export LD_LIBRARY_PATH=<path_to_deeplabv3_migraphx>/depend/lib/:$LD_LIBRARY_PATH
```

当操作系统是centos系统时:

```
export LD_LIBRARY_PATH=<path_to_deeplabv3_migraphx>/depend/lib64/:$LD_LIBRARY_PATH
```

然后执行:

```
source ~/.bashrc
```

#### 运行示例

```python
# 进入deeplabv3 migraphx工程根目录
cd <path_to_deeplabv3_migraphx> 

# 进入build目录
cd build/

# 执行示例程序
161
162
./DeepLabV3 1 		# 分割多张图片
# ./DeepLabV3 0 	# 分割单张图片
shangxl's avatar
shangxl committed
163
164
165
166
167
168
169
170
```

## result

### Python版本

python程序运行结束后,会在当前目录中生成分割图像。

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
<center class="half">
<img src="./Doc/Images/000001.jpg" width = "50%" height="300px" alt="***" align=left />
<img src="./Doc/Images/Result_000001.jpg" width = "50%" height="300px"  alt="***" align=right />
<center>















<center class="half">
<img src="./Doc/Images/000002.jpg" width = "50%" height="300px" alt="***" align=left />
<img src="./Doc/Images/Result_000002.jpg" width = "50%" height="300px"  alt="***" align=right />
<center>















<center class="half">
<img src="./Doc/Images/000003.jpg" width = "50%" height="300px" alt="***" align=left />
<img src="./Doc/Images/Result_000003.jpg" width = "50%" height="300px"  alt="***" align=right />
<center>
shangxl's avatar
shangxl committed
213
214
215
216
217

### C++版本

C++程序运行结束后,会在build目录生成分割图像。

218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
<center class="half">
<img src="./Doc/Images/000001.jpg" width = "50%" height="300px" alt="***" align=left />
<img src="./Doc/Images/Result_000001.jpg" width = "50%" height="300px"  alt="***" align=right />
<center>















<center class="half">
<img src="./Doc/Images/000002.jpg" width = "50%" height="300px" alt="***" align=left />
<img src="./Doc/Images/Result_000002.jpg" width = "50%" height="300px"  alt="***" align=right />
<center>















<center class="half">
<img src="./Doc/Images/000003.jpg" width = "50%" height="300px" alt="***" align=left />
<img src="./Doc/Images/Result_000003.jpg" width = "50%" height="300px"  alt="***" align=right />
<center>
shangxl's avatar
shangxl committed
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276

### 精度



## 应用场景

### 算法类别

`图像分割`

### 热点应用行业

`制造`,`交通`,`医疗`

## 源码仓库及问题反馈

shangxl's avatar
shangxl committed
277
https://developer.sourcefind.cn/codes/modelzoo/deeplabv3_migraphx
shangxl's avatar
shangxl committed
278
279
280
281

## 参考资料

https://arxiv.org/abs/1706.05587
shaaady's avatar
shaaady committed
282