FaceBoxes实时人脸检测算法的tensorflow实现

FaceBoxes

FaceBoxes: A CPU Real-time Face Detector with High Accuracy

source code

1. introduction

tensorflow2.0 版的facecboxes released,相比于之前的更容易理解算法了,如果需要tf1 切换到tf1 分支参考readme就好。

faceboxes 是一个cpu相对高效的人脸检测算法,本质上还是一个ssd结构,在小anchor上做了稠密策略。本文不再原理上过多赘述,想知道原理还是看论文。本文旨在帮助大家跑起来并看到结果!
其实github 上已经有一个faceboxes的tensorflow实现了,但是结果不太好,所以再实现了一下,实现也参考了其他repo。
另外这个实现和原文有些不同的地方,有一些改进。

  1. 默认使用512x512(原始1024x1024)的输入,并将第一个卷积步长设为2(原始为4)训练起来更快一些,不然数据在cpu的预处理过程会很耗时,inference的时候也会更快一些。
  2. 第一个卷积核由7x7x24 变成7x7x12
  3. 将两个maxpool 变成3x3 stride2的卷积
  4. 替换第二个5X5,stride2 和maxpool, 为两个3X3,stride2的卷积
  5. 2.数据增强使用了anchor based sample。

因为结构和原文不是严格一样,速度更快一些,耗时:固定输入512, 70+FPS cpu (i7 8700k), 160+FPS GPU(2080ti), 就模型大小,性能以及耗时上可以说是一个十分适合应用的算法了
在这里插入图片描述

fddb
0.961

如果只是想跑一下看看效果,可以下载训好的模型

2. demo

demo1
example2
加上人脸关键点的
在这里插入图片描述

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

example1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章