FaceBoxes
FaceBoxes: A CPU Real-time Face Detector with High Accuracy
1. introduction
tensorflow2.0 版的facecboxes released,相比于之前的更容易理解算法了,如果需要tf1 切换到tf1 分支参考readme就好。
faceboxes 是一个cpu相对高效的人脸检测算法,本质上还是一个ssd结构,在小anchor上做了稠密策略。本文不再原理上过多赘述,想知道原理还是看论文。本文旨在帮助大家跑起来并看到结果!
其实github 上已经有一个faceboxes的tensorflow实现了,但是结果不太好,所以再实现了一下,实现也参考了其他repo。
另外这个实现和原文有些不同的地方,有一些改进。
- 默认使用512x512(原始1024x1024)的输入,并将第一个卷积步长设为2(原始为4)训练起来更快一些,不然数据在cpu的预处理过程会很耗时,inference的时候也会更快一些。
- 第一个卷积核由7x7x24 变成7x7x12
- 将两个maxpool 变成3x3 stride2的卷积
- 替换第二个5X5,stride2 和maxpool, 为两个3X3,stride2的卷积
- 2.数据增强使用了anchor based sample。
因为结构和原文不是严格一样,速度更快一些,耗时:固定输入512, 70+FPS cpu (i7 8700k), 160+FPS GPU(2080ti), 就模型大小,性能以及耗时上可以说是一个十分适合应用的算法了
fddb |
---|
0.961 |
如果只是想跑一下看看效果,可以下载训好的模型
-
baidu disk (code zn3x )
2. demo
加上人脸关键点的
3. train
- 1
git clone https://github.com/610265158/faceboxes-tensorflow.git
, master 分支是tensorflow2.0,如果仍然需要在tensorflow1上面实验,切换到tf1分支,并参考readme - 2 下载 widerface ,并解压 WIDER_train, WIDER_val and wider_face_split 到 ./WIDER,
- 3 下载 FDDB, 并解压到 FDDB-folds 到 ./FDDB , 2002,2003 到 ./FDDB/img
- 4
python prepare_data.py
会产生train.txt 和val.txt - 5 然后
python train.py
4. evaluation
python test/fddb.py [--model [TRAINED_MODEL]] [--data_dir [DATA_DIR]]
[--split_dir [SPLIT_DIR]] [--result [RESULT_DIR]]
--model Path of the saved model,default ./model/detector
--data_dir Path of fddb all images
--split_dir Path of fddb folds
--result Path to save fddb results
example python model_eval/fddb.py --model model/detector --data_dir 'FDDB/img/' --split_dir FDDB/FDDB-folds/ --result 'result/'
5. visulization
看一下 vis.py 很简单,,
python vis.py --img_dir your_images_dir --model model/detector
如果,想试试从摄像头检测,
python vis.py --cam_id 0 --model model/detector