今回もハード寄りの話をしたいと思います。前回、前々回は撮像素子とレンズについてでした。今回は、GPGPUについてです。

GPUとは?

GPU(Graphics processing unit:グラフィックス・プロセシング・ユニット)は、描画処理のための専用プロセッサです。コンピュータの通常使用時(文書作成や表計算など)の画面描画処理に加え、動画再生処理、3Dゲームや3D CGなどの3Dグラフィックス処理を行うためのものです。

GPUで行える処理は、汎用的な計算を行うために設計されているCPUで処理することも可能ですが、グラフィックス処理をGPUにまかせることでCPUの負荷を軽減することができます。また、3Dグラフィクスのように計算量の多い処理では、CPUの演算速度が追いつかずコマ落ちが生じる可能性があるため、そのような用途ではGPUが必要となります。

GPGPUってなに?

3Dゲームや3D CG作成用途でもない限り、通常のコンピュータの使い方(文書の作成、プレゼン資料の作成、インターネットでの検索など)では3Dグラフィックスの処理が必要なケースはほとんどありません。つまり、3Dゲームや3D CG作成用途以外では、GPUの本来の処理能力の極一部しか使っていません。3Dゲームや3D CG作成などのグラフィクス用途以外でも、GPUを活用しようというのがGPGPU(General purpose computing on graphics processing units)のコンセプトです。コンピュータビジョンの入力となる画像は、2次元配列のデータであり、並列計算、行列演算が得意なGPUが大いに役立ちます(処理内容によりますが)。

GPGPUに対応しているGPUとしては、NVIDIA製が最も有名で、GeForceシリーズ、Quadroシリーズ、Teslaシリーズがあります。GeForceシリーズは、3Dグラフィックスや動画編集向け、Quadroシリーズは、3D CGやCADなどのデザイン、医療用グラフィックス向け、Teslaシリーズは、GPGPU専用です。

GPU以外に必要なものは?

GPUは、本来グラフィックス処理を行うためのものなので、マザーボードにGPUを刺しただけでは、グラフィックス系の処理しかしてくれません。つまり、CPUで処理することを前提に作られたソフトウェアは、GPUでは処理することができません。そこで必要になるのがCUDA(Compute Unified Device Architecture)です。

CUDAは、NVIDIAのGPUでグラフィックス以外の汎用的な処理を行うプログラムを開発する際に用いる統合環境環境です。GPUで汎用的な処理を実行するためのコンパイラ(nvcc)やライブラリなどから構成されています。NVIDIA製のGPUを購入しただけではGPGPU用途では使えません。CUDAをインストールするようにしましょう。

GPGPUでできること

GPGPUは、汎用的な処理をGPUで行うためのものと説明しましたが、どんな処理でもGPUにやらせれば良いというわけではありません。GPUは、もともとグラフィックス処理のために開発されたプロセッサであり、並列計算、行列演算を得意としています。

GPGPUが得意としている分野として、シミュレーション(物理シミュレーション、流体計算・気候シミュレーション、天体シミュレーションなど)があります。また、暗号解読、音声処理もGPGPUが得意とする分野と言われています。

コンピュータビジョン分野におけるGPGPU

コンピュータビジョンのライブラリのデファクトスタンダードであるOpenCVは、GPGPUに対応しています。GPUの機能を有効にしたい場合は、CUDAを使用するフラグをオンにしてコンパイルする必要がありますが、コンパイル方法はネットですぐに見つかりますので是非試して見てください。処理内容にもよりますが、動画1のようにすべてをCPUで処理する場合と比較して、高速に歩行者検出処理を実行できます。

動画1 CPUとGPUの比較結果

歩行者検出以外では、Viola-Jonesの顔検出、2台のカメラで3次元計測を行うステレオカメラ、フィルタ処理などの基本的な画像処理、キーポイント検出などGPGPUに対応しています(図1)。使用するGPU、処理内容にもよりますが最大で30倍もの速度を実現していることが見て取れます。

図1 OpenCVの各処理の処理速度比較結果(CUP vs GPU) (出典:http://opencv.org/platforms/cuda.html)

大量の画像を学習させる際に膨大な時間を要するDeep Learning(ディープラーニング)でもGPUは効果を発揮します。Tensor Flow、Caffe、Chainerなどのフレームワークは、GPGPUに対応してますので、比較的簡単にGPUを活用することができます。

何十万、何百万画素という画像を処理するコンピュータビジョン分野では、1枚の画像を処理するのに数秒、数分かかることも珍しくありません。処理時間を少しでも短くしたい場合は、GPUの活用を検討して見てください! 今回紹介したNVIDIA以外にもAMD、Intel、ARMの製品もGPGPUに対応しています。CUDAは基本的にはNVIDIAのGPU用ですが、「混種混在環境での並列プログラミングのオープンな標準規格」であるOpenCLというものもありますので、興味のある方は試して見てください!

著者プロフィール

樋口未来(ひぐち・みらい)
日立製作所 日立研究所に入社後、自動車向けステレオカメラ、監視カメラの研究開発に従事。2011年から1年間、米国カーネギーメロン大学にて客員研究員としてカメラキャリブレーション技術の研究に携わる。

日立製作所を退職後、2016年6月にグローバルウォーカーズ株式会社を設立し、CTOとして画像/映像コンテンツ×テクノロジーをテーマにコンピュータビジョン、機械学習の研究開発に従事している。また、東京大学大学院博士課程に在学し、一人称視点映像(First-person vision, Egocentric vision)の解析に関する研究を行っている。具体的には、頭部に装着したカメラで撮影した一人称視点映像を用いて、人と人のインタラクション時の非言語コミュニケーション(うなずき等)を観測し、機械学習の枠組みでカメラ装着者がどのような人物かを推定する技術の研究に取り組んでいる。

専門:コンピュータビジョン、機械学習