Edited at
MetalDay 6

iOSで超解像 - その1:waifu2xのMetal実装を試す

More than 1 year has passed since last update.

「超解像」(Super-resolution)とは、画像の解像度を高める技術のことです。100x100ピクセルの画像から200x200ピクセルの画像を生成する、というような話。

従来のリサイズ処理とはどう違うのか、はあとで見ていただくとして、これがiOSアプリ内で、しかもオンデバイス1リアルタイムに処理できるとなると、それによって享受できるメリットは計り知れません。なんといっても

通信量を削減できる!

という点は多くのアプリにとって嬉しいのではないかと思います。幅・高さ半分でファイルサイズが約4分の1、品質(解像度)は同等だとすると、熱くないですか?2 ネイティブアプリにおいて、サクサク感はUXの肝。モバイルデバイスの性能が著しく向上した現在、ボトルネックは通信、というケースは多いかと思います。また通信インフラが十分に整っていない国にもサービス展開するにあたって、通信周りをカリカリに最適化しているという話もちょくちょく耳にします。

というわけで、本記事では、この超解像技術をiOSで、しかもオンデバイスで利用する可能性について探っていきたいと思います。


waifu2x

2015年5月、こういう記事がバズりました。

このシンプルなタイトルにしてなんと2197ブックマーク。このwaifu2xとは、深層畳み込みニューラルネットワークによる二次元画像のための超解像システムです。

こちらでブラウザ上で試すことができます。


waifu2xのMetal実装

さて、私が現職に移ってMetalを勉強せねばとググっていたころ、なんと上述のwaifu2xをMetalで書いてみた、というスライドを発見しました。

おもしろそう、と思いつつ、試すことがないまま1年が過ぎ・・・今日やっと試してみました。


waifu2x-metalを試す

waifu2xのMetal実装はGitHubで公開されています。

こちらの実装はmacOS向けですが、処理内容、利用APIの観点でいうとiOSでも動くはず。

iOSに移植してみる前に、まずはその実力を見てみよう、ということで試してみました。

(入力画像: サイズ220x220)


(macOSの「プレビュー.app」を用いた従来のリサイズ: サイズ440x440)


(waifu2x-metalによるリサイズ: サイズ440x440)


あれ・・・凄くないですか・・・?

Web記事だと閲覧環境によっては見づらいかもしれないので、拡大して並べてみましょう。左が従来手法、右がwaifu2xです。

クオリティが段違いですね。。


写真で試す

イラストではなく、写真にも効果があるのでしょうか?試してみました。

(写真はitSnap様より特別に許可をいただき使用させていただきました3

左からそれぞれ従来手法、waifu2x-metalで元画像(540×810)を2倍に拡大(1080x1620) したものです。

拡大してみてみましょう。

写真にも絶大な効果があることがわかります。昨今の高解像度なスマホ上ではこの差はくっきり表れるかと思います。


つづく

次回、iOSへ移植して、動作させてみます。パフォーマンス改善についても触れます。Metalアドベントカレンダーのいち記事として書くので、興味のある方はぜひ購読してみてください。

(2017.12.17追記)

「その2」を書きました。

iOSに移植し「オンデバイスで」動作させました。「その3」ではパフォーマンス改善について書きます。


Metalの参考書籍

技術書「iOS 11 Programming」の、「第13章 Metal」を執筆しました。

書籍のタイトルにはiOS 11とありますが、Metalについては新機能の紹介だけではなくて、基礎からじっくり解説しています。Metalの章だけで37ページもあり、日本語ではこれだけのまとまったMetalの解説はレアかと思います。


  • 13.1 はじめに

  • 13.2 Metalの概要

  • 13.3 Metalの基礎

  • 13.4 MetalKit

  • 13.5 Metal入門その1 - 画像を描画する

  • 13.6 Metal入門その2 - シェーダを利用する

  • 13.7 Metal入門その3 - シェーダでテクスチャを描画する

  • 13.8 ARKit+Metalその1 - マテリアルをMetalで描画する

  • 13.9 ARKit+Metalその2 - MetalによるARKitのカスタムレンダリング

  • 13.10 Metal 2

  • 13.11 Metalを動作させるためのハードウェア要件

他の章も他著やネットではなかなか得られない濃い情報が詰まっているので、気になった方はぜひサンプルPDFもあるので見てみてください。

PEAKSのサイトにて電子書籍・紙の書籍ともに販売されています。




iOS 11 Programming



  • 著者:堤 修一,吉田 悠一,池田 翔,坂田 晃一,加藤 尋樹,川邉 雄介,岸川克己,所 友太,永野 哲久,加藤 寛人,

  • 発行日:2017年11月16日

  • 対応フォーマット:製本版,PDF

  • PEAKSで購入する



執筆を担当したARKit、Metalの章の詳細、あるいは全体的なおすすめポイントは以下の記事にも書きました。





  1. ここでは、WebAPI経由などではなく、そのiOSデバイスのCPU/GPUで処理する、という意味で使っています。 



  2. こういうメリットだとHEIFを思い浮かべる方もいると思いますが、超解像技術はファイルフォーマットとは別の話であって、共存こそすれ競合はしないので、今回は横においておきます。 



  3. dealforestさんありがとうございます!