ITエンジニアのための勉強会・イベントレポート情報メディア

NSStudy
event

NSStudy

2017.01.30

 
  • このエントリーをはてなブックマークに追加

11月25日、株式会社ネクストスケープが主催する技術交流会「NSStudy」の第9回に参加してきた。毎回ITトレンドの最前線を取り上げるNSStudyだが、今回も「GPUコンピューティングとディープラーニング」、そして「ディープラーニングによる画像解析」と、非常にホットな2本立ての勉強会となった。

鶴田 展之

GPUコンピューティングとディープラーニング

1本目は「GPUコンピューティングとディープラーニング」。NVIDIA社の佐々木邦暢氏が、GPUコンピューティングの歴史とディープラーニングへの流れを語った。

GPUコンピューティングの歴史

GPU(Graphics Processing Unit)というと、やはりすぐに思い浮かぶのは「ゲーム」だろう。NVIDIA社も、かつてセガのアーケード機「バーチャファイター」に、そして初代PlayStationに採用されて以来、グラフィックアクセラレータの雄として成長してきた。しかし最近では、自動車の自動運転や医療分野への応用など、「AIコンピューティング」の分野でもリーダーシップを発揮しつつある。例えば、Eyra社の視覚障害者向けヘッドセット「Horus」にも、NVIDIAのGPUが使われている。この製品はカメラからの映像入力を即座に解析し、「信号が赤に変わった」「横断歩道がある」「人が前にいる」といった情報を骨伝導でユーザーに伝えるというものだ。もちろん入力された映像の解析はデバイスに搭載されたGPUが担当するが、事前に膨大な画像を解析して機械学習させるサーバサイドの処理にもGPUを活用するという、2段階でのGPUコンピューティングが行われている。GPUを活用することで、物体認識の速度はCPUと比較して48倍にまで高速化したという。

しかし、GPUのグラフィック用途以外での活用は、なにも最近に始まったことではない。2006年にNVIDIAが「CUDA(Compute Unified Device Architecture)」を発表して「GPGPU(General-Purpose computing on Graphics Processing Units)=汎用処理向けGPU活用技術」の扉を開いて以来、数多くのGPUスパコンが開発され、2016年にはついにGPU AIシステムが碁の世界チャンピオンを破る快挙を達成。

さらに、今年の11月に開催された学会「SC16」で発表された、消費電力1ワットあたりの処理性能を競う「Green500」リストでNVIDIA Tesla P100を搭載したGPUスパコンが1、2位を独占するなど、ハイパフォーマンス・コンピューティング分野でのGPUの活用はもはや常識となっている。なお、ここ数年スパコンのランキングでは中国が圧倒的な力でトップに君臨しているが、米国でもこれに対抗しようと新たなフラッグシップ・スーパーコンピューターを開発している。2017年稼働予定のこのシステムは、IBM Power9 CPUにNVIDIAの次世代GPU「Volta」が搭載される予定だという。

ディープラーニング

スパコン分野と同様に、膨大な計算能力が求められるのがディープラーニングの分野だ。かつて、コンピューターが画像からその物体が何なのかを高精度に認識することは非常に難しかった。例えば2007年電通大の柳井啓司准教授による論文「一般物体認識の現状と今後」では、「101種類の物体に対して6割程度の制度で認識が可能」とある。ほんの数年前、コンピューターは「4割の画像を認識できず」にいたのである。
これが大きく変化したのが2011年〜2012年頃だったという。例えば、マイクロソフトリサーチ(MSR)のFrank Seide氏らが行った音声認識の研究では、1つのホストにTesla GPUを並列化したことで、従来の認識精度を大きく向上させた。また画像認識でも、2012年のILSVRC(ImageNet Large Scale Visual Recognition Challenge : 画像認識精度の国際コンテスト)でトロント大のGeoffrey E. Hinton氏率いるチームが「畳み込みニューラルネットワーク」手法を導入し、認識精度を従来の74%程度から10%も一気に向上するブレイクスルーを達成。これにより、ディープラーニングへの関心が一気に高まった。2015年にはMicrosoft、Googleが相次いでエラー率5%を切ることに成功し、コンピューターが「ほぼ人間と同程度」に画像を認識できるようになった。これらのディープラーニングの歴史的成果も、GPUの演算能力を利用して機械学習の効率を向上できたことが大きく寄与しているという。

従来の手法とディープラーニングの何が違うのか

