• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • Computer Vision / Video Analytics

    TAO Toolkit 3.22.05 アップデート: モデルの重み持ち込み + TensorBoard の可視化

    Reading Time: 2 minutes

    NVIDIA TAO Toolkit (以下: TAO) は Deep Learning モデルの學習を容易にし、枝刈り、量子化によって高速なモデルを提供可能にする機能をもっているソフトウェアです。

    この記事は 2022 年 6 月のアップデートで導入されたモデルの重み持ち込みと TensorBoard による可視化について記述します。

    BYOM (Bring your own model) モデルの重みの持ち込み

    モデルの重みの持ち込みを TAO 上では BYOM と記述します。Bring your own model の略稱になります。

    この機能によって他のフレームワークで學習された重みを TAO に持ち込むことができます。

    TAO は NGC カタログに公開されている學習済みモデルを使用することができます。しかし公開されているモデルは人、車、動物のデータで學習されたケースが多く、ユース ケースにあっていないケースがあります。

    PyTorch や TensorFlow フレームワークなどを用いて學習したモデルの重みがもしあれば、その重みを TAO 上に持ち込める機能が BYOM になります。

    TAO 上に持ち込むことによって、量子化や枝刈りなどの推論時の高速化の恩恵を受けることができます。

    BYOM UNET

    ここからは BYOM の具體的な実行例を記述します。

    こちらのリンクを參考にしています。

    BYOM を行うためのレポジトリを取得します。

    cd $HOME
    git clone https://github.com/NVIDIA-AI-IOT/tao_byom_examples.git
    cd tao_byom_examples/semantic_segmentation

    Minicondaで環境を作成します。

    conda create -n byom_dev python=3.6
    conda activate byom_dev

    pipで依存性のあるライブラリをインストールします。

    pip3 install -r requirements.txt --no-deps

    TAO の裏側で TensorFlow が動作しているので TensorFlow 関連のソフトウェアをインストールします。

    pip3 install nvidia-pyindex
    pip3 install nvidia-tensorflow

    NVIDIA TAO BYOM converter をインストールします。

    pip3 install nvidia-tao-byom

    PyTorch モデルを ONNX フォーマットに変換

    NVIDIA TAO BYOM converter は ONNX フォーマットに変換されたモデルを TAO のフォーマットに変換するため、まずONNX フォーマットに変換する必要があります。

    PyTorch に存在するモデルを取得して ONNX フォーマットに変換するため、関連するライブラリをインストールします。

    pip install torch torchvision segmentation_models_pytorch

    Segmentation_models.pytorch から提供される MobileNetv3 のモデルを ONNX フォーマットで出力します。

    python export_smp.py -m mobilenetv3_unet_scratch --shape 512 --activation softmax

    作成された mobilenetv3_unet_scratch.onnx を ONNX モデルの可視化ができる netron で確認します。localhost:8080 でブラウザーにアクセスして確認します。(ポート番號は他のアプリケーションが使用している場合は変更されます。)

    TAOでサポートしているレイヤーのみ ONNX 変換が可能です。サポートしているレイヤーはこちらを參照ください。この ONNX モデルの HardSigmoid はサポートされていないため、カスタム レイヤーが必要になります。

    netron onnx_models/mobilenetv3_unet_scratch.onnx

    サポートされていないレイヤーは Keras 実裝が必要です。

    ONNX のドキュメンテーションと PyTorch のドキュメンテーションを確認すると alpha 値が0.2 (ONNX) と 0.167 (PyTorch) で異なるため、ハードシグモイド関數を実裝する際に ONNX の値を設定する必要があります。Keras でレイヤーを実裝する際は official documentation を參考に実裝する必要があります。

    TAO BYOM に登録する変換関數

    mobilenetv3/user_generated_layer.py を用いて、ONNX ノードを Keras ノードに変換します。

    下記ステップで動作します。

    • ノードの必要な屬性と入力を全て取得する
    • ノードからの numpy 入力を TF テンソルに変換する
    • ノードに対応する Keras レイヤーを呼び出す
    • Keras レイヤーの出力を layers[node_name] に渡す
    • ラムダ関數やカスタム Keras レイヤーを使用している場合は、lambda_func[node_name] で指定する

    完了したら、mobilenetv3/custom_meta.json のファイル情報を更新します。

    ハードシグモイド関數は下記実裝を用います。

    ONNX モデルから TAO フォーマットへの変換

    mobilenetv3/custom_meta.json の ABS_TOP_DIR を下記のように修正する必要があります。

    ABS_TOP_DIR:"<Your path>/tao_byom_examples/semantic_segmentation/mobilenetv3"

    下記コマンドで ONNX モデルを TAO フォーマットに変換します。

    PYTHONPATH=${PWD} tao_byom -m onnx_models/mobilenetv3_unet_scratch.onnx -r results/mobilenetv3_unet_scratch -n mobilenetv3_unet_scratch_dagm -c mobilenetv3/custom_meta.json -k nvidia_tlt -p 531

    results/mobilenetv3_unet_scratch ディレクトリに.tltb フォーマットに変換されたモデルが保存されます。

    変換されたモデルの使用方法

    BYOM は畫像分類とセグメンテーションモデルの UNET のみ現在サポートしています。將來的に物體検出モデルも対応予定です。

    TAO でモデルを學習する際に Spec ファイルと呼ばれる設定ファイルを用います。この Spec ファイルはモデルのハイパーパラメータやデータのパスなどを指定します。Spec ファイルに関してはこちらを參照ください。

    変換したモデルを使用する際は Spec ファイルの arch を byom を設定し、byom_model に変換したモデルのパスを設定します。モデルのパスはローカルではなく Docker 內のパスを設定します。TAO は Docker を用いて動作しています。詳しくはこちらを參照ください。

    model_config {
      :
      arch: "byom"
      byom_model: <変換したモデルのパス>
      :
    }

    TensorBoard による可視化

    今回のアップデートでTensorBoardの可視化機能が追加されました。こちらのリンクで詳細確認できます。

    • Loss と精度が確認できるようになり、オーバーフィッティングを防ぎやすくなりました。
    • エポックごとの予測値を可視化することで學習を止めるタイミングを把握することができます。
    • 重みのヒストグラムを可視化できるようになりました。一般的に學習後のニューラル ネットワークの重みの絶対値は小さな値におさまり、ReLU 活性化関數によって 0 付近の値が多くなる傾向があります。ヒストグラムによってこの傾向を確認できます。この性質によって學習の収束を確認するのに有効な情報になります。また重みのヒストグラムによって適切な枝刈りの閾値設定の參考になります。

    Spec ファイルの training_config のセクションに下記設定を追加するだけで TensorBoard の可視化が有効になります。

    training_config {
      :
      visualizer{
    	enabled: true
      }
    }

    下記コマンドで TensorBoard を起動し、localhost:8080 でブラウザーにアクセスして確認します。$RESULTS_DIR は TAO の學習の際に指定する出力ディレクトリです。(ポート番號は他のアプリケーションが使用している場合は変更する必要があります。)

    tensorboard --logdir $RESULTS_DIR --host 0.0.0.0 --port 8080

    まとめ

    TAO Toolkit 3.22.05 アップデートで導入された BYOM と TensorBoard の可視化を紹介しました。

    BYOM により手持ちのモデルを TAO の枝刈りと量子化の恩恵により高速なモデルにすることが可能になり、學習時の狀態を TensorBoard によって確認できるようになりました。

    これらの機能がより高精度かつ高速な Deep Learning モデルの導入の助けになれば幸いです。

    その他の資料については、以下のリンクをご覧ください。

    +1

    Tags

    人人超碰97caoporen国产