コンテンツにスキップ

コンバート系

各種フレームワークからモデルファイルをSoftNeuroで扱えるDNN形式にコンバートするコマンドです。

preprocess, postprocessについて

SoftNeuroV4から、preprocess, postprocessはmainネットワークの前後に接続されている preprocess, postprocessのネットワークで行われるようになりました。
これらのネットワークの情報はDNNファイルに保存されるので、io_paramsのファイルは不要となりました。
モデルファイルに含まれないpreprocess, postprocessを追加する場合はプリセットのjsonファイルを converterに与える必要があります。
プリセットに存在しない順序・設定のpreprocess, postprocessを追加する場合はプリセットのjsonファイルを 書き換えて利用する必要があります。

現時点で preprocess, postprocess を追加するオプションは import-onnx, import-tensorflow でのみ利用可能で、 import-ver3 では未対応です。

preprocess記述仕様

preprocessでは画像のリサイズ、リサイズ方式の指定、色空間の指定、データの正規化などを行います。 preprocess内の各要素に関する説明を下記に記載します。

layers

各レイヤは、レイヤのタイプ、パラメータ、ウェイト、アトリビュートの4つの要素から構成されます。

Properties Required Description Type Example
type 必須 レイヤの種類を指定する文字列。source, sink, madd, permute 等が指定可能。 String "madd"
params オプション レイヤのパラメータを指定する JSON オブジェクト。 Object 記述例
weights オプション レイヤのウェイトを指定する JSON オブジェクト。 Object 記述例
attrs オプション レイヤの付加情報を指定する JSON オブジェクト。 Object 記述例
Source Layer

ネットワークの入力レイヤ。

  • params
Properties Required Description Type Example
shape 必須 入力データの次元数を指定する整数配列。 Array of Integer [224, 224, 3]
  • weights: None
  • attrs
Properties Required Description Type Example
format オプション 入力画像の色フォーマットを指定する文字列。"rgb" のみ指定可能。 String "rgb"
resize_mode オプション リサイズ方式を指定する文字列。"bilinear" (デフォルト) と "nearest" を指定可。 String "bilinear"
keep_ar オプション 画像縮小の際アスペクト比を維持するかを指定する真偽値。(デフォルト false) Boolean true
padding_color オプション アスペクト比を維持した縮小の際に生じる空間を埋めるパディングの色を指定する数値配列。 Array of Numbers [255, 255, 255]
Sink Layer

ネットワークの出力レイヤ。

  • params: None
  • weights: None
  • attrs: None
Permute Layer

axis を指定して axis 内のデータの順序を入れ替えるレイヤ。チャンネルスワップで利用。

  • params
Properties Required Description Type Example
axis 必須 入れ替えを行う軸を指定する整数。 Integer 2
order 必須 入れ替え前の順序を入れ替え後の順序で並べた整数配列。 Array of Integer [2, 1, 0]
  • weights: None
  • attrs: None
Madd Layer

Multiply add (scale * x + bias) を行うレイヤ。入力データの正規化、平均値の減算などを一括で行う。

  • params
Properties Required Description Type Example
has_relu オプション 出力に対して Relu activation を行うかを指定する真偽値。デフォルト False。 Boolean False
relu_max_value オプション Relu activation を行う際の出力の最大値。 has_relu が True のときのみ有効。 Number 6.0
  • weights
Properties Required Description Type Example
scale 必須 入力に対して乗算される数値、または数値配列。チャンネルごとに異なる値を指定する場合は配列とする。bias と同じ要素数でなければならない。 Number or Array of Number [0.01712475383, 0.0175070028, 0.01742919389]
bias 必須 入力に対して加算される数値、または数値配列。チャンネルごとに異なる値を指定する場合は配列とする。scale と同じ要素数でなければならない。 Number or Array of Number [2.11790393013, 2.03571428571, 1.80444444444]
  • attrs: None

preprocess example

