EN

Neural Network Libraries v1.20.0をリリースしました!

2021年6月17日 木曜日

リリース

Posted by Takuya Yashima

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を利用することで、ミスラベルの検知をすることができます。
file

eXplainable AI: Grad-CAM追加

画像分類での判断根拠可視化するeXplainable AIとして、Grad-CAMを追加しました。Grad-CAMは、CNNベースのディープラーニングモデルにおいて、判断根拠の特徴となる画像領域をヒートマップにて表示することができます。 Colab形式のインタラクティブデモにて、手軽にお試しいただけます。
file

Colabデモ追加: SLE-GAN / TecoGAN

Google Colaboratoryですぐに動かせるインタラクティブデモに画像生成モデルのSLE-GANと動画超解像モデルのTecoGANが追加されました!
これらのデモにはこちらからアクセスすることができます。

Name Notebook Task Example
SLE-GAN Open In Colab Image Generation
TecoGAN Open In Colab 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モデル

デフォルト値などの変更

バグ修正

ビルド関連

コア機能の追加・改善

レイヤー関数等の新規追加・改善

ユーティリティの機能改善

ドキュメントの追加・修正

Exampleの新規追加