畳み込みニューラルネットワークベースの顔認識の深さの学習を構築するためのTensorFlow顔認識(TensorFlow + DLIB + OpenCVの) - 理論とコード、ドキュメントやソースコードを説明

©2015-2019王Liguang。すべての権利を保有。この記事では、ブロガーオリジナル記事です。いかなる形で許さブロガーなしに複製してはならない、それ以外の場合は、あなたの法的責任を追及します。あなたは(上の記事を参照してください)サイトの声明に合意したことを意味し、この記事を読んでいます!この記事は、参考値です、あなた自身のスクリーニングの有効性、何の問題は、ブロガーは一切の責任を負いませんしてください!
このリンク: https://blog.csdn.net/happywlg123/article/details/86719292

1プロジェクトの概要

顔認識は、現代社会におけるアプリケーションの非常に広い範囲を持っています。デジタル画像処理もちろん、私は、顔認識システムの深さの学習を行うことにしました。私は、畳み込みニューラルネットワーク認識を使用して、DLIB分類器が顔を見つけて使用することによって得られたカメラ画像に基づく顔認識システムの深さの調査を設計しました。私は、システムが3つの出力カテゴリがありますように設計しました。私や他の生徒を同定することに加えて、私はネットワークの顔ギャラリーにLFW人々は第三のカテゴリーとして、画像タグのラベルにいくつかの写真をダウンロードし、まだです。システム上のプロセスの詳細な設計および実装は、次のセクションで詳細に説明します。

厳粛な声明:
ルーク(WLG)が執筆このドキュメント。
この文書は、もともとカリキュラムレポートだった、それだけで共有することを学ぶ適応の少量を行うことです。
許可なしに厳しく、コピー転載または文書の任意の部分を引用することは禁止されて!これによって宣言!
します。https://github.com/lukegood/DIY_Face_recognition_systemこの文書では、githubのから来て
githubのソースコードとテキストのための上記のリンクにアクセスしてください。

パーティショニングモジュール2の機能と構造

私は、システムが、カメラモジュールによって捕捉四つの部分と処理画像、ローカル画像処理モジュールの.pyファイルに格納されてそれぞれが畳み込みニューラルネットワーク構造及びトレーニングモジュールとテストモジュールに分割されて実現しています。
カメラ映像の収集と処理モジュールは、カメラを呼び出すことによって傍受写真は、正規化された指定された顔を見つけ、そして最終的に顔の絵を保存し、顔画像を収集するための主に担当しています。
ローカル写真処理モジュールは、主に私は絵に用いられる第3分類カテゴリとしてネットワーク上のダウン、ダウンロード処理するために使用され、その主な機能は、使用DLIBが顔を見つけ、絵に読み込まれ、その後、私が設定した顔に画像を保存することです使用のための仕様。
コンボリューションニューラルネットワークの構造や研修モジュールは、主要な普及する前に完了トレーニングセットとテストセット、バックプロパゲーションおよびその他の機能を分割し、システム全体の重要な部分です。
テストの主要部分は、人間の顔の画像をキャプチャするためにカメラを呼び出し、その後、認識のためのネットワークに満期日前に保存したトレーニングを読み取ります。
以下に示すようなシステム構成:
ここに画像を挿入説明
システム構成図

3プロジェクトの実現

3.1のサンプル採取および処理

サンプルの収集と処理は、カメラ画像取得及び処理モジュール、2つのローカル画像処理モジュールに焦点を当てました。
まず、カメラ映像の収集と処理収集するためのモジュールとプロセスIおよび画像の他の学生。OpenCVのカメラを使用して呼び出し、その後、傍受やグレースケール画像は、その後、顔を見つけて、適切なサイズに画像を保存DLIBを使用しています。以下に示すように、特定のプロセス:
ここに画像を挿入説明
図2の取得プロセス
、私が使用する仕様を満たしていない写真LFWギャラリーをダウンロードして、その地域の写真処理モジュールの設計。ローカル写真処理では、同じ、差分上記の基本的な流れは、カメラからの入力がもはや読み取ることはありませんが、ローカル画像。以下に示すように特定のプロセス:
ここに画像を挿入説明
図3のローカル画像処理フローは、
試料収集および処理に関連付けられたキーコードを以下に説明します。
まず、**カメラ= cv2.VideoCapture(0)**対応する座標を得るために、位置決め面DLIB分類器を使用して、階調処理後、カメラを開くために使用しました。
ここに画像を挿入説明
顔の4点の測位座標
コーナーは、我々が望む標準として保存顔傍受、カメラによって撮影された画像に直面得た後、。【:Y1、X1コード顔= IMGにより X2:Y2]、顔= cv2.resize(顔、(サイズ、大きさ)) が完成します。
画像の取得及び処理が完了すると、次に、ニューラルネットワーク上で工事を行います。

厳粛な声明:
ルーク(WLG)が執筆このドキュメント。
この文書は、もともとカリキュラムレポートだった、それだけで共有することを学ぶ適応の少量を行うことです。
許可なしに厳しく、コピー転載または文書の任意の部分を引用することは禁止されて!これによって宣言!
します。https://github.com/lukegood/DIY_Face_recognition_systemこの文書では、githubのから来て
githubのソースコードとテキストのための上記のリンクにアクセスしてください。

ニューラルネットワーク畳み込み3.2を構築し、訓練

3.2.1コンボリューション、プーリング、活性化し、廃棄

