waifu2xの処理を行うことが可能な、AviUtlのフィルタプラグインです。 aviutl-waifu2x-cpu_kaiと統合したので、RGBで処理できるようになりました。 また、実写画像にも対応できるようになりました。
- aviutl-waifu2x-cpu-***.aufとmodelsフォルダを、aviutl.exeと同じフォルダにあるpluginsフォルダにコピーしてください。
- aufファイル、およびmodelsフォルダをaviutl.exeと同フォルダに置くと正常に動作しません。
- SSE・AVX・FMA用にファイルが分かれていますので、自環境に適した奴を選択してください。
- 動作にはVisual Studio 2013 の Visual C++ 再頒布可能パッケージが必要ですが、面倒な人はmsvcp120.dllとmsvcr120.dllとvcomp120.dllをaviutl.exeと同じフォルダにコピーしてください。
設定画面は次の通り。デフォルトでは1・0・0・32・32・チェックなし・チェックなしにセットされています。
- threadトラックバー……スレッド数
- noiseトラックバー……デノイズレベル(0でデノイズしない)
- scaleトラックバー……拡大するか否か(0だと拡大しない)
- block_xトラックバー……分割するブロックの横サイズ。画像の横の公約数にしておけばOKかと。
- block_yトラックバー……分割するブロックの横サイズ。画像の縦の公約数にしておけばOKかと。
- use blockingチェックボックス……ブロッキングを使用するか。
- photographyチェックボックス……写真向けのモデルデータにするか(チェックなしだと二次元画像用です) なお、設定画面のタイトルバーに演算時間がミリ秒単位で表示されます。 noiseとscaleを0にすれば、フィルタ処理が無効化され最初の表示に戻ります。
- 処理開始時にメモリを確保しますが、コケた際にはダイアログで警告が表示されます(処理を行いません)。
- メモリが足りない旨の警告が出た際は、use blockingにチェックを入れるか、ブロックサイズを小さくしてください。
- 2015/06/27現在、写真用のデノイズデータはレベル1・2共にまだ公開されていません。なので、写真をデノイズする際は、二次元画像用のモデルデータを代用します。
Microsoft Visual Studio 2013でコンパイルしました。 AviUtlなので32bitバイナリを作成してください。
toolフォルダ内にjsoncnv.exeがありますが、これで元々のJSONデータを変換しています。 JSONデータの解釈にはpicojson.hを使用しました。 そうして出来たモデルデータ(バイナリ)のフォーマットは次の通りです。(左のパターンがX個並ぶことを{X}と表す)
- [出力ファイル] ::= [model]{S}
- [model] ::= [nInputPlane(I)] [nOutputPlane(O)] [weight] [bias]
- [weight] ::= [weight_1]{O}
- [weight_1] ::= [weight_2]{I}
- [weight_2] ::= [<weight_3]{kH}
- [weight_3] ::= [weight_4]{kW}
- [weight_4] ::= [Real Number]
- [bias] ::= [Real Number]{O}
- ※変換過程で、ステップ数=7、kW=kH=3だと仮定しています 変換する際は、コマンドライン引数を次のように設定します。 「jsoncnv {変換したいjsonファイル} {出力後のdatファイル}」 なお、jsoncnv.exeのソースコードはjsoncnv.cppです。
sampleフォルダにはサンプル画像を置いてあります。 ……piaproがCC BY-NCで出してる奴だから問題ないよね?
Ver.1.4
- aviutl-waifu2x-cpu_kaiと統合したので、RGB処理になった。
- モデルデータを追加したので、実写画像の拡大にも対応できるようになった。
Ver.1.3.3
- メモリの確保方法を最適化したのでVer.1.3.1並(倍速)になった
Ver.1.3.2
- メモリの確保方法を見直したので、あまりブロックに分割しなくても処理できるようになった
- そのせいで多少高速化したかもしれない
Ver.1.3.1
- ループアンローリングで倍近く高速化した
- メモリーリーク対策を強化した
- DLLを入れ忘れてたので追加した
Ver.1.3
- ソースコードを1から見直すことで改変しやすくなった。
- 出力平面をSIMD型に置き換えることで、無駄を極限まで減らした。
- ブロック幅を正方形から長方形にすることで、ブロック化に伴うロスを減らした。
- SIMD幅に合わせて処理する際の横幅を内部で調整することにより、余計な処理を無くした。
- JSONデータをultraist氏がアップロードした最新のものに入れ替えた。
Ver.1.2
- メモリ配置に合わせて添字の順番を入れ替えた。
- 処理をより並列度が高くなるように大幅な改良を加えた。
- ブロッキング処理を実装し、大画面でもメモリ不足にならないようにした。
- 輪郭周りの処理を完璧にし、より綺麗に変換できるようにした。
- SSE版だけでなく、AVX・FMA版も用意した。
Ver.1.1
- weightとbiasの精度をfloatに変更。それに伴い、toolのjsoncnvも多少書き換えてjsoncnv_とした。また、これによりモデルデータのファイルサイズが削減されています。
- SIMDとしてSSE、並列計算としてOpenMPに対応。
Ver.1.0 初版。