これまでの顔認識には、主に顔画像の取得、顔認識の前処理、本人確認、本人検索などの技術やシステムが含まれていました。現在、顔認識は徐々にドライバー検出、歩行者追跡、さらにはADASにおける動的物体追跡にまで拡大しています。 このことから、顔認識システムは単純な画像処理からリアルタイムのビデオ処理へと発展してきたことがわかります。さらに、アルゴリズムは、Adaboots や PCA などの従来の統計手法から、CNN、RCNN などのディープラーニング手法とその変形手法へと変化しました。現在、かなり多くの人が3D顔認識の研究を始めており、このプロジェクトは学界、産業界、国によって現在支援されています。 まず、現在の研究状況を見てみましょう。上記の開発動向から、現在の主な研究方向は、ディープラーニング手法を使用してビデオ顔認識を解決することであることがわかります。 主な研究者:中国科学院計算技術研究所のShan Shiguang教授、中国科学院生体測定研究所のLi Ziqing教授、清華大学のSu Guangda教授、香港中文大学のTang Xiaoou教授、Ross B. Girshick氏など。 主なオープンソース プロジェクト:SeetaFace顔認識エンジン。このエンジンは、中国科学院計算技術研究所のShan Shiguang研究員が率いる顔認識研究グループによって開発された。コードは C++ で実装されており、サードパーティのライブラリ関数に依存しません。オープンソース プロトコルは BSD-2 であり、学術機関や産業界で無料で使用できます。 主なソフトウェアAPI/SDK:
主な顔認識画像ライブラリ:現在、公開されている顔画像ライブラリの中で、より優れているものとしては、LFW (Labelled Faces in the Wild) と YFW (Youtube Faces in the Wild) があります。現在の実験データセットは基本的にLFWから派生しており、現在の画像顔認識精度は99%に達しています。基本的に、既存の画像データベースは最大限に活用されています。既存の顔画像データベースの概要は次のとおりです。 現在、中国では顔認識に携わる企業がますます増えており、その用途は非常に広範囲にわたります。その中で、Hanwang Technologyは最高の市場シェアを誇っています。主要企業の研究方向性と現状は以下のとおりです。
顔認識のプロセス顔認識は主に、顔検出、顔位置合わせ、顔検証、顔識別の 4 つの部分に分かれています。 顔検出:画像内の顔を検出し、結果を長方形の枠で囲みます。 openCV で直接使用できる Harr 分類器があります。 顔の位置合わせ:検出された顔の姿勢を、できるだけ「まっすぐ」になるように修正します。修正すると、顔認識の精度が向上します。補正方法には2D補正と3D補正の2種類があり、3D補正では横顔の認識精度が向上します。 顔の補正を行う際には、特徴点の位置を検出するステップがあります。これらの特徴点は主に鼻の左側、鼻孔の下側、瞳孔の位置、上唇の下側などにあります。これらの特徴点の位置がわかったら、位置駆動型の変形を実行し、顔を「補正」することができます。次の図に示すように: ここでは、2014 年に MSRA が開発した技術「Joint Cascade Face Detection and Alignment (ECCV14)」を紹介します。この記事では、検出とアライメントを 30 ミリ秒で直接完了します。 顔認証:顔認証はペアマッチングに基づいているため、返答は「はい」または「いいえ」になります。具体的な操作としては、テスト画像を与え、1枚ずつペアマッチングを行い、一致が見つかった場合は、テスト画像とマッチングした顔が同一人物の顔であることを意味します。 この方法は、小規模オフィスの顔認証出勤管理システムで一般的に使用されています(使用されるはずです)。具体的な操作方法は、おおよそ次のとおりです。従業員の顔写真をオフラインで 1 枚ずつ入力します(通常、従業員 1 人につき複数の顔を入力します)。従業員が顔認証で出勤すると、カメラが画像をキャプチャし、前述のように顔検出、顔補正、顔検証を実行します。一致結果が「はい」になると、顔をスキャンした人がこのオフィスに属していることを意味し、このステップで顔検証が完了します。 オフラインで従業員の顔を入力すると、顔と名前を照合できるため、顔認証が成功すると、その人が誰であるかがわかります。 上記のようなシステムの利点は、開発コストが低く、小規模なオフィスに適していることです。欠点は、キャプチャ中に遮蔽があってはならず、顔の姿勢が比較的正確でなければならないことです(私たちは皆、このシステムを持っていますが、経験したことはありません)。次の図は概略図を示しています。 顔の識別/認識:顔識別または顔認識は、下の図に示すように、「私は誰ですか?」という質問に答えるために使用されます。顔検証で使用されるペアマッチングと比較して、認識段階でより多くの分類方法が使用されます。実際には、顔検出と顔補正という前の 2 つのステップの後に画像 (顔) を分類します。 上記の 4 つの概念の紹介に基づいて、顔認識には主に 3 つの大きな独立したモジュールが含まれていることがわかります。 上記の手順を詳細に分解すると、次のプロセス図が得られます。 顔認識分類現在、顔認識技術の発展に伴い、顔認識技術は主に3つのカテゴリーに分かれています。1つは画像ベースの認識方法、2つ目はビデオベースの認識方法、3つ目は3次元顔認識方法です。 画像ベースの認識方法:このプロセスは、主に画像処理を活用した静的画像認識プロセスです。主なアルゴリズムには、PCA、EP、カーネル法、ベイジアンフレームワーク、SVM、HMM、Adaboot などがあります。しかし、2014年にディープラーニング技術を使って顔認識は大きな進歩を遂げ、deepfaceの97.25%とface++の97.27%に代表されるようになりました。しかし、deep faceのトレーニングセットは400万セットであるのに対し、香港中文大学のTang XiaoouによるGussian faceのトレーニングセットは2万セットです。 ビデオベースのリアルタイム認識方式:このプロセスは、顔認識の追跡プロセスでは、ビデオ内の顔の位置とサイズを見つけるだけでなく、フレーム間の異なる顔の対応を決定する必要があることを示しています。 ディープフェイス参考論文(資料): 1. DeepFace 論文。 DeepFace: 顔認証における人間レベルのパフォーマンスとのギャップを埋める 2. 畳み込みニューラル ネットワークを理解するブログ。 http://blog.csdn.net/zouxy09/article/details/8781543 3. 畳み込みニューラル ネットワークの導出に関するブログ。 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=1 DeepFace は FaceBook によって提案され、その後に DeepID と FaceNet が続きました。さらに、DeepFaceはDeepIDとFaceNetの両方で見られるため、DeepFaceは顔認識におけるCNNの基礎とみなすことができます。現在、ディープラーニングは顔認識でも非常に優れた結果を達成しています。そこで、DeepFace から学習を始めます。 DeepFace を学習する過程では、DeepFace で使用される方法だけでなく、このステップの他の主要なアルゴリズムも紹介され、既存の画像顔認識技術について簡単かつ包括的に説明します。 DeepFaceの基本的なフレームワーク1. 顔認識の基本プロセス顔検出 -> 顔の位置合わせ -> 顔の検証 -> 顔の識別 2. 顔検出2.1 既存の技術: Haar分類器:顔検出(検出)には、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 本論文で使用した方法 本稿では、検出点(フィデューシャルポイント検出器)に基づく顔検出手法を採用しています。
効果は以下のとおりです。 3. 顔の位置合わせ2Dアライメント:
3Dアライメント:
効果は以下のとおりです。上記の2Dアライメントは図(b)に対応し、3Dアライメントは図(c)~(h)にそれぞれ対応します。 4 顔認証4.1 既存の技術 LBP && ジョイントベイジアン:高次元 LBP 法と Joint Bayesian 法を組み合わせることにより。
DeepID シリーズ: 7つの共同ベイジアンモデルはSVMを使用して統合され、精度は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 はカテゴリの数) に入り、カテゴリ ラベルの確率分布を生成できます。 Ok は入力画像がネットワークを通過した後の k 番目の出力を表し、出力クラス ラベル k の確率は次のように表すことができます。 トレーニングの目的は、正しい出力カテゴリ (顔 ID) の確率を最大化することです。これは、各トレーニング例のクロスエントロピー損失を最小限に抑えることによって実現されます。 k が与えられた入力の正しいカテゴリのラベルを表すとすると、クロスエントロピー損失は次のようになります。 フォークエントロピー損失は、パラメータに対するフォークエントロピー損失 L の勾配を計算し、確率的勾配降下法を使用することで最小化されます。 勾配は、標準的な誤差逆伝播法によって計算されます。興味深いことに、このネットワークによって生成される特徴は非常にまばらです。最上位レベルの機能の 75% 以上がゼロです。これは主に、ReLU 活性化関数の使用によるものです。このソフトしきい値非線形関数は、すべての畳み込み層、ローカル接続層、および完全接続層 (最後の層 F8 を除く) で使用され、全体的なカスケードの後に高度に非線形でスパースな特徴が生成されます。 スパース性は、トレーニング中にランダムな特徴要素を 0 に設定するドロップアウト正規化の使用にも関連しています。ドロップアウトは F7 完全接続層でのみ使用しました。トレーニング セットが大きいため、トレーニング中に著しいオーバーフィッティングは観察されませんでした。 画像Iが与えられると、その特徴表現G(I)はフィードフォワードネットワークを通じて計算されます。各L層フィードフォワードネットワークは、一連の関数として考えることができます。 正規化:最後のレベルでは、特徴の要素を 0 から 1 に正規化して、照明の変化に対する特徴の感度を低減します。特徴ベクトルの各要素は、トレーニング セット内の対応する最大値で除算されます。次にL2正規化が実行されます。 ReLU 活性化関数を使用しているため、システムは画像のスケールに対して不変ではありません。 出力4096次元ベクトルの場合:
2. 検証2.1 カイ二乗距離 このシステムでは、正規化された DeepFace 特徴ベクトルは、従来のヒストグラムベースの特徴 (LBP など) と次のような類似点があります。
カイ二乗距離の計算式は次のとおりです。 2.2 シャムネットワーク 記事では、エンドツーエンドのメトリック学習法についても触れています。学習(トレーニング)が完了すると、顔認識ネットワーク(F7 まで)が 2 つの入力画像に再利用され、得られた 2 つの特徴ベクトルが直接使用され、2 つの入力画像が同一人物のものであるかどうかが予測されます。これは次のステップに分かれています。 a. 2 つの特徴間の絶対差を計算します。 b、完全に接続されたレイヤー。単一の論理ユニットにマッピングされます (出力は同じ/異なります)。 3. 実験的評価3.1 データセット
LFWの結果: YTF の結果: DeepFace と後続の方法との最大の違いは、DeepFace ではニューラル ネットワークをトレーニングする前にアライメント メソッドを使用することです。論文では、ニューラルネットワークが機能する理由は、顔の位置合わせが済めば、顔領域の特徴が特定のピクセルに固定されるためだと考えています。このとき、畳み込みニューラルネットワークを使用して特徴を学習できます。 この記事のモデルは、C++ ツールボックス dlib のディープラーニングに基づく最新の顔認識方法を使用し、屋外顔データテストライブラリ Labeled Faces in the Wild のベンチマークレベルに基づいて 99.38% の精度を達成しています。 さらなるアルゴリズム http://www.gycc.com/trends/face%20recognition/overview/ dlib: http://dlib.net/ データテストライブラリ Labeled Faces in the Wild: http://vis-www.cs.umass.edu/lfw/ このモデルは、ユーザーがコマンドを通じて顔認識操作に画像フォルダーを直接使用できるようにするシンプルな face_recognition コマンドライン ツールを提供します。 画像内の顔の特徴を捉える1枚の画像にすべての顔を撮影 画像内の顔の特徴を見つけて処理する それぞれの人の目、鼻、口、あごの位置と輪郭を見つけます。 顔認識をインポートする 画像 = face_recognition.load_image_file("your_file.jpg") face_locations = face_recognition.face_locations(画像) 顔の特徴を捉えることは非常に重要であり、画像のデジタルメイクアップにも使用できます (Meitu XiuXiu など)。 デジタルメイクアップ: https://github.com/ageitgey/face_recognition/blob/master/examples/digital_makeup.py 画像内の顔を認識する写真に写っている人物を特定する インストール手順この方法は Python3/python2 をサポートしています。macOS と Linux でのみテストされており、Windows で動作するかどうかはわかりません。 pypi の pip3 (または Python 2 の場合は pip2) を使用してこのモジュールをインストールします。 重要: dlib のコンパイルに問題が発生する場合があります。ソースから (pip ではなく) dlib をインストールすることでエラーを修正できます。インストール マニュアルのソースから dlib をインストールする方法を参照してください。 https://gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf インストールを完了するには、pip3 install face_recognition を実行して dlib を手動でインストールします。 使用方法 コマンドラインインターフェースface_recognition をインストールすると、写真または写真のフォルダー内のすべての顔を認識できる face_recognition という便利なコマンド ライン プログラムが提供されます。 まず、写真を含むフォルダーを用意する必要がありますが、写真に写っている人物が誰であるかはすでにわかっています。各人物には写真ファイルが必要であり、ファイル名は人物にちなんで付ける必要があります。 次に、識別したい顔の写真を含む別のフォルダーを準備する必要があります。 次に、face_recognition コマンドを実行するだけで、プログラムは既知の顔のフォルダーを通じて未知の顔写真に写っている人物を識別できるようになります。 それぞれの顔に対して、出力行が必要です。データは、ファイル名と認識された名前がコンマで区切られたものです。 ファイル名なしで各写真に写っている人物の名前だけを知りたい場合は、次の操作を実行できます。 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 さて、今日のシェアはこれで終わりです〜 |
<<: Metaの最新自社開発チップの結果が明らかに、7nmプロセス、RISC-V CPUを統合
>>: 機械学習でサンプルが不均衡な場合はどうすればよいでしょうか?
[[253005]] 「中国製造2025」の実施に伴い、ロボット産業は社会への参入を加速し始めてい...
[51CTO.com クイック翻訳] IDC によると、人工知能 (AI) と認知システムへの世界的...
ML と GenAI の世界に深く入り込むにつれて、データ品質への重点が重要になります。 KMS T...
[[335755]]タイムトラベルの超能力を与えられたら、どの歴史上の人物と話をして過去に戻りたい...
[[238409]]ソートは、コンピュータ サイエンスにおいて常に最も基本的なアルゴリズムの 1 ...
さまざまなスマート電子製品の普及により、ほとんどの人が知能についてある程度理解するようになりました。...
年齢を重ねるにつれ、老化を遅らせて若さを取り戻すことが多くの人の夢となります。 クレオパトラにしろ、...
病院が導入する医療機器やモバイルデバイスが増えるにつれて、医療システムの IT インフラストラクチャ...