[
    {
        "name": "preprocess",
        "layers": [
            {
                "type": "source",
                "params": {
                    "shape": [
                        1,
                        320,
                        320,
                        3
                    ]
                },
                "attrs": {
                    "format": "rgb",
                    "attrs": {
                        "format": "rgb",
                        "resize_mode": "bilinear",
                        "keep_ar": true,
                        "padding_clor": [
                            0,
                            0,
                            0
                        ]
                    }
                }
            },
            {
                "type": "permute",
                "params": {
                    "axis": 3,
                    "dims": [
                        2,
                        1,
                        0
                    ]
                }
            },
            {
                "type": "madd",
                "weights": {
                    "scale": [
                        0.0135694,
                        0.0143123,
                        0.0141064
                    ],
                    "bias": [
                        -1.41176,
                        -1.63139,
                        -1.69065
                    ]
                }
            },
            {
                "type": "sink"
            }
        ]
    }
]

postprocess記述仕様

postprocessでは出力にラベル名(文字列)を付与したり、主にObject Detectionタスクで最終段のデコード処理の方式を指定したりします。 postprocess内の各要素に関する説明を下記に記載します。

layers

各レイヤは、レイヤのタイプ、パラメータ、ウェイト、アトリビュートの4つの要素から構成されます。

Properties Required Description Type Example
type 必須 レイヤの種類を指定する文字列。source, sink, decode_centernet, decode_pelee, decode_ssd, decode_yolov3, decode_yolov4 等が指定可能。 String "decode_ssd"
params オプション レイヤのパラメータを指定する JSON オブジェクト。 Object 記述例
weights オプション レイヤのウェイトを指定する JSON オブジェクト。 Object 記述例
attrs オプション レイヤの付加情報を指定する JSON オブジェクト。 Object 記述例
Source Layer

ネットワークの入力レイヤ。

  • params
Properties Required Description Type Example
shape 必須 入力データの次元数を指定する整数配列。 Array of Integer [224, 224, 3]
  • weights: None
  • attrs: None
Sink Layer

ネットワークの出力レイヤ。

  • params: None
  • weights: None
  • attrs
Properties Required Description Type Example
label_list オプション 学習したラベルの文字列配列 Array of String ["cat", "dog", "bird"]
Decode Layer

Object Detectionタスクで最終段のデコード処理を行います。typeは decode_centernet, decode_pelee, decode_ssd, decode_yolov3, decode_yolov4 が指定可能です。

  • params
Properties Required Description Type Example
keep_top_k centernet, pelee, ssd, yolov3, yolov4 出力するバウンディングボックスの個数を指定する。(バウンディングボックスはスコアの高い順に選ばれる)デフォルト: 300 Integer 300
do_nms centernet, pelee, ssd, yolov3, yolov4 出力バウンディングボックスにNMS (Non-Maximum Suppression) 処理をするか否かを指定する。デフォルト: true Boolean true
nms_thresh centernet, pelee, ssd, yolov3, yolov4 NMS処理をする際のIoU閾値を指定する。 Float 0.5
conf_thresh centernet, pelee, ssd, yolov3, yolov4 バウンディングボックス検出のコンフィデンス閾値を指定する。 Float 0.3
background_label_id pelee, ssd 背景ラベルに対するラベル番号。デフォルト: 0 Integer 0
img_width yolov3 入力画像の幅 Integer 416
img_height yolov3 入力画像の高さ Integer 416
num_anchors_per_out yolov3 1つのグリッドセルに対するアンカーボックスの数。 Integer 3
anchors yolov3 アンカーボックスのサイズを表す配列。[w1, h1, w2, w3, ...] Float array [10,13, 16,30]
  • weights: None
  • attrs: None

postprocess example

[
  {
      "name": "postprocess",
      "layers": [
        {
            "name": "input",
            "type": "source",
        "params": {
            "shape":[1, 300, 15]
        }
        },
        {
            "name": "decode",
            "type": "decode_ssd",
            "params": {
          "keep_top_k" : 300,
          "background_label_id" : 0,
          "nms_thresh" : 0.45,
          "conf_thresh" : 0.01
        }
        },
        {
              "name": "output",
              "type": "sink"
        }
      ]
  }
]

import-onnx

ONNXモデルからDNNモデルファイルへの変換を実行します。

使い方

usage: softneuro import-onnx [--naive] [--extract]
                             [--preprocess_json PREPROCESS_JSON]
                             [--postprocess_json POSTPROCESS_JSON] [--help]
                             INPUT OUTPUT

引数

