Package: scs4onnx
scs4onnxA very simple tool that compresses the overall size of the ONNX model by aggregating duplicate constant values as much as possible.SimpleConstant valueShrink forONNX.https://github.com/PINTO0309/simple-onnx-processing-toolsKey conceptIf the same constant tensor is found by scanning the entire graph for Constant values, it is aggregated into a single constant tensor.Ignore scalar values.Ignore variables.Finally, create a Fork ofonnx-simplifierand merge this process just before the onnx file output process-> Temporarily abandoned because it turned out that the onnx-simplifier specification needed to be changed in a major way.Implementation of a specification for separating the weight of a specified OP name to an external file.Implementation of a specification for separating the weight of a specified Constant name to an external file.Added option to downcast from Float64 to Float32 and INT64 to INT32 to attempt size compression.Post an issue of onnx-simplifier.Excessive bloating of ONNX files due to over-efficient conversion of "Tile" to constants (Protocol Buffers .onnx > 2GB) #178Add sample onnx models.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-Uscs4onnx1-2. Dockerhttps://github.com/PINTO0309/simple-onnx-processing-tools#docker2. CLI Usage$ scs4onnx -h

usage:
  scs4onnx [-h]
  [-m {shrink,npy}]
  [-fo FORCED_EXTRACTION_OP_NAMES]
  [-fc FORCED_EXTRACTION_CONSTANT_NAMES]
  [-d]
  [-n]
  input_onnx_file_path output_onnx_file_path


positional arguments:
  input_onnx_file_path
    Input onnx file path.

  output_onnx_file_path
    Output onnx file path.

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

  -m {shrink,npy}, --mode {shrink,npy}
    Constant Value Compression Mode.
    shrink: Share constant values inside the model as much as possible.
            The model size is slightly larger because
            some shared constant values remain inside the model,
            but performance is maximized.
    npy:    Outputs constant values used repeatedly in the model to an
            external file .npy. Instead of the smallest model body size,
            the file loading overhead is greater.
    Default: shrink

  -fo FORCED_EXTRACTION_OP_NAMES [FORCED_EXTRACTION_OP_NAMES ...], --forced_extraction_op_names FORCED_EXTRACTION_OP_NAMES [FORCED_EXTRACTION_OP_NAMES ...]
    Extracts the constant value of the specified OP name to .npy
    regardless of the mode specified.
    Cannot be used with --forced_extraction_constant_names at the same time.
    e.g. --forced_extraction_op_names aaa bbb ccc

  -fc FORCED_EXTRACTION_CONSTANT_NAMES [FORCED_EXTRACTION_CONSTANT_NAMES ...], --forced_extraction_constant_names FORCED_EXTRACTION_CONSTANT_NAMES [FORCED_EXTRACTION_CONSTANT_NAMES ...]
    Extracts the constant value of the specified Constant name to .npy
    regardless of the mode specified.
    Cannot be used with --forced_extraction_op_names at the same time.
    e.g. --forced_extraction_constant_names aaa bbb ccc

  -d, --disable_auto_downcast
    Disables automatic downcast processing from Float64 to Float32 and INT64
    to INT32. Try enabling it and re-running it if you encounter type-related
    errors.

  -n, --non_verbose
    Do not show all information logs. Only error logs are displayed.3. In-script Usage$python
>>>fromscs4onnximportshrinking
>>>help(shrinking)Helponfunctionshrinkinginmodulescs4onnx.onnx_shrink_constant:

