Table of contents
Table of Contents | ||||
---|---|---|---|---|
|
Preparation
...
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 |
...
The model after conversion is output to the following directory.
For ambaCV2X camera
${OUTPUT_DIR}/${NET_NAME}/${PARSER_OPTION}/[モデル名]model name]
For ambaCV5X camera
${OUTPUT_DIR}/${NET_NAME}_ambaCV5X/${PARSER_OPTION}/[model name]
Conversion
...
Note |
---|
Pytorch model needs to be converted to ONNX in advance |
...
. |
Copy either directory under
/home/cvtool/conversion/onnx
.
Code Block |
---|
# Network Name NET_NAME=mobilenet_v2 # SSD Model or Not (0:not SSD, 1:SSD) IS_SSD=0$ cd /home/cvtool/conversion/onnx $ cp -r mobilenetv2 foo $ cd foo |
Change the parameter of "setting.conf" according to the model to be converted.
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. |
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 #cavalry version #if not specified -> "" CAVALRY_VER="2.1.7" # 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.
Available image file format is what OpenCV can handle, for example, Image file format should be the format that are supported by OpenCV (Ex. JPEG, PNG and so onetc…).
Any resolution is availablesupported.
OUTPUT_DIR: Path to directory which converted data will be putin 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: ormalization Normalization parameter (mean) of input image
In case of setting by numerical value, do not put Please refrain from using space between “,” as followingshown below if using numerical value.
IN_MEAN=127.5,127.5,127.5
IN_SCALE: Normalization parameter (scale) of input image
In case of setting different value for each channel, split values by “,”. Do not put space between “,”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
CAVALRY_VER: Version of cavalry to use
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.
NIN_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
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
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
Download sample model.
Code Block |
---|
$ cd /home/cvtool/conversion/onnx/yolov5
$ ./setup_yolov5.sh |
...
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. |