May the Neural Networks be with you

ニューラルネットワークと共にあらんことを

最先端の顔認証技術を実装したスマートボックスでHackU法政2018の最優秀賞をいただきました

毎日暑い日が続きますが、皆さんいかがお過ごしでしょうか。@shunk031です。こういう日は涼しい部屋に引きこもってGPUマシンを回すに限りますね。

さて、2018年の6月から8月にかけてYahoo! JAPAN 様が主催のハッカソンであるHackU 法政大学 2018 Student HackathonCpawのメンバーで出場し、最優秀賞をいただきました。 f:id:shunk031:20180812205409j:plain hacku.yahoo.co.jp

ハッカソンということで モダンな技術スタックDeep LearningIoTVRといった近年バズりを見せている技術を使ってキラキラな作品を作ると受けがいいということは世界共通の認識ですよね。 今回はこの中でも私を含むチームメンバーが得意なDeep Learning電気電子工学科B1のスーパーエースIoTの部分を担当し、モダンな技術スタックで結合した Chash Box を作らせていただきました。

Chash Box

今回HackUで作成した Chash Box (チャッシュボックス) はざっくりいうとDeep LearningとIoTと音声認識を用いた AI スマートボックスです。

MobileNetのアーキテクチャをもとにしたSiamese Networkによる顔認証と音声認識を用いたAIスマートボックス

Chash Box の詳しい全体像についてはCpaw公式ブログをご覧ください。

今回この Chash Box を作る過程において、私は 顔認証技術のプロトタイプ作成 をメインで務めさせていただきました。

Chash Box における Deep learningを用いた顔認証技術

Chash Box の顔認証を実装するにあたり、以下の要件にフォーカスをして技術選定を行いました。

高速に動作可能 は自ずと必要な要件ですね。 顔を登録するときに再度モデルを学習させることは現実的に不可能なため、再学習を必要としないアーキテクチャ が必要になります。 Chash Boxは複数人数の使用を想定しているため、iPhone XのFaceIDのように個人を識別するのとは違い、複数人の顔を登録できる 必要があります。

こうした要件に対し、私は MobileNet *1 をベースとした SiameseNet *2 を用いた顔認証技術を実装しました。

高速に動作可能な MobileNet

限られたリソースの上で高速に動作させることが重要なシステムであったため、ベースモデルとしてMobileNetを選択しました。 MobileNetは従来のconvolutionと異なり、空間方向およびチャンネル方向に対して個別にconvolutionを行うseparable convolutionを用いて計算量を削減したモデルになっています。 f:id:shunk031:20180812210247p:plain

Kerasに用意されている学習済みのMobileNetを再学習する形でシステムに組み込みました。

SiameseNetを用いた複数人識別可能なシステム

カメラから入力される顔画像が、予め登録されている顔かそれ以外かを 分類 することは非常に難しいです。 なぜなら端末上、もしくは外部のサーバー上でこうした顔の分類を行うモデルの学習・推論を行わなければならず、とてもコストが掛かります。 また登録されていない顔画像を集めるのに相当な労力を要することはご想像のとおりでございます。

そこで今回Siamese構造を持つアーキテクチャを用いることで、再学習が不要でなおかつ複数人を識別できるようにしました。 SiameseNetは重みを共有する2つのネットワークに対して、同一人物の顔画像のペア、もしくは別人同士の顔画像のペアをconstractive lossを最小化する形で学習するネットワーク構造になっています。 このアーキテクチャを用いることで、別人との顔画像間の特徴空間上における距離を最大化するようにネットワークが学習を行います。 f:id:shunk031:20180812211511p:plain

こうして学習したネットワークをデプロイしておくことで、モデルに入力した顔画像が  N 次元の特徴ベクトルとなって出力されます。 予め顔登録時に特徴ベクトルを作っておきまして、ロック解除時に入力される顔画像を特徴ベクトルに変換し、類似度を計算します。 ある一定の閾値よりも類似している場合にボックスのロックを解除する仕組みです。

顔認証システムの動作環境

実装した顔認証システムはNVIDIA Jetson TX2 にデプロイしました。 Jetson TX2は組込みシステム向けに開発されたモジュールで、今回実装した顔認証システムをより高速に動作させることを可能としてくれました。 f:id:shunk031:20180812175411j:plain

おわりに

私自身、普段から深層学習を中心に研究しているのですが、deep learningモデルをシステムに組み込んでなおかつ精度良く動作させることがとても難しかったです。 特にモデルのチューニングや学習データと実際に入力されるカメラ画像との差(ノイズ etc.)による精度の低下など、実世界への応用における障害を実際に体験することができました。 今回のハッカソン参加を通じてでDeep learningの実社会への適用により興味が湧きました。

参考

towardsdatascience.com

*1:[1704.04861] MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications https://arxiv.org/abs/1704.04861

*2:Learning a similarity metric discriminatively, with application to face verification - IEEE Conference Publication https://ieeexplore.ieee.org/document/1467314/