Coelacanth's Dream

waifu2x-ncnn-vulkan ビルド方法(Linux向け) 【2020/04/29 追記修正】

(追記 2020/05/27)

ビルドプロセスが改良されて別に ncnn をビルドして、パスを指定する必要がなくなった。
https://github.com/nihui/waifu2x-ncnn-vulkan#build-from-source

(追記終了)

Vulkan Computeで演算するため、Linux + Radeon 環境でもローカルで実行可能な画像高解像度ソフトウェア、waifu2x-ncnn-vulkan をビルドする方法のメモ。

ncnn のビルド方法

waifu2x-ncnn-vulkan をビルドするには、まず ncnn をビルドする必要があるのだが、
最新版ではビルド時にエラーが出るため、ncnn を git clone した後、waifu2x-ncnn-vulkan のページにあるリンクのコミット時に切り替えるのがいい。
https://github.com/Tencent/ncnn/wiki/how-to-build#build-for-linux-x86

$ git clone https://github.com/Tencent/ncnn
$ cd ncnn
$ git checkout 8c537069875a28d5380c6bdcbf7964d73803b7b3
(追記 2020/04/29)

最新版ではエラーが出ると書いたが、原因が発覚した。
端的に言えば glslangValidator が最新版でなかった。誰かのせいにするなら cmake が VULKAN_SDK を認識してくれないのが悪い。
そういうことで以下修正版。

$ cmake -DVulkan_LIBRARY="${VULKAN_SDK}/lib/libvulkan.so" -DVulkan_INCLUDE_DIR="${VULKAN_SDK}/include" -DNCNN_VULKAN=ON -DGLSLANGVALIDATOR_EXECUTABLE=${VULKAN_SDK}/bin/glslangValidator ../
 $ make -j$(grep -c processor /proc/cpuinfo)
 $ make install

インストール先はデフォルトで <build dir>/install

(追記終了)

ncnn の wiki には VulkanSDK をダウンロード、展開し、環境変数 VULKAN_SDK をそこにセットするようにとあるが、CMake がそれを見つけてくれないため、CMake 実行時、別に指定する必要がある。

まずビルド用のディレクトリを作成。下記のコマンドはディレクトリ名に日付を入れるようにしているが、名前であるから何でもいい。
そして作成したディレクトリに移動。

$ mkdir build_$(date "+%F")
 $ cd <build dir>

cmake、ビルド、そしてインストール。インストール先はデフォルトで <build dir>/install になっている。

 $ cmake -DVulkan_LIBRARY="${VULKAN_SDK}/lib/libvulkan.so" -DVulkan_INCLUDE_DIR="${VULKAN_SDK}/include" -DNCNN_VULKAN=ON ../
 $ make -j$(grep -c processor /proc/cpuinfo)
 $ make install

waifu2x-ncnn-vulkan のビルド方法

waifu2x-ncnn-vulkan のバージョンは問わず、最新版でも問題ないが、ここでは version 20200414 を前提とする。
Release version 20200414 · nihui/waifu2x-ncnn-vulkan

まずは waifu2x-ncnn-vulkan-20200414 の src ディレクトリへ。
そして先程同様にビルド用のディレクトリを作成、移動。

 $ cd waifu2x-ncnn-vulkan-20200414/src
 $ mkdir build_$(date "+%F")
 $ cd <build dir>

cmake を実行前に、CMakeList.txt を編集する必要があり、67行目の一部を先程ビルドした ncnn に合わせて変更する。
パスはその人の環境で変わる。下は、/home/${USER}/src 下に ncnn をクローン、ビルドした場合のパス。

/home/${USER}/src/<build dir>/install/lib/cmake/ncnn

そしてビルド。ここでは特にオプションは必要としない。

(追記 2020/04/29)

ここでも cmake で Vulkan系を指定する必要がある。

 $ cmake -DVulkan_LIBRARY="${VULKAN_SDK}/lib/libvulkan.so" -DVulkan_INCLUDE_DIR="${VULKAN_SDK}/include" -DGLSLANGVALIDATOR_EXECUTABLE=${VULKAN_SDK}/bin/glslangValidator ../src
 $ make -j$(grep -c processor /proc/cpuinfo)
(追記終了)
 $ cmake ../
 $ make -j$(grep -c processor /proc/cpuinfo)

<build dir> に waifu2x-ncnn-vulkan のバイナリが生成されるため、それを実行すればいいが、推論に用いるモデルは <build dir> 下ではなく、waifu2x-ncnn-vulkan 下にあるため注意。

ビルドに失敗する時は、以下で質問して頂ければ助けになれるかもしれません。
Issues · Umio-Yasuno/umio-yasuno.github.io