【技術セッション編】GPUベースの高速写真編集ソフト「Musemage」
初日のレポートにも書いたとおり、GTC 2010ではさまざまな企業、大学、団体などによって270を超えるセッションが行なわれている。その雰囲気は学会さながらで、説明の内容も実際のコード例や数式などを交えた高度で専門的なものがほとんどだ。
そんな中、Parakenは、GPUの利用を前提としたコンシューマ向け写真編集ソフト「Musemage」を紹介した。
同社が写真編集ソフトにGPUを利用しようと考えたのは、GPUがTFLOPS級の高い性能を持つこと、さらにその性能がムーアの法則に従って伸びていること、GPU-VRAM間のバンド幅が非常に広いことなどを挙げた。また、2D画像処理と3D画像処理に相似点が多いことから、MusemageはOpenGLを活用する仕様となった。
Musemageの開発時の課題 |
ただし実装に当たっては課題も少なくなかった。例えば、VRAM、メインメモリ、HDDバッファと3レベルのメモリを管理し、データ転送の遅延を隠蔽しなければならないなど、メモリ管理がより複雑になるほか、画像処理では大量のメモリを必要とするのに対し、GPUには256MBから1GB程度のメモリしかなく、それまで画像処理のアルゴリズムがGPU用には実装されておらず、ドライバのタイムアウトというGPUの特性に起因する問題などがあった。
これに対して同社は、OpenGLのテクスチャをメインデータ構造に使う、自らGPU用画像処理アルゴリズムを開発する、メインメモリとVRAMの両方を効率よく利用する、演算を小さなチャンクに分けて分離実行するという手法を採った。
その結果、従来のソフトに比べ15~100倍の高速化を果たし、メインストリーム系のGPUでも、2,000万画素の画像のフィルタリングに1秒以内で実行できる性能を実現した。実際、全てのフィルタリング処理のパラメータ調整は、リアルタイムで行なうことができ、その作業中も画像の拡大縮小やパンなどができる。
Musemageの持つ機能は、ペイント系から、色補正、各種フィルタなど写真編集に必要なものは一通りそろっている。また、それらのアイコンが並ぶ右ペインには、その効果の内容が常に図示されるので、初めて使うユーザーにもわかりやすい。また、人物の肌をきれいにしたり、白くしたりという美化機能も搭載する。
【動画】ラジアルブラーのデモ。右側の操作ウィンドウ上でカーソルをドラッグすると、それに合わせてリアルタイムでフィルターがかかってるのが分かる |
【動画】美肌機能も搭載。スライダを動かすだけで簡単に調整できるが、フィルターをかけながら、画像の拡大縮小や移動ができるのがわかる |
【動画】人物などの切り抜き機能。これは現バージョンには実装されておらず、次のアップデートで追加予定。簡単な操作で高度なコラージュができる |
現在はバージョン1.0で、対応OSはWindows XP/Vista/7。OpenGLベースなのでNVIDIAだけでなくAMDのGPUでも動作するが、DirectX 10への対応が必要。価格は99ドルだが、試用版を同社サイトからダウンロードできる。
今後は、バージョン1.5で、任意の部分の切り出しをはじめとする機能の追加、画質と性能の向上、英語と中国語以外への対応を進める。さらに2.0では画像サイズの制限の撤廃(1.0では最大3,500万画素まで)、レイヤー機能の洗練などのほか、CUDAやOpenCLへの対応、RAWエンジンのGPU対応を計画している。
CUDAやOpenCLへの対応は、よりGPUを活用して高性能化を図るため。同ソフトのコードは全て自社開発だが、RAWエンジンのみ既存のDCRAWを利用している。これについて、並列化できる点を並列化し、性能を上げていく。
●GPUを使った高度なRAIDシステムSandia National Laboratoriesは、GPU(CUDA)を使ったRAIDシステムを紹介した。RAIDはHDDに保存するデータの堅牢性を向上させる技術として広く用いられている。パリティを分散して記録することで、RAID 5では1台、RAID 6では2台までHDDが故障しても、データを失うことはない。
基本的にHDDが2台同時に壊れる可能性は低いので、RAID 6の堅牢性は非常に高いと考えられる。しかし、同研究所によると、この見積もりは正しくないという。例えば、製造上の欠陥があった場合、同時期に出荷されたHDDは同時に壊れる可能性が高くなる。そうでない場合でも、24時間同じ温度、同じ振動といった環境の中で動作し続けると、やはり同時に壊れる可能性が強まる。
別の角度からの問題としては、ドライブの容量が増える割合に対して、アクセス速度の伸びはずっと低いため、アレイの再構築にかかる時間がどんどん延びている。SSDであれば時間の問題は解決できるが、今度は容量が足りなくなる。
そこで同研究所が提唱するのが「k+m RAID」という手法。基本的な考えは、パリティの分散の量、換言するとHDDの同時故障を許容する台数をもっと増やそうというもの。「m」がその台数を表わしているので、RAID 5はk+1、RAID 6はk+2と表わすことになる。
mの最大値がどれほどなのかは分からないが、示された資料によるとm=4、m=5といった構成を想定しているようだ。
ここでの問題は、パリティを求めるのにリード・ソロモン符号を用いるのだが、この計算処理が非常に重いという点。同研究所では、コントローラのハードウェアを開発する環境は持ち合わせていないが、それを作ったとしても、金額が高額になってしまう。
そこで、その計算にGPUを活用しようということになった。同研究所の検証によると、GPUを使うことで、CPUよりも6~10倍高速で、mの値が増えても性能が落ち込みにくいことが確認できたという。
k+m RAIDはリード・ソロモン符号という方式を使うことで、5台のHDDの同時故障などにも対応可能。ただし、演算がかなり重い | そこでGPUを使って並列処理することで、高速処理を実現 | ベンチマーク結果。m=5でも性能の落ち込みが少ない |
●「演算写真」を実現するPlenopticレンズ
Adobeは、2日目のジェン・スン・フアン氏による基調講演でも紹介された、Plenopticレンズを使った、新時代のカメラ/画像処理についてセッションを行なった。
セッションでは、基調講演では説明されなかったカメラの内部構造についても解説があった。通常、被写体の任意の点からあらゆる方向に発せられた光線の一部は、カメラのレンズを通して、イメージセンサーの1点に収束する。この画素に記録されるのは、これらの光線を全て足し合わせた強度で、個々の光線に関する情報はこの時点で失われる。
Plenopticレンズの目的は、レンズに入ってくる全ての光線を統合せずに、それ自体を記録しようとするものだ。
さきほど全ての光線が集束したイメージセンサー上の1点に小さな穴が空いており、イメージセンサーはその背後に移動しているものとする。すると、穴で1カ所に集まった光線は、再び拡散し、イメージセンサーにたどり着く頃には、複数の光線に分離している。これが、全ての光線を記録する方法だ。
実際には、穴の代わりに小さなレンズを使う。具体的には直径数mmの極小レンズをびっしりと並べたものをイメージセンサーの直前に設置する。これが、Plenopticレンズだ。
ただし、同社が使っているカメラでは、レンズマウンタを使って、合焦点がPlenopticレンズよりも少し手前に来るようにずらしている。こうすることで、より高い解像度でリレーカメラの画像を作り出すことができる。リレーカメラの画像とは、重なった部分を持つ画像をつなぎ合わせたもののこと。
従来のカメラでは、被写体から反射した光線は、レンズを通じてイメージセンサー上の1点に収束する | Plenopticレンズを使うと、全ての光線をそのまま記録する | 実際にAdobeが試作したカメラでは、合焦点をさらにずらしている |
こうしてできた画像は、すこしずつ角度と位置がずれた小さな画像の集合体となり、そのままでは意味をなさない。この画像から、演算によって、各極小レンズが撮影した画像に散らばっている、本来1つであった点を結び合わせ、一般的な画像にレンダリングするのだ。
このようにしてPlenopticレンズで撮影した画像は、基調講演レポートで紹介したとおり、焦点を前後に変更したり、画角を変えたり、立体視用に視差を持った2枚にしたり、HDR化したりといった、これまでの写真では決してできなかった調整/変更ができるようになる。
Plenopticレンズの特性から、レンダリングされる画像は、イメージセンサーの持つ解像度よりも1/10~1/20程度にまで低下する。とはいえ、同社が使ったのは4,000万画素の「PENTAX 645D」で、出力された画像の解像度は200万画素程度あるので、ある程度十分なクオリティを持つ。むしろ、一般用途でこれ以上の高解像度化は基本的に不要と思われるが、その「余剰分」の画素を、こういった新しい用途に使うのは非常におもしろい取り組みと言えるだろう。
当然、この処理は重いのだが、並列処理に適しているため、GPUを活用することで、高速処理を実現している。また、この技術は将来のPhotoshopに実装されていくだろう。
【動画】画像の焦点を変更するところ |
【動画】若干だが上下左右に画角も変更できる |
(2010年 9月 24日)
[Reported by 若杉 紀彦]