
FaceBoxes
CPUでもリアルタイムかつ高精度に顔検出ができるらしい。
2017年に発表されてて新しめ。
Zhang, Shifeng, et al. “Faceboxes: A CPU real-time face detector with high accuracy.” 2017 IEEE International Joint Conference on Biometrics (IJCB). IEEE, 2017.
以前使用したMTCNNと比較する。
以前のやつ↓
(Windows10 + Anaconda で facenet-pytorchからMTCNNを使用する)
1. 環境構築
FaceBoxesのgithub(本家)によると、Pytorch版を再実装したとのことなのでそっちを使う。
本家はCaffeで実装されている。
こっちを使う↓
FaceBoxesのgithub(pytorch版)
1.1. Conda 環境構築
torchさえあれば多分動く
1 | conda install pytorch torchvision cpuonly -c pytorch |
1.2. ファイルダウンロード
githubからコードを全部ダウンロード。
学習済みモデルFaceBoxesProd.pthは別途Google Driveに置いてくれている。
githubからリンク先へ行ってダウンロード。
rootにweightsフォルダを作ってその下に置く。
1.3. ファイルダウンロード
githubからコードを全部ダウンロード。
学習済みモデルFaceBoxesProd.pthは別途Google Driveに置いてくれている。
githubからリンク先へ行ってダウンロード。
rootにweightsフォルダを作ってその下に置く。
1.4 コード改造
デモ用のtest.pyは好きな画像に対して使えないので改造する。
importしたら顔検出の関数detectが呼べるfaceboxes.pyを作った。
コードは全部最後に載せてる。
さっきダウンロードしてきたweightsやutilsなどを使うので同じ場所に置く。
面倒なのでcythonのビルドはしていない。
2. 実験
テスト画像に対して顔検出の実験。

2.1. 実験結果
以前行った別手法の結果(facenet-pytorch の MTCNN)と比較。
2.2. 実験結果の比較

FaceBoxes による顔検出結果(今回の)

facenet-pytorch の MTCNN による顔検出結果(前回の)
ほぼ同じ。
3. 速度計測
速いらしいので比較実験する。
3.1. 実験結果
同じ画像に対してそれぞれの手法で100回顔検出を行うのにかかった時間を計測。
10回の平均値を結果とする。
Windows 10
Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
画像サイズ 3 × 512 × 512
| faceboxes | facenet-mtcnn | |
|---|---|---|
| 1回目 | 5.618955135(s) | 17.39090157(s) |
| 2回目 | 5.335961819(s) | 16.88390636(s) |
| 3回目 | 5.629956007(s) | 17.12989831(s) |
| 4回目 | 5.494957447(s) | 16.97990084(s) |
| 5回目 | 5.65395546(s) | 17.11790347(s) |
| 6回目 | 5.292955399(s) | 16.91492677(s) |
| 7回目 | 5.702960253(s) | 16.86787176(s) |
| 8回目 | 5.695954084(s) | 17.3439045(s) |
| 9回目 | 5.751956224(s) | 16.90490079(s) |
| 10回目 | 5.412961483(s) | 17.06890321(s) |
| average | 5.559057331(s) | 17.06030176(s) |
3倍近く早い。
4. コード
今回の実験で使用したコード。
4.1. コード(faceboxes.py)
1 | from __future__ import print_function |
4.2. コード(2.2. 実験用)
1 | import faceboxes |
4.3. コード(速度計測 facecet-mtcnn)
1 | from facenet_pytorch import MTCNN |
4.4. コード(速度計測 faceboxes)
1 | import faceboxes |




