これまで、顔認識には主に、顔画像の収集、顔認識の前処理、本人確認、身元検索などの技術とシステムが含まれていました。現在、顔認識は徐々にドライバー検出、歩行者追跡、さらには ADAS における動的物体追跡にまで拡張されています。
顔認識システムが単純な画像処理からリアルタイムのビデオ処理まで発展したことがわかります。さらに、アルゴリズムは、Adaboots や PCA などの従来の統計手法から、CNN や RCNN などの深層学習手法とその改良手法に変更されました。現在、かなりの数の人々が 3D 顔認識の研究を始めており、この種のプロジェクトは現在、学界、産業界、国によって支援されています。
まず、現在の研究状況を見てみましょう。上記の開発傾向からわかるように、現在の主な研究方向は、深層学習手法を使用してビデオの顔認識を解決することです。
は以下の通りです: 中国科学院計算技術研究所のShan Shiguang教授、中国科学院生体認証研究所のLi Ziqing教授、Su教授清華大学のGuangda氏、香港中文大学のTang Xiaoou教授、Ross B. Girshick氏ら。
SeetaFace 顔認識エンジン。このエンジンは、中国科学院計算技術研究所の研究員シャン・シーグアン氏が率いる顔認識研究グループによって開発された。コードは C ベースで実装されており、サードパーティのライブラリ関数に依存せず、オープンソース ライセンスは BSD-2 であり、学術界および産業界で無料で使用できます。
現在公開されている優れた顔画像データベースには、LFW (Labelled Faces in the Wild) および YFW (Youtube Faces in the Wild) が含まれます。現在の実験データセットは基本的にLFWから得られたものであり、現在の画像顔認識の精度は99%に達しており、基本的に既存の画像データベースは使い果たされています。以下は既存の顔画像データベースの概要です:
中国では顔認識を行う企業がますます増えており、その応用も非常に普及しています。その中で、ハンワンテクノロジーは最も高い市場シェアを持っています。主要企業の研究方向と現状は次のとおりです。
顔認識は主に、顔検出 (顔検出)、顔調整 (顔位置合わせ)、顔確認 (顔照合) の 4 つの主要な部分に分かれています。 )、顔識別(顔識別)。
画像内の顔を検出し、結果を長方形のフレームに収めます。 openCV には、直接使用できる Harr 分類器があります。
検出された顔の姿勢を補正し、できるだけ「ポジティブな顔」に補正することで、顔認識の精度を向上させることができます。補正方法には2D補正と3D補正があり、3D補正の方が側面を認識しやすくなります。
顔補正を行う場合、特徴点の位置を検出する工程があり、その特徴点の位置は主に鼻の左側、鼻の穴の下、瞳孔の位置、鼻の穴などの位置です。これらの特徴点の位置がわかったら、位置に応じた変形を行うことで、顔を「修正」することができます。以下の図に示すように:
これは、2014 年に MSRA によって開発されたテクノロジー、Joint Cascade Face Detection and Alignment (ECCV14) です。この記事では、検出と位置合わせの両方を 30 ミリ秒で直接実行します。
顔認証はペアの照合に基づいているため、得られる答えは「はい」または「いいえ」です。具体的な操作としては、テスト画像を与えて1人ずつペアマッチングを行い、マッチングが成功すればテスト画像とマッチングされた顔が同一人物の顔であることを意味します。
この方法は、小規模オフィスの顔スキャンパンチインシステムで一般的に使われている(はず)具体的な運用方法は、大まかに以下のような手順になります:オフラインで従業員の顔写真を1人ずつ入力(入力した人物)従業員(通常、顔は複数あります)がチェックインのために顔をスワイプする際にカメラが画像を撮影した後、まず上記の方法で顔検出を実行し、次に顔補正を実行し、その後顔認証を実行します。照合結果が「はい」となり、顔をスキャンした人物がこの事務所に所属していることがわかり、これで顔認証は完了となります。
従業員の顔をオフラインで入力すると、顔とその人の名前を照合できるため、顔認証が成功すると、その人が誰であるかを知ることができます。
上記のシステムのメリットは、開発コストが低く小規模オフィスに適していることですが、デメリットは、キャプチャ時にブロックできないことと、顔の姿勢が比較的まっすぐである必要があることです(私たちはこのシステムを所有していますが、経験したことはありません)。次の図は、概略的な説明を示します。
顔識別または顔認識、顔認識は次のとおりです。図に示すように、答えたいのは「私は誰ですか?」であり、顔認証で使用されるペアマッチングと比較して、認識段階でより多くの分類手法が使用されます。実際には、前の 2 つのステップ、つまり顔検出と顔補正を実行した後、画像 (顔) を分類します。
#上記の 4 つの概念の紹介によれば、顔認識には主に 3 つの大きな独立したモジュールが含まれていることがわかります。 上記のステップを詳細に分割すると、次のプロセス図が得られます。 顔認識の分類 現在、顔認識の発展に伴い、顔認識技術は主に 3 つのカテゴリに分類されます。1 つ目は画像ベースの認識方法、2 つ目はビデオベースの認識方法、3 つ目は 3 次元顔認識方法です。 画像ベースの認識方法: このプロセスは、主に画像処理を使用する静的な画像認識プロセスです。主なアルゴリズムには、PCA、EP、カーネル法、ベイジアン フレームワーク、SVM、HMM、Adaboot などのアルゴリズムが含まれます。しかし、2014 年に、顔認識はディープラーニング技術を使用して大きな進歩を遂げ、ディープフェイスの 97.25%、顔の 97.27% に代表されるようになりましたが、ディープフェイスのトレーニング セットは 400 万セットに達しています。香港中文大学 顔のトレーニングセットは2wです。 ビデオに基づくリアルタイム認識方法: このプロセスは、顔認識の追跡プロセスで見ることができます。ビデオ内の顔の位置とサイズを見つけるだけでなく、しかし、異なる顔間のフレーム間の対応関係も決定する必要があります。 DeepFace参考論文 (情報): 1. DeepFace の論文。 DeepFace: 顔検証における人間レベルのパフォーマンスとのギャップを埋める2. 畳み込みニューラル ネットワークを理解するブログ。 http://blog.csdn.net/zouxy09/article/details/87815433. 畳み込みニューラルネットワークの導出ブログ。 http://blog.csdn.net/zouxy09/article/details/9993371/ 4. 畳み込みニューラル ネットワークに関する注意事項. 5. 手書き数字を認識するニューラル ネットワーク6. DeepFace のブログ投稿: http://blog.csdn.net/Hao_Zhang_Vision/article/details/52831399?locationNum=2&fps=1DeepFace は FaceBook によって提案され、次に DeepID と FaceNet が続きました。 。また、DeepFaceはDeepIDやFaceNetでも見られるため、DeepFaceは顔認証におけるCNNの基礎とも言え、現在、顔認証においてもディープラーニングは非常に良い成果を上げています。ここで DeepFace から学び始めます。 DeepFace の学習プロセスでは、DeepFace で使用されるメソッドだけでなく、このステップで現在使用されている他の主要なアルゴリズムも紹介され、既存の画像顔認識について簡単かつ包括的に説明します。テクノロジー。 DeepFaceの基本フレームワーク1. 顔認識の基本プロセス顔検出→顔位置合わせ→顔照合→顔識別 2 . 顔検出 2.1 既存の技術:
顔検出 (検出) には、Viola-Jones アルゴリズムに基づいて、opencv で直接使用できる haar 分類子がすでにあります。
Adaboost アルゴリズム (カスケード分類器):
1. 参考論文: 堅牢なリアルタイム顔検出。
2. 参考中国語ブログ: http://blog.csdn.net/cyh_24/article/details/39755661
3. ブログ: http://blog.sina.com.cn /s/blog_7769660f01019ep0.html
2.2 記事で使用されている方法
この記事では、検出点 (基準点検出器) に基づく顔検出方法を使用しています。
効果は次のとおりです:
2D アライメント:
3D 位置合わせ:
上記の 2D 位置合わせは (b) の図に対応します。 3Dアライメントは(c)~(h)に対応します。
4.1 既存技術
LBP と Joint Bayesian の 2 つの高次元手法の組み合わせを通じて。
DeepID シリーズ:
SVM を使用して 7 つの結合ベイジアン モデルを融合、精度は 99.15% に到達
4.2 記事内の手法
##論文内、ディープ ニューラル ネットワーク (DNN) は、複数カテゴリの顔認識タスクを通じてトレーニングされます。ネットワーク構造は上の図に示されています。
3D 位置合わせ後、形成された画像はすべて 152×152 の画像であり、上記のネットワーク構造に入力されます。構造のパラメータは次のとおりです:
プロセスは次のとおりです:
上記の 3 層ネットワークは、単純なエッジ特徴やテクスチャ特徴などの低レベルの特徴を抽出するためのものです。 Max-polling 層により、畳み込みネットワークはローカル変換に対してより堅牢になります。入力が修正された顔である場合、ネットワークは小さなラベル付けエラーに対してより堅牢になります。
ただし、このようなポーリング層では、顔の詳細な構造や小さなテクスチャの正確な位置に関する情報がネットワークから失われます。したがって、論文では最初の畳み込み層の後に Max-polling 層のみを追加しています。これらの前の層は、フロントエンド適応前処理レベルと呼ばれます。ただし、これが必要な多くの計算では、これらのレイヤーにはパラメーターがほとんどありません。入力画像を単純なローカル特徴セットに拡張するだけです。
L4、L5、および L6 はすべてローカルに接続された層です。畳み込み層がフィルターを使用するのと同じように、特徴の各位置で異なる層のセットがトレーニングおよび学習されます。画像のフィルターです。補正後の領域が異なると統計的特性も異なるため、畳み込みネットワークの空間安定性の仮定を確立することはできません。
たとえば、鼻と口の間の領域と比較して、目と眉の間の領域は非常に異なる外観を示し、高度に区別されます。つまり、入力された補正画像を利用して、DNN の構造をカスタマイズします。
ローカル接続層の使用は、特徴抽出中の計算負荷には影響しませんが、トレーニング パラメーターの数には影響します。ラベル付けされた面の非常に大規模なライブラリがあるという理由だけで、局所的に接続された 3 つの大きなレイヤーを用意できます。ローカル接続層の出力ユニットは大きな入力パッチの影響を受け、ローカル接続層の使用 (パラメータ) はそれに応じて調整できます (重みは共有されません)
たとえば、 L6 レイヤーは 74* の影響を受けます。74*3 入力パッチの影響により、修正された顔では、このような大きなパッチ間で統計パラメータを共有することは困難です。
最後に、ネットワークの最上位 2 つの層 (F7、F8) が完全に接続され、すべての出力ユニットがすべての入力に接続されます。これら 2 つのレイヤーにより、顔画像内の離れた領域の特徴間の相関関係を捉えることができます。例えば、目の位置と形状と口の位置と形状の相関関係(この部分にも情報が含まれています)は、この2つのレイヤーから得られます。最初の完全に接続された層 F7 の出力は、オリジナルの顔の特徴表現ベクトルです。
特徴表現の観点から見ると、この特徴ベクトルは従来の LBP ベースの特徴記述とは大きく異なります。従来の方法では通常、局所的な特徴の説明 (ヒストグラムの計算) が使用され、分類器への入力として機能します。
最後の完全接続層 F8 の出力は、K ウェイ ソフトマックス (K はカテゴリの数) に入り、カテゴリ ラベルの確率分布を生成できます。ネットワークを通過した後の入力画像の k 番目の出力を Ok とします。つまり、出力クラス ラベル k の確率は次の式で表すことができます。
トレーニングの目標は、クラスの正しい出力確率 (顔の ID) を最大化することです。これは、各トレーニング サンプルのクロス エントロピー損失を最小限に抑えることで実現されます。 k が指定された入力の正しいカテゴリのラベルを表すとすると、クロスエントロピー損失は次のようになります。
上でクロスエントロピー損失 L の勾配を計算します。パラメータを調整し、確率的勾配低減法を使用してクロスエントロピー損失を最小限に抑えます。
勾配は、誤差の標準的な逆伝播によって計算されます。興味深いことに、このネットワークによって生成される特徴は非常にまばらです。最上位の機能要素の 75% 以上が 0 です。これは主に ReLU アクティベーション機能の使用によるものです。このソフトしきい値非線形関数は、すべての畳み込み層、局所接続層、完全接続層 (最後の層 F8 を除く) で使用され、カスケード全体の後に高度に非線形でまばらな特徴が得られます。
スパース性は、トレーニング中にランダムな特徴要素を 0 に設定するドロップアウト正則化の使用にも関連します。 F7 完全接続層のドロップアウトのみを使用しましたが、トレーニング セットが大規模だったため、トレーニング プロセス中に重大な過学習は見つかりませんでした。
画像 I が与えられると、その特徴表現 G(I) はフィードフォワード ネットワークを通じて計算されます。各 L 層のフィードフォワード ネットワークは一連の関数とみなすことができます。
最後のレベルでは、フィーチャの要素を 0 から 1 に正規化し、照明の変化に対するフィーチャの感度を下げます。特徴ベクトルの各要素は、トレーニング セットの対応する最大値で除算されます。次に、L2 正規化を実行します。 ReLU 活性化関数を使用しているため、システムは画像のスケールに対してあまり不変ではありません。
出力 4096-d ベクトルの場合:
2.1 カイ二乗距離
このシステムでは、正規化された DeepFace 特徴ベクトルは、従来のヒストグラム ベースの特徴 (たとえば、 LBP) には次の類似点があります:
カイ二乗距離の計算式は次のとおりです。
2.2 シャム ネットワーク
記事エンドツーエンドのメトリクス学習方法についても言及しました。学習 (トレーニング) が完了すると、顔認識ネットワーク (F7 まで) が 2 つの入力画像で再利用され、取得された 2 つの特徴ベクトルを直接使用して、2 つの画像が一致するかどうかを予測します。入力された画像は同一人物のものです。これは次のステップに分かれています:
a. 2 つのフィーチャ間の絶対差を計算します;
b、完全に接続された層、単一の論理ユニットにマップされます (出力が同じ/異なる)。
3.1 データセット
LFW での結果:
YTF の結果:
DeepFace と以下の最大の方法の違いは、DeepFace が使用する方法です。ニューラルネットワークをトレーニングする前の位置合わせ方法。論文では、ニューラルネットワークが機能する理由は、一度顔の位置を調整すると、顔領域の特徴が特定のピクセルに固定されるためであり、このとき、畳み込みニューラルネットワークを使用して特徴を学習できるためであると考えています。
この記事のモデルは、C ツールボックス dlib の深層学習に基づく最新の顔認識手法を使用しています。屋外顔データ テスト ライブラリ Labeled Faces in the Wild のベンチマーク レベルに基づくと、精度は次のとおりです。 99.38%。
その他のアルゴリズム
http://www.gycc.com/trends/顔認識/overview/
dlib: http ://dlib.net/Data testing library Labeled Faces in the Wild: http://vis-www.cs.umass.edu/lfw/
このモデルは、ユーザーが次のことを行うためのシンプルな face_recognition コマンド ライン ツールを提供します。画像フォルダーを直接使用して、コマンドを通じて顔認識操作を実行します。
dlib を手動でインストールし、pip3 install face_recognition を実行してインストールを完了します。
コマンド ライン インターフェイスの使用方法face_recognition をインストールすると、face_recognition という単純なコマンド ライン プログラムを入手できます。これは、すべての顔の写真または写真フォルダーを認識するのに役立ちます。 まず、写真が含まれるフォルダーを指定する必要があります。写真に写っている人物が誰であるかはすでにわかっています。各人が写真ファイルを持っている必要があり、ファイル名はそれにちなんだ名前にする必要があります。 ;次に、認識したい顔の写真を含む別のフォルダーを準備する必要があります;その後、face_recognition コマンドを実行するだけで、プログラムはファイルを渡すことができます。既知の顔のフォルダは、未知の顔写真の人物が誰であるかを識別します;# 顔ごとに 1 行が出力されます。データは、ファイル名に認識された名前を加えたものです。人物をカンマで区切ります。
各写真に写っている人物の名前だけを知りたいが、ファイル名は知りたくない場合は、次の手順を実行できます:Python モジュール
face_recognition を導入することで顔認識操作を完了できます: API ドキュメント: https://face-recognition.readthedocs.io.写真内のすべての顔を自動的に認識します この例を参照してください: https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.pyこの例を参照してください: https://github.com/ageitgey/face_recognition/blob/master/examples/recognize_faces_in_pictures.py
#Pythonコードケースすべての例はここにあります。https://github.com/ageitgey/face_recognition/tree/master/examples
·写真の中の顔を見つけるhttps://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py · 识别照片中的面部特征Identify specific facial features in a photograph https://github.com/ageitgey/face_recognition/blob/master/examples/find_facial_features_in_picture.py · 使用数字美颜Apply (horribly ugly) digital make-up https://github.com/ageitgey/face_recognition/blob/master/examples/digital_makeup.py ·基于已知人名找到并识别出照片中的未知人脸Find and recognize unknown faces in a photograph based on photographs of known people https://github.com/ageitgey/face_recognition/blob/master/examples/recognize_faces_in_pictures.pypython人脸わかりました、今日の共有はここまでです~
以上がオフライン認識率最大99%のPython顔認識システム、オープンソース~の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。