- oneDNN(mkl-dnn)が必須です.
- oneDNN を使って推論を実行しているため
- TBB が必須です.
- ISPC が必須です(一部フィルタなどの処理が ispc で記述されているため
- ソースコード自体は実質 x86 限定です.
- ispc, TBB など arm64 ビルドが面倒なため.
- Blender でも OIDN だけ arm64 対応はまだ https://developer.blender.org/D8236
ネットワークモデル
ネットワークは encoder/decoder モデルです.
ネットワークレイヤーは Conv2d, Pool2d, Upsample, Concat しか利用していません.
training
フォルダに, pytorch でのモデル定義がありますのでそちらを参考にしましょう.
weight データ
TZA(Tensor Archive)であります. 特に複雑なものではないです.
パースはこちら.
oidn では, ビルド時に一度 python で .tza ファイルを .cpp に変換してライブラリに埋め込むようになっています.
(ので .cpp が巨大).
データのレイアウトは文字列であります. "oihw"
など(ML 系の記法なので, あとのほうがメモリ上の次元が小さい)
実行
unet.cpp でネットワークのビルドと実行をしています.
処理の効率化を図るため, oneDNN の blocked layout でタイルで処理するようにしています.
画像のタイル化のために, input_reorder, output_reorder が用意されています.
データのレイアウトは NCHW
(pytorch 系)となっています(のはず)