2020年7月29日
2020年withコロナ時代のAI活用(マスク顔検出)
溝井 尊雅 課長
新型コロナウイルスの流行によって、世の中でさまざまな変革が進んでいます。中でもWithコロナ、Afterコロナへの必要に迫られるさまざまな事情や状況から、デジタル・トランスフォーメーション(DX)需要が急速に高まってきました。弊社においても、既存の技術や新しい技術を活用してお客様のDXに貢献してまいります。
DXを実現するためのコア技術としてAIの活用が期待されます。本稿では、「withコロナ時代のAI活用」と題して、画像認識の活用例をご紹介します。
マスクを着用した顔の判別
新型コロナウイルスの流行により、外出時にはマスクをつけることが推奨されており、Withコロナ・Afterコロナでは、マスクの着用が新たな基準の一つになることが考えられます。
マスクを着用しているか否か判別できれば、マスク非着用のアラートやサーモグラフィーと組み合わせて、狙った場所(顔)の体温測定など、さまざまな応用ができると思います。まずは、マスクをつけているかどうかを判断してみましょう。
画像認識モデルは目的に合わせたデータを学習させることで対象を適切に判別・検出することができます。
基本的な人の顔を検出する画像モデルは「画像の中から人間の顔」に当たる範囲を検出することを目的として、さまざまなシチュエーションや顔(人)の大きさのバリエーションなどを用意して学習させます。
検出の汎化性能※を高めるためには遮蔽物(しゃへいぶつ)に顔の一部が隠されたものも含むことが多く、このようなデータで学習したモデルでは以下のような結果になります。
※未知のテストデータに対する識別能力
「顔を検出する」ことが目的であるため、マスクを判別して顔を検出しているわけではなく、データセットに口元が隠れているものや物陰で顔が半分隠れているものが含まれるため、マスクを着用していると「一部が隠れた顔を検出」していることになります。
そのため、マスク以外の顔の部分を検出する場合や、マスクを着けていると顔と認識できないということが起こります。今回は、「マスクを含む顔全体を検出する」ことを目的として、明確にマスクをつけた顔の画像もさまざまなシチュエーションやバリエーションを用意し、
- マスクを着用していない顔
- マスクを着用している顔
の2クラスで分類します。
次に、今回の課題に対して、どの程度の解像度(入力サイズ)が必要か見てみます。
元の画像をそれぞれ正方形にリサイズした画像で比較します。
画像全体から人物像とマスクが明確に判別できるのは128x128pixまでで、64x64pixからはボケ始めるため情報量が足りなくなりそうです。今回は128x128pixにします。
さて、AI活用のためには顔を検出できれば終わりではなく、実際に運用することを考慮した実行環境を作らなければなりません。
ここでは店頭に設置するイメージを考えてみます。
店頭設置のイメージ
カメラ、小型PC(カメラ画像処理とAI処理)、バッテリー、無線ネットワーク、(サーバへは必要に応じて結果だけ通知)
まず、現実的な問題として店頭に設置するのに大きなパソコンやサーバを使うことは避けたいですよね。また、電源もどこでもとれるとは限りませんし、本来店舗運営に使うネットワークに大量の画像データを流すのもよろしくありません。
上記イメージ図のような構成なら設置スペースやケーブルの引き回しの自由度が高くなるため、比較的容易に設置できそうです。
しかし、設置した環境での問題点として、バッテリー駆動できるほどの低電力・小型PCでは、AIのように複雑な演算を大量に行うには力不足という点があげられます。
この問題に対してはいくつか解決策が考えられます。
- 精度と速度をみながら画像認識モデルの構造をチューニング
- Jetsonのような組込GPUの活用
- OpenVINO、TensorFlow Lite、Edge TPUなどAIアクセラレーションの活用
などです。
実際に動かす環境や制約にあわせてどのような手段を適用するかを検討していくことが重要です。
このように現場での運用を第一に考え、その環境でAIモデルを動かすための技術を持つことが弊社エッジサイドAIの最大の特徴です。
エッジサイドAIについては本連載の「https://www.nttdata-sbc.co.jp/labo/20200302.html」でも紹介していますので、そちらもご覧ください。
マスク顔検出デモ
それでは最後に今回作成したマスク顔検出モデルをTensorflow.jsで実装したデモを下記URLで公開します。
動作環境:Webカメラ、Chrome(JavaScriptが有効なブラウザであれば動作すると思います)
収束が見えないコロナ禍でご苦労されている皆様も多いことかと思います。弊社の技術で解決できる問題があれば、ぜひとも貢献していきたいと考えております。
本稿では以下から画像を使用させていただきました。
商標
- TensorFlow、Edge TPU、ChromeはGoogle LLCの登録商標です。
- NVIDIA、Jetsonは、米国およびその他の国におけるNVIDIA Corporationの商標または登録商標です。
- Intel、インテル、Intel ロゴ、OpenVINOは、アメリカ合衆国および / またはその他の国における Intel Corporation またはその子会社の商標です。