OJT2020:Vieurekaを用いた顔検出

はじめまして、リサーチャーの中村と申します。 私は本年4月に新卒としてモルフォに入社しました。

今年の新人研修(OJT)において、私達のチームは2ヶ月にわたってVieurekaカメラというエッジデバイスを用いたアプリケーション開発を行いました。 私達のチームでは、Vieurekaカメラ上で得られた顔認識結果をPCやクラウド上で共有することで遠隔でも玄関の状況や来訪者を知ることが出来るスマートインターホンを開発しました。 アプリケーションの構造を下の図に示します。

アプリケーションの構造。Vieurekaカメラ上でリアルタイム顔認識を行い、認識結果や動画をクラウド上で共有することが出来ます。

そこで本記事では、顔認証機能付きスマートインターホンの要素技術であるリアルタイム顔検出について紹介します。 特に、ここではアルゴリズムの詳細に踏み込むのではなく、エッジデバイス上での実行速度と検出精度のバランスに着目していきます。

Vieurekaカメラとは

Vieurekaカメラとは、パナソニック株式会社によって提供されるカメラ付きIoT機器です。 複数の高性能CPUを搭載しているため高度な画像解析を行うことができ、さらにクラウド上のウェブアプリと連携させることもできます。 このプロジェクトではVieurekaの高い計算性能を生かして顔認証機能付きスマートインターホンの開発を行いました。 次の章では要素技術である顔検出について紹介します。

高精度な顔検出モデルと計算コスト

顔検出とは、入力画像における顔の位置を推定する技術であり、監視カメラ、顔認証、笑顔検出による撮影品質向上など様々な場面に応用されています。

Fig. 6 in Ref. [1] : RetinaFaceによる顔検出結果。四角い枠は検出された顔を、枠内の点は目や口といった顔のキーポイントを表します。

上の画像は近年発表された高精度な顔検出モデルであるRetinaFaceによる顔検出結果を表しており、画像内に写り込んでいる小さな顔まで正しく検出できていることがわかります。 このように深層学習を用いることで高精度な顔検出を行うことが可能になりつつありますが、まだ課題も多く残されています。 その課題の一つとして計算コストの大きさが挙げられます。

RetinaFace論文[1]によれば、例えばResNet-152をバックボーンとした場合のRetinaFaceの推論時間はGPU上であっても画像一枚あたり75.1 ms(NVIDIA Tesla P40、入力サイズ640x480)必要であると報告されています。 このことから、バックボーンとしてResNet-152を用いることはエッジデバイスのCPUによるリアルタイム推論にはあまり適さないことが予想されます。 一方でRetinaFaceのバックボーンをMobileNet-0.25という軽量なネットワークに置き換えた場合では、エッジデバイス上での推論時間が61.2 ms(RK3399、入力サイズ640x480)となりエッジデバイスにおける推論にも十分耐えうる実行時間になることも報告されています。

より高速な顔検出モデル

Ultra-Light-Fast-Generic-Face-Detector-1MBによる検出結果。画像はGitHubレポジトリより引用。

しかし、本プロジェクトでは顔検出以外のモジュールにも計算時間を割くため、顔検出の計算コストをより削減する必要がありました。 そこで本プロジェクトではUltra-Light-Fast-Generic-Face-Detector-1MBと呼ばれる軽量な顔検出モデルを採用しました。 エッジデバイス上でMobilenet-0.25をバックボーンとした場合のRetinaFaceでは推論時間が46 msであるのに対して、Ultra-Light-Fast-Generic-Face-Detector-1MBでは35 msである(Raspberry Pi 4B、CPU1コア、入力サイズ320x240)ことがGitHubレポジトリ上で報告されています。

検出精度の定性的評価について、Ultra-Light-Fast-Generic-Face-Detector-1MBで顔検出を行った結果を上の画像に示しています。 RetinaFaceでの結果と比較すると、Ultra-Light-Fast-Generic-Face-Detector-1MBは高い計算速度と引き換えに小さい顔を検出することが苦手であることがわかります。 しかし、今回開発するスマートインターホンでは小さい顔まで検出する必要はないため、この程度の精度低下は許容できると考えられます。 したがって、Ultra-Light-Fast-Generic-Face-Detector-1MBは本プロジェクトに適した計算速度と検出精度のバランスを持つことがわかります。

サンプル動画に対しPC上でUltra-Light-Fast-Generic-Face-Detector-1MBを適用した結果を下の動画に示します。 映り込む顔が小さかったり隠れている場合には検出に失敗することがありますが、それ以外の場合では顔の向きの変化に対し頑健に検出できることがわかります。


Vieurekaへの組み込み

本プロジェクトでは当社ソフトウェア製品SoftNeuro®(組み込み機器向けディープラーニング推論エンジン)をVieureka向けにビルドすることで実行環境を構築しました。 顔検出モデルには先程紹介したUltra-Light-Fast-Generic-Face-Detector-1MBを用いました。 Vieureka上で顔検出に要した時間は画像1枚あたり29 ms(入力サイズ320x240)であり、スマートインターホン向けのリアルタイム顔検出に十分な処理速度であることがわかります。

最後に

私達のチームは新人研修でVieurekaを用いた顔認証機能付きスマートインターホンの開発を行い、本記事ではその要素技術であるリアルタイム顔検出について紹介しました。 検出精度と実行速度のバランスに注意を払いながらエッジデバイス向けアプリの開発を進めた経験を、今後の開発にも活かしていきたいと思います。

参考文献

[1] J. Deng, J. Guo, Y. Zhou, J. Yu, I. Kotsia, and S. Zafeiriou, "Retinaface: Single-stage dense face localisation in the wild," arXiv:1905.00641, 2019.

・「Vieureka」および「Vieureka」ロゴはパナソニック株式会社の登録商標です。