雲の向こうの空

立ち上る雲の向こうの空 いかん
見上げしもののあわれとぞ思ふ

Ubuntu 20.04 LTS で waifu2x-converter-cpp

2021年01月29日 | CPU

はじめに

waifu2x は深層畳み込みニューラルネットワークによる二次元画像のための超解像度システムです。簡単に言うと、あまり綺麗でない画像を綺麗にしたり、画像を拡大するときに綺麗に拡大してくれたりします。そのサービスはネットでも提供されていて、Webサイトにファイルをアップロードすることで使用することができますが、好きに使うにはローカルで使用できた方がいいですよね。

そこで、自宅のLinux(Ubuntu 20.04 LTS) でwaifu2xを利用する方法を紹介します。waifu2x から変換のみの機能を切り出した waifu2x-converter-cpp を動作させます。

waifu2x-converter-cpp には、異なるいくつかの種類があるようですが、今回は DeadSix27 氏 のものを使わせていただきました。
I express my heartfelt thanks.

以前、Ubuntu 18.04 LTS でも使用していたので 20.04 LTS でも使用できると思ったのですが、ちょっとハマったのでメモを残しておきます。また、絶対にこうじゃなければダメというのではなく、 こうすれば動いたというメモです。

パッケージのインストール

コンパイルに必要なパッケージを準備します。

waifu2x-converter-cpp のソースコードを取得するために git をインストールします。

$ sudo apt git

次に、コンパイルに必要な基本的なパッケージを用意します。

$ sudo apt install build-essential pkg-config libc6-dev libssl-dev libexpat1-dev libavcodec-dev libgl1-mesa-dev zlib1g-dev
$ sudo apt install cmake

OpenCV と OpenCL 関連のパッケージをインストールします。

$ sudo apt install libopencv-dev python3-opencv
$ sudo apt install opencl-headers
$ sudo apt install ocl-icd-opencl-dev
$ sudo apt install beignet-opencl-icd

次のパッケージは不要かもしれません。

$ sudo apt install lsb

ソースコードの取得

テンポラリ(適当なディレクトリ)に waifu2x-converter-cpp のソースコードを取得します。次のコマンドを実行すると、カレントディレクトリに waifu2x-converter-cpp というディレクトリができます。

$ git clone "https://github.com/DeadSix27/waifu2x-converter-cpp"

コンパイル・インストールと動的リンカの実行

取得したソースコードのディレクトリ(waifu2x-converter-cpp の中)で次のコマンドを実行します。

$ mkdir out && cd out
$ cmake ..
$ make -j4
$ sudo make install
$ sudo ldconfig

cmake はコンパイラに依存しないでコンパイルするためのツールです。Ubuntu では gcc用の Makefile を作成してくれているのだと思います。 cmake があるということで、Windows などでもコンパイルできるのではないかと想像できるんです。

cmake の Config summary を示しておきたいと思います。CUDA を使用することもできるようです。

-- Config summary:
-- OpenCV: 4.2.0
-- OpenCL: 2.2
-- CUDA: Not found
-- Unicode: TRUE
-- Installing models to: /usr/local/share/waifu2x-converter-cpp
-- Not building test binaries
-- Building for: Unix Makefiles-x86_64

make のオプション -j は、コンパイル時に同時に実行するジョブの数です。私の環境では CPU のスレッド数が 4 なので 4 を指定しました。コンパイルする環境に合わせて変更してください。 分からなければ、普通に make すればよいと思います(知らないけど)。

今回ハマったところは OpenCV 関連のパッケージを用意していなくて "Built target w2xc" でエラーも表示されないで make が終了してしまいました。 ”Built target waifu2x-converter-cpp” と表示されれば成功です(多分)。 ぜひ、ハマってみてください。

動的リンカ(ldconfig)を実行しないで waifu2x-converter-cpp を実行するとライブラリがないと表示されてプログラムが終了します。

画像の処理

参考までに実行例を載せておきます。入力ファイル、出力ファイルは任意に変更してください。

$ waifu2x-converter-cpp -p 0 -m noise-scale --scale-ratio 2 --noise-level 2 -i 入力ファイル -o 出力ファイル

比較画像を掲載しておきます。左がオリジナル画像で、右が処理後の画像です。JPEG圧縮により劣化した画像などは比較的綺麗になります。 また、拡大処理をする場合も綺麗に拡大できます。

比較画像
比較画像(左:オリジナル 右:処理後)

使い方の詳細は、次のコマンドで表示されます。

$ waifu2x-converter-cpp --help

それではごきげんよう…