コンバート系¶
各種フレームワークからモデルファイルを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