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

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