【交通検出モデル】DashCamNetをTLT(Transfer Learning Toolkit)で動かしてみた

スポンサーリンク
【交通検出モデル】DashCamNetをTLT(Transfer Learning Toolkit)で動かしてみたAIでやってみた
この記事を読んで分かること
  • NGCから学習済みモデルをダウンロードする方法
  • 交通物体検出モデル(DashCamNet)の動かし方

 

 

NGC(NVIDIA GPU CLOUD)で提供されているTLT(Transfer Learning Toolkit)の学習済みモデルを使ってみました。

今回はDashCamNetモデルを使って交通に関する物体を検出しています。

 

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

動作環境

  • Ubuntu18.04
  • GTX2080
  • Nvidia Driver 450.102.04
  • CUDA 11.0

 

TLTの環境構築手順は以下の記事にまとまっています。

TLT(Transfer Learning Toolkit)環境の作り方
以下環境で動作確認を行いました。 実行環境 Ubuntu18.04 RTX3070 Nvidia-driver 460.91 Docker 20.10.8 PC(Ubuntu)...

 

DashCamNetモデルの概要

DashCamNetモデルは交通に関する物体を検出するように事前学習されたDeepLeraningのモデルで、NGC(NVIDIA GPU CLOUD)からダウンロードすることができます。

車、人、道路標識、二輪車を検出するモデルとなります。

このモデルは、走行する車のダッシュボードから撮影されたデータを元に作られているため、視点が移動するようなアプリケーションに使用されることが考えられます。

 

モデルの概要は以下の通りです。

 
モデルタイプ検出型
ラベル4クラス

  • car
  • persons
  • road signs
  • bicycles
入力544X 960 X 3
出力検出した物体をバウンディングボックスで囲む
モデルの構造NVIDIADetectNet_v2
ResNet18
モデルロードキーnvidia_tlt

 

ディレクトリ構成

以下のディレクトリ構成で推論を行いました。

├ data/ 
   ├ traffic/ # $DATA_DOWNLOAD_DIR
├ LPDNet/
   ├ infer_pretrained_model_DashCamNet.ipynb # 実行するソースコード 
   ├ specs/ # $SPECS_DIR
   │  ├ DashCamNet_inference_tlt.txt # 推論に関する設定ファイル
   ├ tlt-experiments/ # $USER_EXPERIMENT_DIR
   │  ├ pretrained_DashCamNet # 学習済みモデル
   │  ├ DashCamNet_inference_tlt.txt # 推論結果出力先

 

推論用のコンフィグファイルを作成

TLTでの推論にはコンフィグファイルが必要になるので、予め作っておきましょう。

今回作ったファイル(DashCamNet_inference_tlt.txt)はこちらです。

inferencer_config{
  # defining target class names for the experiment.
  # Note: This must be mentioned in order of the networks classes.
  target_classes: "Car"
  target_classes: "Bicycle"
  target_classes: "Person"
  target_classes: "Roadsign"
  # Inference dimensions.
  image_width: 544
  image_height: 960
  # Must match what the model was trained for.
  image_channels: 3
  batch_size: 16
  gpu_index: 0
  # model handler config
  tlt_config{
    model: "/workspace/work/git/DeepLearning/tlt/DashCamNet/tlt-experiments/pretrained_DashCamNet/tlt_dashcamnet_vunpruned_v1.0/resnet18_dashcamnet.tlt"
  }
}
bbox_handler_config{
  kitti_dump: true
  disable_overlay: false
  overlay_linewidth: 2
  classwise_bbox_handler_config{
    key:"Car"
    value: {
      confidence_model: "aggregate_cov"
      output_map: "Car"
      bbox_color{
        R: 0
        G: 255
        B: 0
      }
      clustering_config{
        coverage_threshold: 0.005
        dbscan_eps: 0.3
        dbscan_min_samples: 0.05
        minimum_bounding_box_height: 4
      }
    }
  }
  classwise_bbox_handler_config{
    key:"Bicycle"
    value: {
      confidence_model: "aggregate_cov"
      output_map: "Bicycle"
      bbox_color{
        R: 0
        G: 255
        B: 255
      }
      clustering_config{
        coverage_threshold: 0.005
        dbscan_eps: 0.3
        dbscan_min_samples: 0.05
        minimum_bounding_box_height: 4
      }
    }
  }
  classwise_bbox_handler_config{
    key:"Person"
    value: {
      confidence_model: "aggregate_cov"
      output_map: "Person"
      bbox_color{
        R: 255
        G: 0
        B: 0
      }
      clustering_config{
        coverage_threshold: 0.005
        dbscan_eps: 0.3
        dbscan_min_samples: 0.05
        minimum_bounding_box_height: 4
      }
    }
  }
  classwise_bbox_handler_config{
    key:"Roadsign"
    value: {
      confidence_model: "aggregate_cov"
      output_map: "Roadsign"
      bbox_color{
        R: 0
        G: 0
        B: 255
      }
      clustering_config{
        coverage_threshold: 0.005
        dbscan_eps: 0.3
        dbscan_min_samples: 0.05
        minimum_bounding_box_height: 4
      }
    }
  }
  classwise_bbox_handler_config{
    key:"default"
    value: {
      confidence_model: "aggregate_cov"
      bbox_color{
        R: 255
        G: 0
        B: 0
      }
      clustering_config{
        coverage_threshold: 0.5
        dbscan_eps: 0.3
        dbscan_min_samples: 0.05
        minimum_bounding_box_height: 4
      }
    }
  }
}

 

