Neural Network Libraries v1.24.0をリリースしました!
最先端の各種生成モデルや、様々な演算レイヤの最適化、さらにPython3.9への対応をはじめ、多くの機能が追加されました!
Spotlight
Example追加: Improved DDPM
Improved Denoising Diffusion Probabilistic Models (ICML 2021)のnnablaによる追試実装を公開しました。生成時のサンプリング方法として、Denoising Diffusion Implicit Models (ICLR 2021)も含まれています。
Diffusion Modelsは、GANに勝るとも劣らない高品質な画像の生成が可能かつ安定して学習することができるなどの理由から、最近注目を集めている生成モデルの一つです。詳細は論文やnnabla-examplesで公開している実装をご覧ください。
Example追加: NeRF / NeRF-W
ボリュームレンダリングを基に新視点画像合成(Novel View Synthesis)を行う深層学習モデルであるNeural Radiance Fields (NeRF)のnnabla実装を公開しました!2種類のNeRF実装を用意しています。
- オリジナルNeRF: 実写画像からなるデータセットであるLLFFと合成画像からなるデータセットであるDeepVoxelとBlenderに含まれる20のシーンで学習が可能です。テストパフォーマンスはオリジナル実装のものと比較しています。
- NeRF-W (NeRF in the Wild): このNeRFは対象となるシーンに関して、特に制約のない画像セットからそのシーンの新視点画像合成が可能な手法です。人工的に遮蔽物や外見のバリエーションを与えたレゴシーン、およびphototourismデータセットに含まれる複数シーン (サクレ・クール、ブランデンブルク門、タージマハール、アヤソフィア、ノートルダム大聖堂)で学習が可能です。
Example追加: StyleGAN2学習コード
v1.23.0でのStyleGAN2-CDC / StyleGAN2-EWCの公開に続き、v1.24.0ではnnabla実装によるStyleGAN2の学習コードが公開されました!高解像度の顔画像データセットであるFFHQにおいて学習が可能です。また、潜在変数を用いた内挿や、潜在空間へのプロジェクションやPerceptual Path Lengthなどの計算もサポートしています。
Instance Normalizationの最適化 (CPU / GPU)
Instance NormalizationのCUDA実装について、scaleとbiasのブロードキャストを同時に行うカーネルを実装し高速化を行いました。順伝播・逆伝搬演算共に、バッチサイズが1の場合を除き全てのケースで、既存のnnablaでの実装と比較して極めて高速に動作するようになりました。(高速化率は入力形状依存ですが、数十~百倍程度高速に動作します。)
CumProd / CumSumの最適化 (CPU / GPU)
CumProdとCumSumのCUDA実装について、メモリ最適化と高速化を行いました。任意の入力形状に対して、順伝播・逆伝搬演算共に、既存のnnablaでの実装と比較して極めて高速に動作するようになりました。(高速化率は入力形状依存ですが、数十~千倍程度高速に動作します。)
recomputation APIの改善
ネットワークの学習時に、順伝播計算結果を破棄し、逆伝搬計算時に再計算を行うことでメモリ使用量を削減するrecomputation機能のAPIを改善しました。以下のように、Pythonのwith構文を利用することで、再計算する範囲を簡単に設定できるようになりました。
x = nn.Variable(...)
with nn.recompute():
h = net1(x) # all intermediate variables will be set as recompute=True
y = net2(h)
y.forward() # variables in net1 will be cleared from memory
y.backward() # variables in net1 will be recomputed when required.
Python3.9サポート (CPU / GPU)
Python3.9のサポートを追加しました。これに伴い、file format converterが使うtensorflowもv2.5.1にアップデートされています。
バグ修正
- 特殊なケースにおいてIdentityレイヤを削除しないように変更
- F.Dropoutのoutput_maskオプションを廃止 (CPU / GPU)
- マルチスレッド利用時に起こり得る問題の修正 (CPU / GPU)
- 逆伝搬時にoutput dataが必要な関数のrecomputationの修正
ビルド関連
ドキュメントの追加・修正
- ウォッチドッグのドキュメント改善
- C++APIのドキュメントのマージ
- readthedocsドキュメントのリバイズ
- コンバータのドキュメントのアップデート
- ResNetのオプションの説明の修正
- nnabla-example-utilsドキュメントの追加