/* Copyright (C) 2018. Huawei Technologies Co., Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the Apache License Version 2.0.You may not use this file except in compliance with the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * Apache License for more details at * http://www.apache.org/licenses/LICENSE-2.0 */ syntax = "proto3"; package domi; enum TargetType { MINI = 0; TINY = 1; LITE = 2; } // offline model message ModelDef { string name = 1; uint32 version = 2; uint64 memory_size = 10; uint32 stream_num = 11; uint32 event_num = 12; uint64 weight_size = 13; uint32 label_num = 15; repeated OpDef op = 20; TargetType target_type = 23; map attr = 30; }; // operator define message OpDef { string name = 1; string type = 2; uint32 id = 3; uint32 stream_id = 4; repeated string input_name = 5; repeated string src_name = 8; repeated int32 src_index = 9; repeated int64 input = 10; repeated int64 output = 11; repeated TensorDescriptor input_desc = 12; repeated TensorDescriptor output_desc = 13; repeated WeightDef weights = 14; repeated string dst_name = 15; repeated int32 dst_index = 16; repeated int64 workspace = 20; repeated uint32 workspace_bytes = 21; repeated string weight_name = 22; repeated bool is_input_const = 23; map attr = 30; QuantizeFactorParams quantize_factor = 31; oneof op_params { // start at 100 here SendOpParams sender_param = 100; RecvOpParams receiver_param = 200; ConvolutionOpParams convolution_param = 300; PoolingOpParams pooling_param = 400; EltwiseOpParams eltwise_param = 500; BatchNormOpParams batchnorm_param = 600; ScaleOpParams scale_param = 700; FullConnectionOpParams full_connection_param = 800; SoftmaxOpParams softmax_param = 900; ActivationOpParams activation_param = 1000; ReshapeOpParams reshape_param = 1100; } }; message SendOpParams { uint32 event_id = 1; }; message RecvOpParams { uint32 event_id = 1; }; enum QuantizeScaleType { VECTOR_SCALE = 0; SCALAR_SCALE = 1; } enum QuantizeScaleMode { NORMAL_MODE = 0; SQRT_MODE = 1; } enum QuantizeAlgorithm { NON_OFFSET_ALGO = 0; HALF_OFFSET_ALGO = 1; ALL_OFFSET_ALGO = 2; } message QuantizeFactor { QuantizeScaleMode scale_mode = 1; bytes scale_value = 2; int64 scale_offset = 3; bytes offset_data_value = 4; int64 offset_data_offset = 5; bytes offset_weight_value = 6; int64 offset_weight_offset = 7; bytes offset_pad_value = 8; int64 offset_pad_offset = 9; }; message QuantizeCalcFactor { bytes offsetw = 1; int64 offsetw_offset = 2; bytes offsetd = 3; int64 offsetd_offset = 4; bytes scalereq = 5; int64 scaledreq_offset = 6; bytes offsetdnext = 7; int64 offsetdnext_offset = 8; } message QuantizeFactorParams { QuantizeAlgorithm quantize_algo = 1; QuantizeScaleType scale_type = 2; QuantizeFactor quantize_param = 3; QuantizeFactor dequantize_param = 4; QuantizeFactor requantize_param = 5; QuantizeCalcFactor quantizecalc_param = 6; }; message ConvolutionOpParams { int32 mode = 1; int32 algo = 2; int32 pad_mode = 3; uint32 group = 4; uint32 num_output = 5; repeated uint32 pad = 10; repeated uint32 stride = 11; repeated uint32 dilation = 12; repeated uint32 kernel = 13; float alpha = 20; float beta = 21; WeightDef filter = 40; WeightDef bias = 41; bool relu_flag = 62; repeated uint32 adj = 70; repeated uint32 target_shape = 71; repeated uint32 before_pad = 72; }; message PoolingOpParams { int32 mode = 1; int32 nan_opt = 2; int32 pad_mode = 3; bool global_pooling = 4; repeated uint32 window = 10; repeated uint32 pad = 11; repeated uint32 stride = 12; bool ceil_mode = 13; int32 data_mode = 14; float alpha = 20; float beta = 21; repeated uint32 before_pad = 22; }; message EltwiseOpParams { int32 mode = 1; repeated float coeff = 2; float alpha = 3; float beta = 4; repeated WeightDef weight = 5; bool relu_flag = 6; }; message ActivationOpParams { int32 mode = 1; float coef = 2; float alpha = 3; float beta = 4; }; message BatchNormOpParams { int32 mode = 1; float alpha = 2; float beta = 3; double epsilon = 4;//optinal,[default = 1e-5] bool use_global_stats = 5; //optinal,by default true,testing mode float moving_average_fraction = 6; //optinal,[default = .999]; WeightDef estimated_mean = 7; WeightDef estimated_variance = 8; WeightDef scale = 9; WeightDef bias = 10; }; message ScaleOpParams { WeightDef scale = 1; WeightDef bias = 2; }; message ReshapeOpParams { float alpha = 1; float beta = 2; ShapeDef shape = 3; int32 axis = 4; int32 num_axes = 5; int32 format = 6; }; message SoftmaxOpParams { int32 algo = 1; int32 mode = 2; float alpha = 3; float beta = 4; }; message FullConnectionOpParams { WeightDef filter = 1; WeightDef bias = 2; uint32 num_output = 3; bool relu_flag = 12; }; message FlattenOpParams { float alpha = 1; float beta = 2; int32 start_axis = 3; int32 end_axis = 4; } message AddLimitedOpParams { float alpha = 1; float beta = 2; int32 axis = 3; bool broadcast = 4; repeated WeightDef weight = 10; }; message MulLimitedOpParams { float alpha = 1; float beta = 2; int32 axis = 3; bool broadcast = 4; repeated WeightDef weight = 10; }; message AddOpParams { float alpha = 1; float beta = 2; repeated WeightDef weight = 10; }; message MulOpParams { float alpha = 1; float beta = 2; repeated WeightDef weight = 10; }; message SubOpParams { float alpha = 1; float beta = 2; repeated WeightDef weight = 10; }; message BiasAddOpParams { float alpha = 1; float beta = 2; WeightDef bias = 10; }; message MatMulOpParams { float alpha = 1; float beta = 2; bool transposeX = 3; bool transposeW = 4; WeightDef filter = 10; WeightDef bias = 12; }; message RsqrtOpParams { float alpha = 1; float beta = 2; }; message WeightDef { int32 format = 1; int32 data_type = 2; ShapeDef shape = 3; bytes data = 4; int64 data_offset = 5; uint32 cmps_size = 6; bytes cmps_tab = 7; int64 cmps_tab_offset = 10; CompressInfo cmps_info = 8; AllOffsetQuantizeInfo alloffset_quantize_info = 11; } message ShapeDef { repeated int64 dim = 1; } enum DeviceType { NPU = 0; // In default, we will use NPU. CPU = 1; // CPU } message AllOffsetQuantizeInfo { float scale = 1; int32 offset = 2; } message TensorDescriptor { int32 format = 1; int32 data_type = 2; repeated int64 dim = 3; uint32 size = 4; bool reuse_input = 5; bool output_tensor = 7; DeviceType device_type = 8; bool input_tensor = 9; uint32 real_dim_cnt = 10; uint32 reuse_input_index = 11; AllOffsetQuantizeInfo alloffset_quantize_info = 12; } message CompressInfo { int32 blockRow = 1; // block row int32 blockCol = 2; // block col int32 fractalK = 3; // fractal K int32 fractalN = 4; // fractal N int32 lastFractalK = 5; // K of last fractal int32 lastFractalN = 6; // N of last fractal int32 cubeSize = 7; // cube's length int32 loadDir = 8; // data load directtiono 0:col load 1:row load } message AttrDef { message ListValue { repeated string s = 2; // "list(string)" repeated int64 i = 3 [packed = true]; // "list(int)" repeated float f = 4 [packed = true]; // "list(float)" repeated bool b = 5 [packed = true]; // "list(bool)" repeated uint32 u = 6 [packed = true]; // "list(uint)" repeated bytes bt = 7; } oneof value { string s = 2; // "string" int64 i = 3; // "int" float f = 4; // "float" bool b = 5; // "bool" uint32 u = 6; // "uint32" bytes bt = 7; ListValue list = 1; // any "list(...)" NamedAttrs func = 10; } } // A list of attr names and their values. The whole list is attached // with a string name. E.g., MatMul[T=float]. message NamedAttrs { string name = 1; map attr = 2; }