...
NET_NAME:ネットワーク名
任意の名前を設定できます。
MODEL_DIR:onnxファイルが格納されたディレクトリ
ディレクトリ下の全てのモデルに対して、変換処理を実行します。
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:入力画像の正規化パラメータ(平均値)
以下のように”,”の間に空白を入れないようにしてください。
IN_MEAN=127.5,127.5,127.5
IN_SCALE:入力画像の正規化パラメータ(スケール)
チャネルごとに異なる設定値にする場合は、”,”で値を区切ってください。”,”の間には空白を入れないようにしてください。
IS_BGR:入力画像のフォーマット(RGB or BGR)
OUT_LAYER:ネットワークの出力ノード名
複数指定する場合は”,”で区切ってください。
以下の記号が入出力ノード名に含まれている場合、正常に変換できない可能性があります。
: | ; , ‘
PREPRO:前処理スクリプトパス(python)
スクリプトの作り方は“/home/cvtool/common/prepro.py”を参照してください。
PREPRO_ARG:前処理スクリプトの引数
IN_DATA_FILEFORMAT:入力データのフォーマット
例:uint8-> 0>0,0,0,0, float32-> 1>1,2,0,7, float16-> 1>1,1,0,4)
NIN_DATA_FILEFORMAT を”0,0,0,0”から変更した場合はPREPROの設定が必要になります。
IN_DATA_TRANSPOSE:入力データに対してTRANSPOSE を行う場合指定する
...
モデルの中に、cvtool でサポートしていないノードがある場合
以下のコマンドで修正してください。Code Block $ graph_surgery.py onnx -m (修正前のモデル名) -o (修正後のモデル名) -t CVFlow
cvtool がサポートするノードについてはこちらをご覧ください。
また、モデルの中にサポートしていないノードがあるかは、onnx_print_graph_summary.py コマンドで確認することができます。Code Block $ onnx_print_graph_summary.py -p (モデル名)
入力の形状(shape)に可変値がある場合
以下のコマンドで固定値に置き換えます。
Code Block $ graph_surgery.py onnx -m (修正前のモデル名) -o (修正後のモデル名) -isrc "i:input|is:1,3,960,960" -t SetIOShapes
入力の形状が NHWC、かつモデルの最初に NCHWに transpose している場合
モデルの先頭からTransposeノードまでを切り離します。
Code Block $ graph_surgery.py onnx -m (修正前のモデル名) -o (修正後のモデル名) -isrc "i:(Transposeノードの出力名)|is:1,3,224,224" -t CutGraph
OUT_LAYER で指定したノードに、特定の記号( : | ; , ‘ )が含まれている場合
特定の記号を含まないように、ノード名を変更します。
Code Block $ graph_surgery.py onnx -m (修正前のモデル名) -o (修正後のモデル名) -t "RenameTensors(変更前のノード名=変更後のノード名)"
複数のノード名を変更する場合は、','で区切ってください。Code Block -t "RenameTensors(node::1=node1,node::2=node2)"
モデルに rank > 4 のノードがある場合
SoCの制約のため、変換できない可能性があります。
モデルの中に該当するノードがあるかは、onnx_print_graph_summary.py コマンドで確認することができます。該当するノードがある場合には以下のようなメッセージが出力されます。Code Block $ onnx_print_graph_summary.py -p (モデル名) INFO: 08/29/2024 03:22:40.725761 onnx_print_graph_summary.py:384 [PrintGraphSummary] Unsupported tensors with rank > 4 (3): INFO: 08/29/2024 03:22:40.725837 onnx_print_graph_summary.py:386 [PrintGraphSummary] -> 'output' [1 x 3 x 52 x 52 x 85] INFO: 08/29/2024 03:22:40.725909 onnx_print_graph_summary.py:386 [PrintGraphSummary] -> '1026' [1 x 3 x 26 x 26 x 85] INFO: 08/29/2024 03:22:40.725993 onnx_print_graph_summary.py:386 [PrintGraphSummary] -> '1046' [1 x 3 x 13 x 13 x 85]
以下の何れかの方法で、モデルを修正してください。
・onnx にエキスポートする前に、該当するノードを修正する
・該当するノードから後ろを、モデルから切り離すCode Block $ graph_surgery.py onnx -m (修正前のモデル名) -o (修正後のモデル名) -on (該当ノードの1つ前のノード) -t CutGraph
・該当するノードを rank=4以下のノードに置き換えるCode Block $ graph_surgery.py onnx -m (修正前のモデル名) -o (修正後のモデル名) -t ReplaceSubgraph
※ReplaceSubgraph のご使用を希望される際はお問合せください。
Note |
---|
rank=4のノードでも、最初の次元の要素数が1ではない場合、変換できない可能性があります。 rank>4の場合と同様の対応を行ってください。 |