From 6b612f5fa1fee9528f2f87491fe7edb3887d9817 Mon Sep 17 00:00:00 2001 From: Michele Di Giorgio Date: Thu, 5 Sep 2019 12:30:22 +0100 Subject: COMPMID-2310: CLGenerateProposalsLayer: support for QASYMM8 Change-Id: I48b77e09857cd43f9498d28e8f4bf346e3d7110d Signed-off-by: Michele Di Giorgio Reviewed-on: https://review.mlplatform.org/c/1969 Reviewed-by: Pablo Marquez Comments-Addressed: Arm Jenkins Tested-by: Arm Jenkins --- tests/validation/CL/GenerateProposalsLayer.cpp | 20 ++++++++++- .../validation/fixtures/ComputeAllAnchorsFixture.h | 39 +++++++++++++++++----- tests/validation/reference/ComputeAllAnchors.cpp | 9 +++++ 3 files changed, 59 insertions(+), 9 deletions(-) (limited to 'tests') diff --git a/tests/validation/CL/GenerateProposalsLayer.cpp b/tests/validation/CL/GenerateProposalsLayer.cpp index 4ebffd7e79..bfad8e8381 100644 --- a/tests/validation/CL/GenerateProposalsLayer.cpp +++ b/tests/validation/CL/GenerateProposalsLayer.cpp @@ -82,6 +82,8 @@ const auto ComputeAllInfoDataset = framework::dataset::make("ComputeAllInfo", ComputeAnchorsInfo(100U, 100U, 1. / 4.f), }); + +constexpr AbsoluteTolerance tolerance_qsymm16(1); } // namespace TEST_SUITE(CL) @@ -364,7 +366,7 @@ DATA_TEST_CASE(IntegrationTestCaseGenerateProposals, framework::DatasetMode::ALL proposals_final.allocator()->allocate(); select_proposals.run(); - // Select the first N entries of the proposals + // Select the first N entries of the scores CLTensor scores_final; CLSlice select_scores; select_scores.configure(&scores_out, &scores_final, Coordinates(0), Coordinates(N)); @@ -395,6 +397,22 @@ FIXTURE_DATA_TEST_CASE(ComputeAllAnchors, CLComputeAllAnchorsFixture, fram TEST_SUITE_END() // FP16 TEST_SUITE_END() // Float +template +using CLComputeAllAnchorsQuantizedFixture = ComputeAllAnchorsQuantizedFixture; + +TEST_SUITE(Quantized) +TEST_SUITE(QASYMM8) +FIXTURE_DATA_TEST_CASE(ComputeAllAnchors, CLComputeAllAnchorsQuantizedFixture, framework::DatasetMode::ALL, + combine(combine(combine(framework::dataset::make("NumAnchors", { 2, 4, 8 }), ComputeAllInfoDataset), + framework::dataset::make("DataType", { DataType::QSYMM16 })), + framework::dataset::make("QuantInfo", { QuantizationInfo(0.125f, 0) }))) +{ + // Validate output + validate(CLAccessor(_target), _reference, tolerance_qsymm16); +} +TEST_SUITE_END() // QASYMM8 +TEST_SUITE_END() // Quantized + TEST_SUITE_END() // GenerateProposals TEST_SUITE_END() // CL diff --git a/tests/validation/fixtures/ComputeAllAnchorsFixture.h b/tests/validation/fixtures/ComputeAllAnchorsFixture.h index 6f2db3e623..e837bd4838 100644 --- a/tests/validation/fixtures/ComputeAllAnchorsFixture.h +++ b/tests/validation/fixtures/ComputeAllAnchorsFixture.h @@ -41,14 +41,14 @@ namespace test namespace validation { template -class ComputeAllAnchorsFixture : public framework::Fixture +class ComputeAllAnchorsGenericFixture : public framework::Fixture { public: template - void setup(size_t num_anchors, const ComputeAnchorsInfo &info, DataType data_type) + void setup(size_t num_anchors, const ComputeAnchorsInfo &info, DataType data_type, QuantizationInfo qinfo) { - _target = compute_target(num_anchors, data_type, info); - _reference = compute_reference(num_anchors, data_type, info); + _target = compute_target(num_anchors, data_type, info, qinfo); + _reference = compute_reference(num_anchors, data_type, info, qinfo); } protected: @@ -58,11 +58,11 @@ protected: library->fill_tensor_uniform(tensor, 0, T(0), T(100)); } - TensorType compute_target(size_t num_anchors, DataType data_type, const ComputeAnchorsInfo &info) + TensorType compute_target(size_t num_anchors, DataType data_type, const ComputeAnchorsInfo &info, QuantizationInfo qinfo) { // Create tensors TensorShape anchors_shape(4, num_anchors); - TensorType anchors = create_tensor(anchors_shape, data_type); + TensorType anchors = create_tensor(anchors_shape, data_type, 1, qinfo); TensorType all_anchors; // Create and configure function @@ -88,10 +88,11 @@ protected: SimpleTensor compute_reference(size_t num_anchors, DataType data_type, - const ComputeAnchorsInfo &info) + const ComputeAnchorsInfo &info, + QuantizationInfo qinfo) { // Create reference tensor - SimpleTensor anchors(TensorShape(4, num_anchors), data_type); + SimpleTensor anchors(TensorShape(4, num_anchors), data_type, 1, qinfo); // Fill reference tensor fill(anchors); @@ -101,6 +102,28 @@ protected: TensorType _target{}; SimpleTensor _reference{}; }; + +template +class ComputeAllAnchorsFixture : public ComputeAllAnchorsGenericFixture +{ +public: + template + void setup(size_t num_anchors, const ComputeAnchorsInfo &info, DataType data_type) + { + ComputeAllAnchorsGenericFixture::setup(num_anchors, info, data_type, QuantizationInfo()); + } +}; + +template +class ComputeAllAnchorsQuantizedFixture : public ComputeAllAnchorsGenericFixture +{ +public: + template + void setup(size_t num_anchors, const ComputeAnchorsInfo &info, DataType data_type, QuantizationInfo qinfo) + { + ComputeAllAnchorsGenericFixture::setup(num_anchors, info, data_type, qinfo); + } +}; } // namespace validation } // namespace test } // namespace arm_compute diff --git a/tests/validation/reference/ComputeAllAnchors.cpp b/tests/validation/reference/ComputeAllAnchors.cpp index 3f0498015a..60be7ef8a8 100644 --- a/tests/validation/reference/ComputeAllAnchors.cpp +++ b/tests/validation/reference/ComputeAllAnchors.cpp @@ -73,6 +73,15 @@ SimpleTensor compute_all_anchors(const SimpleTensor &anchors, const Comput } template SimpleTensor compute_all_anchors(const SimpleTensor &anchors, const ComputeAnchorsInfo &info); template SimpleTensor compute_all_anchors(const SimpleTensor &anchors, const ComputeAnchorsInfo &info); + +template <> +SimpleTensor compute_all_anchors(const SimpleTensor &anchors, const ComputeAnchorsInfo &info) +{ + SimpleTensor anchors_tmp = convert_from_symmetric(anchors); + SimpleTensor all_anchors_tmp = compute_all_anchors(anchors_tmp, info); + SimpleTensor all_anchors = convert_to_symmetric(all_anchors_tmp, anchors.quantization_info()); + return all_anchors; +} } // namespace reference } // namespace validation } // namespace test -- cgit v1.2.1