コンテンツにスキップ

DNNファイル編集系

DNNファイルに各種変更を加える際に使用するコマンドです。

extract

DNNファイルからモデル情報、重み情報を抽出してJSONファイル等に保存します。

使い方

usage: softneuro extract [--help] DNN OUTDIR

引数

引数名 内容
DNN 抽出対象のDNNファイルです。
OUTDIR extractで生成されるJSON等の保存先ディレクトリ名です。

オプション

オプション 効果
-h, --help 本コマンドのヘルプを表示します。

使用例
指定ディレクトリ(vgg16_extract)内に model.jsonweights.json 、numpy形式でウェイトを書き出した weights ディレクトリが生成されます。
※extractコマンドの実行によるコマンドライン上への出力はありません

$ softneuro extract vgg16.dnn vgg16_extract
$ ls vgg16_extract
model.json  weights  weights.json

archive

extractコマンドで抽出されたモデル情報を再度DNNファイルに変換します。

使い方

usage: softneuro archive [--help] SRCDIR DNN

引数

引数名 内容
SRCDIR extractコマンドで出力したモデル情報を保存したディレクトリです。
DNN ファイル変換の結果生成されるDNNファイルのファイル名です。

オプション

オプション 効果
-h, --help 本コマンドのヘルプを表示します。

使用例
実行ディレクトリにvgg16_archive.dnnが生成されます。
※archiveコマンドの実行によるコマンドライン上への出力はありません

$ softneuro archive vgg16_extract vgg16_archive.dnn
$ ls
vgg16_extract vgg16_archive.dnn

refine

DNNファイルに高速化に有効な最適化処理を実行します。 最適化の処理内容は基本的にモデルファイルをdnn形式に変換するときに適用されるものです。 変換時に適用しないようオプション指定していた場合、refineコマンドを使うことで後から最適化処理を施すことができます。

使い方

usage: softneuro refine [--batch-norm-to-madd] [--fuse-dropout] [--fuse-transpose] [--fuse-madd]
                          [--fuse-relu] [--fuse-padding] [--swap-act-pool]
                          [--strip-constant] [--strip-immutable] [--strip-layer] [--strip-net] 
                          [--norm-weight] [--dedup-weight] [--strip-weight][--help]
                          INPUT OUTPUT

引数

引数名 内容
INPUT 入力DNNファイル。
OUTPUT 出力DNNファイル。

オプション
本コマンドでオプションを利用すると、指定した最適化処理のみを行うようになります。(helpを除く)
例えば--batch_norm_to_maddのみを有効にするとそれ以外の最適化処理は行われません。

オプション 効果
--batch-norm-to-madd batch normalization処理をmaddレイヤーに変換します。
--fuse-dropout dropout処理を一つ前のレイヤー処理に組み込みます。
--fuse-transpose transpose処理を一つ前のレイヤー処理に組み込みます。
--fuse-madd multiply-add処理を一つ前のレイヤー処理に組み込みます。
--fuse-relu relu 処理を一つ前のレイヤー処理に組み込みます。
--fuse-padding zero padding処理を一つ後のレイヤー処理に組み込みます。
--swap-act-pool activation-pooling処理をpooling activation処理に変換します。
--strip-constant コンスタントなレイヤーを除去します。
--strip-immutable 不変なレイヤーを除去します。
--strip-layer 不要なレイヤーを除去します。
--strip-net レイヤーを持たないネットワークを除去します。
--strip-weight どのレイヤーからも参照されていない重み情報を除去します。
--dedup-weight      重複な重みを除去します。
--norm-weight 重みに含まれるsubnormal, nan, inf値を正規化します。
-h, --help 本コマンドのヘルプを表示します。

使用例 Pose_small.dnnの重複な重みを除去します。

$ softneuro refine --dedup-weight Pose_small.dnn Pose_small_refined.dnn

------------------------------------------------------------------
Deduplicate Weights
------------------------------------------------------------------
'weight_7_0' is deduplicated to 'weight_4_0' (SNR: inf).
'weight_10_0' is deduplicated to 'weight_3_0' (SNR: inf).
'weight_13_0' is deduplicated to 'weight_2_0' (SNR: inf).
'weight_14_0' is deduplicated to 'weight_2_0' (SNR: inf).
'weight_15_0' is deduplicated to 'weight_2_0' (SNR: inf).

