README.md 5.82 KB
Newer Older
sunxx1's avatar
sunxx1 committed
1
2
# Mobilenetv2

sunxx1's avatar
sunxx1 committed
3
4
5
6
7
8
## 论文

MobileNetV2: Inverted Residuals and Linear Bottlenecks

- https://openaccess.thecvf.com/content_cvpr_2018/papers/Sandler_MobileNetV2_Inverted_Residuals_CVPR_2018_paper.pdf

sunxx1's avatar
sunxx1 committed
9
## 模型结构
sunxx1's avatar
sunxx1 committed
10
11
12

MobileNetV2是一种轻量级的卷积神经网络模型,由Google在2018年提出。它是MobileNet系列中的第二个版本,主要用于移动设备和嵌入式设备等资源受限的环境中进行图像分类、目标检测等计算机视觉任务。

renzhc's avatar
renzhc committed
13
![loading-ag-535](./images/d15a0e56517b4f7284a862f1d6eaef9a.png)
sunxx1's avatar
sunxx1 committed
14
15
16



sunxx1's avatar
sunxx1 committed
17
## 算法原理
sunxx1's avatar
sunxx1 committed
18

sunxx1's avatar
sunxx1 committed
19
MobileNetV2的网络结构主要由两部分组成:特征提取层和分类器。
sunxx1's avatar
sunxx1 committed
20

sunxx1's avatar
sunxx1 committed
21
![20231124104337](./images/20231124104337.png)
sunxx1's avatar
sunxx1 committed
22

sunxx1's avatar
sunxx1 committed
23
## 环境配置
sunxx1's avatar
sunxx1 committed
24

sunxx1's avatar
sunxx1 committed
25
### Docker(方法一)
sunxx1's avatar
sunxx1 committed
26

renzhc's avatar
renzhc committed
27
28
29
推荐使用docker方式运行,拉取提供的docker镜像

```shell
renzhc's avatar
renzhc committed
30
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10
renzhc's avatar
renzhc committed
31
32
33
34
35
36
37
38
39
```

基于拉取的镜像创建容器

```shell
# <your IMAGE ID or NAME>用以上拉取的docker的镜像ID或名称替换
docker run -it --name=mobilenetv2 --network=host --ipc=host --shm-size=16g  --device=/dev/kfd --device=/dev/dri --device=/dev/mkfd --group-add video --privileged --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v /opt/hyhal:/opt/hyhal:ro -v $PWD/mobilenetv2_mmcv:/home/mobilenetv2_mmcv <your IMAGE ID> bash
```

renzhc's avatar
renzhc committed
40
克隆并安装git仓库,安装相关依赖
sunxx1's avatar
sunxx1 committed
41

renzhc's avatar
renzhc committed
42
43
```python
git clone --recursive http://developer.hpccube.com/codes/modelzoo/mobilenetv2_mmcv.git
renzhc's avatar
renzhc committed
44
cd mobilenetv2_mmcv/mmpretrain-mmcv
renzhc's avatar
renzhc committed
45
pip install -e .
sunxx1's avatar
sunxx1 committed
46
47
48
49
50
pip install -r requirements.txt
```

### Dockerfile(方法二)

renzhc's avatar
renzhc committed
51
```shell
sunxx1's avatar
sunxx1 committed
52
53
cd mobilenetv2_mmcv/docker
docker build --no-cache -t mobilenetv2_mmcv:latest .
renzhc's avatar
renzhc committed
54
docker run -it --name=mobilenetv2 --network=host --ipc=host --shm-size=16g  --device=/dev/kfd --device=/dev/dri --device=/dev/mkfd --group-add video --privileged --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v /opt/hyhal:/opt/hyhal:ro -v $PWD/mobilenetv2_mmcv:/home/mobilenetv2_mmcv <your IMAGE ID> bash
renzhc's avatar
renzhc committed
55
56
57
pip install -e .
# 若遇到Dockerfile启动的方式安装环境需要长时间等待,可注释掉里面的pip安装,启动容器后再安装python库:
pip install -r requirements.txt
sunxx1's avatar
sunxx1 committed
58
59
60
61
62
63
64
```

### Anaconda(方法三)

1、关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装: https://developer.hpccube.com/tool/

```plaintext
renzhc's avatar
renzhc committed
65
66
67
68
69
DTK驱动: DTK-24.04.1
python==3.10
torch==2.1.0
torchvision==0.16.0+das1.1.git7d45932.abi1.dtk2404.torch2.1
mmcv==2.0.1+das1.1.gite58da25.abi1.dtk2404.torch2.1.0
sunxx1's avatar
sunxx1 committed
70
71
72
Tips:以上dtk驱动、python、torch等DCU相关工具版本需要严格一一对应
```

renzhc's avatar
renzhc committed
73
74
75
76
77
78
79
80
2、安装mmpretrain仓库源码

```shell
cd mobilenetv2_mmcv/mmpretrain-mmcv
pip install -e .
```

3、其它非特殊库参照requirements.txt安装
sunxx1's avatar
sunxx1 committed
81

renzhc's avatar
renzhc committed
82
```shell
sunxx1's avatar
sunxx1 committed
83
84
pip install -r requirements.txt
```
sunxx1's avatar
sunxx1 committed
85

sunxx1's avatar
sunxx1 committed
86
## 数据集
sunxx1's avatar
sunxx1 committed
87

