[私はジャービスです]: FaceIDの背後にあるディープラーニング視覚アルゴリズムについて語る

[私はジャービスです]: FaceIDの背後にあるディープラーニング視覚アルゴリズムについて語る

先週発売されたiPhoneXで私が一番惹かれたのは、かわいいウサギの耳ではなく、AppleのFaceIDでした。 AppleがTouchIDをFaceIDに置き換えた背景には、強力な視覚アルゴリズムのサポートがあり、iPhoneXはさまざまな欺瞞や変装を識別できるようになり、FaceIDを最も重要なセキュリティ検証方法として敢えて使用できるようになりました。

周知のとおり、ディープラーニングアルゴリズムは最近急速に発展し、人工知能の発展を推進しています。 2012 年に ImageNet データセットで AlexNet が成功したことで、長い間眠っていた畳み込みニューラル ネットワーク (CNN) に人々の注目が再び集まりました。VGG や ResNet などの一連のモデルの導入により、コンピューターの視覚能力は人間に近いものになりました。自然言語処理や音声認識などの分野におけるリカレントニューラルネットワーク(RNN)の応用は、従来のモデルでは時系列データを把握するのが難しいというボトルネックを打破しました。ディープラーニングは、基本的な能力として、転移学習や強化学習などの一連の関連分野の発展を推進しています。もちろん、これには視覚関連の変化も含まれます。

この目的のために、私たちはいくつかの古典的なディープラーニング アルゴリズムとモデルを Jarvis アルゴリズム ライブラリに統合し、Tesla プラットフォームを通じて誰でも利用できるようにしました。現在、Jarvis のディープラーニング カテゴリには 9 つの異なるアルゴリズムが統合されており、次の 3 つのカテゴリに分散されています。

この記事では、コンピューター ビジョンの分野におけるいくつかの古典的なアルゴリズムに焦点を当て、その原理、モデル、適用可能なシナリオについて説明します。後ほど他の分野の記事も掲載しますので、引き続きご注目ください〜

コンピュータビジョンの概要

コンピュータビジョンは、機械に世界を「理解」させる方法を研究する科学です。コンピューター ビジョンは、画像処理、パターン認識、人工知能のテクノロジを組み合わせて使用​​し、1 つまたは複数の画像を分析して必要な情報を取得することに重点を置いています。したがって、コンピューター ビジョンは、人工システムが画像や多次元データから「認識」できるようにする方法を研究する科学とも見ることができます。具体的には、コンピューター ビジョンには、オブジェクトの検出と認識、オブジェクトの追跡、画像の復元 (ノイズ除去など)、シーンの再構築が含まれます。

2012年にAlexnetが視覚分野でILSVRCチャンピオンシップを獲得して以来、ディープラーニングは止められないものとなり、ILSVRCは毎年ディープラーニングが優勢を占めるようになりました。以下に示すモデルは、深視力の発達におけるマイルストーンを表しています。モデルが深くなるにつれて、トップ5エラー率はどんどん低くなっています。Resnetの結果は約3.5%に達しています。同じImageNetデータセットでは、人間の目の認識エラー率は約5.1%であり、ディープラーニングモデルの認識能力が人間を上回ったことを意味します。

