【第1回:入力データの準備】TLT(Transfer Learning Toolkit)のチュートリアル

スポンサーリンク
【第1回_入力データの準備】TLT(Transfer Learning Toolkit)のチュートリアルAIを作ってみる

TLT(Transfer Learning Toolkit)の使い方について、チュートリアル形式で全6回にまとめました。

 

この記事を読んで分かること
  • TLT(Transfer Learning Toolkit)で使える入力データの構成
  • ラベルファイルの作成
  • KITTI形式からtfrecordsへの変換方法

 

以下環境で動作確認を行いました。

動作環境

  • Ubuntu18.04
  • GTX1080

 

TLT(Transfer Learning Toolkit)のチュートリアルに沿った内容を実践してみます。

TLTインストール後にサンプルファイルとして入っている

/notebooks/examples/detectnet_v2/detectnet_v2.ipynb

の内容となります。

環境変数の設定

まず、プログラムで使用する環境変数を設定します。

# Setting up env variables for cleaner command line commands. 
%env KEY="" 
%env USER_EXPERIMENT_DIR=/workspace/tlt-experiments/detectnet_v2 
%env DATA_DOWNLOAD_DIR=/workspace/tlt-experiments/data 
%env SPECS_DIR=/workspace/examples/detectnet_v2/specs 
%env NUM_GPUS=1

 

定義した変数には以下の意味があります。

  • KEY:NGCAPIキー
  • USER_EXPERIMENT_DIR:生成される結果の出力先ディレクトリ
  • DATA_DOWNLOAD_DIR:学習用データの格納ディレクトリ
  • SPECS_DIR:設定ファイルを配置したディレクトリ
  • NUM_GPUS:利用するGPUの数

NGCで提供されている学習済みのモデルを使用する場合に
は、モデルをロードするためにKEY(NGCAPIキー)が必要になります。

学習用画像の準備

KITTIファイル形式

TLTで利用する画像は以下のようなディレクトリ構成をしていないと使うことができません

data/  # $DATA_DOWNLOAD_DIR
  ├ training/
  │  ├ image_2/
  │  │  ├ 000000.png
  │  │  ├ 000001.png 
  │  │  ├   :
  │  ├ label_2/
  │  │  ├ 000000.txt
  │  │  ├ 000001.txt 
  │  │  ├   :
  ├ testing/
  │  ├ image_2/
  │  │  ├ 000000.png
  │  │  ├ 000001.png
  │  │  ├   :

 

今回の学習ではkittiデータセットを利用しています。

画像データラベルデータをそれぞれダウンロードし、zipファイルをDATA_DOWNLOAD_DIRに配置します。

データの格納を確認します。

#データ格納先を作成
!mkdir -p $DATA_DOWNLOAD_DIR
!if [ ! -f $DATA_DOWNLOAD_DIR/data_object_image_2.zip ]; then echo 'Image zip file not found, please download.'; else echo 'Found Image zip file.';fi
!if [ ! -f $DATA_DOWNLOAD_DIR/data_object_label_2.zip ]; then echo 'Label zip file not found, please download.'; else echo 'Found Labels zip file.';fiprint(deta)

zipファイルを解凍します。

!unzip -u $DATA_DOWNLOAD_DIR/data_object_image_2.zip -d $DATA_DOWNLOAD_DIR
!unzip -u $DATA_DOWNLOAD_DIR/data_object_label_2.zip -d $DATA_DOWNLOAD_DIRprint(deta)

データセット(訓練用画像、ラベル、テスト用画像)の枚数を確認します。

import os
DATA_DIR = os.environ.get('DATA_DOWNLOAD_DIR')
num_training_images = len(os.listdir(os.path.join(DATA_DIR, "training/image_2")))
num_training_labels = len(os.listdir(os.path.join(DATA_DIR, "training/label_2")))
num_testing_images = len(os.listdir(os.path.join(DATA_DIR, "testing/image_2")))
print("Number of images in the trainval set. {}".format(num_training_images))
print("Number of labels in the trainval set. {}".format(num_training_labels))
print("Number of images in the test set. {}".format(num_testing_images))