5 weights are deduplicated.

compress

DNNファイルの重みデータの軽量化を行うコマンドです。

使い方

usage: softneuro compress [--dtype [[LTYPE][.WNAME]=]DTYPE[@LAYER_INDICES]]...
                          [--pass PASSWORD] [--help]
                          INPUT OUTPUT

引数

引数名 内容
INPUT データ型変換を行うDNNファイル。
OUTPUT データ型変換の結果生成されるDNNファイル。

オプション

オプション 効果
--dtype [[LTYPE][.WNAME]=]DTYPE[@LAYER_INDICES] 保存する重みのデータ型を指定するオプションです。DTYPEにはfloat16, qint8が指定できます。このオプションが指定されていない場合、mainネットワークの重みはすべてqint8として保存されます。LTYPEを指定すると、指定したタイプのレイヤーの重みのみDTYPEで指定した型として保存します。WNAMEを指定すると、指定したウェイト名の重みのみDTYPEで指定した型として保存します。LAYER_INDICESを指定すると、指定したインデックスのレイヤーの重みのみDTYPEで指定した型として保存します。LAYER_INDICESの書式についてはsoftneuro help layer_indicesで表示されるヘルプを参照してください。
--pass PASSWORD 暗号化の際にパスワードを設定することができます。
-h, --help 本コマンドのヘルプを表示します。

使用例
実行ディレクトリに重み情報がqint8形式で保存されたvgg16_qint8.dnnが生成されます。
※compressコマンドの実行によるコマンドライン上への出力はありません

$ softneuro compress vgg16.dnn vgg16_qint8.dnn
$ ls -lh
-rw-rw-r-- 1 user user 528M  1月 1 10:00 vgg16.dnn
-rw-rw-r-- 1 user user 133M  1月 1 10:00 vgg16_qint8.dnn

cipher

DNNファイルを暗号化するコマンドです。

使い方

usage: softneuro cipher [--pass PASSWORD] [--new-pass PASSWORD] [--secret] [--help] INPUT OUTPUT

引数

引数名 内容
INPUT 暗号化を行うDNNファイル。
OUTPUT 暗号化の結果生成されるDNNファイル。

オプション

オプション 効果
-p PASSWORD, --pass PASSWORD INPUTのパスワードを設定します。
--new-pass PASSWORD OUTPUTのパスワードを設定します。設定しない場合、INPUTと同じパスワードを設定します。空("")を与えられた場合、
             INPUTの復号化を行い、OUTPUTは暗号化されない状態となります。
--secret secretモードで暗号化を実行します。secretモードで暗号化されたDNNファイルはモデルのネットワーク構造を参照することができなくなります。また、LAYER_INDICESを指定する各種操作も基本的には不可能となります。
-h, --help 本コマンドのヘルプを表示します。

使用例
実行ディレクトリにvgg16_enc.dnnが生成されます。
※cipherコマンドの実行によるコマンドライン上への出力はありません

$ softneuro cipher --new-pass 4u9pnza vgg16.dnn vgg16_enc.dnn
$ ls
vgg16.dnn vgg16_enc.dnn
$ softneuro run vgg16_enc.dnn
mor_dnn.c:921:Error: Invalid password for dnn.
softneuro:Error: Load error.
$ softneuro run vgg16_enc.dnn -p 4u9pnza

---------------------------------
Statistics
---------------------------------
FUNCTION         AVE(us)    MIN(us)    MAX(us)  #RUN
Dnn_load()        36,055     36,055     36,055     1
Dnn_compile()    727,957    727,957    727,957     1
Dnn_forward()  1,080,363  1,080,363  1,080,363     1

Used memory: 1,140,400,128 Bytes

calibrate