コンボリューション層は、ネットワーク全体で重要な役割を果たしており、サンプル処理の特徴を抽出するために、選択した良いコンボリューションは、畳み込みニューラルネットワークの認識を通して精度のレベルに重要な影響を持っています。コンボリューションカーネルを選択するには、「小さな核の畳み込み、畳み込みマルチレイヤー」の原則の一般的な使用。だから、私は最終的に画像認識構造を採用しては非常に一般的に3つの畳み込みに使用されています。3は、3のコンボリューションカーネルサイズを用いて、移動ステップで行と列が1に設定されています。更なる処理を容易にするために、畳み込み層の後にサンプルサイズ変わらないことを保証するために、私が「全ゼロフィル」を使用し、すなわち、試料外「0」の層を追加
各層畳み込み層を形成した後、I層がプールに接続され、プールされたサンプルの最大使用が行われます。畳み込みサンプルを小さな2×2の領域に分割された後、私の解像度プール層は、すなわち、2 2に固定し、各小領域内の最大値を捕捉し、その後、プールとして層を合併出力。コンボリューションサンプルサイズが変更されていないが、プールされたサンプルの長さと幅が半分に低減された後も、プールの理由。
プールの完了後、私をさせるサンプルが活性化機能を持っていました。活性化関数の役割は、あなたがより良い分類問題を解決できるように、ニューラルネットワーク、ニューラルネットワークにいくつかの非線形要因を追加することです。時間の活性化機能を選択するには、私はrelu機能を使用していました。私は、文献レビューは、現在の文献の多くは、その小さな計算コストのrelu機能を推奨することを発見し、問題の勾配が消滅を軽減することができ可決しました。トレーニング時間を短縮するために、私はrelu機能を使用することにしました。
ここに画像を挿入説明
5relu略図関数
ネットワーク入力ダウン活性層が完了する前に、私はあきらめて導入しました。それを放棄導入する理由は、我々は一般的に大規模な訓練パラメータのネットワークを構築する必要があるとのオーバーフィッティング問題になりやすいです。モデルの一般化を強化するために、我々はいくつかのランダムなパラメータが訓練に参加しませんしましょう、あきらめることができます。しかし、訓練フェーズの目的でのみ放棄し、使用リアルタイムモデルでは、すべてのパラメータが計算に関与していることがあります。
最後に、ネットワーク構造のこの部分は、以下に示すとおり
ここに画像を挿入説明
、図6の概略構成
私の設計のネットワーク構造では、調製した試料は、第1の入力(64 643)、畳み込みの後、同じサンプルサイズが、チャネルの数は、32 3となります。第1の層と畳み込みプールしたサンプルサイズの後に32になるように、次いで、半分にサンプルの細胞層、長さと幅を通過する32 32 第一の層と同一の計算他の層。第2の畳み込み演算カーネル層プールしたサンプルのサイズは16になった後16 32 プーリング後畳み込みカーネルの第三の層を形成した後、サンプルサイズは8となる。8 64と完全に接続されたニューラルネットワークへの入力として。
TensorFlowによって符号、畳み込み層が配置され、そして活性化及び廃棄の導入を使用して細胞層機能は、唯一のように、その後TensorFlowに関数を呼び出す独自の機能を定義することができ、利便性のために、実装される機能を呼び出すことができ唯一の独自の関数を呼び出して、その上にパラメータを最適化するためにサンプルを転送する必要があります後に良好なTensorFlow、所望の形状にその関数のパラメータ。下図のように:
ここに画像を挿入説明
ここに画像を挿入説明

ここに画像を挿入説明
パック独自に作成するための7の畳み込み、プールされ、機能を放棄

3.2.2完全に接続されたニューラルネットワーク

完全に接続されたニューラルネットワークでは、私は主に1つの隠れ層と1つの出力層を設定します。ネットワークが簡単にフィットする傾向を作り出した今、私の文学は、中間層のネットワークエラーの層数を削減することができる増加が、同時にネットワークの複雑さを増大させ、それは多くの場合、中間層の下位ノードの数を増やすことによって得られますより良いエラーの層がいくつかを追加します。
隠れ層ノードの設定方法より良い決定するために、私はいくつかの試みが隠れ層ノード状況の256,512,1024三種類に設定されたネットワークテストの精度に試みられたました。
変数を制御するために、入力サンプルは、私は、私のパートナーと3分の1はそれぞれ2000年のSRF写真を分類した6000、であることが決定されます。95に設定されたトレーニングセットとテストの比率:5、400 BATCH_SIZE停止実行した後、100個のサンプルに設定BATCH_SIZE。
256,512,1024テストセット精度と隠れ層ノードの損失を次のよう
...
(ソースコードおよびテキストのgithubのリンクを移動します。https://github.com/lukegood/DIY_Face_recognition_system)

プロジェクト参照します。http://tumumu.cn/2017/05/02/deep-learning-face、私の感謝の気持ちを表現します!

連絡先ブロガー

ご質問がある場合、あなたは私と通信することができます。直接記事にメッセージを残すか、私に電子メールを送信してください。あなたがメッセージを送信したい場合(連絡先の詳細については、このリンクを参照してくださいます。https:?//www.wangliguang.cn/ page_idの= 81 )。あなたは、私は通常答えるが、私は返事を保証するものではありません。時間があれば、ご了承ください。
あなたは絶対に返信したい場合は、以下の報酬のブロガーを見ることができます。

報酬ブロガー

記事を書いて、質問に答えることは容易ではない、私はあなたが私にいくつかのサポートを与えることができることを望みます!あなたは報酬私達を持ってたら、Q&Aの数をご提供して喜んでいます (報酬およびイラストは、このリンクをご覧くださいます。https:?//www.wangliguang.cn/ page_idの= 337)

おすすめ

転載: blog.csdn.net/happywlg123/article/details/86719292