ラベルファイル

ラベルの中身を確認します。

!cat $DATA_DOWNLOAD_DIR/training/label_2/000110.txt

kitti形式のラベルは、オブジェクトごとに1行のラベルで表されます。

以下にサンプルを示します。

car 0.00 0 0.00 587.01 173.33 614.12 200.12 0.00 0.00 0.00 0.00 0.00 0.00 0.00
cyclist 0.00 0 0.00 665.45 160.00 717.93 217.99 0.00 0.00 0.00 0.00 0.00 0.00 0.00
pedestrian 0.00 0 0.00 423.17 173.67 433.17 224.03 0.00 0.00 0.00 0.00 0.00 0.00 0.00

ラベルは15個のパラメータで構成されています。

kitti形式のパラメータ
出典元:nvidia公式サイト 

 

TLTの物体検出に利用されるのは以下の5つのパラメータのみのため、使われないパラメータは0として問題ありません

  • クラス名
  • バウンディングボックスの座標:[xmin、ymin、xmax、ymax]

kitti形式からtfrecordsファイルを作成する

TLTでの学習はtfrecords形式のファイルで行うため、kitti形式からtfrecordsへの変換を行う必要があります

変換には「tlt-dataset-convert」を使用します。

tlt-dataset-convertの設定ファイル

tlt-dataset-convert用のconfigファイルを確認していきましょう。

!cat $SPECS_DIR/detectnet_v2_tfrecords_kitti_trainval.txt

コンフィグファイルの中身です。

 

kitti_config {
  root_directory_path: "/workspace/tlt-experiments/data/training"
  image_dir_name: "image_2"
  label_dir_name: "label_2"
  image_extension: ".png"
  partition_mode: "random"
  num_partitions: 2
  val_split: 14
  num_shards: 10
}
image_directory_path: "/workspace/tlt-experiments/data/training"

コンフィグのパラメータは以下の構成となっています。

kitti→tfrecords変換コンフィグのパラメータ

出典元:nvidia公式サイト 

image_directory_pathは内容が重複していますが、必ずroot_directory_pathと同じ値を指定しないといけないようです。

 

tlt-dataset-convertを使った変換

tlt-dataset-convertを使ってkitti形式からtfrecordsに変換します。

!tlt-dataset-convert -d $SPECS_DIR/detectnet_v2_tfrecords_kitti_trainval.txt \
                     -o $DATA_DOWNLOAD_DIR/tfrecords/kitti_trainval/kitti_trainval

使用した引数の意味は以下のようになっています。

 

  • -d : コンフィグのパス
  • -o : 出力ファイル名

出力されたtfrecordsを確認してみましょう。

!ls -rlt $DATA_DOWNLOAD_DIR/tfrecords/kitti_trainval/

 

このようにファイルが作成されていることが確認できます。

├ data/  # $DATA_DOWNLOAD_DIR
   ├ tfrecords/
      ├ kitti_trainval/
         ├ kitti_trainval-fold-000-of-002-shard-00000-of-00010
         ├ kitti_trainval-fold-000-of-002-shard-00001-of-00010 
         ├   :

 

まとめ

TLT(Transfer Learning Toolkit)の入力データ構造について説明しました。

入力データはKITTI形式である必要があり、所定のディレクトリ構成とラベルファイルを用意しました。

実際に学習に使用するのはtfrecordsであり、KITTI形式からtfrecordsに変換するために、tlt-dataset-convertを使用しました。

 

次回の記事はこちら

【第2回:事前学習モデルの入手】TLT(Transfer Learning Toolkit)のチュートリアル
TLT(Transfer Learning Toolkit)の使い方について、チュートリアル形式で全6回にまとめました。 第1回:入力データの準備 第2回:事前学習モデルの入手  ←★今ここ 第3回:学習コンフィグの作...

コメント

タイトルとURLをコピーしました