README.md 6.29 KB
Newer Older
chenych's avatar
chenych committed
1
2
3
4
5
6
# CenterFace
## 论文
[CenterFace: Joint Face Detection and Alignment Using Face as Point](https://arxiv.org/abs/1911.03599)

## 模型结构
CenterFace是一种人脸检测算法,采用了轻量级网络mobileNetV2作为主干网络,结合特征金字塔网络(FPN)实现anchor free的人脸检测。
chenych's avatar
chenych committed
7
<div align=center>
chenych's avatar
chenych committed
8
    <img src="./doc/Architecture of the CenterFace.png"/>
chenych's avatar
chenych committed
9
</div>
chenych's avatar
chenych committed
10

chenych's avatar
chenych committed
11
12
13
## 算法原理
CenterFace模型是一种基于单阶段人脸检测算法,作者借鉴了CenterNet的思想,将人脸检测转换为标准点问题,根据人脸中心点来回归人脸框的大小和五个标志点。

chenych's avatar
V1.0  
chenych committed
14
15
| 参数 | 说明 |
| :------: | :------: |
chenych's avatar
chenych committed
16
| F | Feature Map |
chenych's avatar
V1.0  
chenych committed
17
18
19
| HM | 人脸分类的HeatMap |
| Offset | 人脸框中心点偏移 |
| WH | 人脸框宽,高 |
chenych's avatar
chenych committed
20
21
| x_l,y_l | 人脸框左上角点的x,y坐标 |
| x_r,y_r | 人脸框右下角点的x,y坐标 |
chenych's avatar
V1.0  
chenych committed
22
| c | Confidence |
chenych's avatar
chenych committed
23
24

<div align=center>
chenych's avatar
chenych committed
25
    <img src="./doc/process.png"/>
chenych's avatar
chenych committed
26
</div>
chenych's avatar
chenych committed
27

chenych's avatar
chenych committed
28
29
30
## 环境配置
### Docker(方法一)

chenych's avatar
chenych committed
31
32
-v 路径、docker_name和imageID根据实际情况修改

chenych's avatar
chenych committed
33
```
chenych's avatar
chenych committed
34
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.13.1-centos7.6-dtk-23.04-py38-latest
chenych's avatar
chenych committed
35

chenych's avatar
V1.0  
chenych committed
36
docker run -it -v /path/your_code_data/:/path/your_code_data/ --shm-size=32G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
chenych's avatar
chenych committed
37

chenych's avatar
chenych committed
38
cd /your_code_path/centerface_pytorch/
chenych's avatar
chenych committed
39
pip3 install -r requirements.txt
chenych's avatar
chenych committed
40

chenych's avatar
chenych committed
41
42
43
44
```

### Dockerfile(方法二)

chenych's avatar
chenych committed
45
46
-v 路径、docker_name和imageID根据实际情况修改

chenych's avatar
chenych committed
47
48
49
```
cd ./docker

chenych's avatar
chenych committed
50
51
cp ../requirements.txt requirements.txt

chenych's avatar
chenych committed
52
53
54
docker build --no-cache -t centerface:latest .

docker run -it -v /path/your_code_data/:/path/your_code_data/ --shm-size=32G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
chenych's avatar
chenych committed
55

chenych's avatar
chenych committed
56
57
58
59
60
61
62
```

### Anaconda(方法三)

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

```
chenych's avatar
chenych committed
63
DTK软件栈:dtk23.04
chenych's avatar
chenych committed
64
65
66
67
68
69
70
71
72
73
74
75
76
77
python:python3.8
torch:1.13.1
torchvision:0.14.1
```
`Tips:以上dtk驱动、python、paddle等DCU相关工具版本需要严格一一对应`

2、其他非特殊库直接按照requirements.txt安装

```
pip3 install -r requirements.txt
```

## 数据集

chenych's avatar
chenych committed
78
WIDER_FACE:http://shuoyang1213.me/WIDERFACE/index.html
chenych's avatar
chenych committed
79

chenych's avatar
chenych committed
80
<div align=center>
chenych's avatar
chenych committed
81
    <img src="./doc/datasets.png"/>
chenych's avatar
chenych committed
82
</div>
chenych's avatar
chenych committed
83
84
85
86
87
88
89
90
91
92
93
94
95

下载图片红框中三个数据并解压,也可直接点击下面链接直接下载:

[WIDER Face Training Images(Tencent Drive)](https://share.weiyun.com/5WjCBWV)

[WIDER Face Validation Images(Tencent Drive)](https://share.weiyun.com/5ot9Qv1)

[WIDER Face Testing Images(Tencent Drive)](https://share.weiyun.com/5vSUomP)


数据集全部解压后的目录结构如下:

```
chenych's avatar
chenych committed
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
├── wider_face:  存放数据集根目录
│   ├── WIDER_train: 训练集解压后的文件目录
│       └── images:
│           ├──  0--Parade:         对应该类别的所有图片
│           ├──  ........
│           └──  61--Street_Battle: 对应该类别的所有图片
│   ├── WIDER_val: 验证集解压后的文件目录
│       └──  images:
│           ├──  0--Parade:         对应该类别的所有图片
│           ├──  ........
│           └──  61--Street_Battle: 对应该类别的所有图片
│   ├── WIDER_test: 训练集解压后的文件目录
│       └──  images:
│           ├──  0--Parade:         对应该类别的所有图片
│           ├──  ........
│           └──  61--Street_Battle: 对应该类别的所有图片
```

解压完成后执行以下步骤:
1. 将训练图片放置于 ./datasets/images/train的目录下,验证数据放置于./datasets/images/val目录下,存放目录结如下
```
├── images
│   ├── train
│       ├── 0--Parade
│       ├──  ........
│       └──  61--Street_Battle
│   ├── val
│       ├── 0--Parade
│       ├──  ........
│       └──  61--Street_Battle
```

2. 如果是使用WIDER_train、WIDER_val数据, 可直接将./datasets/labels/下的train_wider_face.json重命名为train_face.json, val_wider_face.json重命名为val_face.json即可,无需进行标注文件格式转换;
chenych's avatar
chenych committed
129
反之,需要将训练图片/验证图片对应的人脸标注信息文件train.txt/val.txt,放置于 ./datasets/annotations/下(train存放训练图片的标注文件,val存放验证图片的标注文件),存放目录结构如下:
chenych's avatar
chenych committed
130
131

```
chenych's avatar
chenych committed
132
├── annotations
chenych's avatar
chenych committed
133
134
135
136
137
│   ├── train
│       ├── train.txt
│   ├── val
│       ├── val.txt
```
chenych's avatar
chenych committed
138

chenych's avatar
chenych committed
139
140
141
142
143
144
145
146
特别地,标注信息的格式为:

```
# img_file/image_name # #+空格+img_file/image_name
x, y, w, h, left_eye_x, left_eye_y, flag, right_eye_x, right_eye_y, flag, nose_x, nose_y, flag, left_mouth_x, left_mouth_y, flag, right_mouth_x, right_mouth_y, flag, confidence  # x和y是检测框左上角的坐标
```

举个例子:
chenych's avatar
chenych committed
147
148
./datasets/annotations/train/train.txt是wider_face训练数据集的标注信息

chenych's avatar
chenych committed
149
150
151
152
```
# 0--Parade/0_Parade_marchingband_1_849.jpg
449 330 122 149 488.906 373.643 0.0 542.089 376.442 0.0 515.031 412.83 0.0 485.174 425.893 0.0 538.357 431.491 0.0 0.82
...
chenych's avatar
chenych committed
153
154
```

chenych's avatar
chenych committed
155
156
157
158
159
160
161
162
163
164
3. 生成训练所需的json格式标注数据:

```
cd ./datasets
python gen_data.py
```

执行完成后会在./datasets/labels下生成训练数据的标注文件 train_face.json、val_face.json


chenych's avatar
chenych committed
165
## 训练
chenych's avatar
V1.0  
chenych committed
166

chenych's avatar
chenych committed
167
168
默认训练模型保存在./exp/下,如需修改为自己的路径,可以对centerface_pytorch/src/lib/opts_pose.py的284行进行修改

chenych's avatar
chenych committed
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
### 单机单卡

```
cd ./src
bash train.sh
```

### 单机多卡

```
cd ./src
bash train_multi.sh
```

## 推理
#### 单卡推理
chenych's avatar
chenych committed
185

chenych's avatar
chenych committed
186
```
chenych's avatar
chenych committed
187
188
189
cd lib/external/
bash make.sh
cd ../../
chenych's avatar
chenych committed
190
191
192
193
python test_wider_face.py
```

## result
chenych's avatar
chenych committed
194
195

<div align=center>
chenych's avatar
chenych committed
196
    <img src="./doc/draw_img.jpg"/>
chenych's avatar
chenych committed
197
</div>
chenych's avatar
chenych committed
198
199

### 精度
chenych's avatar
chenych committed
200

chenych's avatar
chenych committed
201
202
WIDER_FACE验证集上的测试结果如下

chenych's avatar
chenych committed
203
| Method | Easy(AP) | Medium(AP) | Hard(AP)|
chenych's avatar
V1.0  
chenych committed
204
| :------: | :------: | :------: | :------: |
chenych's avatar
chenych committed
205
206
207
208
209
210
211
212
213
214
215
| ours(one scale) | 0.9264 | 0.9133 | 0.7479 |
| original | 0.922 | 0.911  | 0.782|

## 应用场景
### 算法类别
人脸识别

### 热点应用行业
教育,交通,公安,医疗

## 源码仓库及问题反馈
chenych's avatar
Add .sh  
chenych committed
216
https://developer.hpccube.com/codes/modelzoo/centerface_pytorch
chenych's avatar
chenych committed
217
218
219

## 参考资料
https://github.com/chenjun2hao/CenterFace.pytorch