Package: scc4onnx
scc4onnxVery simple NCHW and NHWC conversion tool for ONNX. Change to the specified input order for each and every input OP. Also, change the channel order of RGB and BGR.SimpleChannelConverter forONNX.https://github.com/PINTO0309/simple-onnx-processing-toolsKey conceptAllow the user to specify the name of the input OP to change the input order.All number of dimensions can be freely changed, not only 4 dimensions such as NCHW and NHWC.Simply rewrite the input order of the input OP to the specified order and extrapolate Transpose after the input OP so that it does not affect the processing of subsequent OPs.Allows the user to change the channel order of RGB and BGR by specifying options.1. Setup1-1. HostPC### option$echoexportPATH="~/.local/bin:$PATH">>~/.bashrc\&&source~/.bashrc### run$pipinstall-Uonnx\&&python3-mpipinstall-Uonnx_graphsurgeon--index-urlhttps://pypi.ngc.nvidia.com\&&pipinstall-Uscc4onnx1-2. Dockerhttps://github.com/PINTO0309/simple-onnx-processing-tools#docker2. CLI Usage$ scc4onnx -h

usage:
  scc4onnx [-h]
  -if INPUT_ONNX_FILE_PATH
  -of OUTPUT_ONNX_FILE_PATH
  [-ioo INPUT_OP_NAME ORDER_DIM]
  [-cci INPUT_OP_NAME DIM]
  [-n]