88
89
### ImageNet

renzhc's avatar
renzhc committed
90
在本项目中可以使用ImageNet数据集。下载ImageNet数据集:https://image-net.org/
sunxx1's avatar
sunxx1 committed
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
可于SCNet快速下载[imagenet-2012](http://113.200.138.88:18080/aidatasets/project-dependency/imagenet-2012)

下载其中的ILSVRC2012_img_train.tar和ILSVRC2012_img_val.tar并按照以下方式解包

```bash
cd mmpretrain-mmcv/data/imagenet
mkdir train && cd train
tar -xvf ILSVRC2012_img_train.tar
```

解包后是1000个tar文件,每个tar对应了一个类别,解包至对应文件夹

```bash
for tarfile in *.tar; do
    dirname="${tarfile%.tar}"
    mkdir "$dirname"
    tar -xvf "$tarfile" -C "$dirname"
done
```

目录结构如下

```
data
└── imagenet
    ├── train
    │   ├── n01440764
    │   │   ├── n01440764_10026.JPEG
    │   │   ├── n01440764_10027.JPEG
    ├──val
    │   ├── n01440764 
    │   │   ├── ILSVRC2012_val_00000293.JPEG
```


renzhc's avatar
renzhc committed
127
128
129

### tiny-imagenet-200

130
由于ImageNet完整数据集较大,可以使用[tiny-imagenet-200](http://cs231n.stanford.edu/tiny-imagenet-200.zip)进行测试,此时需要对配置脚本进行一些修改:
renzhc's avatar
renzhc committed
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
167
168
169
170

- dataset配置文件(configs/\_\_base\_\_/datasets/xxx.py)中,需要对以下字段进行修改
  
  ```python
  # dataset settings
  dataset_type = 'CustomDataset'  # 修改为CustomDataset
  data_preprocessor = dict(
      num_classes=200,  # 修改类别为200
      ...
  )
  ...
  train_dataloader = dict(
      batch_size=32,
      num_workers=5,
      dataset=dict(
          type=dataset_type,
          data_root='data/imagenet',
          data_prefix='train',  # 改为data_prefix='train',val_dataloader中同理
          pipeline=train_pipeline),
      sampler=dict(type='DefaultSampler', shuffle=True),
  )
  ```

- model配置文件(configs/\_\_base\_\_/models/xxx.py)中,同样需要将类别相关的值设置为200。
  
  ```python
  # model settings
  model = dict(
      type='ImageClassifier',
      ...
      head=dict(
          type='LinearClsHead',
          num_classes=200,  # 将类别数改为200
          ...
      ))
  ```

mmpretrain-mmcv中提供了使用tiny-imagenet-200进行训练的若干配置脚本,可参考进行设置。

## 训练
sunxx1's avatar
sunxx1 committed
171

renzhc's avatar
renzhc committed
172
将训练数据集解压后放置于mmpretrain-mmcv/data/,对于tiny-imagenet,目录结构如下:
sunxx1's avatar
sunxx1 committed
173

sunxx1's avatar
sunxx1 committed
174
```
dcuai's avatar
dcuai committed
175
data
renzhc's avatar
renzhc committed
176
177
178
179
180
181
└── imagenet
    ├── test/
    ├── train/
    ├── val/
    ├── wnids.txt
    └── words.txt
renzhc's avatar
renzhc committed
182

sunxx1's avatar
sunxx1 committed
183
```
renzhc's avatar
renzhc committed
184

renzhc's avatar
renzhc committed
185
### 单机8卡训练
renzhc's avatar
renzhc committed
186

renzhc's avatar
renzhc committed
187
tiny-imagenet-200
sunxx1's avatar
sunxx1 committed
188

renzhc's avatar
renzhc committed
189
190
191
```shell
bash tools/dist_train.sh mobilenet-v2-test.py 8
```
sunxx1's avatar
sunxx1 committed
192

renzhc's avatar
renzhc committed
193
imagenet
sunxx1's avatar
sunxx1 committed
194

renzhc's avatar
renzhc committed
195
196
197
```shell
bash tools/dist_train.sh configs/mobilenet_v2/mobilenet-v2_8xb32_in1k.py 8
```
sunxx1's avatar
sunxx1 committed
198

renzhc's avatar
renzhc committed
199
如需其他卡数训练,将命令中的8改为所需卡数即可
sunxx1's avatar
sunxx1 committed
200

renzhc's avatar
renzhc committed
201
如遇端口占用问题,可在tools/dist_train.sh修改端口
sunxx1's avatar
sunxx1 committed
202

sunxx1's avatar
sunxx1 committed
203
204
205
206
207
208
209
210
## 应用场景

### 算法类别

图像分类

### 热点行业

211
制造,能源,交通,网安,安防
sunxx1's avatar
sunxx1 committed
212

dcuai's avatar
dcuai committed
213
## 源码仓库及问题反馈
sunxx1's avatar
sunxx1 committed
214

sunxx1's avatar
sunxx1 committed
215
https://developer.hpccube.com/codes/modelzoo/mobilenetv2_mmcv
sunxx1's avatar
sunxx1 committed
216

dcuai's avatar
dcuai committed
217
## 参考资料
sunxx1's avatar
sunxx1 committed
218

dcuai's avatar
dcuai committed
219
https://github.com/open-mmlab/mmpretrain