"test/git@developer.sourcefind.cn:OpenDAS/torch-scatter.git" did not exist on "fdcab318f0a6108a2f0853da44a139798ce1eb52"
README.md 6.67 KB
Newer Older
dongchy920's avatar
dongchy920 committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# ArcFace
## 论文
- https://arxiv.org/pdf/1912.04958
## 模型结构
针对StyleGAN中,大多数的生成的图像容易产生一个类似水滴状的伪影问题,StyleGAN2对AdaIN的归一化操作进行改进,作者把AdaIN层里面的归一化去掉,将噪声B和偏置项b移动出style模块之外,取得了更好的生成效果。

<div align=center>
    <img src="./images/AdaIN.png"/>
</div>

## 算法原理
StyleGAN2为StyleGAN的改进版本,StyleGAN是在PGGAN的基础上进行改进的模型  
GAN(生成对抗网络)包含了一个生成模型G和一个判别模型D,模型通过生成器G对从正态分布P(z)随机采样的z生成伪数据x',和从真实图像分布P(data)中采样的样本x作为判别器D的输入,判别器要让x的概率越大越好,让x'的概率越小越好,同时生成器希望生成的样本让判别器判别为真的概率越大越好。通过这种对抗的方式使模型生成越来越逼真的图片。

<div align=center>
    <img src="./images/GAN2.png"/>
</div>  

PGGAN(渐进式生长生成对抗网络)通过先从低分辨率开始训练,然后再逐层提高分辨率进行训练的方式解决了传统GAN存在的模式崩溃(生成数据只是原始数据的子集(生成器偏向于生成判别器难以判别的样本))和难以训练高分辨率图片(生成器刚开始直接生成高分辨率图片很容易被判别器识别,在反向传播出现梯度大范围更新导致生成器崩溃)的问题,PGGAN先训练低分辨率,然后通过平滑接入的方式逐步提高分辨率:

<div align=center>
    <img src="./images/PGGAN.png"/>
</div>  
24
 
dongchy920's avatar
dongchy920 committed
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
PGGAN虽然能生成高清伪图,但是不能对图象的风格和细节进行修改,StyleGAN通过对特征进行解耦,让特征之间相互独立,互不影响,从而达到单独修改图象的某一部分的目的。具体来说StyleGAN是通过修改生成器,下图中左边为传统的生成器,右部分为StyleGAN的生成器,由两部分构成——Mapping network和Synthesis network ,其中Mapping network就是用来控制图像的风格信息,Synthesis network用来生成图像

<div align=center>
    <img src="./images/styleGAN.png"/>
</div> 

StyleGAN2就是在StyleGAN的基础上改进了归一化操作,对损失函数和训练方法进行改进。


