Jetson TX2にJetPack4.2を⼊れてTensorRT5のCaffe-SSDを試してみた

Jetson TX2にJetPack4.2を⼊れてみた

概要

JetPack4.2がリリースされたのでさっそくJetson TX2に⼊れてみました。
TensorRT5でCaffe-SSDのサンプルが用意されたそうなので、JetPack4.2をインストールし、TensorRTを用いてCaffe-SSDを動かすところまで試してみたいと思います。

TensorRT: JetPack 4.2 Highlights

  • TRT Python API
    • Enables all the TRT Python samples, e.g., YOLO
  • TF-TRT included in monthly TensorFlow for JetPack releases
  • DLA support for FP16 — AlexNet, GoogleNet, ResNet-50, and LeNet for MNIST networks have been validated
  • Support for both HMMA (FP16) and IMMA (INT8) on iGPU
  • Fine grain control for scheduling layers to execute on either iGPU or DLA
  • New Caffe SSD and INT8 API samples

JetPack4.2のダウンロード&インストール

  1. Jetson Download CenterからNVIDIA SDK Managerをダウンロードします(オレンジ枠参照)。
    download
    JetPack4.1.1までは⻘⾊枠内で「JetPack」を探し、ダウンロードしていましたが、JetPack4.2からはこの「NVIDIA SDK Manager」たるものからインストールできるみたいですね。
  2. NVIDIA SDK Managerのインストール

ダウンロードした「sdkmanager_x.x.xx-xxxx_amd64.deb」をインストールします。

$ sudo dpkg -i ~/Download/sdkmanager_x.x.xx-xxxx_amd64.deb
  • NVIDIA SDK Managerを実⾏します。
    screen1
    おっ︖
    screen2
    めちゃめちゃ格好良くなっていますね︕
    選択できる⼤まかな内容は今まで通りのようです。
  • 必要な機能をインストールします。
    screen3
    なんだか選択できる粒度が荒くなっているような?
    screen4
    しばらくコーヒータイムです。(プログレス表⽰もいい感じですね)
  • Jetson TX2にJetPack4.2のOSをインストール
  • こちらも今まで通り、USBを接続し、リカバリーモードにてインストールします。
    ※ 追加でパッケージをインストールする際は、USB接続だけでできるようです。

TensorRT5でCaffe-SSDを実⾏してみる

Jetson TX2上の/usr/src/tensorrt にTensorRTのソースコードが格納されています。

  1. Caffe SSD学習済みモデル+ネットワーク定義ファイルをダウンロード
    • すでに⽤意されているモデルを⽤いて検証してみます。
    • 「models_VGGNet_VOC0712_SSD_300x300.tar.gz」をこちらからダウンロードします。
  2. deploy.prototxtおよび、caffemodelをTensorRTのdataディレクトリにコピーします。
    $ tar zxvf models_VGGNet_VOC0712_SSD_300x300.tar.gz
    $ sudo cp models/VGGNet/VOC0712/SSD_300x300/{deploy.prototxt,VGG_VOC0712_SSD_300x300_iter_120000.caffemodel} /usr/src/tensorrt/data/ssd/
    $ # deploy.prototxtをrenameします。
    $ cd /usr/src/tensorrt/data/ssd
    $ sudo mv deploy.prototxt ssd.prototxt
    
  3. 「ssd.prototxt」の中⾝をTensorRTの仕様に合わせます。
    1. FlattenレイヤをReshapeレイヤに変更する
      # 変更前
      layer {
          name: "xxxxxxxxxxxxxx_flat"
          type: "Flatten"
          bottom: "xxxxxxxxxxxxxxx_perm"
          top: "xxxxxxxxxxxxxx_flat"
          flatten_param {
              axis: 1
          }
      }
      # 変更後
      layer {
          name: "xxxxxxxxxxxxxx_flat"
          type: "Reshape"
          bottom: "xxxxxxxxxxxxxxx_perm"
          top: "xxxxxxxxxxxxxx_flat"
          reshape_param {
              shape {
                  dim: 0
                  dim: -1
                  dim: 1
                  dim: 1
              }
          }
      }
      # ↑は最低限の変更のみ。
      
    2. detection_outレイヤの出⼒にkeep_countを追加する
      layer {
          name: "detection_out"
          type: "DetectionOutput"
          bottom: "mbox_loc"
          bottom: "mbox_conf_flatten"
          bottom: "mbox_priorbox"
          top: "detection_out"
          top: "keep_count" # ←追加
          ...
          ...
      }
      
  4. sampleSSDをビルド&実⾏
    # ビルド
    $ cd /usr/src/tensorrt/samples/sampleSSD
    $ sudo make
    # 実⾏
    $ cd /usr/src/tensorrt/
    $ sudo ./bin/sample_ssd
    

    実⾏後、矩形描画された画像が出⼒されます。
    car-0.960588

Jetson TX2におけるTensorRT5のCaffe-SSDサンプル速度⽐較

ざっくりとまとめ

  • TensorRT化することで、倍速以上の速度を実現しました。
  • FP16にすることによる精度の影響は感じられませんでした。
table
tensorrt5_ssd

さいごに

Caffe-SSDを使⽤している⼈はぜひ活⽤してみてください。