01/01

http://int.main.jp/files/waifu2x-converter_x86_0101.zip

http://int.main.jp/files/waifu2x-converter_x64_0101.zip

パラメータ指定の方法はどうしたらいいかよくわからないので要望があれば追加するかも。

11/30

http://int.main.jp/files/waifu2x-converter_x86_1130.zip

http://int.main.jp/files/waifu2x-converter_x64_1130.zip

  • α値に一応対応。
  • あわせて 16bit png にも多分対応(あんま確認してない)
  • Silvermont で 1019→1101 で遅くなっていたのをなんとかした。(まだSandy+SSEで遅いのを確認している。あとi5-430Mでも遅いらしいのでNehalem派生でも遅いと思う)
  • models の json が bin より新しかったら bin を更新するようにした
  • added alpha channel support
  • added 16bit png support (maybe..)
  • improved perfomance on Silvermont
  • added model binary update checking. model binaries are updated when models/*.json is newer than models/*.bin.

更新 08/13

http://int.main.jp/files/waifu2x-converter_x86_0813.zip

http://int.main.jp/files/waifu2x-converter_x64_0813.zip

前のOpenCV filter2D 版はよく考えたらマルチスレッドにしてなかったのでかなり遅かった(オリジナルのwaifu2x-converter-cppより遅かった)。

ごめんこれ嘘だった。もともとマルチスレッドにはなっていた。が、まあ色々無駄なオーバーヘッドあったので3〜4倍にはなってるはず。

10/19

http://int.main.jp/files/waifu2x-converter_x86_1019.zip

http://int.main.jp/files/waifu2x-converter_x64_1019.zip

ごめんふたつミスってたので修正

  • w2xcr.exe が jpg のシグネチャ間違えていたのでjpg入れても動かないことがある
  • w2xcr.exe が AVX より GPU を優先する

更新 10/18

http://int.main.jp/files/waifu2x-converter_x86_1018_02.zip (すいません、ビルドミスっていてAVXが無効になっていたので02を使ってください)
http://int.main.jp/files/waifu2x-converter_x64_1018.zip

更新が溜まってきたので更新。

OpenCLGPU以外も指定できるけど動かないような気がする。まあ修正する気はしないので諦めて。

CUDA のほうは複数テストしてないので動かないかも。動いた人いたら教えてもらえると助かります。

透過pngはどうやったらいいかよくわからないので多分対応しないと思います…

更新 08/11

SSEの対応すぐ入れる方法思い付いたので入れた。

http://int.main.jp/files/waifu2x-converter_x64_0811.zip
http://int.main.jp/files/waifu2x-converter_x86_0811.zip

以下のような優先度で処理する

  • CUDA
  • AMD GPU OpenCL
  • FMA
  • AVX
  • Intel GPU OpenCL
  • SSE (SSE3 を持ってないCPUでは無効命令で死ぬ) ← 追加
  • GPU が無くて横幅が奇数なら OpenCV filter2D (x2 は常に横幅偶数なのでノイズ除去のみ filter2Dになる可能性がある)


実際にはSSE3が必要なので、PrescottPen4以降が必要です。Pen3とかの世の中に出回っている大半のPCでは動かないかも。

前のOpenCV filter2D 版はよく考えたらマルチスレッドにしてなかったのでかなり遅かった(オリジナルのwaifu2x-converter-cppより遅かった)。

なので、8〜10倍ぐらい速くなってるかも。でもAtomとかのキャッシュ小さいのだとよくわからん(あとで試す)。

まあでもこういうSIMD効く問題は世代毎に体感できるぐらいかなり性能上がってるし、Core2とかPentiumとかはやめて新しいi5,i7を使うべきだと思う。


https://github.com/tanakamura/waifu2x-converter-cpp/commit/1a65160e1d3881bb13b4e62fcda47bb33dce0ee3
差分見ればわかるが、ゆるふわ対応なのでチューニングの余地はあるかも。(そもそも確認すらしてない)


あとついでに GeForceOpenCL でも動くようにした。CUDAのほうがはやいので実用性は無いけど…まあ、動かないのが気になってた人とかは更新すると良いのではないかな…

11/01

http://int.main.jp/files/waifu2x-converter_x86_1101.zip

http://int.main.jp/files/waifu2x-converter_x64_1101.zip

http://d.hatena.ne.jp/w_o/20151101#1446350337 ではやくした分を入れた。Haswell なら1.5倍ぐらい。

FMA ついてるCPUなら一昔前のGPUと対抗できるぐらいの性能になったと思う。

CUDA, OpenCL も可能なら同じような変更を入れたい。あとローカルメモリが少なくても動くようになったはずなので、怪しい組み込みGPU OpenCLとかでも動くようにしたいな…

更新0719

  • w2xconv_convert_rgb_f32 追加 (RGBモデルのみ、rgbをfloatで入れられるAPIが欲しいと言われたから入れただけなので多分大半の人には影響ない)
  • 32bit 版が運が悪いとGPUで動いていない箇所があったので修正(多分これでブロックサイズ指定しないで動くようになったのではないかな…)
  • w2xcr.exe に bmp 入れられるように修正
  • リソース解放一個足りてなかったので修正


あとそういえばLinux用にビルドしたのでついでに置いておく。

http://int.main.jp/files/waifu2x-converter_x64.tar.gz

依存ライブラリとかあるしソースからビルドしたほうがいいと思うけど…



というかビルド方法どこにも書いてなくね?書いておくと、

  1. OpenCV のヘッダとかを用意する。2、3 どちらでも良いはず。
  2. CUDA toolkit とかを入れて nvcc 使えるようにする
  3. cl.h が /usr とかに置かれてなんかうまいこと include できるようにする(というかCUDA Toolkit必須なのだからそっちのヘッダを見ろよという気がした)
  4. cmake -D OPENCV_PREFIX=
  5. make

でいけるのではないかな…

追記 07/06

w2xcr.exe ブロックサイズ指定できるようにした。

http://int.main.jp/files/waifu2x-converter_x64_0706.zip
http://int.main.jp/files/waifu2x-converter_x86_0706.zip

なんかうまく動かないという人は、install.js の

var WshShell = WScript.CreateObject("WScript.Shell");
strSendTo = WshShell.SpecialFolders("SendTo");
var oShellLink = WshShell.CreateShortcut(strSendTo + "\\waifu2x.lnk");
oShellLink.TargetPath = WshShell.CurrentDirectory + "\\w2xcr.exe";
oShellLink.WindowStyle = 1;
oShellLink.Description = "waifu2x";
oShellLink.Arguments = "--block_size 0"; // ここ
oShellLink.Save();

var WshShell = WScript.CreateObject("WScript.Shell");
strSendTo = WshShell.SpecialFolders("SendTo");
var oShellLink = WshShell.CreateShortcut(strSendTo + "\\waifu2x.lnk");
oShellLink.TargetPath = WshShell.CurrentDirectory + "\\w2xcr.exe";
oShellLink.WindowStyle = 1;
oShellLink.Description = "waifu2x";
oShellLink.Arguments = "--block_size 512"; // ここ
oShellLink.Save();

のようにして修正したあと、install.batを実行すると問題が解決するかも。

TDR食らって止まる人もこれを512とか256にすれば動くようになるはず。

あと白い画像を入れたときに色が変わる問題を修正した。(気づいてくれた人ありがとう)

更新 07/26

AVX無いと遅いのをなんとかしようと思ってSSE版を作ろうと思ったのだけど、最近のPentium, CeleronとかだとSSEよりGPUのほうがはやい気がしたので、AVXが無い場合はOpenCLを使うようにしてみた。

http://int.main.jp/files/waifu2x-converter_x64_0726.zip
http://int.main.jp/files/waifu2x-converter_x86_0726.zip


優先度が以下のようになる。


あわせて、waifu2x-converter-cpp.exe に、--force-OpenCL オプションを追加した。CUDA, FMA, AVXがある環境でもOpenCLを使うようになる。

試した範囲だと、

  • Haswell i7 4コア : FMAのほうが速い。Iris Pro 5200 も試したがFMAのほうが少しはやい。多分4コアあるi5もFMAのほうがはやい
  • Baytrail 4コア : SSE実装が無いので OpenCL のほうが大分はやい。SSE実装を真面目に作ればそっちのほうがはやいかも
  • Braswell 4コア : OpenCLのほうが大分はやい。SSE実装の理論値をこえてるので、SSE実装まじめに作ってもOpenCLのほうがはやい

試してない範囲だと、

  • Haswell i5 4コア : 多分i7と一緒。FMAのほうがはやい
  • Haswell i3 2コア : 際どい。もしかしたらOpenCLのほうがはやいかも
  • Haswell Pentium, Celeron : SSE実装無いのでOpenCLのほうがはやい。真面目にSSE作ったら際どい
  • Ivy, Sandy : 多分AVXのほうがはやい
  • Broadwell : もしかしたらi7でもOpenCLのほうがはやいかも?

という感じ。

誰か試してみた人いたら結果教えてもらえると助かります。

waifu2x-converter-cpp OpenCL RGB版

http://int.main.jp/files/waifu2x-converter_x64_0629_02.zip (libgcc_s_seh-1.dll が無いエラーが出てた人は02使ってください)

http://int.main.jp/files/waifu2x-converter_x86_0629.zip

はい。

-model_dir で、models_rgb を指定するとRGBになる(デフォルト)。-model_dir で models を指定するとYだけ。(前と同じ)

API から使う場合は w2xconv_load_models で models_rgb をロードすると、

  • w2xconv_convert_file, w2xconv_convert_rgb は RGB
  • w2xconv_convert_yuv, w2xconv_apply_filter_y は使えない(エラーが返る)

という挙動になる。models をロードした場合は、前と同じ挙動になる。


waifu2x_win_koroshell 等とあわせて使う場合は、

  • waifu2x-converter_x64.exe or waifu2x-converter_x86.exe
  • w2xc.dll
  • models_rgb ディレクトリ丸ごと

の全てをコピーする。


他の変更点として、メモリ割り当てに失敗するとブロックサイズ小さくするようにしたので、マシン毎にブロックサイズ調整する必要は無くなった。

あと w2xcr は uninstall.bat を付けたのでお行儀良くなったはず。


既知の問題として、OpenCL版は「ドライバが停止しました」とか出る可能性がある(WindowsではOpenCLで2秒以上処理してはいけないというルールにひっかかっている)。

修正方法あるのだけど手元で再現しないからやる気が…(まあ出る人は一応GPU名教えてください)。どうしてもすぐに対応したい場合は、

http://www.slis.tsukuba.ac.jp/~fujisawa.makoto.fu/cgi-bin/wiki/index.php?CUDA%A5%AB%A1%BC%A5%CD%A5%EB%BC%C2%B9%D4%A4%CE%A5%BF%A5%A4%A5%E0%A5%A2%A5%A6%A5%C8

などを参考にTDRを調整すると状況が良くなるかも。(あまり推奨される手順ではないとCUDAのドキュメントに書いてた気がするのであまり推奨される手順ではないです)