9
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OpenCV 以外の場所にある深層学習ベースの顔検出を調査中

Last updated at Posted at 2018-01-03

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

最近の顔検出がより難しい状況での顔検出を実現していることに対応して、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 内のページのリンクです。


SSD Train Own Data Tutorial

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

9
14
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?