Quantcast
Channel: マピオンニュース
Viewing all articles
Browse latest Browse all 142601

GTC 2016 - HDビデオでリアルタイムに顔を認識するHerta Security

$
0
0
●4K画像のリアルタイム顔認証をTegra X1で実現するHerta
Herta Securityは顔認識を行う会社である。当然、顔認識にはディープラーニングを使っており、顔の画像から性別、年齢、人種などを認識する。

GTCの展示会場は、夕方のHappy Hourになるとビールやワイン、ウイスキーなどを出すブースがオープンし、GTCのバッジと一緒に配られた飲み物券を出すと好きな飲み物がもらえる。Hertaは、それらのブースとは別に、YOU Barというブースを出していた。YOU Barの看板には、Pre Compiled Drinkとして、Herta My Heart(Bloody Mary)、The George Jetson(Gin and Tonic)、El Quadro(The Margarita)、NVIDIA Toolkit(Screw Driver)という名前が並んでいる。それ以外のカクテルや、ビールやワイン、ソフトドリンクもある。

YOU Barでは、最初に顔をスキャンして記憶すると、次からは、なじみ客として前に注文した飲み物が言わなくても自動的に出てくる。顔認識さえできれば、それ以外には大して難しい技術は必要ないと思われるが、印象に残るデモである。

Herta Securityのシステムは、ビデオをデコードして、その中から顔を見つけて前処理を行う。その結果をDNN(Deep Neural Network)で処理して結果を出すという構造になっている。Hertaのシステムは、これらの処理をすべてローカルで行っている。

しかし、顔の切り出しをDNNでやろうとすると、640×480画素のイメージを処理するには、Tesla K20を使ってもCNN2のソフトカスケードでは15fps(フレーム/秒)かかり、GTX760を使ってHOGとDNNでは0.7fpsと非常に時間がかかる。

これでは4K画像を、消費電力に制限のあるTegra X1でリアルタイムに処理することはできない。このため、HertaはカスタムのCUDAカーネルをカスケードにして使うという方法を開発した。この方法では3840×2160画素のイメージを、Tegra X1では最大30fps、Quadro K2200を使えば最大150fpsで処理できる。

Hertaは、ビデオ画像から顔を検出し、目尻、口角などの特徴点を見つけて、目の位置を一定にする処理をCUDAで書いた専用のカーネルで処理している。さらに、CUDAカーネルで顔の向きを正面に向ける処理を行ってから、DNNの認識に入力している。

この正面に向ける処理であるが、次の図の青線は目の位置の一定化までの前処理後にDNNに入力した場合の認識率で、赤線は正面を向ける処理を追加した場合の認識率である。この図に見られるように正面化を行うと、誤認識の率が半分以下になり、学習に必要な時間も1/3になっている。これがHertaがTegra TX1という消費電力が低い小型のGPUでも高速の顔認識が実現できている理由である。

つまり、大きなDNNを使って顔の切り出しから認識までのすべての処理をやらせるより、効率的な前処理と8~15層程度の比較的小さなDNNを組みわせる方が良いという。

●経験則が重要となるDNNの処理
DNNでは、ネットワークに適切な学習データを与えて学習させれば、そのうちに良い認識ができるようになる訳ではない。DNNの処理には、次のスライドに示すように、ロスを与える項と正規化を行う項が色々とあり、これらのさじ加減をうまく行わないと学習はうまく行かない。このプロセスは試行錯誤で、経験が必要であるという。このあたりの話は、非常に専門的であり、また、発表でも細かく説明されていないので、筆者も十分に理解しているわけでない。ここでは、DNNの学習はそれほど簡単ではないという感触を掴んでいただければよいと思う。

Hertaの経験では、SoftMax処理は、マルチクラスのバイナリの分類には効果がある。Information Gainの調整は、バランスの悪い入力データの場合に効果がある。ContrastiveとInformation Gainの調整はシャム双生児型のネットワークの場合には有効である。Euclidian処理をリグレッションに使う場合は、チューニング後に行うのが効果が高いという。

正規化処理では、過学習を避けるDropoutは小さな入力データセットをより一般的にするのに効果が高い。Batch normalizeは、Hertaの経験ではPReLU+dropout処理の後に適用するのが良い。Stochastic poolingは、Hertaの経験では良い場合も悪い場合もあった。Multi-net averagingは一般化には良いが、コストが高いという。

さらに、DNNのウエイトの初期化やアクチベーション関数にも色々なやり方があり、評価を行ってどれが良いかを決める必要がある。

畳み込みオートエンコーダは初期化の段階だけで使うのが良く、ネットワークの構造は共通部の後に、この例では、人種の判定と性別の判定のネットワークを付けているが、このような形より、完全に独立のネットワークを作る方が良いという。

しかし、これはHertaの経験であり、他のDNNの場合も同じことが成り立つとは限らない。

HertaはTegra TX1を使い、ビデオのデコードはNVIDIAのGstreamプラグインで処理を行い、顔の検出と前処理は独自開発のCUDAカーネルで処理している。そして、畳み込み、Maxpool、SoftMaxはcuDNNを使い、cuDNNに入っていないHe、PReLU、MaxOutなどは独自にCUDAカーネルを開発している。

HDビデオを入力とした性別+人種+年齢の推定は、Intelのi7-4770を使った場合は60msかかり、これを基準にすると、Tegra X1では2倍、GTX770-Tiを使えば20倍の性能が得られた。処理ごとの所要時間を示したのが右のパイチャートで、全対全接続を行っているfc層の処理時間が全体の処理時間の44%を占め、畳み込み層の計算が42%を占めている。

Viewing all articles
Browse latest Browse all 142601

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>