画像認識において、ある画像に対してそれが「猫である」とか「犬である」といった答えを与えてあげることは、従来の手法でもディープラーニングでも必要である。異なるのは、「特徴を抽出する」フェーズに人間が介在するかどうかだ。従来の手法では、画像からSIFT(Scale Invariant Feature Transform)、HOG(Histgram of Oriented Gradients)といったアルゴリズムを用いて特徴を抽出し、BoK(Bag of Keypoints)、FV(Fisher Vecror)といったベクトル表現に変換して識別を行っていた。ディープラーニングでは、この特徴抽出の処理をDNN(Deep Nural Network)によって自動化する。要は、大量の画像データを用意して学習させる=強大な計算能力があれば、人力の部分を置き換えられるということだ。そして、その単純で膨大な計算には、並列処理を得意とするGPUが向いているのだ。例えば最新のTeslaには、「CUDAコア」と呼ばれる演算装置が3,500個以上並んでいる。もちろんCPUが得意とする処理を置き換えることはできないが、並列実行可能な単純処理ならばGPUの方が圧倒的に速い。これが、GPUとディープラーニングの親和性が高いこと、来るべきAIの時代にGPUの果たす役割が大きいことの理由である。

IkaLogによるスプラトゥーンの
画像解析と機械学習

2本目は長谷川猛氏による機械学習を用いた画像解析の事例紹介である。解析対象となるのは、任天堂WiiUの大人気ゲーム「スプラトゥーン」。Geekroid読者の皆さんにはおそらく釈迦に説法だが、イカっぽいキャラクターがいろいろなブキを持ち、様々なステージでインクを塗りたくって戦う、というゲームである。長谷川氏は、このスプラトゥーンの画面を画像解析してリアルタイムにデータ化するアプリケーション「IkaLog」を開発し、オープンソースソフトウェアとして公開している。今回の講演では、そのIkaLogの裏側で行われている処理について詳細な解説を聞くことができた。

IkaLogとは

IkaLogは、WiiUからHDMIキャプチャデバイスを介してゲーム画面を画像として取得し、画面内の文字や数字を画像解析・データ化する。出力されたデータは、音声合成読み上げツール「棒読みちゃん」で読み上げるなど外部ツールと連携したり、スプラトゥーンの勝敗データ収集・解析サイト「stat.ink」に投稿したりできる。

スプラトゥーンの画面表示のうち、IkaLogがデータ化してくれるものは多岐にわたる。「ヒラメが丘団地」等のステージ名、「ナワバリバトル」等のルール、倒されたときに相手が持っていたブキ、倒された回数、現在のウデマエやランク、キルデス(倒した数と倒された数)などなど、スプラトゥーンユーザーが記録しておきたい情報はほぼすべてデータ化できると言っていいだろう。

長谷川氏がIkaLogの開発をはじめたきっかけは、2014年にINTEROPでディープラーニングのフレームワーク「Chainer」のデモを見たことだったという。機械学習に関してはほとんど素人だった長谷川氏だが、ちょうどスプラトゥーンの発売直後だったこともあり、「何か面白いソフトを作りたい」という思いでIkaLogの開発に着手したそうだ。

IkaLogにおける画像解析手法

IkaLogの内部では、ゲーム画面を様々な手法で解析している。まず、スプラトゥーンにはバトルの舞台となるステージが16種用意されている。IkaLogではこのステージの名前を表示されるメッセージにマスク画像を加算することで認識している。予め各ステージ名のマスク画像を用意しておき、画面上の特定の位置に表示されるステージ名と重ね合わせる。ステージ名が合致すれば結果は真っ白な画像になるが、合致しなければ黒い部分が残ることを利用して認識しているのだ。

次に、「キルデス」「ランク」「ポイント」等の数字の認識だが、スプラトゥーンのゲーム内で使われているフォントは2種類ある。数字はそのうち1種類だけだ。当初、フォントが固定であることからOCRでの認識を検討したが、認識が安定しないことや、速度が出ないことから断念。単純な機械学習アルゴリズム「k近傍法(k-nearest neighbor algorithm : KNN)」を用いた独自の実装に切り替えた。特定の位置に表示される数字を検出し、縦横のヒストグラムを生成、数字を切り出した上でリサイズしてから、k近傍法により既知のサンプルと照合する、という手順で認識が行われている。

