1 // 2 // Copyright © 2017 Arm Ltd. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 6 #pragma once 7 8 #include <armnn/INetwork.hpp> 9 #include <armnn/Types.hpp> 10 #include <armnn/Tensor.hpp> 11 12 namespace armnn 13 { 14 15 struct QuantizerOptions 16 { QuantizerOptionsarmnn::QuantizerOptions17 QuantizerOptions() : QuantizerOptions(DataType::QAsymmU8, false) {} 18 QuantizerOptionsarmnn::QuantizerOptions19 QuantizerOptions(DataType activationFormat) : QuantizerOptions(activationFormat, false) {} 20 QuantizerOptionsarmnn::QuantizerOptions21 QuantizerOptions(DataType activationFormat, bool preserveType) 22 : m_ActivationFormat(activationFormat) 23 , m_PreserveType(preserveType) {} 24 25 DataType m_ActivationFormat; 26 bool m_PreserveType; 27 }; 28 29 using INetworkQuantizerPtr = std::unique_ptr<class INetworkQuantizer, void(*)(INetworkQuantizer* quantizer)>; 30 31 /// Quantizer class Quantizes a float32 InputNetwork 32 class INetworkQuantizer 33 { 34 public: 35 /// Create Quantizer object and return raw pointer 36 static INetworkQuantizer* CreateRaw(INetwork* inputNetwork, const QuantizerOptions& options = QuantizerOptions()); 37 38 /// Create Quantizer object wrapped in unique_ptr 39 static INetworkQuantizerPtr Create(INetwork* inputNetwork, const QuantizerOptions& options = QuantizerOptions()); 40 41 /// Destroy Quantizer object 42 static void Destroy(INetworkQuantizer* quantizer); 43 44 /// Overrides the default quantization values for the input layer with the given id 45 virtual void OverrideInputRange(LayerBindingId layerId, float min, float max) = 0; 46 47 /// Refine input network with a set of refinement data for specified LayerBindingId 48 virtual void Refine(const InputTensors& inputTensors) = 0; 49 50 /// Extract final quantized network 51 virtual INetworkPtr ExportNetwork() = 0; 52 53 protected: ~INetworkQuantizer()54 virtual ~INetworkQuantizer() {} 55 }; 56 57 } //namespace armnn 58