• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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