引数名 内容
INPUT ONNX形式のモデルファイルです。
OUTPUT コンバートの結果生成されるDNNファイルのファイル名です。
extractオプション利用時はextractで生成されるJSON等の保存先ディレクトリ名になります。
--preprocess_json PREPROCESS_JSON preprocessをモデルに追加する際に指定するjsonファイルです。
--postprocess_json POSTPROCESS_JSON postprocessをモデルに追加する際に指定するjsonファイルです。

オプション

オプション 効果
--naive FuseRelu等の最適化を行わずにDNNファイルを保存する場合に指定します。
--extract モデルファイルからモデル情報を抽出してJSONファイル等に保存します。
--help   本コマンドのヘルプを表示します。

使用例
コンバート処理完了後に実行ディレクトリにmobilenet_v2.dnnが生成されます。

$ softneuro import-onnx mobilenet_v2.onnx mobilenet_v2.dnn
import model
converting initializers: done
converting nodes: done
rectify model
optimize model
save model

import-tensorflow

TensorFlowモデルからDNNモデルファイルへの変換を実行します。

使い方

softneuro import-tensorflow [-h] [--keras] [--list-keras] [--naive] [--extract] [--preprocess_json PREPROCESS_JSON] [--postprocess_json POSTPROCESS_JSON] [--output_attrs OUTPUT_ATTRS]
                           [--input_node [INPUT_NODE_NAME]] [--input_shape [INPUT_SHAPE]] [--output_node [OUTPUT_NODE_NAME]] [--fix_shape_inf]
                           INPUT OUTPUT

引数

引数名 内容
INPUT protocol buffer(.pb)形式またはhdf5形式のモデルファイルです。
hdf5形式の場合は重みだけではなくモデル構造の情報も含んだものをご用意ください。
OUTPUT コンバートの結果生成されるDNNファイルのファイル名です。
extractオプション利用時はextractで生成されるJSON等の保存先ディレクトリ名になります。

オプション

オプション 内容
--keras tf.keras.applicationsのモデル名で指定することで主要なモデルをDNNファイルとして出力できます。
対象のモデルに関するの詳細な情報はkerasのドキュメントをご参照ください。
--list-keras --kerasオプションで利用可能なモデル名の一覧を表示します。
--naive FuseRelu等の最適化を行わずにDNNファイルを保存する場合に指定します。
--extract   モデルファイルからモデル情報を抽出してJSONファイル等に保存します。
--preprocess_json PREPROCESS_JSON preprocessをモデルに追加する際に指定するjsonファイルです。
--postprocess_json POSTPROCESS_JSON postprocessをモデルに追加する際に指定するjsonファイルです。
--output_attrs OUTPUT_ATTRS 出力アトリビュート(出力ラベル)情報を含む JSON ファイルまたはプリセット名を指定します。
--input_node [INPUT_NODE] ネットワークの入力ノード名です。
--input_shape [SHAPE] ネットワークの入力シェイプです。
--output_node [OUTPUT_NODE] ネットワークの出力ノード名です。
--fix_shape_inf インポート時にシェイプを固定します。
-h, --help   本コマンドのヘルプを表示します。

使用例
コンバート処理完了後に実行ディレクトリにvgg16.dnnが生成されます。

softneuro import-tensorflow vgg16.pb vgg16.dnn

import-ver3

Ver3のDNNモデルファイルからVer5のDNNモデルファイルへの変換を実行します。

使い方
softneuro import-ver3 [--naive] [--extract] [--help] INPUT OUTPUT

引数

引数名 内容
INPUT ver3形式のDNNファイルです。
OUTPUT コンバートの結果生成されるver5形式のDNNファイルのファイル名です。
extractオプション利用時はextractで生成されるJSON等の保存先ディレクトリ名になります。

オプション

オプション 内容
--naive FuseRelu等の最適化を行わずにDNNファイルを保存する場合に指定します。
--extract   モデルファイルからモデル情報を抽出してJSONファイル等に保存します。
-h, --help   本コマンドのヘルプを表示します。

使用例
コンバート処理完了後に実行ディレクトリにvgg16_v5.dnnが生成されます。

softneuro import-ver3 vgg16_v3.dnn vgg16_v5.dnn
import model
rectify model
optimize model
save model