DNNファイル編集系¶
DNNファイルに各種変更を加える際に使用するコマンドです。
extract¶
DNNファイルからモデル情報、重み情報を抽出してJSONファイル等に保存します。
使い方
usage: softneuro extract [--help] DNN OUTDIR
引数
引数名 | 内容 |
---|---|
DNN | 抽出対象のDNNファイルです。 |
OUTDIR | extractで生成されるJSON等の保存先ディレクトリ名です。 |
オプション
オプション | 効果 |
---|---|
-h, --help | 本コマンドのヘルプを表示します。 |
使用例
指定ディレクトリ(vgg16_extract)内に model.json
、 weights.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