Mac OS X 10.11からMetalが利用できるようになるということなので、試しにコマンドラインツールとして、waifu2xをMetalで実装してみました。
まだいろいろ問題が山積みですが、とりあえず公開します。
なお、コンパイルにはXcode 7、OS X上でMetalを実行するには10.11 (El Capitan)が必要です。
コンパイル環境、動作確認した環境は次の通りです。
- OS X 10.11 Beta2
- Xcode 7.0 beta2 (7A121I)
- MacBook Pro (Retina, Mid 2012)
- NVIDIA GeForce GT 650M
参考にしたソースはwaifu2x.pyとueshita/waifu2x-converter-glslですが、Metal版ではRGBモデルを利用しています。
Metalでの実装についての話は、第62回 Cocoa勉強会関西でする予定ですので、ここではMetal版の実装上の問題点を挙げておきます。
他のツールと比べて遅い
ueshita/waifu2x-converter-glslと比べると倍以上遅いです。
waifu2x-metal a.jpg 0.98s user 7.84s system 11% cpu 1:18.46 total
waifu2x-converter-glsl -m scale a.jpg 1.81s user 3.20s system 15% cpu 32.47 total
2倍拡大にしか対応していない
他ツールと比べて遅かったのもあって、コマンドライン処理あたりにはまじめに手を入れてません。 なので、ノイズ除去フィルタには対応していません。
分割処理していないので大きい画像は処理できない
オリジナルwaifu2xや ueshita/waifu2x-converter-glsl では入力画像を128x128ピクセルごとに分割して処理しているようですが、Metal版ではそれを行っていません。
そのため、処理できる画像サイズに制限があります。上限はGPUのメモリサイズによりますが、手元の環境 (GPUメモリサイズ 1GB) では元画像が800x600くらいが限界でした。
Intelで正常な結果が得られない
原因は調査中ですが、IntelのGPUを利用した場合には最終結果が上のようになってしまいます。
テクスチャなどのリソースの無駄使いが多い
Metal Programming GuideのTransient and Non-transient Objects in Metalでは、パフォーマンスのためにTextureは再利用すべき、とのことですが利用していません。
無駄な処理がある
頻繁にcommit
して、さらにその直後にwaitUntilCompleted
しているので、ここらへんを減らせば少し早くなりそうです。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。