README.md 3.55 KB
Newer Older
liucong's avatar
liucong committed
1
2
# ResNet50

liucong's avatar
liucong committed
3
4
5
6
## 论文
Deep Residual Learning for Image Recognition

- https://arxiv.org/abs/1512.03385
liucong's avatar
liucong committed
7
8
9
10

## 模型结构
ResNet50模型包含了49个卷积层、一个全连接层。

liucong's avatar
liucong committed
11
<img src="./Doc/Images/ResNet50.png" style="zoom:80%;" align=middle>
liucong's avatar
liucong committed
12

liucong's avatar
liucong committed
13
## 算法原理
liucong's avatar
liucong committed
14

liucong's avatar
liucong committed
15
ResNet50使用了多个具有残差连接的残差块来解决梯度消失或梯度爆炸问题,并使得网络可以向更深层发展。
liucong's avatar
liucong committed
16

liucong's avatar
liucong committed
17
<img src="./Doc/Images/Residual_Block.png" style="zoom:100%;" align=middle>
liucong's avatar
liucong committed
18

liucong's avatar
liucong committed
19
20
## 环境配置

liucong's avatar
liucong committed
21
### Docker(方法一)
liucong's avatar
liucong committed
22
23
24
25
26

拉取镜像:

```plaintext
docker pull image.sourcefind.cn:5000/dcu/admin/base/migraphx:4.0.0-centos7.6-dtk23.04.1-py38-latest
liucong's avatar
liucong committed
27
28
```

liucong's avatar
liucong committed
29
30
31
32
33
34
35
36
37
创建并启动容器:

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

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

liucong's avatar
liucong committed
38
39
40
41
42
43
44
### Dockerfile(方法二)

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

docker run --shm-size 16g --network=host --name=resnet50_migraphx --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v $PWD/resnet50_migraphx:/home/resnet50_migraphx -it <Your Image ID> /bin/bash
liucong's avatar
liucong committed
45
46
47

# 激活dtk
source /opt/dtk/env.sh
liucong's avatar
liucong committed
48
49
```

liucong's avatar
liucong committed
50
51
52
53
54
55
56
57
58
59
60
## 数据集

根据需求上传所需图像,可以对相应图像进行分类。

## 推理

### Python版本推理

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

#### 设置环境变量
liucong's avatar
liucong committed
61

liucong's avatar
liucong committed
62
63
64
```
export PYTHONPATH=/opt/dtk/lib:$PYTHONPATH
```
liucong's avatar
liucong committed
65

liucong's avatar
liucong committed
66
#### 运行示例
liucong's avatar
liucong committed
67
68

```python
liucong's avatar
liucong committed
69
# 进入resnet50 migraphx工程根目录
liucong's avatar
liucong committed
70
cd <path_to_resnet50_migraphx> 
liucong's avatar
liucong committed
71
72
73
74
75

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

# 安装依赖
liucong's avatar
liucong committed
76
77
78
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
    
# 运行示例
liucong's avatar
liucong committed
79
80
81
python Classifier.py
```

liucong's avatar
liucong committed
82
### C++版本推理
liucong's avatar
liucong committed
83

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

liucong's avatar
liucong committed
86
#### 安装Opencv依赖
liucong's avatar
liucong committed
87
88

```python
liucong's avatar
liucong committed
89
cd <path_to_resnet50_migraphx>
liucong's avatar
liucong committed
90
91
92
93
sh ./3rdParty/InstallOpenCVDependences.sh
```


liucong's avatar
liucong committed
94
#### 安装OpenCV并构建工程
liucong's avatar
liucong committed
95
96
97
98
99

```
rbuild build -d depend
```

liucong's avatar
liucong committed
100
#### 设置环境变量
liucong's avatar
liucong committed
101
102
103
104

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

```
liucong's avatar
liucong committed
105
export LD_LIBRARY_PATH=<path_to_resnet50_migraphx>/depend/lib64/:$LD_LIBRARY_PATH
liucong's avatar
liucong committed
106
107
108
109
110
111
112
113
```

然后执行:

```
source ~/.bashrc
```

liucong's avatar
liucong committed
114
#### 运行示例
liucong's avatar
liucong committed
115
116

```python
liucong's avatar
liucong committed
117
# 进入resnet50 migraphx工程根目录
liucong's avatar
liucong committed
118
cd <path_to_resnet50_migraphx> 
liucong's avatar
liucong committed
119
120

# 进入build目录
liucong's avatar
liucong committed
121
cd build/
liucong's avatar
liucong committed
122
123
124
125
126

# 执行示例程序
./ResNet50
```

liucong's avatar
liucong committed
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
## result

### Python版本

输出结果中,每个值分别对应每个label的实际概率。

```
[[-2.07131356e-02  2.25237340e-01 -1.98313904e+00 -2.97360039e+00
  ...
  -1.08657278e-01  3.15954179e-01  1.94901395e+00 -5.70572257e-01]]
```

### C++版本

输出结果中,每个值分别对应每个label的实际概率。

```
label:0,confidence:-0.020714
label:1,confidence:0.225237
label:2,confidence:-1.983139
label:3,confidence:-2.973600
...
label:996,confidence:-0.108657
label:997,confidence:0.315954
label:998,confidence:1.949014
label:999,confidence:-0.570572
```

liucong's avatar
liucong committed
155
156
157
158
### 精度



liucong's avatar
liucong committed
159
160
161
162
163
164
165
166
167
168
## 应用场景

### 算法类别

图像分类

### 热点应用行业

制造,政府,医疗,科研

liucong's avatar
liucong committed
169
## 源码仓库及问题反馈
liucong's avatar
liucong committed
170

liucong's avatar
liucong committed
171
https://developer.hpccube.com/codes/modelzoo/resnet50_migraphx
liucong's avatar
liucong committed
172

liucong's avatar
liucong committed
173
## 参考资料
liucong's avatar
liucong committed
174

liucong's avatar
liucong committed
175
https://github.com/onnx/models/tree/main/vision/classification/resnet
liucong's avatar
liucong committed
176