OpenCV 以外の場所にある深層学習ベースの顔検出 を別記事にしました。
学習済みのファイルが提供されているものもあれば、そうでないものもあります。
論文に関連付けられてあるものもあれば、そうでないのもあります。
Tensorflow Face Detector
Effect
以下のYouTubeをみるように言っています。
https://www.youtube.com/watch?v=gw4CVz7SPEs&feature=youtu.be
手順の補足:
Know Issue
Please view that issue here if your output video is blank. A brief reminder is: check the input codec and check the input/output resolution, since this part is irrelevant to the algorithm, no modification will be made to master branch.
ダウンロードしたスクリプトのままでは、入力のcodecと入出力の解像度のために動かない場合があると述べています。
学習済みのファイルが含まれていますので、自分で画像ファイルを用意して試してみることができます。
inference_video_face.py
のVideoCapture()の入力を変更することで、USBカメラの入力で動作させることができました。
変更前
cap = cv2.VideoCapture("./media/test.mp4")
変更後
cap = cv2.VideoCapture(0)
USB カメラを入力とする別スクリプトが追加されました。
これは、 TensoflowFaceDector というclassを導入して記述しています。
$ python inference_usbCam_face.py 0
このgit上のプロジェクトは以下の学習データを用いています。
WIDER FACE: A Face Detection Benchmark
最近の顔検出がより難しい状況での顔検出を実現していることに対応して、WIDER FACEではocclusionやmakeupも難易度が高いデータが数多く含まれています。
10年前の時期に用いられていた画像データベースでは、背景が平坦な壁であるようなものであったのに、近年のデータベースは難易度があがっています。
実行速度は、私のCudaの使えるノートPCで200 msecかかっています。
OpenCVのresnet_ssd_face_python.py に比べ大幅に時間がかかっています。その理由が何によるものか、みなさんのPCではどうなるのかが私にはわかっていません。
Face Detection with the Faster R-CNN
Requirement:
Caffe
学習済みのファイルが、シェルスクリプトを利用して入手可能です。
これも WIDER face dataset をtraining dataとして用いています。
libをmake するにはcythonが必要です。
$ sudo apt-get install cython
としてから
make
することで make できました。
A Convolutional Neural Network Cascade for Face Detection
https://github.com/mks0601/A-Convolutional-Neural-Network-Cascade-for-Face-Detection
https://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Li_A_Convolutional_Neural_2015_CVPR_paper.pdf
training set: AFLW dataset(positive), COCO dataset(negative)
test data FDDB dataset
ROCカーブが書かれています。
Requirement:
tensorflow
このgitの中には学習済みのファイルが含まれていないようです。
学習するための設定、評価するための設定が書かれていますが、
データそのものは、書かれていることをヒントに設定をあわせなければならないようです。
MTCNN_face_detection_alignment
顔を検出するだけではなく、顔の器官点を求めています。
Requirement
Caffe: Linux OS: https://github.com/BVLC/caffe. Windows OS: https://github.com/BVLC/caffe/tree/windows or https://github.com/happynear/caffe-windows
Pdollar toolbox: https://github.com/pdollar/toolbox
Matlab 2014b or later
Cuda (if use nvidia gpu)
拡張子がmのファイルはMatlabのファイルです。
Matlabのライセンスを持ち合わせていないので動作をさせることが私はできていません。
DFace
Free and open source face detection and recognition with deep learning. Based on the MTCNN and ResNet Center-Loss
DFaceは、顔検出と認識のためのオープンソースソフトウェアです。
PyTorch
--
name | URL | framework | input image size |
---|---|---|---|
Tensorflow Face Detector | https://github.com/yeephycho/tensorflow-face-detection | tensorflow | |
Face Detection with the Faster R-CNN | https://github.com/playerkk/face-py-faster-rcnn | Caffe | |
A Convolutional Neural Network Cascade for Face Detection | https://github.com/mks0601/A-Convolutional-Neural-Network-Cascade-for-Face-Detection | tensorflow | |
MTCNN_face_detection_alignment | https://github.com/kpzhang93/MTCNN_face_detection_alignment |
以下のリンク先は、github上のプロジェクトでface-detection のトピックのプロジェクトを示したものです。
mmlabについて
このmmlab Multimedia Laboratory The Chinese University of Hong Kongは
Xiaoou Tang教授 MMLabを創立 の研究所で
SenseTimeグループと関連を持っています。
以下のリンクはXiaoou Tang教授 MMLab 内のページのリンクです。
-
Deep Convolutional Network Cascade for Facial Point Detection
-
A Deep Sum-Product Architecture for Robust Facial Attributes Analysis
Face-Resources
OpenCV 以外の場所にある深層学習ベースの顔検出を調査中(2)
深層学習ベースの顔検出についてさらに調べてみる。
OpenCV 以外の場所にある深層学習ベースの顔検出を調査中 の続編です。
深層学習ベースの顔検出は、探してみるとそれなりの数がありそうです。
そのどれが推奨の実装になるのかが、私はまだ見極めることができていません。
深層学習を実装しているものが、どのソフトウェアのどのバージョンに依存するのか
環境をそろえることが、手間になってくるからです。
dlibのCNNの顔検出
github https://github.com/davisking/dlib/blob/master/python_examples/cnn_face_detector.py
github https://github.com/davisking/dlib/blob/master/tools/python/src/cnn_face_detector.cpp
以下は、実施例です。
$ python cnn_face_detector.py
Call this program like this:
./cnn_face_detector.py mmod_human_face_detector.dat ../examples/faces/*.jpg
You can get the mmod_human_face_detector.dat file from:
http://dlib.net/files/mmod_human_face_detector.dat.bz2
$ ./cnn_face_detector.py mmod_human_face_detector.dat ../examples/faces/*.jpg
ChainerCVでFaster R-CNNを使って顔検出してみる
github Modified ChainerCV example to train on WIDER FACE dataset for face detection
依存ライブラリ
Chainer 2.0.0
CuPy 1.0.0.1
ChainerCV 0.5.1
SciPy
PyPI https://pypi.org/project/chainercv/
github Face detection with the Faster-R-CNN or R-FCN
Face Detection with the Faster R-CNN
- Prepare training data
- WIDER face dataset を利用した学習する手順が書かれています。
github Faster R-CNN (Python implementation) -- see https://github.com/ShaoqingRen/faster_rcnn for the official MATLAB version
github R-CNN: Regions with Convolutional Neural Network Features
github A faster pytorch implementation of faster r-cnn
--
"Scale Aware Face Detection"と"Finding Tiny Faces" (CVPR'17) の解説
その画像中の顔の大きさの分布を判断するScale Proposal network を利用することで、探索時間を減らそうとするものです。
また、小さい顔をどうやって見つけるかを述べています。
Spatio-Temporal Facial Expression Recognition Using Convolutional(Neural Networks and Conditional Random Fields
github Chainer version of Realtime Multi-Person Pose Estiamtion
付記
SlideShare 畳み込みニューラルネットワークの研究動向
スライド 71: Caffeによる各種ネットワークの実装の一覧
スライド 72: Tensorflowによる各種ネットワークの実装の一覧
スライド 73: Pytorchによる各種ネットワークの実装の一覧
スライド 74: chainerによる各種ネットワークの実装の一覧
詳しい情報をご存知の方がありましたら、お知らせいただけると幸いです。
R-CNN やfaster R-CNNはYOLOや SSD よりも古いアルゴリズムです。
高速化の点では、YOLOやSSDの方が優れているらしいので、R-CNNやfaster R-CNNは歴史的な意味しかもたないのかもしれません。
Face Detection – OpenCV, Dlib and Deep Learning ( C++ / Python )
以下の4種類の顔検出を比較しています。
Haar Cascade Face Detector in OpenCV
Deep Learning based Face Detector in OpenCV
HoG Face Detector in Dlib
Deep Learning based Face Detector in Dlib
正面顔だけ評価したって十分な評価にならないので、大きさの変化や正面ではない顔、隠れのある顔で評価するようにしています。
上記のリンク先のページには、4つの検出器の比較動画へのリンクがはられています。
High resolution images
Since feeding high resolution images is not possible to these algorithms ( for computation speed ), HoG / MMOD detectors might fail when you scale down the image. On the other hand, OpenCV-DNN method can be used for these since it detects small faces.
と高解像度の場合、OpenCV-DNN を使うことを推奨しています。
opencv/samples/dnn/face_detector/
のコードは使い方がわかりにくくなってきている部分があります・
しかし、上記のサイトで紹介されているサンプルコードは、使い方がわかりやすいものになっています。
顔検出のオープンソースライブラリについて、検出率評価コードを公開しているgitHub