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

OpenCV 以外の場所にある深層学習ベースの顔検出 を別記事にしました。
学習済みのファイルが提供されているものもあれば、そうでないものもあります。
論文に関連付けられてあるものもあれば、そうでないのもあります。


## **[Tensorflow Face Detector](https://github.com/yeephycho/tensorflow-face-detection)**
https://github.com/yeephycho/tensorflow-face-detection

> 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](http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/)

![WIDER FACE](http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/support/intro.jpg)

最近の顔検出がより難しい状況での顔検出を実現していることに対応して、WIDER FACEではocclusionやmakeupも難易度が高いデータが数多く含まれています。
１０年前の時期に用いられていた画像データベースでは、背景が平坦な壁であるようなものであったのに、近年のデータベースは難易度があがっています。

実行速度は、私のCudaの使えるノートPCで200 msecかかっています。
OpenCVのresnet_ssd_face_python.py に比べ大幅に時間がかかっています。その理由が何によるものか、みなさんのPCではどうなるのかが私にはわかっていません。



### **Face Detection with the Faster R-CNN**
https://github.com/playerkk/face-py-faster-rcnn

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
https://github.com/kpzhang93/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)

拡張子がｍのファイルはMatlabのファイルです。
Matlabのライセンスを持ち合わせていないので動作をさせることが私はできていません。


![](https://camo.githubusercontent.com/208be02edd9ecf8cfc02c7bf00f2d879c662f84e/68747470733a2f2f6b707a68616e6739332e6769746875622e696f2f4d54434e4e5f666163655f646574656374696f6e5f616c69676e6d656e742f70617065722f6578616d706c65732e706e67)

DFace 

https://github.com/kuaikuaikim/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 のトピックのプロジェクトを示したものです。


https://github.com/topics/face-detection


---
## mmlabについて

このmmlab [Multimedia Laboratory The Chinese University of Hong Kong](http://mmlab.ie.cuhk.edu.hk/)は


[Xiaoou Tang教授 MMLabを創立 ](https://www.sensetime.jp/history)の研究所で
SenseTimeグループと関連を持っています。

https://www.ie.cuhk.edu.hk/people/xotang.shtml

以下のリンクはXiaoou Tang教授 MMLab　内のページのリンクです。
- [Deep Convolutional Network Cascade for Facial Point Detection](http://mmlab.ie.cuhk.edu.hk/archive/CNN_FacePoint.htm)

- [A Deep Sum-Product Architecture for Robust Facial Attributes Analysis](http://www.ee.cuhk.edu.hk/~xgwang/papers/luoWTiccv13a.pdf)

- [Hierarchical Face Parsing via Deep Learning](http://www.ee.cuhk.edu.hk/~xgwang/papers/luoWTcvpr12.pdf)

- [Deep Learning Identity-Preserving Face Space ](http://mmlab.ie.cuhk.edu.hk/projects/zhuLWTiccv2013FIP/index.html)

----

[SSD Train Own Data Tutorial](https://github.com/jinfagang/kitti-ssd)



### Face-Resources
https://github.com/betars/Face-Resources

----
# **OpenCV 以外の場所にある深層学習ベースの顔検出を調査中(2)**
深層学習ベースの顔検出についてさらに調べてみる。

[OpenCV 以外の場所にある深層学習ベースの顔検出を調査中](https://qiita.com/nonbiri15/items/927d202e7d95e6e81ae5) の続編です。


深層学習ベースの顔検出は、探してみるとそれなりの数がありそうです。
そのどれが推奨の実装になるのかが、私はまだ見極めることができていません。
深層学習を実装しているものが、どのソフトウェアのどのバージョンに依存するのか
環境をそろえることが、手間になってくるからです。



### **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を使って顔検出してみる](https://nixeneko.hatenablog.com/entry/2017/07/24/164035)**

github [Modified ChainerCV example to train on WIDER FACE dataset for face detection ](https://github.com/nixeneko/chainercv-fasterrcnn-widerface)


依存ライブラリ
    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 ](https://github.com/kensun0/Face-Detecion-with-the-Faster-R-CNN-R-FCN)

### [Face Detection with the Faster R-CNN](https://github.com/playerkk/face-py-faster-rcnn)
- Prepare training data
    - WIDER face dataset を利用した学習する手順が書かれています。

### github [Faster R-CNN (Python implementation) -- see https://github.com/ShaoqingRen/faster_rcnn for the official MATLAB version ](https://github.com/rbgirshick/py-faster-rcnn)

### github [R-CNN: Regions with Convolutional Neural Network Features ](https://github.com/rbgirshick/rcnn)


### github [A faster pytorch implementation of faster r-cnn ](https://github.com/jwyang/faster-rcnn.pytorch)

--


### **["Scale Aware Face Detection"と"Finding Tiny Faces" (CVPR'17) の解説](https://www.slideshare.net/ren4yu/scale-aware-face-detectionfinding-tiny-faces-cvpr17)**

その画像中の顔の大きさの分布を判断するScale Proposal network を利用することで、探索時間を減らそうとするものです。
また、小さい顔をどうやって見つけるかを述べています。


### **[Spatio-Temporal  Facial  Expression  Recognition  Using  Convolutional(Neural  Networks  and  Conditional  Random  Fields](https://arxiv.org/pdf/1703.06995.pdf)**



### **github [Chainer version of Realtime Multi-Person Pose Estiamtion ](https://github.com/DeNA/Chainer_Realtime_Multi-Person_Pose_Estimation)**


---
付記

SlideShare [畳み込みニューラルネットワークの研究動向 ](https://www.slideshare.net/ren4yu/ss-84282514)
スライド 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 )](https://www.learnopencv.com/face-detection-opencv-dlib-and-deep-learning-c-python/?ck_subscriber_id=272176241)

以下の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/](https://github.com/opencv/opencv/tree/master/samples/dnn/face_detector)
のコードは使い方がわかりにくくなってきている部分があります・
しかし、上記のサイトで紹介されているサンプルコードは、使い方がわかりやすいものになっています。


https://github.com/spmallick/learnopencv/blob/master/FaceDetectionComparison/face_detection_opencv_dnn.py

---

顔検出のオープンソースライブラリについて、検出率評価コードを公開しているgitHub

https://github.com/KatsunoriWa/eval_faceDetectors