ADD LGM
3D生成モデル。 https://github.com/3DTopia/LGM
ONNXへのエクスポート時、モデル内部のMemory-efficient attentionでエラーが起きる。通常のAttentionに書き換えることでエクスポート自体は可能。 次回の勤務でエラーの解決or代替案を考える。
また、前処理でrembgが使われている。ailiaのrembgを使えるか検証する。
本モデルは多視点拡散モデル + 3d Gaussian Splattingの構造。 3d Gaussian SplattingのforwardでC言語が使われているため、直接的なエクスポートは難しい。 https://github.com/ashawkey/diff-gaussian-rasterization/blob/main/diff_gaussian_rasterization/init.py#L85-L86
他のエクスポート方法を検討する。
3d Gaussian SplattingをPytorchだけで実装したリポジトリ https://github.com/hbb1/torch-splatting
現状、LGMモデルのONNX化が難しいと考えられます。 LGMモデルの構成要素である3d Gaussian Splattingのレンダリング部分にて、C++の拡張モジュールが使われているためです。
回避策として、3d Gaussian SplattingをPytorchのみで実装するリポジトリを見つけました。しかし、
- レンダリング部分のONNX化を試みたところ、'aten::linalg_inv'のUnsupportedOperatorErrorが発生した。参考
- LGM内部の3d Gaussian Splattingと入力方法が異なるため、実装が難しい。
の理由から、解決には至りませんでした。
レンダリング部分のC++は許容してサンプル作成を進める。 その際、公式のC++はCUDAが必須だが、以下のリポジトリを使うことでCPU上で動かすことができる。 https://github.com/MrSecant/diff-gaussian-rasterization
しかし、torchは必要そう
https://github.com/axinc-ai/ailia-models/tree/lgm/neural_rendering/lgm
サンプルは一通りできたが、一部のprototxtが破損している模様
ailia.core.AiliaBrokenDataException: code: -4 (The specified file was broken.)
+ error detail : Prototxt has unexpected format:\000\000\000\000\000\000\000
at line169
ailia.core.AiliaBrokenDataException: code: -4 (The specified file was broken.)
+ error detail : unexpected escape sequence::