2017-09-12 17 views
-1

まずはここに私のgithub link for the questionです。私は、Pythonを使って顔照合機能をしたいと思っOpenCVとKerasを使った顔の比較(認識や検出ではない)?

そして、ここでは私の質問です。そして私はOpenCVを使って顔を正常に認識(?)できます。今、どうすればいいですか?

一般機械学習アプローチで、私はその特定の人物に関する大量のデータを収集し、CNNを使用して、それを最終決定する必要があります。

は、私が理解することは、このです。

しかし、私はちょうど2つの画像を持っています、どうすれば比較できますか?私は分類やクラスタリング(KNNを使用して)の観点から考えるべきでしょうか?

ご協力いただきありがとうございます。

答えて

2

フェースエンベディングのアイデアを使用することができます。フェースエンベディングは、たとえば、引用論文FaceNetで提案されており、OpenFace(事前トレーニング済み)に実装されています。

一般的な考え方:いくつかの前処理済みの面(正面、切り抜き、...)を取り、特性のある低い次元に埋め込みます。入力に類似した面は出力内でユークリッド距離が小さくなければなりません。

あなたの場合:埋め込みCNNを使用して、縮小したスペース(通常はサイズ128のベクトル)に顔をマッピングし、ユークリッド空間のように距離を計算します。もちろん、顔をまとめることもできますが、それはあなたの仕事ではありません。

一般的な考え方のほか、ここで良いこと:openfaceを使用する準備ができて素敵な実装であり、それはアイデアを説明しても、ホームページです:

は表す(または埋め込み)することで、顔を深いニューラルネットワークを使用します128次元単位超球。

埋め込みは、誰の顔も一般的な表現です。他の顔表現とは異なり、この埋め込みは、2つの顔埋め込みの間の距離が大きいほど顔が同じ人ではない可能性が高いという優れた特性を有する。

このプロパティは、クラスタリング、類似検出、および分類タスクを、機能間のユークリッド距離が意味をなさない他の顔認識手法よりも簡単にします。

さらに、比較デモhereがあります。

1

顔の類似度を知る必要があります。それは、異なる人を区別するのに適した特徴を抽出することを可能にする。次に、それらの間に相違(距離)を見つけることができます。たとえば、hereを詳しく読むことができます。 kNNなどは類似した顔のグループを見つけるのに便利ですが、前に抽出したフィーチャを使用する必要があります。