Neural Network Libraries v1.20.0をリリースしました!
また、nnablaを用いた深層強化学習ライブラリであるnnablaRLもリリースされました!nnablaRLについてはこちらの記事で詳しく説明されていますのでぜひご覧ください!
さらに、ai-researchレポジトリにおいて、SONYがCVPR2021にて発表したD3Netの音源分離/セマンティックセグメンテーションの推論コードおよびColabデモが公開されています!そちらもぜひチェックしてみてください!
Spotlight
Re-computation機能の追加 (CPU / GPU)
ネットワークを学習する際に、Forward実行時に中間バッファを削除し、Backward実行時に必要なデータを再計算する機能を追加しました。この機能を利用することで、追加の計算時間が必要となる代わりに、学習に利用するメモリ量を削減することができるようになりました。
以下の疑似コードが示すように、Variableのrecomputeフラグを設定することで、forward / backward実行時に自動で中間バッファの削除と再計算が実行されます。
x = nn.Variable(...) # input
t = nn.Variable(...) # label
# first layer
h1 = PF.affine(x, c1)
h1.apply(recompute=True) # <- set recompute flag as True
# second layer
y = PF.affine(h1, c2)
loss = F.mean(F.squared_error(y, t))
# h1 will be cleared during forward.
loss.forward(clear_no_need_grad=True)
# Backward of the second affine layer requires h1,
# so h1 will be recomputed before executing its backward computation.
loss.backward(clear_buffer=True)
eXplainable AI: TracIn追加
勾配降下をトレースすることで訓練データの自己影響度を算出するTracInを追加しました。TracInを利用することで、ミスラベルの検知をすることができます。
eXplainable AI: Grad-CAM追加
画像分類での判断根拠可視化するeXplainable AIとして、Grad-CAMを追加しました。Grad-CAMは、CNNベースのディープラーニングモデルにおいて、判断根拠の特徴となる画像領域をヒートマップにて表示することができます。 Colab形式のインタラクティブデモにて、手軽にお試しいただけます。
Colabデモ追加: SLE-GAN / TecoGAN
Google Colaboratoryですぐに動かせるインタラクティブデモに画像生成モデルのSLE-GANと動画超解像モデルのTecoGANが追加されました!
これらのデモにはこちらからアクセスすることができます。
Name | Notebook | Task | Example |
---|---|---|---|
SLE-GAN | Image Generation | ||
TecoGAN | Video Super-Resolution |
nn.no_gradによる勾配計算の無効化
ネットワーク全体のうち一部の勾配計算を省きたいとき、例えば、ある学習済みネットワークの出力を別のネットワークの入力として使い、前段の学習済みネットワークに関してはパラメータを更新しない(すなわち勾配計算が必要とされない)ものの、後段のネットワーク部分だけ学習を行いたいときなどに利用可能な、no_grad機能が実装されました!これによりメモリ使用量などを減らすことが可能です。
# 勾配計算を必要としない部分
with nn.no_grad():
output0 = <Network0>(<input0>)
# 勾配計算を必要とする部分
output1 = <Network1>(<input1>, output0)
loss = <Loss>(output1, <ground_truth>)
loss.forward(clear_no_need_grad=True)
動的グラフの利用時にも利用可能です。
with nn.auto_forward(), nn.no_grad():
output0 = <Network0>(<input0>)
すでに作成された静的グラフに関しても、以下のようにすることで勾配計算を行わないように変更できます。
x = nn.Variable.from_numpy_array([2, 3])
y = <Network>(x).no_grad()
これは特に.nnp
ファイルから読み込んだネットワークの利用時に有用です。
NNPからTFLiteへ直接変換ができるようになりました
新たなファイルフォーマットコンバーターを実装しました!これにより、.nnp
ファイルをtflite
ファイルへ直接変換することが可能になりました。
また、onnx_tf
への依存もなくなり、より柔軟にネットワークのデータフォーマットを変換できるようになりました。
次のようにしてコンバーターを利用することができます。
nnabla_cli convert -b 1 input.nnp output.tflite
nnablaによるモデル構造。 | 本コンバーターによって変換されたtfliteモデル |
---|---|
デフォルト値などの変更
バグ修正
- functions.yaml内で二重に使われていたIDを修正
- RandomShiftクラスの初期化時の挙動修正
- ONNX exporter: Conv1dの修正 / デフォルトのopsetを11に変更
- 不正なグラフ/パラメータが生成されてしまう問題の修正
- Audio/DICOM読み込み時のBytesIOサポート
- cudnnBatchNormalizationForwardTrainingのバッファオーバーラン修正
- SoftPlusバグ修正
- GraphProfiler: warm-up後にデバイスとホスト間で同期
- fused binary演算の修正 (CPU / GPU)
- clear_no_need_grad=True時のforwardの挙動 / Dropoutのnn.gradの修正 (CPU / GPU)
- Re-computation時にdataがクリアされているかチェック
ビルド関連
コア機能の追加・改善
レイヤー関数等の新規追加・改善
ユーティリティの機能改善
- F.mean()を含むネットワークの保存時のエラー修正
- audio_utils リファクタリング
- Moduleにパラメータの保存/読み込み機能追加
- requestsの代わりにurllibを使用するよう変更 (CPU / GPU)
- nn.Moduleで作成したネットワークのSimpleGraph対応
- NnpLoaderで返されるネットワークでVariableの名前がセットされない問題の修正
- ファイルフォーマットコンバーター: makefile追加