shrinking(input_onnx_file_path:Union[str,NoneType]='',output_onnx_file_path:Union[str,NoneType]='',onnx_graph:Union[onnx.onnx_ml_pb2.ModelProto,NoneType]=None,mode:Union[str,NoneType]='shrink',forced_extraction_op_names:List[str]=[],forced_extraction_constant_names:List[str]=[],disable_auto_downcast:Union[bool,NoneType]=Falsenon_verbose:Union[bool,NoneType]=False)->Tuple[onnx.onnx_ml_pb2.ModelProto,str]Parameters----------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.mode:Optional[str]ConstantValueCompressionMode.'shrink':Shareconstantvaluesinsidethemodelasmuchaspossible.Themodelsizeisslightlylargerbecausesomesharedconstantvaluesremaininsidethemodel,butperformanceismaximized.'npy':Outputsconstantvaluesusedrepeatedlyinthemodeltoanexternalfile.npy.Insteadofthesmallestmodelbodysize,thefileloadingoverheadisgreater.Default:shrinkforced_extraction_op_names:List[str]ExtractstheconstantvalueofthespecifiedOPnameto.npyregardlessofthemodespecified.Cannotbeusedwith--forced_extraction_constant_namesatthesametime.e.g.['aaa','bbb','ccc']forced_extraction_constant_names:List[str]ExtractstheconstantvalueofthespecifiedConstantnameto.npyregardlessofthemodespecified.Cannotbeusedwith--forced_extraction_op_namesatthesametime.e.g.['aaa','bbb','ccc']disable_auto_downcast:Optional[bool]DisablesautomaticdowncastprocessingfromFloat64toFloat32andINT64toINT32.Tryenablingitandre-runningitifyouencountertype-relatederrors.Default:Falsenon_verbose:Optional[bool]Donotshowallinformationlogs.Onlyerrorlogsaredisplayed.Default:FalseReturns-------shrunken_graph:onnx.ModelProtoShrunkenonnxModelProtonpy_file_paths:List[str]Listofpathstoexternallyoutput.npyfiles.Anemptylistisalwaysreturnedwhenin'shrink'mode.3. CLI Execution$scs4onnxinput.onnxoutput.onnx--modeshrink4. In-script Execution4-1. When an onnx file is used as inputIfoutput_onnx_file_pathis not specified, no .onnx file is output.fromscs4onnximportshrinkingshrunk_graph,npy_file_paths=shrinking(input_onnx_file_path='input.onnx',output_onnx_file_path='output.onnx',mode='npy',non_verbose=False)4-2. When entering the onnx.ModelProtoonnx_graphIf specified, ignoreinput_onnx_file_pathand processonnx_graph.fromscs4onnximportshrinkingshrunk_graph,npy_file_paths=shrinking(onnx_graph=graph,mode='npy',non_verbose=True)5. Sample5-1.shrinkmode sample297.8MB -> 67.4MB (.onnx)$scs4onnxgmflow_sintel_480x640.onnxgmflow_sintel_480x640_opt.onnx1.8GB -> 886.8MB (.onnx)$scs4onnxhitnet_sf_finalpass_720x960.onnxhitnet_sf_finalpass_720x960_opt.onnx1.8GB -> 2.1MB (.onnx) + 884.7MB (.npy)$scs4onnx\hitnet_sf_finalpass_720x960.onnx\hitnet_sf_finalpass_720x960_opt.onnx\--forced_extraction_op_namesGatherElements_660297.8MB -> 21.3MB (.onnx) + 46.1MB (.npy)$scs4onnx\gmflow_sintel_480x640.onnx\gmflow_sintel_480x640_opt.onnx\--forced_extraction_constant_names16465-2.npymode sample297.8MB -> 21.3MB (.onnx)5-3..npyfile view$python>>>importnumpyasnp>>>param=np.load('gmflow_sintel_480x640_shrunken_exported_1646.npy')>>>param.shape(8,1200,1200)>>>paramarray([[[0.,0.,0.,...,0.,0.,0.],[0.,0.,0.,...,0.,0.,0.],[0.,0.,0.,...,0.,0.,0.],...,[-100.,-100.,-100.,...,0.,0.,0.],[-100.,-100.,-100.,...,0.,0.,0.],[-100.,-100.,-100.,...,0.,0.,0.]]],dtype=float32)6. Sample ONNX modelsgmflow_sintel_480x640.onnx- Optical flow calculation -LICENSE Apache License 2.0hitnet_sf_finalpass_720x960.onnx- Stereo depth estimation -LICENSE Apache License 2.07. Referencehttps://docs.nvidia.com/deeplearning/tensorrt/onnx-graphsurgeon/docs/index.htmlhttps://github.com/NVIDIA/TensorRT/tree/main/tools/onnx-graphsurgeonhttps://github.com/PINTO0309/sne4onnxhttps://github.com/PINTO0309/snd4onnxhttps://github.com/PINTO0309/snc4onnxhttps://github.com/PINTO0309/sog4onnxhttps://github.com/PINTO0309/PINTO_model_zoo8. Issueshttps://github.com/PINTO0309/simple-onnx-processing-tools/issues