## 环境配置
### Docker(方法一)
[光源](https://www.sourcefind.cn/#/service-list)中拉取docker镜像:
```
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.10.0-centos7.6-dtk-23.04-py39-latest
```
创建容器并挂载目录进行开发:
```
docker run -it --name {name} --shm-size=1024G  --device=/dev/kfd --device=/dev/dri/ --privileged --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --ulimit memlock=-1:-1 --ipc=host --network host --group-add video -v /opt/hyhal:/opt/hyhal:ro -v {}:{} {docker_image} /bin/bash
# 修改1 {name} 需要改为自定义名称,建议命名{框架_dtk版本_使用者姓名},如果有特殊用途可在命名框架前添加命名
# 修改2 {docker_image} 需要需要创建容器的对应镜像名称,如: pytorch:1.10.0-centos7.6-dtk-23.04-py37-latest【镜像名称:tag名称】
# 修改3 -v 挂载路径到容器指定路径
pip install -r requirements.txt
```
### Dockerfile(方法二)
```
cd docker
docker build --no-cache -t gan2_pytorch:1.0 .
docker run -it --name {name} --shm-size=1024G  --device=/dev/kfd --device=/dev/dri/ --privileged --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --ulimit memlock=-1:-1 --ipc=host --network host --group-add video -v /opt/hyhal:/opt/hyhal:ro -v {}:{} {docker_image} /bin/bash 
pip install -r requirements.txt
```
### Anaconda(方法三)
线上节点推荐使用conda进行环境配置。
创建python=3.9的conda环境并激活
```
conda create -n styleGan2 python=3.9
conda activate styleGan2
```

关于本项目DCU显卡所需的特殊深度学习库可从[光合](https://developer.hpccube.com/tool/)开发者社区下载安装。
```
DTK驱动:dtk23.04
python:python3.9
pytorch:1.10.0
torchvision:0.11.0
```
安装其他依赖包
```
pip install -r requirements.txt
```
## 数据集

- unconditional models训练集[FFHQ](https://drive.google.com/drive/folders/1u2xu7bSrWxrbUxk-dT-UvEJq8IjdmNTP)
下载后解压到当前目录  
数据目录结构如下:
```
80
./data/images/
dongchy920's avatar
dongchy920 committed
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
    └── 00000.png
    └── 00001.png
```
- 使用只有100个样本的小数据集[data](https://pan.baidu.com/s/1ep4k_9w1YR9Cg8Q5NQmNYQ?pwd=1234)进行训练和测试


## 训练

### 单机单卡
```
sh tools/dist_train.sh configs/styleganv2/stylegan2_c2_ffhq_1024_b4x8.py 1 --work-dir work_dirs/experiments/stylegan2_c2_ffhq_1024_b4x8/
```

### 单机多卡
```
sh tools/dist_train.sh configs/styleganv2/stylegan2_c2_ffhq_1024_b4x8.py 4 --work-dir work_dirs/experiments/stylegan2_c2_ffhq_1024_b4x8/
```

## 精度
下载权重文件[stylegan2_c2_ffhq_1024_b4x8](https://download.openmmlab.com/mmgen/stylegan2/official_weights/stylegan2-ffhq-config-f-official_20210327_171224-bce9310c.pth),测试模型精度:
```
tools/eval.sh configs/styleganv2/stylegan2_c2_ffhq_1024_b4x8.py stylegan2_c2_ffhq_1024_b4x8_20210407_150045-618c9024.pth --batch-size 10 --online
```
模型在ffhq数据集的测试指标:

| 模型 | 数据类型 | FID | P/R |
| :------: | :------: | :------: | :------: |
| [stylegan2_c2_ffhq_1024_b4x8](https://download.openmmlab.com/mmgen/stylegan2/official_weights/stylegan2-ffhq-config-f-official_20210327_171224-bce9310c.pth) | fp16 | 92.0757 | 0.65/0.48 |


## 推理
### unconditional GANs推理
```
python demo/unconditional_demo.py configs/styleganv2/stylegan2_c2_ffhq_1024_b4x8.py stylegan2_c2_ffhq_1024_b4x8_20210407_150045-618c9024.pth
```
<div align=center>
    <img src="./images/unconditional_samples.png"/>
</div> 

### conditional GANs推理
```
python demo/conditional_demo.py configs/styleganv2/stylegan2_c2_ffhq_1024_b4x8.py stylegan2_c2_ffhq_1024_b4x8_20210407_150045-618c9024.pth --label 1
```

<div align=center>
    <img src="./images/conditional_samples_2.png"/>
</div> 

### 通过插值调整人脸生成的细节
```
python apps/interpolate_sample.py configs/styleganv2/stylegan2_c2_ffhq_1024_b4x8.py stylegan2_c2_ffhq_1024_b4x8_20210407_150045-618c9024.pth --show-mode group --samples-path result
```
<div align=center>
    <img src="./images/group.png"/>
</div> 

## 应用场景   
### 算法类别  
人脸生成  

### 热点应用行业
安防,交通,教育


## 源码仓库及问题反馈
[https://developer.hpccube.com/codes/modelzoo/stylegan2_mmcv](https://developer.hpccube.com/codes/modelzoo/stylegan2_mmcv)
## 参考资料
[https://github.com/open-mmlab/mmgeneration/tree/master](https://github.com/deepinsight/insightface/tree/master/recognition/arcface_torch)