みなさんはじめまして。2019年1月にフレクトへ入社した技術開発室の岡田です。 今回は自己紹介も兼ねて、私が担当しているエッジデバイス上での画像認識技術について、概要をご紹介したのちに作成したサンプルをいくつかご紹介したいと思います。
画像認識技術
近年の深層学習の盛り上がりに伴い、多種多様な画像認識技術が生まれてきています。 その中でも次の3つが代表的なものになるかと思います。
- Image Classification (物体認識)
- Object Detection (物体検出)
- Semantic Segmentation
Image Classification とは画像のクラス分類を行う技術です。手書きの数字を認識する問題(MNIST)などが有名ですのでご存じの方は多いかと思います。 たとえば、手書き数字よりもう少し高度な例だと、次の画像を入力すると「ねこ」と判定してくれたりします。
Object Detectionは、画像内に写っている物体の種類と位置を特定する技術です。 先程のねこの画像を入力するとこのような結果を返してくれます。
社内勉強会ではNintendo Switch ゼルダの伝説に登場する「シーカーストーン」の「ウツシエ」と類似の技術(推測)と説明してみましたが、 なかなかピンと来なかったみたいです。残念。一応、参考までにURL貼っておきます。 シーカーストーン ウツシエ - Google 検索
Semantic Segmentationは、さらに細かくピクセル単位でクラス分類を行う技術です。 ふたたび先程のねこの画像を入力として使ってみますと、次のような結果が帰ってきます。見事にねこと背景をピクセル単位に分類して塗り分けてくれていますね。
その他、顔認識やポーズ(姿勢)検出など面白い技術があります。 また、画像認識技術から話が少しそれますが、深層学習により画像からノイズを除去したり、ぼやけた画像を鮮明にする、絵のスタイルを変換するなど、画像の加工や画像の生成を行う技術もあります。
次の例は、社内勉強会ネタとして弊社社長の黒川の写真をスタイル変換にかけてみたものです。あまりうまく行かなかったのですがせっかくなので載せておきます。
エッジデバイス上での実現例
さて、今回は深層学習を用いた画像認識技術の中で代表的なImage Classification, Object Detection, Semantic Segmentationについて、 エッジデバイス上での実現例をご紹介したいと思います。実験的な要素も含んだものとなっていますがご容赦ください。 なお、以下、全てエッジデバイス(Androidスマホ)上で動作させたものとなっています。
Image Classification on Edge Device (Android)
スマホのカメラ画像を分析し、何が写っているかをリアルタイムに判定します。 この動画では、あひるといぬを見分けています。画面上部に判定結果とその確からしさ(1.0が最大)が表示されています。
Object Detection on Edge Device (Android)
スマホのカメラ画像を分析し、何がどこに写っているかをリアルタイムに判定します。 この動画では、あひるといぬがどこに写っているかを判定し、赤枠で囲みます。
Semantic Segmentation Object Detection on Edge Device (Android)
スマホのカメラ画像を分析し、何がどこに写っているかをリアルタイムにピクセル単位で判定します。 この動画では、あひるといぬをピクセル単位で判定して、領域をオーバーレイで表示しています。 ただし、精度も低く処理ももたついていますね。これについてはもっと改良が必要です。
(応用例) Auto Shutter
被写体が特定の条件を満たす写り方をしたときに自動的に撮影する機能です。 この動画の例では、あひるが正面に向いたことを検出して自動的に撮影します。
最後に
今回は、深層学習による画像認識技術の概要とエッジデバイスでの実現例をご紹介しました。 この記事を通じて、私を含めFlectの活動(の一部)を知っていただけたら幸いです。 次回はもう少し技術的に踏み込んだ内容をご紹介したいと思います。