Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of contents

Table of Contents
minLevel1
maxLevel4

...

Please refer here for the environment construction procedure.

Convert sample models

...

mobilenetv2

Move directory.

...

Code Block
$ cd /home/cvtool/conversion/onnx/mobilenetv2

Convert the model.Please change the parameter "setting.conf" of the argument according to the model to be converted

Code Block
$ ./onnx_conversion.sh setting.conf

yolov5 / yolov8

Download sample model.

Code Block
(yolov5)
$ cd /home/cvtool/conversion/onnx/yolov5
$ ./setup_yolov5.sh

(yolov8)
$ cd /home/cvtool/conversion/onnx/yolov8
$ ./setup_yolov8.sh

Convert the model.

Code Block
$ ./onnx_conversion.sh setting.conf

...

${OUTPUT_DIR}/${NET_NAME}_ambaCV5X/${PARSER_OPTION}/[model name]

Conversion

...

Note

Pytorch model needs to be converted to ONNX in advance

...

.

  1. Copy either directory under /home/cvtool/conversion/onnx.

Code Block
$ cd /home/cvtool/conversion/onnx
$ cp -r mobilenetv2 foo
$ cd foo
  1. Change the parameter of "setting.conf" according to the model to be converted.

  2. Convert the model.

Code Block
$ ./onnx_conversion.sh setting.conf

setting.conf

...

Note

From v1.20, parameter "CAVALRY_VER" is removed that existed in setting.conf until v1.19.
If you use setting.conf from v1.19 or earlier, please remove "CAVALRY_VER" from it.

Code Block
# Network Name
NET_NAME=mobilenet_v2

# Path to Directory for ONNX Models
MODEL_DIR=./sample/mobilenet_v2/models

# Path to Directory for DRA Images
DRA_IMAGE_DIR=../../dra_img

# Path to Directory for Output Data
OUTPUT_DIR=./out

# Quantization Mode
#  FIX8  : Fixed-point  8bit
#  FIX16 : Fixed-point 16bit
#  MIX   : FIX8/FIX16 mixed
PARSER_OPTION=MIX

# Input Data Format (0:NHWC, 1:NCHW)
IN_DATA_FORMAT=1

# Input Data Channel
IN_DATA_CHANNEL=3

# Input Data Width
IN_DATA_WIDTH=224

# Input Data Height
IN_DATA_HEIGHT=224

# Input Data Mean Vector
IN_MEAN=103.94,116.78,123.68

# Input Data Scale
# IN_SCALE=1/Scale
IN_SCALE=58.823529411

# RGB or BGR (0:RGB, 1:BGR)
IS_BGR=1

# Output Layers Name
OUT_LAYER=mobilenetv20_output_flatten0_reshape0

# Unique preprocess
# if use im2bin -> NONE
# if use unique preprocess -> script path
PREPRO=NONE
PREPRO_ARG=""

# Input file data format
IN_DATA_FILEFORMAT=0,0,0,0