optional arguments:
  -h, --help
      show this help message and exit

  -if INPUT_ONNX_FILE_PATH, --input_onnx_file_path INPUT_ONNX_FILE_PATH
      Input onnx file path.

  -of OUTPUT_ONNX_FILE_PATH, --output_onnx_file_path OUTPUT_ONNX_FILE_PATH
      Output onnx file path.

  -ioo INPUT_OP_NAMES_AND_ORDER_DIMS INPUT_OP_NAMES_AND_ORDER_DIMS, --input_op_names_and_order_dims INPUT_OP_NAMES_AND_ORDER_DIMS INPUT_OP_NAMES_AND_ORDER_DIMS
      Specify the name of the input_op to be dimensionally changed and the order of the
      dimensions after the change.
      The name of the input_op to be dimensionally changed can be specified multiple times.

      e.g.
      --input_op_names_and_order_dims aaa [0,3,1,2] \
      --input_op_names_and_order_dims bbb [0,2,3,1] \
      --input_op_names_and_order_dims ccc [0,3,1,2,4,5]

  -cci CHANNEL_CHANGE_INPUTS CHANNEL_CHANGE_INPUTS, --channel_change_inputs CHANNEL_CHANGE_INPUTS CHANNEL_CHANGE_INPUTS
      Change the channel order of RGB and BGR.
      If the original model is RGB, it is transposed to BGR.
      If the original model is BGR, it is transposed to RGB.
      It can be selectively specified from among the OP names specified
      in --input_op_names_and_order_dims.
      OP names not specified in --input_op_names_and_order_dims are ignored.
      Multiple times can be specified as many times as the number of OP names specified
      in --input_op_names_and_order_dims.
      --channel_change_inputs op_name dimension_number_representing_the_channel
      dimension_number_representing_the_channel must specify the dimension position before
      the change in input_op_names_and_order_dims.
      For example, dimension_number_representing_the_channel is 1 for NCHW and 3 for NHWC.

      e.g.
      --channel_change_inputs aaa 3 \
      --channel_change_inputs bbb 1 \
      --channel_change_inputs ccc 5

  -n, --non_verbose
      Do not show all information logs. Only error logs are displayed.3. In-script Usage$python>>>fromscc4onnximportorder_conversion>>>help(order_conversion)Helponfunctionorder_conversioninmodulescc4onnx.onnx_input_order_converter:order_conversion(input_op_names_and_order_dims:Union[dict,NoneType]=None,channel_change_inputs:Union[dict,NoneType]=None,input_onnx_file_path:Union[str,NoneType]='',output_onnx_file_path:Union[str,NoneType]='',onnx_graph:Union[onnx.onnx_ml_pb2.ModelProto,NoneType]=None,non_verbose:Union[bool,NoneType]=False)->onnx.onnx_ml_pb2.ModelProtoParameters----------input_onnx_file_path:Optional[str]Inputonnxfilepath.Eitherinput_onnx_file_pathoronnx_graphmustbespecified.output_onnx_file_path:Optional[str]Outputonnxfilepath.Ifoutput_onnx_file_pathisnotspecified,no.onnxfileisoutput.onnx_graph:Optional[onnx.ModelProto]onnx.ModelProto.Eitherinput_onnx_file_pathoronnx_graphmustbespecified.onnx_graphIfspecified,ignoreinput_onnx_file_pathandprocessonnx_graph.input_op_names_and_order_dims:Optional[dict]Specifythenameoftheinput_optobedimensionallychangedandtheorderofthedimensionsafterthechange.Thenameoftheinput_optobedimensionallychangedcanbespecifiedmultipletimes.e.g.input_op_names_and_order_dims={"input_op_name1":[0,3,1,2],"input_op_name2":[0,2,3,1],"input_op_name3":[0,3,1,2,4,5],}channel_change_inputs:Optional[dict]ChangethechannelorderofRGBandBGR.IftheoriginalmodelisRGB,itistransposedtoBGR.IftheoriginalmodelisBGR,itistransposedtoRGB.ItcanbeselectivelyspecifiedfromamongtheOPnamesspecifiedininput_op_names_and_order_dims.OPnamesnotspecifiedininput_op_names_and_order_dimsareignored.MultipletimescanbespecifiedasmanytimesasthenumberofOPnamesspecifiedininput_op_names_and_order_dims.channel_change_inputs={"op_name":dimension_number_representing_the_channel}dimension_number_representing_the_channelmustspecifythedimensionpositionafterthechangeininput_op_names_and_order_dims.Forexample,dimension_number_representing_the_channelis1forNCHWand3forNHWC.e.g.channel_change_inputs={"aaa":1,"bbb":3,"ccc":2,}non_verbose:Optional[bool]Donotshowallinformationlogs.Onlyerrorlogsaredisplayed.Default:FalseReturns-------order_converted_graph:onnx.ModelProtoOrderconvertedonnxModelProto4. CLI Execution$scc4onnx\--input_onnx_file_pathcrestereo_next_iter2_240x320.onnx\--output_onnx_file_pathcrestereo_next_iter2_240x320_ord.onnx\--input_op_names_and_order_dimsleft[0,2,3,1]\--input_op_names_and_order_dimsright[0,2,3,1]\--channel_change_inputsleft1\--channel_change_inputsright15. In-script Executionfromscc4onnximportorder_conversionorder_converted_graph=order_conversion(onnx_graph=graph,input_op_names_and_order_dims={"left":[0,2,3,1],"right":[0,2,3,1]},channel_change_inputs={"left":1,"right":1},non_verbose=True,)6. Sample6-1. Transpose only$scc4onnx\--input_onnx_file_pathcrestereo_next_iter2_240x320.onnx\--output_onnx_file_pathcrestereo_next_iter2_240x320_ord.onnx\--input_op_names_and_order_dimsleft[0,2,3,1]\--input_op_names_and_order_dimsright[0,2,3,1]6-2. Transpose + RGB<->BGR$scc4onnx\--input_onnx_file_pathcrestereo_next_iter2_240x320.onnx\--output_onnx_file_pathcrestereo_next_iter2_240x320_ord.onnx\--input_op_names_and_order_dimsleft[0,2,3,1]\--input_op_names_and_order_dimsright[0,2,3,1]\--channel_change_inputsleft1\--channel_change_inputsright16-3. RGB<->BGR only$scc4onnx\--input_onnx_file_pathcrestereo_next_iter2_240x320.onnx\--output_onnx_file_pathcrestereo_next_iter2_240x320_ord.onnx\--channel_change_inputsleft1\--channel_change_inputsright17. Issueshttps://github.com/PINTO0309/simple-onnx-processing-tools/issues