各パラメータの意味については以下の記事にまとめてあります。

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

 

検出をやってみる

それではLPDNetDashCamNetモデルを使って顔検出をしてみましょう。

環境変数の設定

まずは環境変数を設定をします。

%env KEY=tlt_encode
%env USER_EXPERIMENT_DIR=/workspace/work/git/DeepLearning/tlt/DashCamNet/tlt-experiments
%env DATA_DOWNLOAD_DIR=/workspace/work/data/traffic
%env SPECS_DIR=/workspace/work/git/DeepLearning/tlt/DashCamNet/specs
%env NUM_GPUS=1

 

 

 

変数はそれぞれ以下の意味を持ちます。

  • KEY : モデルロードキー
  • USER_EXPERIMENT_DIR : 生成ファイルの出力先
  • DATA_DOWNLOAD_DIR : 画像データの配置場所
  • SPECS_DIR : 設定ファイルの配置場所

 

model_nameはディレクトリの命名に使うために作成した変数なので、重要な意味はありません。

 

モデルをダウンロードする

学習済みモデルのDashCamNetをダウンロードします。

まずはtltのモデル一覧を表示します。

# ダウンロードできるモデルの一覧を表示
!ngc registry model list nvidia/tlt_*

 

facenetを見つけたので、モデルのバージョン一覧を表示します。

# ダウンロードできるモデルのバージョン一覧を表示
!ngc registry model list nvidia/tlt_dashcamnet:*

 

ダウンロード先のディレクトリを作成しておきます。

# 学習済みモデルのダウンロード先を作成
!mkdir -p $USER_EXPERIMENT_DIR/pretrained_DashCamNet/

 

モデルをダウンロードします。

!ngc registry model download-version nvidia/tlt_facenet:trainable_v1.0 \
    --dest $USER_EXPERIMENT_DIR/pretrained_facedetect/

 

 

モデルがちゃんとダウンロードできていることを確認しましょう。

# ダウンロードしたモデルの確認
!ls -rlt $USER_EXPERIMENT_DIR/pretrained_DashCamNet/

 

tlt_dashcamnet_vunpruned_v1.0ディレクトリ配下にモデルファイルであるresnet18_dashcamnet.tltがダウンロードできていることが確認できました。

resnet18_dashcamnet.tlt

 

 

推論の実行

推論したい画像ファイルを $DATA_DOWNLOAD_DIR/の中に入れておきましょう。

まずはテストデータを確認します。

# テストデータの確認
! ls $DATA_DOWNLOAD_DIR/

 

 

テストデータがあることを確認したら、いよいよ推論です。

# 推論の実行
!tlt-infer detectnet_v2 -e $SPECS_DIR/lpdnet_inference_tlt.txt \
                        -o $USER_EXPERIMENT_DIR/tlt_infer_$model_name \
                        -i $DATA_DOWNLOAD_DIR/ \
                        -k $KEY

推論が完了したらImference completeと表示されます。

 

[INFO] iva.detectnet_v2.scripts.inference: Inference complete

 

出力結果は2種類作成されます。

  • images_annotated : 検出枠のついた画像
  • labels : 検出枠の座標データ

 

ちゃんとファイルが作られていることを確認します。

## 出力の確認
!ls $USER_EXPERIMENT_DIR/tlt_infer_DashCamNet
!ls $USER_EXPERIMENT_DIR/tlt_infer_DashCamNet/images_annotated

検出枠が正しく表示されていることも確認しておきましょう。

まずは指定した画像を表示する関数を作成します。

# Simple grid visualizer
%matplotlib inline
import matplotlib.pyplot as plt
import os
from math import ceil
valid_image_ext = ['.jpg', '.png', '.jpeg', '.ppm']

def visualize_images(image_dir, num_cols=4, num_images=10):
    output_path = os.path.join(os.environ['USER_EXPERIMENT_DIR'], image_dir)
    num_rows = int(ceil(float(num_images) / float(num_cols)))
    f, axarr = plt.subplots(num_rows, num_cols, figsize=[80,40])
    f.tight_layout()
    a = [os.path.join(output_path, image) for image in os.listdir(output_path) 
         if os.path.splitext(image)[1].lower() in valid_image_ext]
    for idx, img_path in enumerate(a[:num_images]):
        col_id = idx % num_cols
        row_id = idx // num_cols
        img = plt.imread(img_path)
        axarr[row_id, col_id].imshow(img)

 

検出結果を12枚表示してみます。

OUTPUT_PATH = 'tlt_infer_DashCamNet/images_annotated' 
COLS = 3 # number of columns in the visualizer grid.
IMAGES = 12 # number of images to visualize.

visualize_images(OUTPUT_PATH, num_cols=COLS, num_images=IMAGES)

 

今回は車の写真をテストデータとして使用しました

見逃しやご検出はありますが車、標識、人、自転車をきちんと検出できています。

交通検出1

 

交通検出2

 

まとめ

NGC(NVIDIA GPU CLOUD)で提供されている学習済みの交通物体検出モデルを使ってみました。

運転手視点のモデルなので、ドライブレコーダーのデータの分析等に使うことができそうです。

提供されているモデルはある程度の精度は担保されていて、動かすだけなのでとりあえずAIを動かしてみたい人には便利ですね。

あらゆる企業から学習済みモデルは沢山公開されているので、ぜひ使ってみてください。

コメント

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