# Transpose indices(NONE:without transpose , 0,3,1,2:transpose (EX))
IN_DATA_TRANSPOSE=NONE
  • NET_NAME: The name of network

    • Any name can be set.

  • MODEL_DIR: Path to directory which includes .onnx files

    • All .onnx files under the directory are converted.

  • IMAGE_DIR: Path to directory which includes image files for optimizing quantization

    • Please put the directory image files for training. Recommended number of image files is 100 to 200.

    • Image file format should be the format that are supported by OpenCV (Ex. JPEG, PNG and etc…).

    • Any resolution is supported.

  • OUTPUT_DIR: Path to directory which converted data in placed.

  • PARSER_OPTION: Quantization mode

    • Select from FIX8/FIX16/MIX (FIX8/FIX16 mixed).

  • IN_DATA_CHANNEL: Number of input image channel for target model

  • N_DATA_WIDTH: Width of input image for target model

  • IN_DATA_HEIGHT: Height of input image for target model

  • IN_MEAN: Normalization parameter (mean) of input image

    • Please refrain from using space between “,” as shown below if using numerical value.
      IN_MEAN=127.5,127.5,127.5

  • IN_SCALE: Normalization parameter (scale) of input image

    • Please refrain from using space between “,” and only use “,” to separate values when setting different values for each channel.

  • IS_BGR: Format of input image (RGB or BGR)

  • OUT_LAYER: The name of output layer for target network

    • If two or more layers exists, separate layers by “,”.

    • When the following symbols are contained in the name of input/output node, conversion may not be successful.
      : | ; , ‘

  • PRIORBOX_NODE: Node equivalent to “priorbox”

    • Need to set when IS_SSD=1

  • PREPRO: Path of preprocessing script (python script)

    • Refer to “/home/cvtool/ common/prepro.py” for how to create a script

  • PREPRO_ARG: Argument of preprocessing script (python script)

  • IN_DATA_FILEFORMAT: Input data format

    • Examples : uint8->0,0,0,0, float32->1,2,0,7, float16-> 1>1,1,0,4

    • When the value of IN_DATA_FILEFORMAT changes from “0,0,0,0”, setting PREPRO is needed.

  • IN_DATA_TRANSPOSE: Specify when performing TRANSPOSE on the input data

Note

If there is a node that is not a constant, it cannot be converted normally.

In that case, convert the model using the following command, and perform quantization with the converted model.

-m : before conversion model

-o : after conversion model

If conversion error occurs

...

Modifying the model by graph_surgery.py included in cvtool may resolve the problem.
Please refer here for details about graph_surgery.py.

  • The model includes unsupported node by cvtool
    Run the following command.

    Code Block
    $ graph_surgery.py onnx -m (model name before modification) -o (model name after modification) -t CVFlow

    Please refer here for the list of supported node.

    You can check if the model includes unsupported node, by using onnx_print_graph_summary.py in cvtool.

    Code Block
    $ onnx_print_graph_summary.py -p (model name)

  • Input of the model has variable value

    image-20240416-002601.pngImage Added

    Replace with fixed value by the following command.

    Code Block
    $ graph_surgery.py onnx -m

...

  •  (model name before modification) -o

...

  •  (model name after modification) -isrc "i:input|is:1,3,960,960" -t 

...

Convert sample models

mobilenetv2

...

  • SetIOShapes

  • Input shape of the model is NHWC, and transposed to NCHW first

    cutInput.jpgImage Added

    Separate from the beginning of the model to “Tranpose” node.

    Code Block
    $ 

...

  • graph_surgery.py onnx -m (model name before modification) -o (model name after modification) -isrc "i:(output name of Transpose node)|is:1,3,224,224" -t CutGraph

  • Unsupported character ( : | ; , ‘ ) is included in OUT_LAYER
    Rename the node by the following command.

    Code Block
    $ graph_surgery.

...

yolov5

...

  • py onnx -m (model name before modification) -o (model name after modification) -t "RenameTensors(original_name=new_name)"

    If multiple nodes are specified, please separate those by ",".

    Code Block
    -t "RenameTensors(node::1=node1,node::2=node2)"

  • The model has nodes of rank > 4
    Conversion may not be possible due to SoC constraints.

    You can check if the model has such nodes, by using onnx_print_graph_summary.py. The following message will be output when the nodes are found.

    Code Block
    $ 

...

  • onnx_print_graph_summary.py -p (model name)
    
    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]

    Please modify the model in one of the following ways.
    ・Modify the nodes before exporting to onnx.
    ・Separate the back of the node from the model.

    Code Block
    $ graph_surgery.

...

  • py onnx -m (model name before modification) -o (model name after modification) -on (node name before the node of rank > 4) -t CutGraph


    ・Replace the node with that of rank <= 4.

    Code Block
    $ graph_surgery.py onnx -m (model name before modification) -o (model name after modification) -t ReplaceSubgraph

    ※If you wish to use “ReplaceSubgraph”, please contact us.

Note

Althogh the node of rank=4, conversion may not be possible when the number of elements in the first dimension of the node is not 1. Please take the same action as in case of rank > 4.