Skip to content

YSRKEN/aviutl-waifu2x-cpu

Repository files navigation

aviutl-waifu2x-cpu

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 初版。

参考にした資料