aboutsummaryrefslogtreecommitdiff
path: root/arm_compute/core
diff options
context:
space:
mode:
authorGeorgios Pinitas <georgios.pinitas@arm.com>2018-07-16 14:40:09 +0100
committerAnthony Barbier <anthony.barbier@arm.com>2018-11-02 16:54:54 +0000
commite29acf14f5c3f2d2c20799a1ea3e4aad50dff834 (patch)
treeca7a01ed169605404b2b954fc0d174ee00e121f2 /arm_compute/core
parent76259ca5a74a60ef2b80f29431ab53bbac9fdb63 (diff)
downloadComputeLibrary-e29acf14f5c3f2d2c20799a1ea3e4aad50dff834.tar.gz
COMPMID-1365: Add support for NHWC in CLDepthConcatenateLayer
Change-Id: I3ed55bdb95d888aff0b0b76fb841bf1669659308 Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/139963 Tested-by: Jenkins <bsgcomp@arm.com> Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
Diffstat (limited to 'arm_compute/core')
-rw-r--r--arm_compute/core/CL/kernels/CLDepthConcatenateLayerKernel.h11
-rw-r--r--arm_compute/core/CL/kernels/CLWidthConcatenateLayerKernel.h2
-rw-r--r--arm_compute/core/Utils.h31
-rw-r--r--arm_compute/core/utils/misc/ShapeCalculator.h25
4 files changed, 36 insertions, 33 deletions
diff --git a/arm_compute/core/CL/kernels/CLDepthConcatenateLayerKernel.h b/arm_compute/core/CL/kernels/CLDepthConcatenateLayerKernel.h
index cbcab8f554..ff8009085f 100644
--- a/arm_compute/core/CL/kernels/CLDepthConcatenateLayerKernel.h
+++ b/arm_compute/core/CL/kernels/CLDepthConcatenateLayerKernel.h
@@ -52,7 +52,7 @@ public:
~CLDepthConcatenateLayerKernel() = default;
/** Initialise the kernel's inputs and output
*
- * @param[in] input Input tensor. Data types supported: F16/F32.
+ * @param[in] input Input tensor. Data types supported: QASYMM8/F16/F32.
* @param[in] depth_offset The offset on the Z axis.
* @param[in,out] output Output tensor. Data types supported: Same as @p input.
*
@@ -61,6 +61,15 @@ public:
*
*/
void configure(const ICLTensor *input, unsigned int depth_offset, ICLTensor *output);
+ /** Static function to check if given info will lead to a valid configuration of @ref CLDepthConcatenateLayerKernel
+ *
+ * @param[in] input Input tensor info. Data types supported: QASYMM8/F16/F32
+ * @param[in] depth_offset The offset on the Z axis.
+ * @param[in] output Output tensor info. Data types supported: Same as @p input.
+ *
+ * @return a status
+ */
+ static Status validate(const ITensorInfo *input, unsigned int depth_offset, const ITensorInfo *output);
// Inherited methods overridden:
void run(const Window &window, cl::CommandQueue &queue) override;
diff --git a/arm_compute/core/CL/kernels/CLWidthConcatenateLayerKernel.h b/arm_compute/core/CL/kernels/CLWidthConcatenateLayerKernel.h
index d206eb0da7..7ecd9276aa 100644
--- a/arm_compute/core/CL/kernels/CLWidthConcatenateLayerKernel.h
+++ b/arm_compute/core/CL/kernels/CLWidthConcatenateLayerKernel.h
@@ -58,7 +58,7 @@ public:
*
*/
void configure(const ICLTensor *input, unsigned int width_offset, ICLTensor *output);
- /** Static function to check if given info will lead to a valid configuration of @ref CLDepthConcatenateLayerKernel
+ /** Static function to check if given info will lead to a valid configuration of @ref CLWidthConcatenateLayerKernel
*
* @param[in] input Input tensor info. Data types supported: U8/S8/QASYMM8/U16/S16/F16/U32/S32/F32
* @param[in] width_offset The offset on the X axis.
diff --git a/arm_compute/core/Utils.h b/arm_compute/core/Utils.h
index 729a46fe3f..1cdfd389db 100644
--- a/arm_compute/core/Utils.h
+++ b/arm_compute/core/Utils.h
@@ -630,37 +630,6 @@ inline uint32_t calculate_matrix_scale(const int16_t *matrix, unsigned int matri
return std::max(1, std::abs(std::accumulate(matrix, matrix + size, 0)));
}
-/** Calculate the output shapes of the depth concatenate function.
- *
- * @param[in] inputs_vector The vector that stores all the pointers to input.
- *
- * @return the output shape
- */
-template <typename T>
-TensorShape calculate_depth_concatenate_shape(const std::vector<T *> &inputs_vector)
-{
- TensorShape out_shape = inputs_vector[0]->info()->tensor_shape();
-
- size_t max_x = 0;
- size_t max_y = 0;
- size_t depth = 0;
-
- for(const auto &tensor : inputs_vector)
- {
- ARM_COMPUTE_ERROR_ON(tensor == nullptr);
- const TensorShape shape = tensor->info()->tensor_shape();
- max_x = std::max(shape.x(), max_x);
- max_y = std::max(shape.y(), max_y);
- depth += shape.z();
- }
-
- out_shape.set(0, max_x);
- out_shape.set(1, max_y);
- out_shape.set(2, depth);
-
- return out_shape;
-}
-
/** Adjust tensor shape size if width or height are odd for a given multi-planar format. No modification is done for other formats.
*
* @note Adding here a few links discussing the issue of odd size and sharing the same solution:
diff --git a/arm_compute/core/utils/misc/ShapeCalculator.h b/arm_compute/core/utils/misc/ShapeCalculator.h
index 9bf6b046b4..e5516ba154 100644
--- a/arm_compute/core/utils/misc/ShapeCalculator.h
+++ b/arm_compute/core/utils/misc/ShapeCalculator.h
@@ -414,6 +414,31 @@ inline TensorShape get_shape_from_info(ITensorInfo *info)
}
template <typename T>
+inline TensorShape calculate_depth_concatenate_shape(const std::vector<T *> &inputs_vector)
+{
+ TensorShape out_shape = get_shape_from_info(inputs_vector[0]);
+
+ size_t max_x = 0;
+ size_t max_y = 0;
+ size_t depth = 0;
+
+ for(const auto &tensor : inputs_vector)
+ {
+ ARM_COMPUTE_ERROR_ON(tensor == nullptr);
+ const TensorShape shape = get_shape_from_info(tensor);
+ max_x = std::max(shape.x(), max_x);
+ max_y = std::max(shape.y(), max_y);
+ depth += shape.z();
+ }
+
+ out_shape.set(0, max_x);
+ out_shape.set(1, max_y);
+ out_shape.set(2, depth);
+
+ return out_shape;
+}
+
+template <typename T>
inline TensorShape calculate_width_concatenate_shape(const std::vector<T *> &inputs_vector)
{
TensorShape out_shape = get_shape_from_info(inputs_vector[0]);