diff options
author | Matteo Martincigh <matteo.martincigh@arm.com> | 2019-02-07 17:51:09 +0000 |
---|---|---|
committer | Matteo Martincigh <matteo.martincigh@arm.com> | 2019-02-08 12:23:05 +0000 |
commit | a8d572dc48f47e66cd7abd6ad9b2d3a0f40ea94b (patch) | |
tree | 5de7809a8fbc19d6d2a940a51a982bd633156945 /src/armnn/OverrideInputRangeVisitor.cpp | |
parent | e0a4ad8a8e6ef271883e8029985eeab16d838972 (diff) | |
download | armnn-a8d572dc48f47e66cd7abd6ad9b2d3a0f40ea94b.tar.gz |
IVGCVSW-2607 Implement Input range override mechanism
* Added the OverrideInputRange method to the Quantizer API
* Created OverrideInputRangeVisitor to implement the override mechanism
* Moved the quantizer utility functions to the new NetworkQuantizerUtils files
* Moved the map of quantization ranges out of the StaticRangeVisitor
and into the NetworkQuantizer
* Added unit tests
* Code refactoring and cleanup
Change-Id: I9c1d006c1b6a35fbc04584a832fbe489f8f9276d
Signed-off-by: Matteo Martincigh <matteo.martincigh@arm.com>
Diffstat (limited to 'src/armnn/OverrideInputRangeVisitor.cpp')
-rw-r--r-- | src/armnn/OverrideInputRangeVisitor.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/armnn/OverrideInputRangeVisitor.cpp b/src/armnn/OverrideInputRangeVisitor.cpp new file mode 100644 index 0000000000..4c70d3f4a6 --- /dev/null +++ b/src/armnn/OverrideInputRangeVisitor.cpp @@ -0,0 +1,47 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "OverrideInputRangeVisitor.hpp" +#include "NetworkQuantizerUtils.hpp" +#include "Layer.hpp" + +#include <boost/assert.hpp> + +namespace armnn +{ + +OverrideInputRangeVisitor::OverrideInputRangeVisitor(std::unordered_map<LayerGuid, MinMaxRanges>& guidToRangesMap, + LayerBindingId layerId, + const MinMaxRange& minMaxRange) + : m_GuidToRangesMap(guidToRangesMap) + , m_LayerId(layerId) + , m_MinMaxRange(minMaxRange) +{} + +void OverrideInputRangeVisitor::VisitInputLayer(const IConnectableLayer *layer, LayerBindingId id, const char *name) +{ + if (m_LayerId != id) + { + // Not the layer we are looking for + return; + } + + SetRange(layer); +} + +void OverrideInputRangeVisitor::SetRange(const IConnectableLayer* layer) +{ + BOOST_ASSERT(layer); + + auto& ranges = m_GuidToRangesMap[layer->GetGuid()]; + + if (ranges.size() < layer->GetNumOutputSlots()) + { + ranges.resize(layer->GetNumOutputSlots()); + } + ranges[0] = m_MinMaxRange; +} + +} // namespace armnn |