27 std::size_t OutputDim,
33 const unsigned int *inputShape,
34 const std::vector<float> &inputData,
35 const std::vector<unsigned int> &blockShape,
36 const std::vector<std::pair<unsigned int, unsigned int>> &crops,
37 const unsigned int *outputShape,
38 const std::vector<float> &outputData,
42 boost::ignore_unused(memoryManager);
47 inputTensorInfo.SetQuantizationScale(scale);
48 inputTensorInfo.SetQuantizationOffset(offset);
50 outputTensorInfo.SetQuantizationScale(scale);
51 outputTensorInfo.SetQuantizationOffset(offset);
53 auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
56 result.outputExpected = MakeTensor<T, OutputDim>(outputTensorInfo,
57 ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
59 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.
CreateTensorHandle(inputTensorInfo);
60 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.
CreateTensorHandle(outputTensorInfo);
67 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
68 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
72 inputHandle->Allocate();
73 outputHandle->Allocate();
77 workload->PostAllocationConfigure();
87 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
92 const unsigned int inputShape[] = {4, 2, 2, 1};
93 const unsigned int outputShape[] = {1, 4, 4, 1};
95 std::vector<float> input({
119 std::vector<float> expectedOutput({
120 1.0f, 2.0f, 3.0f, 4.0f,
121 5.0f, 6.0f, 7.0f, 8.0f,
122 9.0f, 10.0f, 11.0f, 12.0f,
123 13.0f, 14.0f, 15.0f, 16.0f
126 std::vector<unsigned int> blockShape {2, 2};
127 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
129 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
131 crops, outputShape, expectedOutput);
134 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
139 const unsigned int inputShape[] = {4, 1, 1, 1};
140 const unsigned int outputShape[] = {1, 2, 2, 1};
142 std::vector<float> input({
144 1.0f, 2.0f, 3.0f, 4.0f
147 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f});
149 std::vector<unsigned int> blockShape({2, 2});
150 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
152 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
154 crops, outputShape, expectedOutput);
157 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
162 const unsigned int inputShape[] = {4, 1, 1, 3};
163 const unsigned int outputShape[] = {1, 2, 2, 3};
165 std::vector<float> input({1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f});
167 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f});
169 std::vector<unsigned int> blockShape({2, 2});
170 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
172 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
174 crops, outputShape, expectedOutput);
177 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
182 const unsigned int inputShape[] = {8, 1, 3, 1};
183 const unsigned int outputShape[] = {2, 2, 4, 1};
185 std::vector<float> input({
196 std::vector<float> expectedOutput({
197 1.0f, 2.0f, 3.0f, 4.0f,
198 5.0f, 6.0f, 7.0f, 8.0f,
199 9.0f, 10.0f, 11.0f, 12.0f,
200 13.0f, 14.0f, 15.0f, 16.0f
203 std::vector<unsigned int> blockShape({2, 2});
204 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {2, 0}};
206 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
208 crops, outputShape, expectedOutput);
211 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
216 const unsigned int inputShape[] = {4, 2, 2, 1};
217 const unsigned int outputShape[] = {1, 4, 4, 1};
219 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16});
220 std::vector<float> expectedOutput({1, 5, 2, 6, 9, 13, 10, 14, 3, 7, 4, 8, 11, 15, 12, 16});
222 std::vector<unsigned int> blockShape({2, 2});
223 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
225 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
armnn::DataLayout::NHWC, inputShape,
226 input, blockShape, crops, outputShape, expectedOutput);
229 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
234 const unsigned int inputShape[] = {4, 1, 1, 1};
235 const unsigned int outputShape[] = {1, 2, 2, 1};
237 std::vector<float> input({
242 std::vector<float> expectedOutput({1, 2, 3, 4});
244 std::vector<unsigned int> blockShape({2, 2});
245 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
247 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
249 crops, outputShape, expectedOutput);
252 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
257 const unsigned int inputShape[] = {4, 1, 1, 3};
258 const unsigned int outputShape[] = {1, 2, 2, 3};
260 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
262 std::vector<float> expectedOutput({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
264 std::vector<unsigned int> blockShape({2, 2});
265 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
267 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
269 crops, outputShape, expectedOutput);
272 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
277 const unsigned int inputShape[] = {4, 3, 1, 1};
278 const unsigned int outputShape[] = {1, 3, 2, 2};
280 std::vector<float> input({1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f});
282 std::vector<float> expectedOutput({
296 std::vector<unsigned int> blockShape({2, 2});
297 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
299 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
301 crops, outputShape, expectedOutput);
304 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
309 const unsigned int inputShape[] = {4, 1, 1, 1};
310 const unsigned int outputShape[] = {1, 1, 2, 2};
312 std::vector<float> input({
314 1.0f, 2.0f, 3.0f, 4.0f
317 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f});
319 std::vector<unsigned int> blockShape({2, 2});
320 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
322 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
324 crops, outputShape, expectedOutput);
327 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
332 const unsigned int inputShape[] = {4, 3, 1, 1};
333 const unsigned int outputShape[] = {1, 3, 2, 2};
335 std::vector<float> input({1.0f, 3.0f, 5.0f, 7.0f, 9.0f, 11.0f, 2.0f, 4.0f, 6.0f, 8.0f, 10.0f, 12.0f});
337 std::vector<float> expectedOutput({
351 std::vector<unsigned int> blockShape({2, 2});
352 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
354 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
356 crops, outputShape, expectedOutput);
359 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
364 const unsigned int inputShape[] = {4, 3, 1, 1};
365 const unsigned int outputShape[] = {1, 3, 2, 2};
367 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
369 std::vector<float> expectedOutput({
383 std::vector<unsigned int> blockShape({2, 2});
384 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
386 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
388 crops, outputShape, expectedOutput);
391 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
396 const unsigned int inputShape[] = {4, 1, 1, 1};
397 const unsigned int outputShape[] = {1, 1, 2, 2};
399 std::vector<float> input({
404 std::vector<float> expectedOutput({1, 2, 3, 4});
406 std::vector<unsigned int> blockShape({2, 2});
407 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
409 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
411 crops, outputShape, expectedOutput);
414 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
419 const unsigned int inputShape[] = {4, 3, 1, 1};
420 const unsigned int outputShape[] = {1, 3, 2, 2};
422 std::vector<float> input({1, 3, 5, 7, 9, 11, 2, 4, 6, 8, 10, 12});
424 std::vector<float> expectedOutput({
438 std::vector<unsigned int> blockShape({2, 2});
439 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
441 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
443 crops, outputShape, expectedOutput);
446 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
451 const unsigned int inputShape[] = {8, 1, 1, 3};
452 const unsigned int outputShape[] = {2, 1, 2, 4};
454 std::vector<float> input({
461 std::vector<float> expectedOutput({
468 std::vector<unsigned int> blockShape({2, 2});
469 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {2, 0}};
471 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
473 crops, outputShape, expectedOutput);
LayerTestResult< T, 4 > BatchToSpaceNdNchwTest1(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< T, 4 > BatchToSpaceNdNchwTest6(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)
LayerTestResult< T, 4 > BatchToSpaceNdNhwcTest5(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerDescriptor m_Parameters
virtual std::unique_ptr< ITensorHandle > CreateTensorHandle(const TensorInfo &tensorInfo, const bool IsMemoryManaged=true) const =0
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
void CopyDataFromITensorHandle(void *memory, const armnn::ITensorHandle *tensorHandle)
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
typename ResolveTypeImpl< DT >::Type ResolveType
LayerTestResult< T, 4 > BatchToSpaceNdNchwTest3(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< T, 4 > BatchToSpaceNdNchwTest2(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< T, 4 > BatchToSpaceNdNhwcTest6(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< T, 4 > BatchToSpaceNdNhwcTest1(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< T, 4 > BatchToSpaceNdNhwcTest4(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< T, 4 > BatchToSpaceNdNhwcTest2(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< T, 4 > BatchToSpaceNdNchwTest5(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< T, 4 > BatchToSpaceNdNchwTest7(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
virtual std::unique_ptr< IWorkload > CreateBatchToSpaceNd(const BatchToSpaceNdQueueDescriptor &descriptor, const WorkloadInfo &Info) const
LayerTestResult< T, 4 > BatchToSpaceNdNchwTest4(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
std::vector< std::pair< unsigned int, unsigned int > > m_Crops
The values to crop from the input dimension.
LayerTestResult< T, 4 > BatchToSpaceNdNhwcTest3(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< T, 4 > BatchToSpaceNdNhwcTest7(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
std::vector< unsigned int > m_BlockShape
Block shape values.