(http://ai..com/art/201704/538154.htm)

古典的なアルゴリズムとモデル

Alexnet や VGG などのネットワークは、ImageNet で優れた結果を達成しただけでなく、他のシナリオでも使用できます。ユーザーがこれらのモデルを柔軟かつ迅速にトレーニングできるようにするために、これらのアルゴリズムを Jarvis に統合しました。ユーザーは、複雑なネットワーク定義やモデルトレーニングコードを記述することなく、Tesla 上の対応するアルゴリズムノードを直接ドラッグし、対応する画像をトレーニングして基本的に使用可能なモデルを取得できます。もちろん、良い結果を得たいなら、根気よくデバッグする必要がありますよ〜

1. アレックスネット

AlexNet のネットワーク構造を下図に示します。AlexNet は、畳み込み、ダウンサンプリング、完全に接続された層を 1 つずつ組み合わせた一般的な構造で、従来の CNN の原理に従っていることがわかります。図中の奇妙な「上層と下層」は、実際には GPU の並列処理を指しています。

(https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf)

AlexNet は ImageNet で優れた結果を達成できます。学習能力を高めるために、より深く広いネットワーク構造を使用するだけでなく、データ処理とトレーニング技術の面でも学ぶ価値のある点がいくつかあります。

  • データ拡張

データ拡張とは、基本データに対して一連の操作を実行してより多くのデータを取得し、データセットの多様性を高めることで、過剰適合をある程度まで軽減する方法です。 AlexNet が ImageNet でトレーニングする際に使用するデータ強化方法は次のとおりです。

水平反転

ランダムクロッピング

色・光の変化など

  • ドロップアウト

ドロップアウトとは、ディープラーニング ネットワークのトレーニング プロセス中に、一定の確率でニューラル ネットワーク ユニットをネットワークから一時的に破棄するプロセスを指します。確率的勾配降下法の場合、ランダムにドロップされるため、ミニバッチごとに異なるネットワークをトレーニングしていると見なすことができます。これは、ネットワークの過剰適合を防ぎ、モデルの一般化を強化する効果的な方法です。

下の図の左側は、共通層の接続を示しています。各ドロップアウトは、右の図に示すように、元のネットワークからより薄い構造を見つけることに相当します。トレーニングフェーズでは、フォワード計算フェーズでランダムに切断する必要がある接続の割合を示す 0 から 1 の範囲のドロップアウト係数 p を設定し、バックプロパゲーション中に切断されていない重み値のみを更新します。テストフェーズでは、すべての接続を使用する必要がありますが、これらの重みは 1-p で乗算する必要があります。

各切断と更新は確率 p でランダムに実装されるため、各反復での切断は異なることに注意してください。 n 個のノードを持つニューラル ネットワークの場合、ドロップアウト係数 p = 0.5 と仮定すると、フォワード パスの数が十分に大きいと、トレーニング プロセス全体で 2^n 個の接続の組み合わせが得られます。これは 2^n 個のモデルをトレーニングすることと同等であり、最終結果は 2^n 個のモデルの組み合わせになります。

(http://blog.csdn.net/stdcoutzyx/article/details/49022443)

ReLU活性化関数

ReLu 活性化関数には、従来の Tanh 関数や Logistic 関数に比べて次のような利点があります。

  • 順方向計算と逆偏微分処理は、指数や除算などの複雑な演算を必要とせず、非常に簡単です。
  • tanh や logistic とは異なり、「フラット スポット」がないため、勾配分散の問題が発生しにくくなります。
  • 左側を閉じると、多くの隠れ層の出力が 0 になり、ネットワークがスパースになり、一定の正規化効果が得られ、過剰適合が軽減されます。

Relu 関数の欠点は、閉じた左側の部分にも反映されています。一部のノードの出力が関数の左側に落ちた場合、回復することはありません。この問題を解決するために、後に pRelu などの改良された活性化関数が登場しました。つまり、関数の左側にも一定の勾配が与えられ、一部のノードが「死ぬ」のを防ぎながら非線形性を確保します。

(http://gforge.se/2015/06/benchmarking-relu-and-prelu/)

  • ローカルレスポンス正規化 (LRN)

神経生物学には「側方抑制」と呼ばれる概念があり、これは活性化されたニューロンが隣接するニューロンに対して一定の抑制効果を持つことを意味します。

LRN は側方抑制の考え方を借用して、ローカルニューロンの活動に対する競合メカニズムを作成し、比較的大きな応答を持つ値を比較的大きくすることで、モデルの一般化能力を向上させます。 LRN には、チャネル内とチャネル間の 2 つの正規化モードがあります。詳細については、こちらの記事を参照してください。論文のImageNet実験では、LRNはトップ5エラー率を1.2%削減できます。ただし、他のデータセットでの実験では、LRNによるトレーニング効果の改善はそれほど顕著ではありません。したがって、LRNの操作はすべてのシナリオに適しているわけではなく、結果を得るにはまださらに多くの実験が必要であることがわかります。

  • 重複プーリング

名前が示すように、プーリングを行うと重複が発生します。一般的にプーリングとは、入力結果をブロックに分割し、ブロックの最大値(最大プーリング)または平均値(平均プーリング)を抽出することでダウンサンプリングを行う処理です。ここでのブロックは互いに重なり合うことはありません。ただし、AlexNet では重複が発生します。 LRN と同様に、このトリックはすべてのシナリオで機能するとは限りません。

上記の技術を組み合わせると、全体として、AlexNet は依然として非常に古典的なアルゴリズムです。そこで、AlexNet を Jarvis のディープラーニング アルゴリズムのビジョン カテゴリに統合しました。実装に関しては、AlexNet のオリジナルの構築とトレーニング方法、および Alex が公開した記事「畳み込みニューラル ネットワークを並列化するための奇妙なトリック 1 つ」に基づいて、次のことを行いました。

  • LRN レイヤーが削除され、パラメータの初期化が Xavier メソッドに変更されます。
  • 活性化関数はRelu関数を使用する
  • 正則化はL2正則化を選択する
  • 完全に接続した 2 つのレイヤー fc6 と fc7 では、ドロップアウト係数 0.5 が使用されます。
  • 自動サイズ変更: データ入力時に、指定された入力画像のサイズは 224x224x3 です。読み取られた画像がこのサイズより大きい場合は、224x224x3 にランダムに切り取られます。読み取られた画像がこのサイズより小さい場合は、224x224x3 にサイズ変更されます。

さらに、水平反転、色、照明の変更など、入力画像に対するいくつかのデータ拡張操作も提供します。関連するパラメータについては、この記事の後半で説明します。

2. VGG16

VGG16はAlexNetのフレームワークを継承していますが、畳み込み層の数を深くすることでAlexNetよりも高い画像認識率を実現しています。下図のようにAlexNetよりも深いネットワーク構造となっています。より詳しいネットワーク構造パラメータについては論文を参照してください。

(https://www.cs.toronto.edu/~frossard/post/vgg16/ )

AlexNet と比較すると、VGG16 の明らかな違いは次のとおりです。

  • 連続畳み込みブロックと小さいフィルタサイズ

ネットワーク構造図から、vgg16 には複数の連続した畳み込み演算 (図のブラックボックス部分) が含まれており、これらの畳み込み層の畳み込みカーネル サイズは 3x3 であり、AlexNet の 7x7 よりもはるかに小さいことがわかります。 VGG は、フィルターのサイズを縮小し、畳み込み層の数を増やすことで同じ効果を実現していることがわかります。

これは、7×7のコンバージェンスフィルタに正規化を課し、3×3のフィルタによる分解を強制するものと見ることができます。

畳み込みカーネルが小さいほど、トレーニングに必要な重みの数がある程度減ります。入力チャネルと出力チャネルの数を C とすると、7x7 畳み込みカーネルでは、この層の重みの数は 7x7xCxC=49xCxC ですが、VGG の連続する 3 つの畳み込み層の重みの数は 3x3x3xCxC=27xCxC です。重みの数を減らすことは、ネットワークのトレーニングと一般化に役立ちます。

  • その他のチャンネル

AlexNet と VGG を比較すると、AlexNet のチャネル数は VGG よりも大幅に少ないことがわかります。このようにして、ネットワークは入力からより豊富な特徴を抽出できます。 VGG がより高い精度を実現できる理由は、チャネル数の増加に大きく関係しています。

VGG16 は、Jarvis のディープラーニング アルゴリズムのビジュアル モジュールにも統合されています。ネットワーク構造の定義を除いて、完全接続層のドロップアウト設定、Relu 活性化関数、L2 正則化など、その他すべては Alexnet と同様です。

  • 3. VGG19

上記のセクションで説明した VGG19 と VGG16 は、実際には同じ論文からのものであり、同じ方法の 2 つの異なる構成です。 VGG19 のネットワーク構造は、VGG16 と非常によく似ています。違いは、VGG19 では 3 番目、4 番目、5 番目の「畳み込みブロック」に畳み込み層が追加されているため、VGG16 よりも重み層が 3 つ多いことです。ここでは詳細には触れません。

Jarvisは、前述のAlexNetやVGGシリーズのネットワーク構造に加え、GooglenetやResnetなども徐々に統合していく予定なので、引き続き注目してください。

カスタムネットワーク

古典的なアルゴリズムは優れていますが、常に一定の制限があります。柔軟性を高めるために、Jarvis は畳み込みニューラル ネットワークに基づく分類および回帰アルゴリズムも統合しています。その最大の利点は、さまざまなシナリオのニーズに合わせてネットワーク構造を柔軟にカスタマイズできることです。

TensorFlow で畳み込み + 活性化層を定義するには、通常、次のコード行が必要です。

  1. スコープとしてtf.name_scope( 'conv2' )を使用します:
  2. カーネル = tf.Variable(tf.truncated_normal([5, 5, 96, 256], dtype=tf.float32,stddev=1e-1),名前= 'weights' )
  3. バイアス = tf.Variable(tf.constant(0.0, shape=[256], dtype=tf.float32),trainable= True 名前= 'バイアス' )
  4. conv2 = tf.nn.conv2d(pool1, カーネル, [1, 1, 1, 1], パディング= 'SAME' )
  5. conv2 = tf.nn.relu(tf.nn.bias_add(conv2, バイアス))

これは畳み込み層の構造に過ぎません。構築したいネットワークが数十層で構成されている場合、数百行のコードを入力する必要が想定されます。要は、同じ性質の層をコピーして貼り付けたとしても、目玉となるパラメータを正確に見つけられない可能性があるということです。

幸いなことに、Tensorflow は slim、keras、tensorlayer などのインターフェースの高レベル抽象化もサポートしているため、畳み込み層を 1 文で記述できます。たとえば、slim では、畳み込み層の操作は次のように定義できます。

ネット = レイヤー.conv2d(入力, 64, [11, 11], 4, パディング='VALID', スコープ='conv1')

これらの高レベルインターフェースによりネットワークの定義がはるかに簡単になりますが、トレーニング中にネットワーク構造を複数回調整する必要がある場合、このようなハードコード形式は依然として不便です。

上記を考慮して、Tesla に CNN を実装する際には、ネットワーク構造を個別に抽出し、変更可能なパラメータとしてアルゴリズムに渡します。ネットワーク パラメータは実際には JSON ファイルです。ファイル内の各行はレイヤーを表し、最後の数行はデータ入力に関する情報を表します。

CifarNet のネットワーク構造を以下に示します。

(https://inclass.kaggle.com/c/computer-vision-cs543-ece549)

CifarNet をカスタマイズされた json ファイルに変換する例は次のとおりです。

  1. {
  2. "layer1" : { "operation" : "conv" "maps" : 64、 "kernel_height" : 5、 "kernel_width" : 5、 "stride_height" : 1、 "stride_width" : 1、 "padding" : "SAME" "activation_func" : "relu" }、
  3. "layer2" : { "operation" : "max_pool" "kernel_height" : 3、 "kernel_width" :3、 "stride_height" : 2、 "stride_width" :2、 "padding" : "SAME" }、
  4. "layer3" : { "operation" : "conv" "maps" : 64、 "kernel_height" : 5、 "kernel_width" :5、 "stride_height" : 1、 "stride_width" :1、 "padding" : "SAME" "activation_func" : "relu" }、
  5. "layer4" : { "operation" : "max_pool" "kernel_height" : 3、 "kernel_width" :3、 "stride_height" : 2、 "stride_width" :2、 "padding" : "SAME" }、
  6. "layer5" : { "operation" : "fc" , "maps" : 384, "dropout_rate" : 1.0, "activation_func" : "relu" },
  7. "layer6" : { "operation" : "fc" , "maps" : 192, "dropout_rate" : 1.0, "activation_func" : "relu" },
  8. "レイヤー7" : { "操作" : "fc" , "マップ" : 100},
  9. 「初期画像の高さ」 : 32、 「初期画像の幅」 : 32、
  10. 「入力画像の高さ」 : 32、 「入力画像の幅」 : 32、
  11. 「正規化」 : 1、 「切り取り」 : 1、 「ホワイトニング」 : 1、 「コントラスト」 : 1、 「左右反転」 : 1、 「明るさ」 : 1
  12. }

さらに面倒な人は、このテンプレートを直接コピーし、独自のネットワーク定義に従ってパラメータを変更することもできます。 Teslaインターフェースの実行中に、ネットワーク構造を変更する必要がある場合は、コードを変更してアップロードすることなく、インターフェースの右側のパラメータ設定でjsonファイルを直接編集できます~~

上記のカスタムネットワーク構造の特性に基づいて、分類と回帰の 2 つの CNN アルゴリズムを構成しました。

1. CNN分類

畳み込みニューラル ネットワーク CNN に基づく分類アルゴリズム。上記のようにネットワーク構造のカスタマイズをサポートしており、さまざまなシナリオでの画像分類タスクに適応できます。

2. CNN回帰

畳み込みニューラル ネットワーク CNN に基づく回帰アルゴリズムは、CNN 分類アルゴリズムに似ています。違いは、トレーニング中にユークリッド距離損失関数が使用され、浮動小数点型のラベルが受け入れられることです。ネットワーク構造を構成する場合、分類のカテゴリの数ではなく、最後のレイヤーの特徴マップの数は 1 であることに注意してください。

Jarvisビジョンアルゴリズムの使用

現在、Jarvis は主に Tesla プラットフォームを通じて公開されています。トレーニングと使用は非常に簡単です。一般的に言えば、データの準備、モデルのトレーニング、モデルの使用という 3 つのステップに分けられます。

1. データの準備

トレーニングを開始する前に、トレーニング セットとテスト セットのデータを準備する必要があります。現在のコンピューター ビジョン カタログのアルゴリズムの場合、入力は画像データであり、tfrecord 形式に変換する必要があります。

Tesla 作業インターフェースを開き、[入力] -> [データ ソース] の下のデータセット ノードをドラッグし、ノードをクリックして、インターフェースの右側にあるパラメーター構成オプションを入力して、データ ノードの構成を完了します。変換ノードはデータ ノードの後に​​追加できます。ユーザーの利便性のため、入力->データ変換ディレクトリに、image->tfrecord 変換ツールを提供します。

2. モデルのトレーニング

Tesla ワークフロー インターフェースで、左側のディープラーニング アルゴリズムからトレーニングするアルゴリズム ノードをドラッグします。ノードをクリックすると、アルゴリズム IO パラメータ、アルゴリズム パラメータ、リソース構成パラメータなどのパラメータ構成オプションが右側に表示されます。

  • リソースパラメータ

モデルのトレーニングに必要な GPU および CPU リソースを指定します。

  • アルゴリズムIOパラメータ

データセット、モデル ストレージ、および Tensorboard が保存される Ceph パスを指定するために使用されます。ここでは、データセットが配置されているパスのみを指定する必要がありますが、モデル ストレージと Tensorboard のパスは、Tesla によってデフォルトで指定されます。

アルゴリズム ノード上に対応するデータセット ノードがある場合、データセット ノードのデータ パスはアルゴリズムのデータ入力パスと自動的に一致します。データセット ノードをドラッグしたくないユーザーは、アルゴリズムのデータ入力パスを手動で入力することもできます。

  • アルゴリズムパラメータ

トレーニング中に必要なパラメータを指定するために使用されます。バッチ サイズ、学習率、反復回数など、ディープラーニング アルゴリズムのいくつかのパラメーターは共通です。ただし、異なるアルゴリズムには独自の特別なパラメータがある場合もあります。以下の紹介では、各アルゴリズムの詳細な紹介リンクで対応するパラメータの説明をご覧いただけます。

CNN 分類/回帰アルゴリズムでは、ネットワーク構造のカスタマイズがサポートされているため、パラメータは上記の表と若干異なります。ワークフローの右側にあるパラメータ設定項目を参照してください。

パラメータを設定したら、アルゴリズム ノードを右クリックし、[開始] を選択してモデルのトレーニングを開始します。トレーニング プロセス中に、TensorFlow コンソールを通じてログ情報と Tensorboard の視覚化を表示して、トレーニングの方向を理解しやすくなります。

3. モデルの収集と利用

モデルの使用とは、トレーニングされたモデルを使用して予測作業を行うことを指します。 Tesla は、トレーニング直後にモデルの予測を行うことに加えて、将来の予測のために保存できるモデル収集機能も配慮して提供しています。

モデル収集: モデル操作の下にあるモデルの収集を選択すると、モデルが Tesla インターフェースの左側にある個人モデル ディレクトリに収集されます。次回使用する必要があるときは、モデル ノードを直接ドラッグし、対応する構成パラメータを入力して右クリックし、実行の開始点を選択できます。

結論

この記事では、コンピューター ビジョンの分野におけるいくつかの古典的なディープラーニング アルゴリズムを紹介し、Tesla プラットフォームでディープラーニング モデルを迅速かつ柔軟にトレーニングして使用する方法を示します。参考として、アルゴリズム デモの下にさまざまなアルゴリズムのサンプル プロジェクトがあります。

***、Apple の FaceID についてもう一度触れておきましょう。 FaceIDの成功は、間違いなく、コンピュータービジョンを人間の生活に応用する上での大きな進歩です。指紋によるロック解除よりも低い解読率は、その背後にある機械学習、特にディープラーニングアルゴリズムと密接に関係しています。もちろん、FaceIDの背後にある顔認識技術は、この記事で簡単に紹介したアルゴリズムよりもはるかに複雑です。ここで詳しく説明することはしません。私に聞かれてもわかりませんから(笑)。ただし、Appleは昨年CVPRでSimGANに関する記事「シミュレートされた教師なし画像からの敵対的トレーニングによる学習」を発表しました。興味のある方はご覧ください。また、昨年のNIPSでは、Apple社が研究成果の公開を開始すると発表しました。この決定は、学界や産業界に多くの驚きをもたらすものになると思いますので、皆さんも楽しみにしてください。

***+1、この記事はandymhuangとroyalliの指導の下で完成しました。感謝します。アルゴリズムの使用中に問題が発生した場合は、私(joyjxu)またはroyalliにお気軽にご相談ください。批判や訂正も歓迎します!

オリジナルリンク: https://www.qcloud.com/community/article/648055

著者: 徐潔

[この記事は51CTOコラムニスト「テンセントクラウドテクノロジーコミュニティ」によるオリジナル記事です。転載の許可を得るには51CTOを通じて原作者に連絡してください]

この著者の他の記事を読むにはここをクリックしてください

<<:  パーソナライズされた推奨の CTR 推定にディープラーニングを使用する理由は何ですか?

>>:  バックプロパゲーションを用いた多層ニューラルネットワークのトレーニングの原理

ブログ    

推薦する

顔認識エンジンのトップ 5 (テキストにイースター エッグあり)

[51CTO.com クイック翻訳] ご存知のとおり、顔の特徴は指紋ほどユニークで永続的ではありま...

...

機械学習の12の経験則

機械学習アルゴリズムは、例から一般化することで重要なタスクを実行する方法を理解できます。これを手動プ...

...

人工知能、ブロックチェーン技術などが医療分野を改善している

ヘルスケア業界の成長は驚異的ですが、欠点がないわけではありません。医師や研究者は、一般的な病気や珍し...

フォード・オブ・ヨーロッパ、ロボット運転手を試験的に導入

海外メディアの報道によると、欧州フォードはロボットテストドライバーを導入し、自動化に向けて新たな一歩...

エンタープライズレベルの AI を実装するにはどうすればよいでしょうか? Watson なら問題ありません!

[51CTO.com からのオリジナル記事] 人工知能は間違いなく、今日最も注目されている技術の ...

...

...

AIが産業のデジタル変革をどのように促進するか

多くの産業企業は実際に必要な量よりも多くのデータを保有していますが、人工知能への取り組みは期待を下回...

防衛とセキュリティの再定義に貢献するAIスタートアップ

人工知能の誕生は第二次世界大戦中に連合国が暗号解読機を開発し、それがナチスドイツのエニグマ暗号を解読...

2021 年のテクノロジートレンドはどこに向かうのでしょうか? IEEEが答えを教えます

[[357414]]この記事はLeiphone.comから転載したものです。転載する場合は、Leip...

...

...