13 #include <arm_compute/core/Types.h> 15 #if defined(ARMCOMPUTENEON_ENABLED) 19 #if defined(ARMCOMPUTECL_ENABLED) 26 inline arm_compute::NormalizationLayerInfo
31 const unsigned int depth = tensorInfo.
GetShape()[depthDimension];
44 const uint32_t normSize = depth * 2u + 1u;
48 const float alpha = 1.0f;
51 const float kappa = 0.0f;
54 const float beta = 0.5f;
56 return arm_compute::NormalizationLayerInfo(arm_compute::NormType::CROSS_MAP, normSize, alpha, beta, kappa,
false);
64 switch (armnnFunction)
83 inline arm_compute::ActivationLayerInfo
90 inline arm_compute::ActivationLayerInfo
93 if (activationDescPtr !=
nullptr)
98 return arm_compute::ActivationLayerInfo();
101 inline arm_compute::ActivationLayerInfo
106 if (activationDescPtr !=
nullptr)
109 *activationDescPtr));
111 return arm_compute::ActivationLayerInfo();
130 using arm_compute::PoolingType;
132 switch (poolingAlgorithm)
144 using arm_compute::DimensionRoundingType;
154 inline arm_compute::NormType
157 using arm_compute::NormType;
166 inline arm_compute::FullyConnectedLayerInfo
170 arm_compute::FullyConnectedLayerInfo fc_info;
176 inline arm_compute::FullyConnectedLayerInfo
178 arm_compute::ActivationLayerInfo activationLayerInfo)
180 arm_compute::FullyConnectedLayerInfo fc_info;
182 fc_info.activation_info = activationLayerInfo;
188 switch (resizeMethod)
191 return arm_compute::InterpolationPolicy::BILINEAR;
193 return arm_compute::InterpolationPolicy::NEAREST_NEIGHBOR;
203 if (softmaxDesc.
m_Axis == -1)
213 auto aclAxis = (
static_cast<T
>(dim) - 1);
214 aclAxis = aclAxis > 0 ? aclAxis -1 : aclAxis;
223 std::set<unsigned int> splitAxis;
225 for (
unsigned int i = 0; i < numSplit; ++i)
227 for (
unsigned int dimIdx = 0; dimIdx < numDimensions; ++dimIdx)
231 splitAxis.insert(dimIdx);
247 int sign = (armnnAxis < 0) ? -1 : 1;
248 int aclAxis = sign * rank - 1 - armnnAxis;
263 int positiveAxis = (axis < 0) ? rank + axis : axis;
264 return static_cast<unsigned int>(positiveAxis);
281 const std::vector<uint32_t>& vAxis,
284 auto reducedTensorInfo = input;
286 unsigned int outputRank = 0;
292 else if (vAxis.empty())
296 else if (vAxis.size() > reducedTensorInfo.GetNumDimensions())
302 outputRank = reducedTensorInfo.GetNumDimensions() -
armnn::numeric_cast<
unsigned int>(vAxis.size());
308 std::vector<unsigned int> dimSizes(outputRank, 1);
312 unsigned int outputIndex = 0;
313 for (
unsigned int i = 0; i < reducedTensorInfo.GetNumDimensions(); ++i)
315 if (std::find(vAxis.begin(), vAxis.end(), i) == vAxis.end())
317 dimSizes[outputIndex] =
armnn::numeric_cast<
unsigned int>(reducedTensorInfo.GetShape()[i]);
322 dimSizes[outputIndex] = 1;
328 reducedTensorInfo.SetShape(inferredShape);
329 return reducedTensorInfo;
333 #define IS_MULTI_AXES_REDUCE_SUPPORTED(func, input, desc, status) \ 334 armnn::TensorInfo inputTensorInfo = input; \ 335 unsigned int recalulatedAxis = 0; \ 336 std::vector<uint32_t> axes; \ 338 for (unsigned int i = 0; i != desc.m_vAxis.size(); ++i) \ 340 axes.emplace_back(desc.m_vAxis[i]); \ 342 const armnn::TensorInfo& reducedTensorInfo = \ 343 ComputeReductionTensorShape(input, axes, desc.m_KeepDims); \ 345 std::vector<uint32_t> singleAxis(1, desc.m_vAxis[i] - recalulatedAxis); \ 347 armnn::ReduceDescriptor newReduceDescriptor = desc; \ 348 newReduceDescriptor.m_vAxis.assign(singleAxis.begin(), singleAxis.end()); \ 350 status = func(inputTensorInfo, reducedTensorInfo, newReduceDescriptor); \ 356 if (!desc.m_KeepDims) \ 361 inputTensorInfo = reducedTensorInfo; \
A ViewsDescriptor for the SplitterLayer.
arm_compute::InterpolationPolicy ConvertResizeMethodToAclInterpolationPolicy(ResizeMethod resizeMethod)
int ComputeAclAxis(const int &armnnAxis, const armnn::TensorInfo &tensor)
Function to convert ArmNN axis (left to right) to ACL axis (right to left) ranging from [-rank...
int m_Axis
Scalar, defaulted to the last index (-1), specifying the dimension the activation will be performed o...
const TensorShape & GetShape() const
arm_compute::PoolingType ConvertPoolingAlgorithmToAclPoolingType(PoolingAlgorithm poolingAlgorithm)
uint32_t GetNumDimensions() const
Get the number of dimensions.
A ComparisonDescriptor for the ComparisonLayer.
arm_compute::NormalizationLayerInfo CreateAclNormalizationLayerInfoForL2Normalization(const armnn::TensorInfo &tensorInfo, armnn::DataLayout dataLayout)
bool m_TransposeWeightMatrix
Enable/disable transpose weight matrix.
arm_compute::ActivationLayerInfo ConvertAdditionalInfoToAclActivationLayerInfo(const QueueDescriptor &queueDescriptor)
NormalizationAlgorithmChannel
arm_compute::NormType ConvertNormalizationAlgorithmChannelToAclNormType(NormalizationAlgorithmChannel channelType)
uint32_t GetNumViews() const
Get the number of views.
ReduceOperation m_ReduceOperation
Specifies the reduction operation to execute.
Copyright (c) 2021 ARM Limited and Contributors.
std::set< unsigned int > ComputeSplitAxis(const armnn::SplitterDescriptor &desc, const TensorShape &input)
unsigned int ComputePositiveAxis(const int &axis, const armnn::TensorInfo &tensor)
Function to convert axis to its positive equivalent value.
arm_compute::ActivationLayerInfo::ActivationFunction ConvertActivationFunctionToAclActivationFunction(ActivationFunction armnnFunction)
arm_compute::ReductionOperation ConvertReductionOperationToAcl(const ReduceDescriptor &descriptor)
arm_compute::DimensionRoundingType ConvertOutputShapeRoundingToAclDimensionRoundingType(OutputShapeRounding rounding)
A ReduceDescriptor for the REDUCE operators.
A FullyConnectedDescriptor for the FullyConnectedLayer.
arm_compute::FullyConnectedLayerInfo ConvertFullyConnectedDescriptorToAclFullyConnectedLayerInfo(const FullyConnectedDescriptor &fullyConnectedDesc, const ActivationDescriptor *activationDesc)
#define ARMNN_ASSERT(COND)
An ActivationDescriptor for the ActivationLayer.
min(a, max(b, input)) ReLu1 & ReLu6.
ComparisonOperation m_Operation
Specifies the comparison operation to execute.
const uint32_t * GetViewSizes(uint32_t idx) const
Get the view sizes at the int value idx.
float m_A
Alpha upper bound value used by the activation functions. (BoundedReLu, Linear, TanH, Elu).
const T * GetAdditionalInformation() const
std::enable_if_t< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > numeric_cast(Source source)
arm_compute::ComparisonOperation ConvertComparisonOperationToAcl(const ComparisonDescriptor &descriptor)
unsigned int GetNumDimensions() const
const TensorInfo ComputeReductionTensorShape(const armnn::TensorInfo &input, const std::vector< uint32_t > &vAxis, const bool keepDims)
Function to compute the output tensor shape based on the axes and if keepDims is set.
T ComputeSoftmaxAclAxis(const SoftmaxDescriptor &softmaxDesc, const armnn::TensorInfo &tensor)
float m_B
Beta lower bound value used by the activation functions. (BoundedReLu, Linear, TanH).
A SoftmaxDescriptor for the SoftmaxLayer.
ActivationFunction m_Function
The activation function to use (Sigmoid, TanH, Linear, ReLu, BoundedReLu, SoftReLu, LeakyReLu, Abs, Sqrt, Square, Elu).
arm_compute::ActivationLayerInfo ConvertActivationDescriptorToAclActivationLayerInfo(const ActivationDescriptor &actDesc)