diff options
author | Jim Flynn <jim.flynn@arm.com> | 2019-05-02 11:33:25 +0100 |
---|---|---|
committer | Ruomei Yan <ruomei.yan@arm.com> | 2019-05-08 16:10:59 +0000 |
commit | f92dfced4498f12b9315c0fa377ba7be8998b607 (patch) | |
tree | 4015208a5493ea414babba76c18bc72b6dbef875 /src/armnn/NetworkQuantizer.hpp | |
parent | a4247d5a50502811a6956dffd990c0254622b7e1 (diff) | |
download | armnn-f92dfced4498f12b9315c0fa377ba7be8998b607.tar.gz |
IVGCVSW-2833 Add Dynamic Quantization
Change-Id: Iba91e3f3625639f01d66f81a9f3e419e0e285d66
Signed-off-by: Jim Flynn <jim.flynn@arm.com>
Diffstat (limited to 'src/armnn/NetworkQuantizer.hpp')
-rw-r--r-- | src/armnn/NetworkQuantizer.hpp | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/src/armnn/NetworkQuantizer.hpp b/src/armnn/NetworkQuantizer.hpp index 4f6359f36d..d384bdc545 100644 --- a/src/armnn/NetworkQuantizer.hpp +++ b/src/armnn/NetworkQuantizer.hpp @@ -6,9 +6,12 @@ #pragma once #include <armnn/INetwork.hpp> -#include <armnn/INetworkQuantizer.hpp> +#include <armnnQuantizer/INetworkQuantizer.hpp> +#include <armnn/IRuntime.hpp> #include <armnn/Types.hpp> +#include <armnn/Optional.hpp> +#include "DynamicQuantizationVisitor.hpp" #include "RangeTracker.hpp" namespace armnn @@ -18,21 +21,41 @@ class NetworkQuantizer : public INetworkQuantizer { public: NetworkQuantizer(INetwork* inputNetwork, const QuantizerOptions& options) - : m_InputNetwork(inputNetwork), m_Options(options) {} + : m_InputNetwork(inputNetwork), + m_NetworkId(0), + m_Runtime(nullptr, &IRuntime::Destroy), + m_RefineCount(0), + m_Options(options) {} void OverrideInputRange(LayerBindingId layerId, float min, float max) override; void Refine(const InputTensors& inputTensors) override; + + // Required for testing? Need some way to get min/max in RangeTracker (m_Ranges) + std::pair<float, float> GetMinMaxRange(LayerGuid guid, unsigned int idx) { return m_Ranges.GetRange(guid, idx); } INetworkPtr ExportNetwork() override; private: /// Original input network to quantize INetwork* m_InputNetwork; + NetworkId m_NetworkId; + + // if we are run in dynamic mode this unique pointer will hold + // the runtime between invocations of the Refine method. + IRuntimePtr m_Runtime; + + Optional<DynamicQuantizationVisitor> m_DynamicQuantizationVisitor; + + // counts the number of times refine is called + unsigned int m_RefineCount; + /// Mapping from Guid to an array of ranges for outputs RangeTracker m_Ranges; /// Options for the NetworkQuantizer QuantizerOptions m_Options; + + std::pair<float, float> FindMinMax(ITensorHandle* tensorHandle); }; } //namespace armnn |