blob: 5fc5763216a4ebc171df9fa27a8944e67d3d59aa [file] [log] [blame]
Derek Lamberti27d83072019-02-05 16:00:08 +00001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8#include <armnn/INetwork.hpp>
Nattapat Chaimanowong7ac07f32019-03-20 11:51:14 +00009#include <armnn/Types.hpp>
Nina Drozd59e15b02019-04-25 15:45:20 +010010#include <armnn/Tensor.hpp>
Derek Lamberti27d83072019-02-05 16:00:08 +000011
Derek Lamberti27d83072019-02-05 16:00:08 +000012namespace armnn
13{
14
Nattapat Chaimanowong7ac07f32019-03-20 11:51:14 +000015struct QuantizerOptions
16{
Derek Lambertif90c56d2020-01-10 17:14:08 +000017 QuantizerOptions() : QuantizerOptions(DataType::QAsymmU8, false) {}
Nattapat Chaimanowong724e4802019-05-09 10:13:20 +010018
19 QuantizerOptions(DataType activationFormat) : QuantizerOptions(activationFormat, false) {}
20
21 QuantizerOptions(DataType activationFormat, bool preserveType)
22 : m_ActivationFormat(activationFormat)
23 , m_PreserveType(preserveType) {}
Nattapat Chaimanowong7ac07f32019-03-20 11:51:14 +000024
25 DataType m_ActivationFormat;
Nattapat Chaimanowong724e4802019-05-09 10:13:20 +010026 bool m_PreserveType;
Nattapat Chaimanowong7ac07f32019-03-20 11:51:14 +000027};
28
Derek Lamberti27d83072019-02-05 16:00:08 +000029using INetworkQuantizerPtr = std::unique_ptr<class INetworkQuantizer, void(*)(INetworkQuantizer* quantizer)>;
30
31/// Quantizer class Quantizes a float32 InputNetwork
32class INetworkQuantizer
33{
34public:
Nattapat Chaimanowong7ac07f32019-03-20 11:51:14 +000035 /// 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);
Derek Lamberti27d83072019-02-05 16:00:08 +000043
Matteo Martincigha8d572d2019-02-07 17:51:09 +000044 /// 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
Nina Drozd59e15b02019-04-25 15:45:20 +010047 /// Refine input network with a set of refinement data for specified LayerBindingId
48 virtual void Refine(const InputTensors& inputTensors) = 0;
49
Derek Lamberti27d83072019-02-05 16:00:08 +000050 /// Extract final quantized network
51 virtual INetworkPtr ExportNetwork() = 0;
52
53protected:
Matteo Martincigha8d572d2019-02-07 17:51:09 +000054 virtual ~INetworkQuantizer() {}
Derek Lamberti27d83072019-02-05 16:00:08 +000055};
56
57} //namespace armnn