diff options
author | Sadik Armagan <sadik.armagan@arm.com> | 2021-06-01 09:24:52 +0100 |
---|---|---|
committer | Sadik Armagan <sadik.armagan@arm.com> | 2021-06-02 13:00:56 +0000 |
commit | 483c811ea6fd0e7801aac1afd979ed02a649064b (patch) | |
tree | a0969c8786528334b62043b40983fa21d54d524e /src/backends/backendsCommon/test/layerTests/BatchNormalizationTestImpl.cpp | |
parent | 31f86bfeb311ccc0c6ed94c35a78a51551148ea4 (diff) | |
download | armnn-483c811ea6fd0e7801aac1afd979ed02a649064b.tar.gz |
IVGCVSW-5962 Remove boost::multi_array
* Replaced all instances of boost::multi_array with flat vectors.
* Updated LayerTestResult struct with new member variables.
* Updated CompareTensor function to compare flat vectors and the shape.
* Removed MakeTensor function from TensorHelpers.hpp.
* Removed GetTensorShapeAsArray function from LayerTestResult.hpp.
* Removed boost::array usage.
* Removed boost::extents usages.
* Removed boost::random usages.
Signed-off-by: Matthew Sloyan <matthew.sloyan@arm.com>
Signed-off-by: Sadik Armagan <sadik.armagan@arm.com>
Change-Id: Iccde9d6640b534940292ff048fb80c00b38c4743
Diffstat (limited to 'src/backends/backendsCommon/test/layerTests/BatchNormalizationTestImpl.cpp')
-rw-r--r-- | src/backends/backendsCommon/test/layerTests/BatchNormalizationTestImpl.cpp | 90 |
1 files changed, 49 insertions, 41 deletions
diff --git a/src/backends/backendsCommon/test/layerTests/BatchNormalizationTestImpl.cpp b/src/backends/backendsCommon/test/layerTests/BatchNormalizationTestImpl.cpp index 969d5dbcd1..4311faff4e 100644 --- a/src/backends/backendsCommon/test/layerTests/BatchNormalizationTestImpl.cpp +++ b/src/backends/backendsCommon/test/layerTests/BatchNormalizationTestImpl.cpp @@ -58,18 +58,16 @@ LayerTestResult<T, 4> BatchNormTestImpl( tensorInfo.SetQuantizationOffset(qOffset); } - auto inputTensor = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputValues, qScale, qOffset)); + auto inputTensor = QuantizedVector<T>(inputValues, qScale, qOffset); // These values are per-channel of the input. - auto mean = MakeTensor<T, 1>(tensorInfo, QuantizedVector<T>({ 3, -2 }, qScale, qOffset)); - auto variance = MakeTensor<T, 1>(tensorInfo, QuantizedVector<T>({ 4, 9 }, qScale, qOffset)); - auto beta = MakeTensor<T, 1>(tensorInfo, QuantizedVector<T>({ 3, 2 }, qScale, qOffset)); - auto gamma = MakeTensor<T, 1>(tensorInfo, QuantizedVector<T>({ 2, 1 }, qScale, qOffset)); + auto mean = QuantizedVector<T>({ 3, -2 }, qScale, qOffset); + auto variance = QuantizedVector<T>({ 4, 9 }, qScale, qOffset); + auto beta = QuantizedVector<T>({ 3, 2 }, qScale, qOffset); + auto gamma = QuantizedVector<T>({ 2, 1 }, qScale, qOffset); - LayerTestResult<T, 4> result(outputTensorInfo); - - result.outputExpected = MakeTensor<T, 4>(inputTensorInfo, - QuantizedVector<T>(expectedOutputValues, qScale, qOffset)); + std::vector<T> actualOutput(outputTensorInfo.GetNumElements()); + std::vector<T> expectedOutput = QuantizedVector<T>(expectedOutputValues, qScale, qOffset); std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo); std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo); @@ -88,10 +86,10 @@ LayerTestResult<T, 4> BatchNormTestImpl( descriptor.m_Parameters.m_DataLayout = dataLayout; armnn::WorkloadInfo info; - AllocateAndCopyDataToITensorHandle(&meanTensor, &mean[0]); - AllocateAndCopyDataToITensorHandle(&varianceTensor, &variance[0]); - AllocateAndCopyDataToITensorHandle(&betaTensor, &beta[0]); - AllocateAndCopyDataToITensorHandle(&gammaTensor, &gamma[0]); + AllocateAndCopyDataToITensorHandle(&meanTensor, mean.data()); + AllocateAndCopyDataToITensorHandle(&varianceTensor, variance.data()); + AllocateAndCopyDataToITensorHandle(&betaTensor, beta.data()); + AllocateAndCopyDataToITensorHandle(&gammaTensor, gamma.data()); AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get()); AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get()); @@ -101,13 +99,16 @@ LayerTestResult<T, 4> BatchNormTestImpl( inputHandle->Allocate(); outputHandle->Allocate(); - CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0][0]); + CopyDataToITensorHandle(inputHandle.get(), inputTensor.data()); workload->Execute(); - CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); + CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get()); - return result; + return LayerTestResult<T, 4>(actualOutput, + expectedOutput, + outputHandle->GetShape(), + outputTensorInfo.GetShape()); } template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>> @@ -140,20 +141,19 @@ LayerTestResult<T,4> BatchNormTestNhwcImpl( tensorInfo.SetQuantizationOffset(qOffset); } - auto input = MakeTensor<T, 4>(inputTensorInfo, - QuantizedVector<T>( + auto input = QuantizedVector<T>( { 1.f, 1.f, 4.f, 1.f, 4.f, 4.f, 2.f, 1.f, 1.f, -2.f, 6.f, 4.f }, - qScale, qOffset)); + qScale, qOffset); + // These values are per-channel of the input. - auto mean = MakeTensor<T, 1>(tensorInfo, QuantizedVector<T>({ 3, -2 }, qScale, qOffset)); - auto variance = MakeTensor<T, 1>(tensorInfo, QuantizedVector<T>({ 4, 9 }, qScale, qOffset)); - auto beta = MakeTensor<T, 1>(tensorInfo, QuantizedVector<T>({ 3, 2 }, qScale, qOffset)); - auto gamma = MakeTensor<T, 1>(tensorInfo, QuantizedVector<T>({ 2, 1 }, qScale, qOffset)); - LayerTestResult<T,4> ret(outputTensorInfo); + auto mean = QuantizedVector<T>({ 3, -2 }, qScale, qOffset); + auto variance = QuantizedVector<T>({ 4, 9 }, qScale, qOffset); + auto beta = QuantizedVector<T>({ 3, 2 }, qScale, qOffset); + auto gamma = QuantizedVector<T>({ 2, 1 }, qScale, qOffset); std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo); std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo); @@ -179,30 +179,34 @@ LayerTestResult<T,4> BatchNormTestNhwcImpl( data.m_Parameters.m_Eps = 0.0f; data.m_Parameters.m_DataLayout = armnn::DataLayout::NHWC; + std::vector<T> actualOutput(outputTensorInfo.GetNumElements()); + // For each channel: // substract mean, divide by standard deviation (with an epsilon to avoid div by 0), // multiply by gamma and add beta - ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, - QuantizedVector<T>( + std::vector<T> expectedOutput = QuantizedVector<T>( { 1.f, 3.f, 4.f, 3.f, 4.f, 4.f, 2.f, 3.f, 1.f, 2.f, 6.f, 4.f }, - qScale, qOffset)); + qScale, qOffset); std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateBatchNormalization(data, info); inputHandle->Allocate(); outputHandle->Allocate(); - CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); + CopyDataToITensorHandle(inputHandle.get(), input.data()); workload->Execute(); - CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); + CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get()); - return ret; + return LayerTestResult<T, 4>(actualOutput, + expectedOutput, + outputHandle->GetShape(), + outputTensorInfo.GetShape()); } } // anonymous namespace @@ -627,14 +631,15 @@ LayerTestResult<float,4> CompareBatchNormTest( outputTensorInfo = armnn::TensorInfo(4, shape, armnn::DataType::Float32); tensorInfo = armnn::TensorInfo(1, tensorShape, armnn::DataType::Float32); - auto input = MakeRandomTensor<float, 4>(inputTensorInfo, 21312); + auto input = MakeRandomTensor<float>(inputTensorInfo, 21312); - auto mean = MakeRandomTensor<float, 1>(tensorInfo, 123); - auto variance = MakeRandomTensor<float, 1>(tensorInfo, 234, 0.0f); - auto beta = MakeRandomTensor<float, 1>(tensorInfo, 123); - auto gamma = MakeRandomTensor<float, 1>(tensorInfo, 345); + auto mean = MakeRandomTensor<float>(tensorInfo, 123); + auto variance = MakeRandomTensor<float>(tensorInfo, 234, 0.0f); + auto beta = MakeRandomTensor<float>(tensorInfo, 123); + auto gamma = MakeRandomTensor<float>(tensorInfo, 345); - LayerTestResult<float,4> ret(outputTensorInfo); + std::vector<float> actualOutput(outputTensorInfo.GetNumElements()); + std::vector<float> expectedOutput(outputTensorInfo.GetNumElements()); std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo); std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo); @@ -675,16 +680,19 @@ LayerTestResult<float,4> CompareBatchNormTest( inputHandleRef->Allocate(); outputHandleRef->Allocate(); - CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0][0][0]); + CopyDataToITensorHandle(inputHandle.get(), input.data()); + CopyDataToITensorHandle(inputHandleRef.get(), input.data()); workload->PostAllocationConfigure(); workload->Execute(); workloadRef->PostAllocationConfigure(); workloadRef->Execute(); - CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); - CopyDataFromITensorHandle(&ret.outputExpected[0][0][0][0], outputHandleRef.get()); + CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get()); + CopyDataFromITensorHandle(expectedOutput.data(), outputHandleRef.get()); - return ret; + return LayerTestResult<float, 4>(actualOutput, + expectedOutput, + outputHandle->GetShape(), + outputTensorInfo.GetShape()); } |