また、敵に倒されたときの「死因」の認識も工夫されている。ステージと異なり、スプラトゥーンには90種を超えるブキが用意されている。たとえば敵に倒されると「スプラスコープでやられた!」といったブキ名を含むメッセージが表示される。ブキ名は「N-ZAP85」「N-ZAP89」のように同系統で1文字しか名前が違わないものがいくつかあるので、正確に区別するのは難しそうに思える。

そこでIkaLogでは、この問題を認識回数を増やすことでクリアしている。解析手法自体は数字と同様にk近傍法を用いるが、メッセージが表示されている4秒ほどの間、毎秒10フレームを連続して解析する。40回分析できれば、結果のうち最も多く判定されたブキが、結果的にほぼ正解となる。画面がアニメーションしていたり、各ユーザーが利用しているHDMIキャプチャの特性も異なるので簡単には認識できない。こういったケースでは、回数と統計でカバーする発想は理にかなっているだろう。
敵のブキに関しては倒されたときに表示される文字から認識できるが、自分が持っているブキの名前がバトル中に画面上に表示される機会はないので、ブキの画像から判定する必要がある。しかし、画面上のブキ画像は47x45ドットと小さい上に、背景の色が変わったり他の装備品が被ったりするケースがあるので、認識が非常に難しい。当初は色相ヒストグラムを用いて特徴量を算出していたが、その後ラプラシアンフィルタを適用した上でグレースケール化、k近傍法を用いる方法に変更した。これでかなり認識精度は上がったが、スプラトゥーンのアップデートで追加ブキが配信されたために誤認識が増えるなど、さらなるアルゴリズムの見直しが必要になった。

ディープラーニングによるブキ分類

そこで解決策となったのが、ユーザーから集まってくる膨大な画像を教師データとしてニューラルネットによる学習を行うアプローチだった。実装に先立ってAzure MLで行ったテストでも98%以上の精度を得て方針が正しいことが確認できたため、stat.inkに投稿された画像から90万点のブキ画像を教師データとして用意し、INTEROPで見た「Chainer」を利用してIkaLog用のモデルを作成した。Chainerを選択したのは、GPUの恩恵も受けられるからだ。実際に学習にかかった時間を表したのが次の表だ。

長谷川氏所有のLinux Box(Core i7 4コア)では、GPU無しだと1回の学習に234.5秒かかったが、単純比較はできないにしてもGTX 760利用/4ジョブ並列実行で9倍、GTX 1080利用/4ジョブ並列実行で37.5倍のスループットを記録している。これだけでもGPUの利用がディープラーニングに大きな効果があることがわかるだろう。さらに、さくらインターネットの協力を得て行った「Tesla P100」での学習では、CPUのみでの学習に比べて93.8倍もの性能を発揮したという。
また、IkaLogのブキ分類モデルでは、配布フォーマットを小さくするためにfloat32からfloat16に変換を行う等の工夫も行われている。最終的には、7MB程度のモデルサイズで、ひとつのブキの認識に22ms程度しかかからず、99.99%以上という極めて高い認識精度を実現。ゲームのプレイログ記録のためのツールとしては十分すぎるほどの性能を達成している。

まとめ

この分野は用語が難しかったり高いマシン性能が要求されたりとハードルが高いイメージが強いが、最近ではAzure MLやTensorFlowのように簡単にトライアルできるツールがあるし、GPUをうまく活用すればコストをかけずにある程度のビッグデータを処理することも可能になりそうだ。もちろん基本的なことについては勉強していかないと、どんなツールも使いこなせないだろうが、IkaLogも最初から複雑なディープラーニングを取り入れていたわけではなく、やはりまず何か目的をもって学び始めることが大事なのだろう。特に、大量のデータが活用されずに眠っている、大量のデータを集められるサービスを持っている、今より高い精度の分析やデータマッチングを行いたい、といった人であれば、すぐにディープラーニングについて真剣に学び始めるべきだろう。

今回行った勉強会:NSStudy
https://nsstudy.connpass.com/
勉強会の主催企業:株式会社ネクストスケープ
http://www.nextscape.net/

原稿:鶴田展之
qnote代表取締役。オープンソースソフトウェアを用いたシステムインテグレーション及びコンサルティングの傍ら、技術書を中心に多数の著述活動を行う。
なお、オフィスには7匹の猫がいる。

NSStudy

この記事はどうでしたか?

おすすめの記事

キャリアを考える

BACK TO TOP ∧

FOLLOW