AIモデル変換ツール:Caffe編

AIモデル変換ツール:Caffe編

 

環境構築


環境構築手順はこちらをご参照ください。

以下の環境設定はCVツールのコンテナを起動後、毎回実施する必要がありますので、ご注意ください。

  • ambaCV2Xカメラ向けの設定

$ cd /home/cvtool $ source setup_env.sh
  • ambaCV5Xカメラ向けの設定

$ cd /home/cvtool $ source setup_env.sh ipro-ambaCV5X

 

サンプルモデルの変換


ディレクトリを移動します。

$ cd /home/cvtool/conversion/caffe

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

$ wget https://github.com/shicai/MobileNet-Caffe/raw/master/mobilenet.caffemodel $ mv mobilenet.caffemodel sample/mobilenet_v1/models

モデル変換を実行します。

$ ./caffe_conversion.sh setting.conf

 

変換後のモデルは以下のディレクトリに出力されます。

  • ambaCV2Xカメラ用のモデル

${OUTPUT_DIR}/${NET_NAME}/${PARSER_OPTION}/[モデル名]

  • ambaCV5Xカメラ用のモデル

${OUTPUT_DIR}/${NET_NAME}_ambaCV5X/${PARSER_OPTION}/[モデル名]


モデルを変換する


  1. /home/cvtool/conversion/caffeをコピーしてください。

$ cd /home/cvtool/conversion $ cp -r caffe foo $ cd foo
  1. setting.conf を、変換するモデルに合わせて変更してください。

  2. モデル変換を実行します。

$ ./caffe_conversion.sh setting.conf

 

setting.conf仕様


v1.19 まで setting.conf にあった CAVALRY_VERを、v1.20 から削除しています。
v1.19 以前の setting.conf を v1.20以降の cvtool で使用する際は、setting.conf から CAVALRY_VER を削除してください。

# Network Name NET_NAME=mobilenetv1 # Path to Deploy Prototxt DEPLOY_PROTOTXT=./sample/mobilenet_v1/mobilenet_deploy.prototxt # Path to Directory for (Deploy) Caffe Models MODEL_DIR=./sample/mobilenet_v1/models # Path to Directory for DRA Images DRA_IMAGE_DIR=../dra_img # Path to Directory for Output Data OUTPUT_DIR=./out # Quantization Mode # FIX8 : Fixed-point 8bit # FIX16 : Fixed-point 16bit # MIX : FIX8/FIX16 mixed PARSER_OPTION=FIX8 # Input Data Format (0:NHWC, 1:NCHW) IN_DATA_FORMAT=1 # Input Data Channel IN_DATA_CHANNEL=3 # Input Data Width IN_DATA_WIDTH=224 # Input Data Height IN_DATA_HEIGHT=224 # Input Data Mean Vector or Name of .binaryproto IN_MEAN=103.94,116.78,123.68 # Input Data Scale # IN_SCALE=1/Scale IN_SCALE=58.823529411 # RGB or BGR (0:RGB, 1:BGR) IS_BGR=1 # Input Layer Name IN_LAYER=data # Output Layers Name OUT_LAYER=mbox_loc,mbox_conf_flatten # Unique preprocess # if use im2bin -> NONE # if use unique preprocess -> script path PREPRO=NONE PREPRO_ARG="" # Input file data format IN_DATA_FILEFORMAT=0,0,0,0 # Transpose indices(NONE:without transpose , 0,3,1,2:transpose (EX)) IN_DATA_TRANSPOSE=NONE
  • NET_NAME:ネットワーク名

    • 任意の名前を設定できます。

  • DEPLOY_PROTOTXT:deploy用prototxtファイルへのパス

  • MODEL_DIR:caffemodelが格納されたディレクトリ

    • ディレクトリ下の全てのモデルに対して、変換処理を実行します。

  • DRA_IMAGE_DIR:量子化の最適化処理で使用する、画像ファイルが格納されたディレクトリ

    • 学習に使った画像を格納してください。100~200枚が推奨枚数です。

    • 画像フォーマットはJPEGやPNGなど、OpenCVで対応しているものです。

    • 任意サイズの画像を使用可能です。

  • OUTPUT_DIR:変換後のデータ出力先ディレクトリ

  • PARSER_OPTION:量子化モード

    • FIX8/FIX16/MIX(FIX8/FIX16混合)から選択します。

  • IN_DATA_CHANNEL:モデルの入力画像チャネル数

  • N_DATA_WIDTH:モデルの入力画像サイズ(幅)

  • IN_DATA_HEIGHT:モデルの入力画像サイズ(高さ)

  • IN_MEAN:入力画像の正規化パラメータ(平均値)

    • 数値またはbinaryprotoファイルでの設定が可能です。

    • 数値で設定する場合には、以下のように”,”の間に空白を入れないようにしてください。
      IN_MEAN=127.5,127.5,127.5

    • binaryprotoファイルで設定する場合には、以下のようにファイルへのパスを設定してください。
      IN_MEAN=./model/mean.binaryproto

  • IN_SCALE:入力画像の正規化パラメータ(スケール)

    • チャネルごとに異なる設定値にする場合は、”,”で値を区切ってください。”,”の間には空白を入れないようにしてください。

  • IS_BGR:入力画像のフォーマット(RGB or BGR)

  • IN_LAYER:ネットワークの入力レイヤ名

    • 変換後のモデルでは入力レイヤ名が “${IN_LAYER}_0” に変わります。
      したがって追加アプリ上で変換後のモデルを動かす際も、モデルの入力レイヤとして “_0” を付ける必要があります。

    • 以下の記号が入力レイヤ名に含まれている場合、正常に変換できない可能性があります。
      : | ; , ‘

  • OUT_LAYER:ネットワークの出力レイヤ名

    • 複数指定する場合は”,”で区切ってください

    • 以下の記号が出力レイヤ名に含まれている場合、正常に変換できない可能性があります。
      : | ; , ‘

  • PREPRO:前処理スクリプトパス(python)

    • スクリプトの作り方は“/home/cvtool/common/prepro.py”を参照してください。

  • PREPRO_ARG:前処理スクリプトの引数

  • IN_DATA_FILEFORMAT:入力データのフォーマット

    • 例:uint8->0,0,0,0, float32->1,2,0,7, float16->1,1,0,4)

    • IN_DATA_FILEFORMAT を”0,0,0,0”から変更した場合はPREPROの設定が必要になります。

  • IN_DATA_TRANSPOSE:入力データに対してTRANSPOSE を行う場合指定する


deploy用のprototxtでinputレイヤが定義されていない場合は、以下のようにレイヤを追加してください。