AI 实战5 - pytorch框架实现face检测
pytorch框架实现face检测
- 简介
- 模型结构
- 算法原理
- 环境
- 开发环境
- SDK 环境
- 数据
- wider_face 数据集解压后目录结构
- wider_face 训练环境需要的目录结构
- 标注格式转换
- 训练
- 测试
- WIDER_FACE验证集测试结果
- 参考
简介
模型结构
CenterFace是一种人脸检测算法,采用轻量级网络mobileNetV2作为主干网络,结合特征金字塔网络(FPN)实现anchor free的人脸检测。
算法原理
CenterFace模型是一种基于单阶段人脸检测算法,作者借鉴了CenterNet的思想,将人脸检测转换为标准点问题,根据人脸中心点来回归人脸框的大小和五个标志点。
参数 | 说明 |
---|---|
F | Feature Map |
HM | 人脸分类的HeatMap |
Offset | 人脸框中心点偏移 |
WH | 人脸框宽,高 |
x_l,y_l | 人脸框左上角点的x,y坐标 |
x_r,y_r | 人脸框右下角点的x,y坐标 |
c | Confidence 置信度 |
环境
开发环境
- GPU服务器:pytorch1.13.0,python3.10,cuda==11.7
- nvidia-smi 查看 CUDA 版本
3. 官网查看对应cuda版本的PyTorch,使用生成命令行安装
3. 环境安装
conda create -n centerface python=3.7
conda activate centerface
pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple# 不安装cython报错,编译cocoAPI报错缺少 _mask.c
pip install -U cython -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numba -i https://pypi.tuna.tsinghua.edu.cn/simplepip install -U 'setuptools>=18.0' -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install -U 'matplotlib>=2.1.0' -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install tqdm -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install -U progress -i https://pypi.tuna.tsinghua.edu.cn/simple## 原因:不修改,训练出来的模型精度有影响
## 定位 torch.batch_norm行,将 torch.backends.cudnn.enabled 选项更改为False
## vim /data/miniconda/envs/centernet/lib/python3.7/site-packages/torch/nn/functional.py +1697## 安装cocoAPI
mkdir /data/coding/detect
COCOAPI=/data/coding/detect/cocoapi
git clone https://github.com/cocodataset/cocoapi.git $COCOAPI
cd $COCOAPI/PythonAPI
python setup.py install --user
make# 获取训练工程
CenterFace_ROOT=/data/coding/detect/centerface_pytorch
git clone http://developer.sourcefind.cn/codes/modelzoo/centerface_pytorch.git $CenterFace_ROOTcd $CenterFace_ROOT/src/lib/external/
python setup.py install --user
make# 编译NMS
# cd $CenterNet_ROOT/lib/nms
# make
SDK 环境
- 参考http://developer.sourcefind.cn/codes/modelzoo/centerface_pytorch
- 开源训练数据:http://shuoyang1213.me/WIDERFACE/
数据
wider_face 数据集解压后目录结构
├── 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: 对应该类别的所有图片
wider_face 训练环境需要的目录结构
├── images
│ ├── train
│ ├── 0--Parade
│ ├── ........
│ └── 61--Street_Battle
│ ├── val
│ ├── 0--Parade
│ ├── ........
│ └── 61--Street_Battle
├── labels
│ ├── train_face.json
│ ├── val_face.json
标注格式转换
如果是txt文件标注,需要转换为json文件
├── datasets/annotations
│ ├── train
│ ├── train.txt
│ ├── val
│ ├── val.txtcd ./datasets
# 执行后会在./datasets/labels下生成训练数据的标注文件 train_face.json、val_face.json
python gen_data.py
训练
# 默认训练模型保存在./exp下,centerface_pytorch/src/lib/opts_pose.py +284 修改路径
# 单机单卡
bash ./src/train.sh# 单机多卡
bash ./src/train_multi.sh
测试
# 推理
python test_wider_face.py# calculate the accuracy
cd $project/evaluate
python3 setup.py build_ext --inplace
python evaluation.py==================== Results ====================
Easy Val AP: 0.9264363225336171
Medium Val AP: 0.9132687399831261
Hard Val AP: 0.7478828820065848
=================================================
WIDER_FACE验证集测试结果
参考
- CenterFace_pytorch