README.md 6.34 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根据实际情况修改

Rayyyyy's avatar
Rayyyyy committed
33
34
```bash
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-centos7.6-dtk23.10.1-py38
chenych's avatar
V1.0  
chenych committed
35
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
36

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

### Dockerfile(方法二)

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

Rayyyyy's avatar
Rayyyyy committed
45
```bash
chenych's avatar
chenych committed
46
47
48
cd ./docker
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
49

Rayyyyy's avatar
Rayyyyy committed
50
51
cd /your_code_path/centerface_pytorch/
pip3 install -r requirements.txt
chenych's avatar
chenych committed
52
53
54
55
56
57
58
```

### Anaconda(方法三)

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

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

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

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

## 数据集

Rayyyyy's avatar
Rayyyyy committed
74
[WIDER_FACE](http://113.200.138.88:18080/aidatasets/project-dependency/wider_face)
chenych's avatar
chenych committed
75

chenych's avatar
chenych committed
76
<div align=center>
chenych's avatar
chenych committed
77
    <img src="./doc/datasets.png"/>
chenych's avatar
chenych committed
78
</div>
chenych's avatar
chenych committed
79
80
81
82
83
84
85
86
87
88
89
90
91

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

[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
92
93
94
95
96
97
98
├── wider_face:  存放数据集根目录
│   ├── WIDER_train: 训练集解压后的文件目录
│       └── images:
│           ├──  0--Parade:         对应该类别的所有图片
│           ├──  ........
│           └──  61--Street_Battle: 对应该类别的所有图片
│   ├── WIDER_val: 验证集解压后的文件目录
Rayyyyy's avatar
Rayyyyy committed
99
│       └── images:
chenych's avatar
chenych committed
100
101
102
103
│           ├──  0--Parade:         对应该类别的所有图片
│           ├──  ........
│           └──  61--Street_Battle: 对应该类别的所有图片
│   ├── WIDER_test: 训练集解压后的文件目录
Rayyyyy's avatar
Rayyyyy committed
104
│       └── images:
chenych's avatar
chenych committed
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
│           ├──  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
125
反之,需要将训练图片/验证图片对应的人脸标注信息文件train.txt/val.txt,放置于 ./datasets/annotations/下(train存放训练图片的标注文件,val存放验证图片的标注文件),存放目录结构如下:
chenych's avatar
chenych committed
126
127

```
chenych's avatar
chenych committed
128
├── annotations
chenych's avatar
chenych committed
129
130
131
132
133
│   ├── train
│       ├── train.txt
│   ├── val
│       ├── val.txt
```
chenych's avatar
chenych committed
134

chenych's avatar
chenych committed
135
136
137
138
139
140
141
142
特别地,标注信息的格式为:

```
# 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
143
144
./datasets/annotations/train/train.txt是wider_face训练数据集的标注信息

chenych's avatar
chenych committed
145
146
147
148
```
# 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
149
150
```

chenych's avatar
chenych committed
151
3. 生成训练所需的json格式标注数据:
Rayyyyy's avatar
Rayyyyy committed
152
```bash
chenych's avatar
chenych committed
153
154
155
156
157
158
159
cd ./datasets
python gen_data.py
```

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


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

chenych's avatar
chenych committed
163
### 单机单卡
Rayyyyy's avatar
Rayyyyy committed
164
```bash
chenych's avatar
chenych committed
165
166
167
168
169
cd ./src
bash train.sh
```

### 单机多卡
Rayyyyy's avatar
Rayyyyy committed
170
```bash
chenych's avatar
chenych committed
171
172
173
174
175
176
cd ./src
bash train_multi.sh
```

## 推理
#### 单卡推理
Rayyyyy's avatar
Rayyyyy committed
177
```bash
chenych's avatar
chenych committed
178
179
180
cd lib/external/
bash make.sh
cd ../../
chenych's avatar
chenych committed
181
182
183
184
python test_wider_face.py
```

## result
chenych's avatar
chenych committed
185
<div align=center>
chenych's avatar
chenych committed
186
    <img src="./doc/draw_img.jpg"/>
chenych's avatar
chenych committed
187
</div>
chenych's avatar
chenych committed
188
189

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

Rayyyyy's avatar
Rayyyyy committed
191
WIDER_FACE验证集上的测试结果如下:
chenych's avatar
chenych committed
192

Rayyyyy's avatar
Rayyyyy committed
193
| Device | Easy(AP) | Medium(AP) | Hard(AP)|
chenych's avatar
V1.0  
chenych committed
194
| :------: | :------: | :------: | :------: |
Rayyyyy's avatar
Rayyyyy committed
195
196
| Z100L | 0.9264 | 0.9133 | 0.7479 |
| V100S | 0.922 | 0.911  | 0.782|
chenych's avatar
chenych committed
197
198
199
200
201
202
203
204
205

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

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

## 源码仓库及问题反馈
chenych's avatar
Add .sh  
chenych committed
206
https://developer.hpccube.com/codes/modelzoo/centerface_pytorch
chenych's avatar
chenych committed
207
208
209

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