2017/12/07

「顔認識技術をビジネスに応用する 機械学習勉強会」開催レポート【前編】

こんにちは、CTサービスグループ所属の筋肉エンジニアです。

2017/10/28(土)にドリーム・アーツが東京オフィスで開催した勉強会をレポートします。
レポートは前編・後編に分けていますので、後編もぜひご覧ください。

 

新卒・エンジニア向けの勉強会について

東京オフィス31F
ドリーム・アーツではエンジニア採用活動の一環として、新卒の方や新しい技術に興味があるエンジニアを対象に勉強会を企画・開催しています。
WantedlyConnpassなどで告知中!ぜひご参加ください。)

今回、10/28(土)に東京オフィスで開催した勉強会のタイトルは、「顔認識技術をビジネスに応用する 機械学習勉強会」
今、流行りの機械学習に触れてみるだけでなく、ビジネスにも応用できないか考えてみる、ということを目的とした勉強会です。
Azure Face APIとTensorFlowを使って顔認識技術を学ぶハンズオンと、実際の業務シーンで起きそうな問題を、AI×ビジネスチャットで解決するアイデアを出すアイデアソンの2部構成で進めました。

 

当日のタイムテーブル

時間 内容
13:00 受付
13:30 会社説明
14:00 顔認識ハンズオン
16:00 AI×ビジネスチャットアイデアソン
18:00 懇親会

まず冒頭で、ドリーム・アーツの概要やミッションについてご紹介しました。
その後、ハンズオンとアイデアソンを合わせて4時間というハードなスケジュールでしたが、終始会は盛り上がり、特にアイデアソンからはビールも入って皆さんハイテンションでした。

どんな内容だったのか、そしてハイテンションな参加者の様子を、前編・後編に分けてたっぷりご紹介していきます。

 

顔認識 ハンズオン

最近のスマホやデジカメには顔検出機能が付いていますね。
顔が写っていれば、そこにピントが合うように自動調節してくれたりします。

しかし、その顔が「だれであるか」ということをスマホなどの機械に認識させるためには、
写真を入力すると「だれであるか」を出力してくれる認識モデルが必要になります。

顔認識の例
今回のハンズオンでは、その認識モデルの部分をAzure Face APITensorFlowによる実装で実現してみました。

Azure Face APIとは、Microsoft Azureが公開しているCognitive Servicesの1つです。その名の通り、顔認識関連のAPIが用意されています。
TensorFlowとは、Googleが開発した機械学習のためのオープンソースライブラリです。最近の機械学習ライブラリは非常に良くできており、「えっ!ニューラルネットワークの実装ってこんなに簡単だっけ!?」と思うほど容易に実装できるようになっています。

Face APIもTensorFlowによる実装も、あらかじめタグ付けしたデータを学習させておく必要があります。
例えば、['0001.jpg', '筋肉'], ['0002.jpg', 'Aさん'], ['0003.jpg', 'Bさん']というようなデータです。これを、訓練データ(または教師データ)と呼びます。訓練データが多ければ多いほど認識精度が向上するので、顔写真を大量に用意する必要があります。

Face APIはサービスとして公開されている分、比較的高い認識精度が出ます。
しかし、TensorFlowで実装する場合は、認識モデルのパラメータ調整や顔写真の前処理を工夫したりなど、認識精度を上げるために一手間必要です。
そのため、

  1. Face APIで顔認識をして、その認識精度やどんな拡張情報が得られるかという結果を確認する。
  2. TensorFlowで実装された認識モデルで顔写真を学習させて、どのくらいの認識精度が出せるのか、精度を上げるためにはどんな工夫をすればよいのか考える。

という流れでハンズオンを進めていきました。

 

Azure Face API

公式サイトでFace APIのデモを動かすこともできますが、今回はPythonでプログラミングしました。

例えば、実行すると以下のような出力が得られるプログラムです。

だれで何歳なのか、どんな表情をしているか、などさまざまな情報が取得できていることがこの出力結果からわかります。

 

TensorFlowで実装

TensorFlowのチュートリアルで公開されているモデルが流用可能なので、今回はモデル自体の実装はしませんでした。
※今回流用したモデルは、CIFAR-10というサンプルのモデル。

冒頭でも少し触れましたが、顔写真の認識精度を上げるためには訓練データとなる画像の前処理が重要になってきます。
「何を認識させるか」という目的に合わせて前処理の実装を変えていく必要があるためです。
顔認識をする際に必要となった前処理について、簡単にご紹介していきます。

1. OpenCVを利用して顔部分のみ切り抜く

背景物など顔以外のノイズを取り除くため、認識精度向上に大きな効果があります。

prework1prework2

2. 画像をランダムに加工

顔の向きや光源の位置など、写り具合の違う写真でも認識できるようにする効果があります。つまり、訓練データを水増ししていることになります。

一部分だけランダムに切り抜く処理だと、こうなります→ prework3

TensorFlowで利用できる前処理用の関数を並べてみました。他にもあるかもしれないので、興味のある方は調べてみてください。

上記でご紹介したような前処理を入れてみて、どう認識精度が変わっていくかを皆でもくもくと検証を進めていきました。

Tensorboardによる処理可視化
前編はここまでです。後編はアイデアソンとLT(ライトニングトーク)の様子をご紹介します。
LTではちょっと危ないネタ!?も飛び出しました。
後編に続く!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です