15 namespace optimizations
29 ReplaceConstDequantisationLayer(graph,
30 PolymorphicDowncast<ConstantLayer*>(&base),
31 PolymorphicDowncast<DequantizeLayer*>(&child));
39 static void ReplaceConstDequantisationLayer(
Graph&,
43 ARMNN_LOG(
info) <<
"ConvertConstDequantisationLayersToConstLayersImpl::ReplaceConstDequantisationLayer()";
53 bool requiresPermute =
false;
66 ARMNN_LOG(
info) <<
"ConvertConstDequantisationLayersToConstLayersImpl:: Connected to "
68 auto conv2dLayer = PolymorphicDowncast<Convolution2dLayer*>(&connection->GetOwningLayer());
71 ARMNN_LOG(
info) <<
"ConvertConstDequantisationLayersToConstLayersImpl:: Connected to "
72 "Convolution layer and requires permute on weights. ";
73 requiresPermute =
true;
85 std::vector<float> newValues(outputDequantizeInfo.
GetNumElements());
90 ARMNN_LOG(
info) <<
"ConvertConstDequantisationLayersToConstLayersImpl:: Converting FP16 -> FP32";
101 ARMNN_LOG(
info) <<
"ConvertConstDequantisationLayersToConstLayersImpl:: Converting INT8 -> FP32";
113 ARMNN_LOG(
info) <<
"ConvertConstDequantisationLayersToConstLayersImpl:: Permuting the constant data.";
115 std::vector<float> permutedValues(outputDequantizeInfo.
GetNumElements());
117 newValues.data(), permutedValues.data(),
137 for (
unsigned int i = numConnections; i < constantLayer->
GetOutputSlot(0).GetNumConnections(); ++i)
148 static void ConvertInt8To32(
const void* srcInt8Buffer,
151 const int32_t offset,
152 float* dstFloat32Buffer)
157 ARMNN_LOG(info) <<
"ConvertConstDequantisationLayersToConstLayersImpl:: scale: " << scale;
158 ARMNN_LOG(info) <<
"ConvertConstDequantisationLayersToConstLayersImpl:: offset: " << offset;
160 const auto* pInt8 =
static_cast<const int8_t*
>(srcInt8Buffer);
162 for (
size_t i = 0; i < numElements; ++i)
164 dstFloat32Buffer[i] =
static_cast<float>(pInt8[i] - offset) * scale;
#define ARMNN_ASSERT(COND)
#define ARMNN_LOG(severity)
A tensor defined by a TensorInfo (shape and data type) and an immutable backing store.
A layer that the constant data can be bound to.
std::shared_ptr< ConstTensorHandle > m_LayerOutput
This layer dequantizes the input tensor.
const OutputSlot & GetOutputSlot(unsigned int index=0) const override
Get the const output slot handle by slot index.
unsigned int GetNumOutputSlots() const override
Returns the number of connectable output slots.
const InputSlot & GetInputSlot(unsigned int index) const override
Get a const input slot handle by slot index.
LayerType GetType() const override
Returns the armnn::LayerType of this layer.
const InputSlot * GetConnection(unsigned int index) const override
void MoveAllConnections(OutputSlot &destination)
Moves all connections to another OutputSlot.
unsigned int GetNumConnections() const override
Layer & GetOwningLayer() const
void SetTensorInfo(const TensorInfo &tensorInfo) override
const TensorInfo & GetTensorInfo() const override
float GetQuantizationScale() const
int32_t GetQuantizationOffset() const
unsigned int GetNumElements() const
const TensorShape & GetShape() const
void SetConstant(const bool IsConstant=true)
Marks the data corresponding to this tensor info as constant.
DataType GetDataType() const
void Run(Graph &graph, InputSlot &connection) const
~ConvertConstDequantisationLayersToConstLayersImpl()=default
ConvertConstDequantisationLayersToConstLayersImpl()=default
static void ConvertFloat16To32(const void *srcFloat16Buffer, size_t numElements, float *dstFloat32Buffer)
Copyright (c) 2021 ARM Limited and Contributors.
constexpr const char * GetDataTypeName(DataType dataType)
constexpr unsigned int GetDataTypeSize(DataType dataType)
void Permute(const armnn::TensorShape &dstShape, const armnn::PermutationVector &mappings, const void *src, void *dst, size_t dataTypeSize)