静的量子化のためのキャリブレーションを実行するコマンドです。 キャリブレーションとは、予め用意した入力ファイルを用いて各レイヤーの出力最大値と最小値を求め、量子化のレンジを固定する操作です。 この操作によって一部の量子化ルーチンで動的な量子化レンジ計算が不要になり、高速化が見込めます。 tuneなどによって量子化ルーチンを利用する設定である場合にのみ効果が見込めることにご注意ください。 また、推論時の実データと大きく異なるデータでキャリブレーションを行うと精度が低下する場合があります。

使い方

usage: softneuro calibrate [--keep_img_ar PADDINGCOLOR]
                           [--img_resize_mode RESIZEMODE][--pass PASSWORD]
                           [--reset] [--trunc RATIO] [--help]
                           IDNN ODNN [INPUT]...

引数

引数名 内容
IDNN キャリブレーションを行うDNNファイル。
ODNN キャリブレーションの結果生成されるDNNファイル。
INPUT キャリブレーションを実行するための入力ファイル。画像ファイル、またはnumpyファイル、またはそれらが入ったディレクトリを指定可能。ファイルを指定する場合は複数指定可能。

オプション

オプション 効果
--keep_img_ar PADDINGCOLOR 入力画像をリサイズする際にアスペクト比を維持させます。デフォルトではアスペクト比を維持しません。リサイズ前後でアスペクト比の違いによって生じるスペースを、PADDINGCOLORで指定した色で埋めます。PADDINGCOLORは例えば '0, 0, 0' のようにRGBで指定します。
--img_resize_mode RESIZEMODE 入力画像をリサイズする際の方式を指定します。 'bilinear' または 'nearest' を指定可能です。デフォルトは 'bilinear' です。
-p, --pass PASSWORD 暗号化の際にパスワードを設定することができます。
--reset キャリブレーション情報(最大値・最小値)をリセットします。
--trunc RATIO 最大値・最小値を求める際に、RATIOで指定した比率分の上位データと下位データを外れ値と見なしてカットします。例えば RATIO=0.02 とした場合、上下2%のデータがカットされた上で最大値・最小値が定められます。デフォルトは RATIO=0 です。
-h, --help 本コマンドのヘルプを表示します。

使用例
実行ディレクトリにvgg16_calib.dnnが生成されます。 そのDNNファイルにtuneコマンドを実行することで、キャリブレーションで設定されたレイヤーパラメータを利用したチューニングが実行されます。 ※calibrateコマンドによるコマンドライン上への出力はありません

$ softneuro calibrate vgg16.dnn vgg16_calib.dnn input0.jpg input1.jpg input2.jpg
$ softneuro tune vgg16_calib.dnn vgg16_calib_tuned.dnn

decompose

DNNネットを分割・圧縮するコマンドです。 HNNなどの外部推論エンジンを利用する場合はDNN内のネットワークを特殊なレイヤーに圧縮して推論処理を実行させることになるため、 分割・圧縮によるDNNの編集は主に外部推論エンジンを利用する際に実行します。

使い方

usage: softneuro decompose [--pass PASSWORD] [--split SPLIT] [--compress COMPRESS] [--help] INPUT OUTPUT

引数

引数名 内容
INPUT 分割を行うDNNファイル。
OUTPUT 分割の結果生成されるDNNファイル。

オプション

オプション 効果
-p PASSWORD, --pass PASSWORD INPUTのパスワードを設定します。
-s SPLIT, --split SPLIT レイヤーを指定して、そこからネットを分割する。
-c COMPRESS, --compress COMPRESS 圧縮するネットワークを指定します。
-h, --help 本コマンドのヘルプを表示します。

使用例
conv_pw_1レイヤーからssd.dnnのメインネットワークを二つのサブネットワークに分割する場合は以下のようになります。

$ softneuro decompose -s conv_pw_1 ssd.dnn ssd_dcp.dnn
[0] from input_1 to conv_pw_1
[1] from conv_dw_2 to sink_0

また、vgg16.dnnのメインネットワークを一つの外部推論エンジン処理レイヤに圧縮し、外部推論エンジン(この場合QualcommのHTA)で推論するようtuneする場合は以下のようになります。

$ softneuro decompose -c main vgg16.dnn vgg16_decomposed.dnn
$ softneuro tune vgg16_decomposed.dnn  vgg16_decomposed_tuned.dnn --routine cpu/faster/hta