README.md 6.42 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
## 数据集

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

## 推理

### 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

# 运行示例
98
python DeepLabV3.py [--loadMode] [--enable_offload_copy]  [--int8/--fp16]
shangxl's avatar
shangxl committed
99
100
```

101
102
103
104
105
106
参数说明:

- --loadMode:加载图片的方式,值为1时加载多张图片进行分割,值为0时加载单张图片进行分割,默认值为1
- --enable_offload_copy:设置offload_copy模式,如果没有指定,默认为offload_copy==false
- --int8/--fp16: 分别表示采用int8模式与fp16模型

shangxl's avatar
shangxl committed
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
161
162
163
164
165
166
### 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/

# 执行示例程序
167
168
./DeepLabV3 1 		# 分割多张图片
# ./DeepLabV3 0 	# 分割单张图片
shangxl's avatar
shangxl committed
169
170
171
172
173
174
175
176
```

## result

### Python版本

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

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
<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
219
220
221
222
223

### C++版本

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

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
260
261
262
263
264
265
<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
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282

### 精度



## 应用场景

### 算法类别

`图像分割`

### 热点应用行业

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

## 源码仓库及问题反馈

shangxl's avatar
shangxl committed
283
https://developer.sourcefind.cn/codes/modelzoo/deeplabv3_migraphx
shangxl's avatar
shangxl committed
284
285
286
287

## 参考资料

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