COLUMN
【Vol.7】はじめよう!エッジAI~NVIDIA® Transfer Learning Toolkit~学習検討編(1)
★そもそも「エッジAIってなに?」という方にはこちらのコラムをおすすめします。
Vol.1は以下です。
※【Vol.1】はじめよう!エッジAI~エッジである必要性と最適な環境構築~
Vol.2は以下です。
※【Vol.2】はじめよう!エッジAI~NVIDIA® 開発者キットのインストール~
Vol3は以下です。
※【Vol.3】はじめよう!エッジAI~JetsonでNVIDIA®DeepStream SDK~
Vo4は以下です。
※【Vol.4】はじめよう!エッジAI~NVIDIA® Transfer Learning Toolkit~
Vol5は以下です。
※【Vol.5】はじめよう!エッジAI~NVIDIA® Transfer Learning Toolkit~ 環境構築編(その1)
Vol6は以下です。
※【Vol.6】はじめよう!エッジAI~NVIDIA® Transfer Learning Toolkit~ 環境構築編(その2)
今回は、前回に引き続き、NVIDIA® Transfer Learning Toolkit(以下、TLT)の学習検討を行ってまいります。(Pretrainedモデルのダウンロードは今回行っておきます。)
【検討①】 モデルアーキテクチャの選定
以前もご紹介しましたが、下記が対応しているモデルアーキテクチャです。
今回は、YOLOV3をターゲットに進めることを検討します。
下記コマンドで、現在動作させているコンテナのIDを調べます。
$ sudo docker ps
下記コマンドで、コンテナに入ります。
$ sudo docker exec -i -t <コンテナID> /bin/bash
Pretrainedモデルのダウンロード
下記コマンドで、Pretrainedモデルを調べます。
$ ngc registry model list nvidia/tlt_pretrained_*
TLT Image Classification/TLT Object Detection/TLT DetectNet V2 Detection
の3種類が出力されるかと思います。
YOLOV3の場合は、「TLT object detection」を利用するようです。
下記、コマンドにて、Pretrainedモデルをダウンロードするディレクトリを作成した後、Pretrainedモデルをダウンロードします。
$ mkdir -p download/objectdetection/
$ cd download/objectdetection/
$ ngc registry model download-version nvidia/tlt_pretrained_object_detection ‐‐dest ./
No version specified, downloading latest version: ‘cspdarknet19’.
Downloaded 58.11 MB in 11s, Download speed: 5.27 MB/s
—————————————————-
Transfer id: tlt_pretrained_object_detection_vcspdarknet19 Download status: Completed.
Downloaded local path: /workspace/download/objectdetection/tlt_pretrained_object_detection_vcspdarknet19
Total files downloaded: 1
Total downloaded size: 58.11 MB
Started at: 2021-02-05 05:52:35.490296
Completed at: 2021-02-05 05:52:46.507698
Duration taken: 11s
—————————————————-
【検討②】 データセットの準備
データセットの準備では、Augmentorツールを使ってデータの水増しを行い、学習時の入力データ構造の準備を行います。
データの水増しは、空間拡張構成(rotation、filp,translation,shear)・色拡張構成(hue_saturation、contrast、brightness)・ぼかし設定等が可能で、Augmentor Toolを利用してデータの水増しが可能です。
学習時のデータ構成はKITTI file format形式で準備する必要があり、objectdetection系の場合は、下記のフォルダ構成に学習対象のファイルを格納します。
.
|‐‐dataset root
|‐‐ images
|‐‐ 000000.jpg
|‐‐ 000001.jpg
.
.
|‐‐ xxxxxx.jpg
|‐‐ labels
|‐‐ 000000.txt
|‐‐ 000001.txt
.
.
|‐‐ xxxxxx.txt
|‐‐ kitti_seq_to_map.json
Labelファイルは、KITTIフォーマット形式のため下記のアノテーションツールを利用することにより、手軽にKITTIフォーマットでアノテーションが行えそうです。
https://github.com/SaiPrajwal95/annotate-to-KITTI
その後、TFRecoreds形式に変更する必要があり、Dataset Converter Toolを利用することにより、変換可能です。
【検討③】 TLTでのトレーニング
YOLOV3用のトレーニング用のコマンドが用意されており、今まで用意したファイルを参照して、学習が可能な様です。
【検討④】 学習後の評価
KITTIファイルフォーマットにて学習後の推論評価用のコマンドがあるので、これを利用することにより、学習後の評価が可能な様です。
【検討⑤】 剪定(Option)
モデルを小さくするために、学習済みモデルの剪定コマンドが用意されています。
精度の低下は起こる可能性がありますが、興味深いコマンドです。
【検討⑥】 モデルのエクスポート
「【Vol.3】はじめよう!エッジAI~JetsonでNVIDIA®DeepStream SDK~」で紹介させて頂いた、DeepStreamSDKへモデルをエクスポート可能です。
FP16/F32や、INT8へ量子化を行い、DeepStreamSDKへエクスポートできます。
今までは、量子化を行う場合はTensorRTの理解が必要なケースがありましたが、容易に量子化が行える期待が持てます。
DeepStreamSDKはJetsonで動作しますので、この手法にて、Jetsonへモデルをエクスポートします。
次回以降は、データセットの準備、トレーニング、学習後の評価、剪定、DeepSteramSDKへのモデルのエクスポートや量子化とJetsonへの実装を進めて行きます。
※本コラムに記載されている社名および製品名などの固有名詞は、各社の商標または登録商標です。
※各ツールのライセンスや購入に関しては、代理店・メーカにお問い合わせください。
※本コラムは、弊社が実際に開発をした中での経験より構成しております。本内容に準じて実施した結果については、本内容に準じて実施した結果に生じるいかなる影響、損害に関して、責任の無いものといたします。本コラムで紹介しておりますツールについては、合法性、正確性、道徳性、最新性、適切性、著作権の許諾や有無など、その内容については、何らの責任を負うものではありません。また、当社は通知することなく当サイトに掲載した情報の訂正、修正、追加、中断、削除等をいつでも行うことができるものとします。コンテンツのご利用により、万一、ご利用者様に何らかの不都合や損害が発生したとしても、当社は何らの責任を負うものではありません。
富士ソフトがおすすめ!!
個別相談も承っております。下記よりお申し込みください。