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 |