SSD (Single Shot Multibox Detector) - 1.1 Japanese

Vitis AI オプティマイザー ユーザー ガイド (UG1333)

Document ID
UG1333
Release Date
2020-03-23
Version
1.1 Japanese

ベースライン モデル

SSD (https://arxiv.org/abs/1512.02325) は、画像内のオブジェクトを検出するためのディープ ニューラル ネットワークです。この例では、モデルのバックボーンとして VGG16 を使用しています。

コンフィギュレーション ファイルを作成する

config.prototxt という名前のファイルを作成します。

workspace: "examples/decent_p/ssd/"
 
model: "examples/decent_p/ssd/float.prototxt"
weights: "examples/decent_p/ssd/float.caffemodel"
solver: "examples/decent_p/ssd/solver.prototxt"
 
gpu: "0,1,2,3"
test_iter: 10
acc_name: "detection_eval" 
ssd_ap_version: "11point"
 
rate: 0.15
 
pruner {
  method: REGULAR
 
  exclude {
    layer_top:
      "conv4_3_norm_mbox_loc"
    layer_top:
      "conv4_3_norm_mbox_conf"
    layer_top: "fc7_mbox_loc"
    layer_top: "fc7_mbox_conf"
    layer_top:
      "conv6_2_mbox_loc"
    layer_top:
      "conv6_2_mbox_conf"
    layer_top:
      "conv7_2_mbox_loc"
    layer_top:
      "conv7_2_mbox_conf"
    layer_top:
      "conv8_2_mbox_loc"
layer_top:
      "conv8_2_mbox_conf"
layer_top:
      "conv9_2_mbox_loc"
    layer_top:
      "conv9_2_mbox_conf"
}
}

SSD ネットワークの性質上、一部のたたみ込み層のフィルター数は固定する必要があるため、これらのレイヤーはプルーニングから除外します。上記の例では、「exclude」セクションに除外するレイヤー トップの名前を指定しています。通常、たたみ込み層はラベルを使用して直接計算すると、プルーニングできません。たとえば、ラベルを使用してたたみ込み層の出力を計算して top-5 の精度を得る必要がある場合、プルーニングから除外します。ラベルのクラス数は固定されているため、このたたみ込み層の出力サイズがラベルと一致していることを確認する必要があります。

モデル解析を実行する

$ ./vai_p_caffe ana –config config.prototxt

モデルをプルーニングする

$ ./vai_p_caffe prune –config config.prototxt

プルーニング済みモデルを微調整する

微調整の初期パラメーターとして、次のソルバー設定を使用できます。

net: "float.prototxt"
test_iter: 229
test_interval: 500
base_lr: 0.001
display: 10
max_iter: 120000
lr_policy: "multistep"
gamma: 0.1
momentum: 0.9
weight_decay: 0.0005
snapshot: 500
snapshot_prefix: "SSD_"
solver_mode: GPU
device_id: 4
debug_info: false
snapshot_after_train: true
test_initialization: false
average_loss: 10
stepvalue: 80000
stepvalue: 100000
stepvalue: 120000
iter_size: 1
type: "SGD"
eval_type: "detection"
ap_version: "11point"
$ ./vai_p_caffe finetune -config config.prototxt

推定所要時間: Cityscapes の学習用データセットを使用した場合、650 エポックで約 50 時間 (2975 画像、4 x NVIDIA Tesla V100)。

最終出力を生成する

モデルを完成させるには、次を実行します。

$ ./vai_p_caffe transform –model baseline.prototxt –weights finetuned_model.caffemodel -output
final.caffemodel

プルーニングの結果

データセット
Cityscapes (4 クラス)
入力サイズ
500 x 500
GPU プラットフォーム
4 x NVIDIA Tesla V100
FLOPs
173G
パラメーター数
24M
表 1. SSD のプルーニング結果
丸め処理 FLOPs パラメーター mAP
0 100% 100% 0.571
1 50% 29% 0.587
2 9.7% 9.7% 0.559