Closed kyakuno closed 3 years ago
Recently, the power of unconditional image synthesis has significantly advanced through the use of Generative Adversarial Networks (GANs). The task of inverting an image into its corresponding latent code of the trained GAN is of utmost importance as it allows for the manipulation of real images, leveraging the rich semantics learned by the network. Recognizing the limitations of current inversion approaches, in this work we present a novel inversion scheme that extends current encoder-based inversion methods by introducing an iterative refinement mechanism. Instead of directly predicting the latent code of a given image using a single pass, the encoder is tasked with predicting a residual with respect to the current estimate of the inverted latent code in a self-correcting manner. Our residual-based encoder, named ReStyle, attains improved accuracy compared to current state-of-the-art encoder-based methods with a negligible increase in inference time. We analyze the behavior of ReStyle to gain valuable insights into its iterative nature. We then evaluate the performance of our residual encoder and analyze its robustness compared to optimization-based inversion and state-of-the-art encoders.
近年、Generative Adversarial Networks (GAN)を用いることで、無条件の画像合成の力が大幅に進歩しました。画像を、学習したGANの対応する潜在コードに反転させる作業は、ネットワークが学習した豊富なセマンティクスを活用して実画像を操作することができるため、最も重要である。本研究では、現在の反転手法の限界を認識し、反復的な改良メカニズムを導入することで、現在のエンコーダベースの反転手法を拡張した新しい反転スキームを提示する。エンコーダーは、与えられた画像の潜在コードを1回で直接予測するのではなく、自己修正しながら反転した潜在コードの現在の推定値に対する残差を予測することを課題としている。ReStyleと名付けられた我々の残差ベースのエンコーダは、現在の最先端のエンコーダベースの手法と比較して、推論時間をごくわずかに増加させるだけで、精度を向上させることができる。ReStyleの動作を分析することで、その反復的な性質に関する貴重な洞察を得る。次に、我々の残差エンコーダの性能を評価し、最適化ベースの反転や最新のエンコーダと比較してそのロバスト性を分析する。
www.DeepL.com/Translator(無料版)で翻訳しました。
Colab環境でONNXエクスポートを実施。
torch.onnx.export(net, (x_input, {'latent':None, 'randomize_noise':False, 'return_latents':True, 'resize':opts.resize_outputs}), 'test.onnx', verbose=True, opset_version=11)
(restyle-encoder/utils/inference_utils.pyの”run_on_batch”内で実施)
returnが返されているが、onnxエクスポートされたファイルが出力されていない。
(エラーLOGは出力されていない)
%3683 : Float(1, 3, 1024, 1024, strides=[3145728, 1048576, 1024, 1], requires_grad=0, device=cuda:0) = onnx::Reshape(%3670, %3682) # /content/restyle-encoder/models/stylegan2/model.py:271:0
%3684 : Float(1, 3, 1024, 1024, strides=[3145728, 1048576, 1024, 1], requires_grad=0, device=cuda:0) = onnx::Add(%3683, %decoder.to_rgbs.7.bias) # /content/restyle-encoder/models/stylegan2/model.py:352:0
%3685 : Float(1, 3, 1024, 1024, strides=[3145728, 1048576, 1024, 1], requires_grad=0, device=cuda:0) = ^UpFirDn2d((2, 2), (1, 1), (2, 1, 2, 1))(%3421, %decoder.to_rgbs.7.upsample.kernel) # /content/restyle-encoder/models/stylegan2/op/upfirdn2d.py:144:0
%3686 : Float(1, 3, 1024, 1024, strides=[3145728, 1048576, 1024, 1], requires_grad=0, device=cuda:0) = onnx::Add(%3684, %3685) # /content/restyle-encoder/models/stylegan2/model.py:357:0
return (%3686, %1393)
onnxエクスポートログ.txt (エクスポートLOGの詳細はこちら)
axでの調査結果のまとめ(by Zhao and Nathan) ・デフォルトではupfirdn2dのCUDAバージョンが使用されておりONNXにエクスポートできない ・オリジナルリポジトリにはupfirdn2dのPythonバージョンが存在する ・そのため、upfirdn2dのPythonバージョンを使用することでONNXへのエクスポートが可能になる ・同様の問題がfused_bias_actにも存在するため、これもPythonに置き換える必要がある ・実際にCUDAのコードをPythonに置き換えることでCUDAと同じ結果を得られることを確認した ・ONNXにエクスポートして正常動作を確認した ・将来的にはupfirdn2dをailiaでダイレクトに実装できれば高速化の余地がある
https://github.com/yuval-alaluf/restyle-encoder MIT