#
# Copyright (c) 2021 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

model:                                               # mandatory. used to specify model specific information.
  name: ssd_mobilenet_v2
  framework: onnxrt_qlinearops                       # mandatory. supported values are tensorflow, pytorch, or mxnet; allow new framework backend extension.
  inputs: image
  outputs: num_detections,detection_bboxes,detection_scores,detection_classes

quantization:                                        # optional. tuning constraints on model-wise for advance user to reduce tuning space.
  approach: post_training_static_quant
  calibration:
    sampling_size: 50                                # optional. default value is 100. used to set how many samples should be used in calibration.
    dataloader:                                      # optional. if not specified, user need construct a q_dataloader in code for neural_compressor.Quantization.
      dataset:
        COCORaw:
          root: /path/to/calibration/dataset         # NOTE: modify to coco2017 validation raw image folder
      filter:
        LabelBalance:
          size: 1
      transform:
        Resize:
          size: 300
  model_wise:                                        # optional. tuning constraints on model-wise for advance user to reduce tuning space.
    activation:
      algorithm: minmax
      scheme: sym
    weight:
      algorithm: minmax
      scheme: sym
  op_wise: {
    'BoxPredictor_1/BoxEncodingPredictor/BiasAdd':{
     'activation':  {'dtype': ['fp32']},
     'weight': {'dtype': ['fp32']}
     },
    'BoxPredictor_2/BoxEncodingPredictor/BiasAdd': {
     'activation':  {'dtype': ['fp32']},
     'weight': {'dtype': ['fp32']}
     },
    'Postprocessor/BatchMultiClassNonMaxSuppression/mul': {
     'activation':  {'dtype': ['fp32']},
     'weight': {'dtype': ['fp32']}
     },
    'Mul__157':{
     'activation':  {'dtype': ['fp32']},
     'weight': {'dtype': ['fp32']}
     },
    'Mul__152':{
     'activation':  {'dtype': ['fp32']},
     'weight': {'dtype': ['fp32']}
     },
    'Gather__*': {
     'activation':  {'dtype': ['fp32']},
     'weight': {'dtype': ['fp32']}
     },
    'add': {
     'activation':  {'dtype': ['fp32']},
     'weight': {'dtype': ['fp32']}
     },
  }

evaluation:                                          # optional. used to config evaluation process.
  accuracy:                                          # optional. required if user doesn't provide eval_func in neural_compressor.Quantization.
    metric: 
      COCOmAP: {}
    configs:                                         # optional. if not specified, use all cores in 1 socket.
      cores_per_instance: 28
      num_of_instance: 1
      kmp_blocktime: 1
    dataloader:                                      # optional. if not specified, user need construct a q_dataloader in code for neural_compressor.Quantization.
      batch_size: 16
      dataset:
        COCORaw:
          root: /path/to/evaluation/dataset          # NOTE: modify to coco2017 validation raw image datafolder
      transform:
        Resize:
          size: 300
 
  performance:
    iteration: 11
    configs:
      cores_per_instance: 28
      num_of_instance: 1
      kmp_blocktime: 1
    dataloader:
      batch_size: 16
      dataset:
        COCORaw:
          root: /path/to/evaluation/dataset
      transform:
        Resize:
          size: 300
    
tuning:
  accuracy_criterion:
    absolute:  0.01                                  # optional. default value is relative, other value is absolute. this example allows relative accuracy loss: 3%.
  exit_policy:
    timeout: 0                                       # optional. tuning timeout (seconds). default value is 0 which means early stop. combine with max_trials field to decide when to exit.
  random_seed: 9527                                  # optional. random seed for deterministic tuning.

