顔照合の商用のライブラリは今後どうなっていくのだろうか？

[OpenFace(顔照合) について調査中](https://qiita.com/nonbiri15/items/c720dbf17c8eaf229c54)に書き加えていたメモを独立した記事に変更しました。

顔検出だけではなく、顔照合の分野でもオープンソースのライブラリの性能が向上してきている。
そのような状況の中で、顔照合の商用のライブラリはどうなっていくのだろうか？
以下、私見を述べる。


## 商用ライブラリが優位を保ち続けるための前提条件

- 精度がオープンソースの実装を上回り続けること。
- 精度が同程度であれば、検出・照合の実行速度が少なく、最適化されていること。
- 利用するためのライブラリのインタフェースが適切であって、使いやすいこと。
- そのライブラリのサポートをし続けること。
- そのライブラリのうえに、市場の目的にそった多数のアプリケーションを構築し、顧客へのサポートをし続けること。

そういった条件を維持しつづけないと、商用ライブラリが、オープンソースで置き換えられていく可能性がある。

（ちなみに、統計分野でのS言語が、オープンソースのR言語で置き換えられつつある。深層学習のライブラリのサポート状況では、R言語の方が優位にたっている状況らしい。追記2020.10.20 https://www.msi.co.jp/splus/ 「2014年をもって S-PLUSのリリースは終了しております。今後、OS追従なども含め、メンテナンスの予定はございません。新規販売は継続しておりますが、予めこの点についてご了承ください」となっていた。）

今の時点で、市場の優位に立っている商用ライブラリでも、その優位をいつまで保てるかは不明です。

正面顔の顔検出が、検出率が100%に近い状況に達してしまうと、ほんの少しの差は無意味になレベルの違いになってしまいます。それと同じように、顔照合の水準がある程度以上になってくると、使い方によっては差が出なくなってしまいます。
特に、本人と身分証明用の顔写真との一致の度合いを判定する場合には、ある水準を超えてしまうと、実用上の差が小さくなってしまいます。
　それに対し、構内に立ち入る人の顔を、社員の顔データベースを元に、顔照合するのでは、問題の難しさが違ってきます。人数が増えてくれば紛らわしい状況が増えていきます。
　ましてや、より構内の社員の人数の多い対象の人々と照合の可能性を調べる場合には、紛らわしい状況が飛躍的に増大します。照合対象のデータベースによっては、似ているとされてしまった人が何らかの不利益を被る可能性があります。そのようなユースケースにまで立ち入る商用ライブラリの開発企業は、かなり経営として覚悟をもって望む必要があるでしょう。


　かといって、一社が圧倒的な優位をしめて、市場を専有することは健全なことではありません。オープンソースの実装が、精度・処理速度・インターフェスの設計・サポートするプラットフォームなどの点で、最適なものを作り上げていけば、圧倒的な優位による市場独占に立ち向かうことができるかもしれません。

## 優秀な種類の顔照合の商用ライブラリの特徴

- マスクをしていても顔検出ができるだけではなく、マスクに隠されていない部分から、顔照合ができる。
- サングラスをしていても顔検出ができる。
- メガネの有無やメガネの種類によっても、顔照合の精度が保たれる。
- 顔画像が、メガネ・サングラス・マスクの有無などが判定できる。
- 西洋人・東洋人によらず顔照合の精度が保たれる。

こういった部分への対応は、なかなかオープンソースの顔照合では対応できていません。

固有顔を使った顔照合は、マスクをしている顔をそのまま固有顔に展開すると、めちゃくちゃな展開になります。そのため、顔照合は事実上不能になります。

顔照合で用いる特徴量ベクトルは、顔の平均顔からの差を用いて生成していることが多いものです。そのため、顔照合の学習に用いた平均顔しだいで、顔照合の性能に影響します。たとえて言えば、ある色が何色かを判断する際に、基準となる白色をどこに置くかということです。白色の基準がどこにあるかによって、わずかにピンクぽいのか、わずかに水色っぽいのかが変わってくるようなものです。

西洋人の平均顔から見れば、日本のアイドルグループの若い女性の顔は、どれも似た方向の変化に見えてしまうのです。そのため、西洋人だけで訓練した顔照合のシステムの場合には、日本人の顔照合で精度がでないということが起こりえます。

### 顔照合のライブラリの対象環境

- クラウド
- PC
- 組み込み

これらによって、顔照合ライブラリの実装は、基本別々のものとして残るだろう。相互に影響しう合うだろうが、それぞれが目指す最適な状況が異なるので、同一のアルゴリズム・同一の実装がこれらの3者で共通化することはないだろう。


## 顔照合技術の健全な利用なために

- 顔照合技術には限界があることを理解すること
- 顔照合技術をあざむく手法が各種存在することから、安易に顔照合技術を信用しないこと。
- 顔照合を乱用する社会は健全なのか。
- 顔照合技術は、ある種の計測技術であり、撮影した画像の品質が重要であることを理解しよう。


## オープンソースの維持にはコストがかかる。
オープンソースであっても品質を維持・向上させるにはコストがかかる。
C++言語の言語仕様の変更、依存性のあるライブラリのバージョン変更への対応、これらを怠ると、品質が劣化した（degradeした）コードになってしまう。
多くのユーザーがいるオープンソースの場合には、維持してくれている多数の方々の努力によって、破綻や崩壊、品質の劣化を免れている。

あなたにとって重要なライブラリに対しては、あなたも改善に寄与できることを見つけていくことがいいだろう。

利用者の少ない、その分野の専門家が少ないライブラリに対しては、あなたの知見は有意義なはずだ。
今後伸ばしていくことが重要なライブラリに対して、あなたの知見をプルリクエストの形で反映してくださるとうれしい。

商用ライブラリは、オープンソースを使っているときに生じる（かもしれない）様々な面倒をお金を払って肩代わりしてもらっているやり方ともいえる。

## 顔照合をあざむく技術への対策


## 顔照合を使うアプリケーションとしての洗練されたインターフェース

- 照合はできない画像を含む顔画像群のクラスタリング機能
- 複数カメラ間の顔画像の対応付け



## オープンソースの実装があるだけでは普及しない

商業的なサポートがないかぎり、オープンソースの顔照合は普及しない。
独自の顔照合の実装でビジネスをするよりも、オープンソースの実装を用いてビジネスをする方がよいと選択するプレーヤーが生じるかどうか。

### ステレオカメラの比較事例との違い

監視カメラメーカー自体にとって、必ずしも顔照合は必須のアプリケーションではない。画像を取得して、HDDにデータを保存しておくだけであって、データを解析しないことを特徴とする運用形態も多い。
　この記事を書いている時点では、顔照合をアプリケーションとして商用製品と同等の水準で機能がそろっているわけではない。
　顔照合の性能を評価するためのインタフェースと、顔照合システムのアプリケーションを実装するためのインターフェースとはだいぶ違う。そのため、オープンソースの顔照合の実装をそのまま、顔照合システムとして提供している事例はまだしらない。
　いずれ、そのような事例も出てくるかもしれない（あるいは既に出ているかもしれない）。



### 比較事例　ステレオカメラとOpenCV

市販ステレオカメラの場合、OpenCVとの組み合わせで販売されている製品が少なからずある。ステレオカメラの場合、ステレオカメラから距離を算出するためのライブラリがない限り目的の機能を実現できない。ステレオカメラという枠組みでは、視差を計算して奥行きを算出する部分のアルゴリズムは、そのアルゴリズム自体の進展を取り込むことが妥当な戦略となる。

#### 東アジア人の顔データが重要
- 顔照合のためには、クリーニングされた顔データベースが必要になります。
- LFWやVGGFace2 は、データベースを構築するためにそれだけの努力がされています。その結果が西洋人を中心とした範囲では高い照合性能を実現するにいたっています。
- 東アジア人のデータベースとしては、中国で大規模なオープンデータベースが作られるようになっています。それらが中国の顔認識技術の興隆と関係しています。
- 日本人の顔のデータセットで公開されているものは少なく、そこに含まれる人の数は少ない状況です。
- 最近の大規模データベースでは、セレブ画像が使われている場合が多い。
    - 多様な撮影環境で撮影された画像が入手しやすいこと。
    - データのクリーニングを行う人にとって、メディアで見慣れた人物の方が、同じ人物かどうかの区別がつきやすい。
    - 顔のよく知られた有名人であり、顔と名前を結びつけたことで、個人情報の侵害とされることが少ないと期待される。
    
### 固有顔ベースの顔照合はなぜ限界があるのか
統計解析や情報処理は、線形代数が効果的な領域で発達してきた。
線形な現象では、線形代数や線形な微分方程式などで、有益な結果をたくさん出してきた。
電磁気学のMaxwellの方程式も、量子力学のシュレディンガー方程式も、線形な現象であり、有益な成果をたくさんあげてきた。
そのような線形代数の成果が、固有顔として顔照合の技術として成立してきた。
顔のグレースケール画像を固有画像で展開して、その係数ベクトルの特徴量を使って、顔の類似性を評価するものであった。その変動のうち、人物の同一性の判定に影響する要因と影響しない要因に分ける。人物の同一性の判定に影響する要因部分だけを取り出す、部分空間法が広く用いられてきた。

そのため、顔画像は、その固有顔の係数でうまく再現できるという前提をもっている。
ただ、顔画像を表すためのパラメータとしては、固有顔の係数は必ずしもいいものとは思えない。
固有顔の係数を変化させることで、合成させる顔を表示させるプログラムを見たことがあるだろうか。
パラメータを動かすことで、特定の成分の固有顔の比率が変わることで、見かけが変わるプログラムだ。

https://qiita.com/nonbiri15/items/3544aab11c8d080e90d8#github-eigenface-using-opencv-cpython

これらの画像を見て「いかにも合成画像」と思うだろう。
近年のGANでの生成画像と、出来上がった画像の品質が極端に違うことに気づくだろう。
近年のGANで生成している画像のできは、合成画像と気づきにくい品質のものになっている。

顔の画像の見え方を再現するには、固有顔の線形結合による表現というのは、（深層学習にくらべて）不十分な表現だと言えるのだろう。
顔の見え方を再現するには、線形代数の範囲では限界があると言うべきなのだろう。





----

## 懸念事項
[ソフトウェアの販売に営業という障壁を導入するのはやめよう](https://qiita.com/nonbiri15/items/2b59255bbdc285ca1e80)

## マスクをしている顔のデータベース
https://github.com/X-zhangyang/Real-World-Masked-Face-Dataset

---

## 追記(2023)
Open Source の実装の水準が日に日に向上しています。
Driver Monitor Systemの分野でさえ、ターゲットに入ってきています。

https://github.com/e-candeloro/Driver-State-Detection 

実環境のデータを使って検証してみないと、怖いことになります。
- 自動車の中での人の顔への照明条件は、まちまちです。
- 太陽光がフロントガラス越しにあたっている場合もあるでしょうし、夜間の明るさは一定しません。対向車のヘッドライトがあたってしまうかもしれません。
- そのような不安定な条件でも、ドライバーの状況を安定して推測することが求められます。

商用のDriver Monitor Systemを開発している方は、Open Source の実装が高まっている状況ですが、それに負けないで良いものを提供してください。