这是基于PaddlePaddle框架复现的训练代码, 同时提供了 PaddleSlim 模型量化方案、 Paddle-Inference 服务端GPU部署方案、 PaddleLite 边缘端部署方案。
Raw face image:
- 图.《爱情公寓》场景人物面部识别
🐯
数据集 | Version | #Identity | #Image | #Frame | #Video | 下载地址 |
---|---|---|---|---|---|---|
LFW | Raw | 5,749 | 13,233 | - | - | Google Drive, Baidu Drive |
Vgg-Face2-clean | Align_112x112 | 1,333 | 440,028 | - | - | AI Studio, - |
CASIA-WebFace | Align_112x112 | 10,575 | 455,594 | - | - | AI Studio, - |
-
Model
Backbone Head Loss ResNet-50 ArcFace Focal benchmark LFW Vgg-Face2-clean CASIA-WebFace CFP_FF CFP_FP AgeDB CALFW CPLFW Vggface2_FP Top1准确率(%) 99.219(95.950) 99.219(98.243) 99.219(99.365) - - - - Top5准确率(%) 99.219(97.542) 99.609(99.445) 100.000(99.726) - - - - -
Training & validation statistics
paddlepaddle==2.1.0,paddleslim==2.1.0等
- .
- ├── align #人脸对齐与处理
- │ ├── align_trans.py
- │ ├── box_utils.py
- │ ├── detector.py
- │ ├── face_align.py
- │ ├── face_resize.py
- │ ├── get_nets.py
- │ └── init.py
- ├── backbone
- │ ├── init.py
- │ ├── model_irse.py
- │ ├── model_resnet.py
- │ └── resnet_pp.py
- ├── config.py #训练配置文件
- ├── data # 数据集
- ├── dataload.py # 数据读取与处理
- ├── head
- │ ├── init.py
- │ └── metrics.py
- ├── init.py
- ├── loss
- │ ├── focal.py
- │ └── init.py
- ├── mult_gpu_training.py
- ├── PaddleInference-demo # PaddleInference推理部署方案
- │ ├── FaceDatabase
- │ ├── main.py
- │ ├── model
- │ └── utils.py
- ├── Paddle-Lite-Inference-demo # Paddle-Lite推理部署方案
- │ ├── FaceDatabase
- │ ├── main.py
- │ ├── model
- │ ├── MTCNN.py
- │ ├── README.md
- │ └── utils.py
- ├── pretrained #预训练模型存放路径
- ├── quant #模型量化训练
- │ ├── quant_post_dynamic.py
- │ ├── quant_post_static.py
- │ └── README.md
- ├── start_mult_gpu_train.py#多GPU训练
- ├── train.py#单GPU训练
- └── utils.py
- 在
paddle/data
配置好数据集(见config.py) - 运行
train.py
文件即可开始训练
以下是我在不同设备不同模型上的推理情况
Model | Device | Inference Engine | TRT加速 | (quant_aware_int8)量化 | 模型体积(MB) | 时延(ms) |
---|---|---|---|---|---|---|
Backbone(ResNet50) | GPU TESLA v100 | Paddle-Inference | Y | - | 153 | 2.71 |
Backbone(ResNet50) | GPU GTX 1650Ti | Paddle-Inference | - | - | 153 | 5.42 |
Backbone(ResNet50) | GPU MaxWell(jetson nano) | Paddle-Inference | - | - | 153 | 48.42 |
Backbone(ResNet50) | CPU Raspberry Pi 4B | Paddle-Lite | - | - | 153 | 243.22 |
Backbone(ResNet50) | CPU Raspberry Pi 4B | Paddle-Lite | - | Y | 39 | 167.81 |
MTCNN | GPU TESLA v100 | Paddle-Inference | - | - | - | 14.13 |
MTCNN | GPU GTX 1650Ti | Paddle-Inference | - | - | - | 15.56 |
MTCNN | GPU MaxWell(jetson nano) | Paddle-Inference | - | - | - | 138.41 |
MTCNN | CPU Raspberry Pi 4B | Paddle-Lite | - | - | - | 210.49 |
###Paddle-Inference 部署
Paddle Inference为飞桨核心框架推理引擎。Paddle Inference功能特性丰富,性能优异,针对服务器端应用场景进行了深度的适配优化,做到高吞吐、低时延,保证了飞桨模型在服务器端即训即用,快速部署。
此项目通过Paddle Inference进行部署应用,在此Repo中提供了Python的使用样例
如果你对Paddle Inference有所疑惑,可以访问下面这个链接
- PaddleInference-demo
- ├── FaceDatabase
- ├── main.py
- ├── model
- └── utils.py
Paddle Lite是一个高性能、轻量级、灵活性强且易于扩展的深度学习推理框架,定位支持包括移动端、嵌入式以及服务器端在内的多硬件平台。
当前Paddle Lite不仅在百度内部业务中得到全面应用,也成功支持了众多外部用户和企业的生产任务
此项目通过Paddle Lite进行部署应用,我在此Repo中提供了Python的使用样例
如果你对此处有所疑惑,可以访问Paddle-Lite , Paddle-Lite's documentation
- Paddle-Lite-Inference-demo
- ├── FaceDatabase
- ├── main.py
- ├── model
- ├── MTCNN.py
- ├── README.md
- └── utils.py
PaddleSlim 是一个专注于深度学习模型压缩的工具库,提供剪裁、量化、蒸馏、和模型结构搜索等模型压缩策略,帮助用户快速实现模型的小型化。
在此Repo中我提供了PaddleSlim针对本模型进行量化的方法供大家参考
- quant
- ├── quant_post_dynamic.py #动态离线量化
- ├── quant_post_static.py #静态离线量化
- └── README.py
- 量化训练是最佳的量化方式,训练前可以在
config.py
中开启量化训练