waifu2x-converter-cppで画像を拡大してみる

コンピュータ

オリジナル
logo

waifu2xで4倍に拡大(オプション:-t 1 -f png --noise-level 3 --scale-ratio 4 -m noise-scale)

GIMP2.10で4倍に拡大(補完方法:NoHalo)

プロセッサ変換時間(秒)
CPU: Intel(R) Celeron(R) CPU 3965U @ 2.20GHz(Win10)670.023
Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz(Ubuntu)509.304
OpenCL: Intel(R) HD Graphics 610(Win10)238.497
AMD Ryzen 5 1400 Quad-Core Processor(Ubuntu)80.444
AMD Ryzen 5 2400G with Radeon Vega Graphics(Ubuntu)75.327
CPU: AMD Ryzen 5 3600 6-Core Processor(Win10)36.114
CPU: Intel(R) Core(TM) i3-9100F CPU @ 3.60GHz(Ubuntu)35.166
Radeon RX 560(Ubuntu)27.945
CUDA: GeForce GTX 1650(Win10)8.447
OpenCL: GeForce GTX 1070 Ti(Ubuntu)7.083
CUDA: GeForce GTX 1070 Ti(Ubuntu)6.678

waifu2xで拡大処理すると自動で結構きれいに拡大されます。特にエッジの部分がしっかりと出ているのが特徴的です。
GIMPなどの一般的な拡大処理は今日日のPCであれば、処理時間を感じさせることはないですが、waifu2xの場合かなり処理時間を要します。
その処理時間は、CPUやGPUによって異なります。数パターンのCPU(GPU)を試してみましたが、計測方法が悪いのかかなり極端な結果になりました。
実用的にはGTX1070Tiが圧倒的といった感じです。持て余していたGTX1070Tiが有効活用できそうです。

追記20201019
ベンチマークとして楽しそうなのでWin10版のwaifu2x-converter-cppも試してみました。
Intel(R) Celeron(R) CPU 3965Uと内蔵GPUのHD Graphics 610で実行してみました。
GPUのHD Graphics610はCPUよりは早いですが、グラフィックボードのGPUと比べると圧倒的に遅いことになります。
CPUとしての結果はCore i5-7500より遅いというある意味順当な結果です。Core i5-7500の数値自体計測ミスだと思っていたのですが、あながちミスでもなさそうです。そうしてみるとIntel系のCPUはAMDのそれと比べてwaifu2xを動かすには向かない仕様なのかもしれません。
まぁAMDのCPUにしてもグラフィックボードのGPUと比べると圧倒的に遅いわけですが…
Win10版のwaifu2x-conberter-cppが使えることを知りましたので、手持ちの他のパソコンで実行してみたいと思います。

追記20201020
Ryzen5 3600とGTX1650も試してみました。
我が家で一番処理能力があると思われるCPU、Ryzen5 3600をもってしてもRX560にはかないませんでした。やはり安価でもよいのでグラフィックボードのGPUを使うべき処理のようです。
またGTX1650の結果がGTX1070Tiの1秒落ちぐらいです。世代の差もありますが、新品価格差から考えるとGTX1650のコストパフォーマンスの良さが光ります。
もっと上のクラスのGPUでも試したい気もしますが、数万円の投資で後数秒タイムが削れたとしても出費に見合うかというと個人的にはビミョーな気がします。とわいえCUDAコア数やGPUの世代で結果がどう変化するかは興味はあります。

追記20201022
Core i3-9100FとGTX 1070 Tiの組み合わせでUbuntuで実行してみました。GTX 1070 Tiの結果が前回より伸びておりGTX1650より約2秒ほど早いタイムになりました。CPUのi3-9100FがRyzen 5 3600を超えてきているあたり一般的な評価と逆転しています。OSやバージョンの違いもあるのでしょうがそれでもコア数から考えてもちょっと怪しい結果が出ています。機会があればWin10に入れ替えて再計測してみたいと思います。

多量の画像を一括処理するためにバッチスクリプトを用意すると便利です。

PowerShell(Windows10)

$ErrorActionPreference = "STOP"


$waifu2x_path = "C:UserskaretToolswaifu2x-converterwaifu2x-converter-cpp.exe"
$src_dir = "D:targetpng"
$dst_dir = "D:targetx2"

cd "C:UserskaretToolswaifu2x-converter"

ls $src_dir -Filter "*.png" | % {
    $src_file = $_.FullName
    $dst_file = Join-Path $dst_dir $_.Name

    $rate = 2

    $arglist = @( "-f", "png", "-c", "9", "-t", "1", "--scale-ratio","${rate}","--noise-level","3","-m","noise-scale","-o",$dst_file,"-i",$src_file)

    $proc = Start-Process -FilePath $waifu2x_path -ArgumentList $arglist -NoNewWindow -Wait -PassThru
    Write-Host $proc.StandardErr
    Write-Host $proc.StandardOutput
    Write-Host $dst_file

}

$rateに拡大する倍率をセット
bash(Ubuntu)

#!/bin/bash

infiles="/var/share/work/o/*.png"
outdir="/var/share/work/b4/"

for filepath in $infiles; do
    filename="${filepath##*/}"
    basename="${filename%%.*}"
    outpath="${outdir}${basename}.png"
    echo $outpath
    waifu2x-converter-cpp -t 1 -f png --noise-level 3 --scale-ratio 4 -m noise-scale -i $filepath -o $outpath 
done

コメント