今回は画像の拡大とノイズ除去を行うWebサービスであるwaifu2xから変換のみの機能を切り出したwaifu2x-converter-cppを紹介します。
きっかけ
少し前の話になるのですが、
GIMPやImagemagickでも画像を拡大することができますが、
その際に枚数が多くてサーバーに負荷をかけたのを申し訳なく思い、
ビルド
インストールするパッケージ
ではビルドしてみましょう。今回使用するUbuntuのバージョンは19.
基本的に必要になるパッケージはgcc
、git
、cmake
、opencl-headers
、libopencv-dev
の5つで、
- NVIDIA
- NVIDIAのプロプライエタリなドライバーを使用している場合、
CUDAが使用できます。CUDAのパッケージ名は nvidia-cuda-toolkit
です。 - AMD
- AMDのGPU/
APUでオープンソースドライバーを使用している場合、 mesa-opencl-icd
とopencl-headers
が必要です。プロプライエタリ―なドライバーは、今回は試していません。 - Intel
- IntelのCPU内蔵GPUを使用している場合、
beignet-opencl-icd
とopencl-headers
が必要のようですが、動作検証は行っていません。
実際のビルド
ビルドを実行するコマンドは次のとおりです。
make
コマンドのj16
オプションは、ldconfig
コマンドは正確にはビルドに必要なわけではなく、waifu2x-converter-cpp
コマンドを実行するに必要です。
実行
ビルドができたら、
どのGPU/
実際に変換するコマンドの実行例は次のとおりです。
--scale-ratio
オプションはその名のとおり何倍に拡大するかで、-m
オプションはモードの指定で、scale
は拡大するだけです。noise
とするとノイズの除去をしてくれます。両方を指定するnoise-scale
もあります。-p
オプションは先ほどのリストの番号を指定します。省略しても構いません。-i
オプションは入力、-o
オプションは出力するファイル名です。詳しいコマンドのオプションは-h
オプション付きで実行して確認してください。
今回サンプルとして使用した元画像は図5で、
ベンチマーク
waifu2x-converter-cppは完了後にかかった時間を出力します。そこで筆者が所有するいくつかのCPU/
GPU/ |
OpenCL/ |
時間(秒) |
---|---|---|
AMD Ryzen 7 2700X | - | 27. |
AMD Ryzen 5 3600 | - | 19. |
AMD Radeon RX 560 | OpenCL | 24. |
NVIDIA Geforce GT 1030 | CUDA | 20. |
NVIDIA GeForce GT 1030 | OpenCL | 24. |
NVIDIA GeForce GTX 1050 | CUDA | 15. |
NVIDIA GeForce GTX 1050 | OpenCL | 17. |
NVIDIA GeForce GTX 1650 | CUDA | 11. |
NVIDIA GeForce GTX 1650 | OpenCL | 12. |
通常2048x1536ピクセルの画像をwaifu2xでさらに拡大するということはないでしょうから、
オープンソースでなんとかしようとすると、
Ryzen 7 2700XとRyzen 5 3600の速度差が気になりますが、