6 #include "../TestUtils.hpp" 11 #include <boost/test/unit_test.hpp> 13 using namespace armnn;
27 auto input = network->AddInputLayer(0,
"input");
29 input->GetOutputSlot(0).SetTensorInfo(inputInfo);
34 permute->GetOutputSlot(0).SetTensorInfo(permuteInfo);
35 input->GetOutputSlot(0).Connect(permute->GetInputSlot(0));
41 auto batchToSpace = network->AddBatchToSpaceNdLayer(batchToSpaceDesc,
"batchToSpace");
43 batchToSpace->GetOutputSlot(0).SetTensorInfo(batchToSpaceInfo);
44 permute->GetOutputSlot(0).Connect(batchToSpace->GetInputSlot(0));
46 auto output = network->AddOutputLayer(0,
"output");
47 batchToSpace->GetOutputSlot(0).Connect(output->GetInputSlot(0));
58 auto input = network->AddInputLayer(0,
"input");
60 input->GetOutputSlot(0).SetTensorInfo(inputInfo);
65 permute->GetOutputSlot(0).SetTensorInfo(permuteInfo);
66 input->GetOutputSlot(0).Connect(permute->GetInputSlot(0));
72 auto batchToSpace = network->AddBatchToSpaceNdLayer(batchToSpaceDesc,
"batchToSpace");
74 batchToSpace->GetOutputSlot(0).SetTensorInfo(batchToSpaceInfo);
75 permute->GetOutputSlot(0).Connect(batchToSpace->GetInputSlot(0));
77 auto output = network->AddOutputLayer(0,
"output");
78 batchToSpace->GetOutputSlot(0).Connect(output->GetInputSlot(0));
90 Graph graph =
static_cast<Network*
>(network.get())->GetGraph();
93 BOOST_TEST(
CheckSequence(graph.
cbegin(), graph.
cend(), &IsLayerOfType<InputLayer>, &IsLayerOfType<PermuteLayer>,
94 &IsLayerOfType<BatchToSpaceNdLayer>, &IsLayerOfType<OutputLayer>));
100 auto checkDepthToSpace = [](
const Layer*
const layer) ->
bool {
101 return IsLayerOfType<DepthToSpaceLayer>(layer) &&
102 static_cast<const DepthToSpaceLayer*>(layer)->GetParameters().m_BlockSize == 2 &&
108 &IsLayerOfType<OutputLayer>));
111 std::list<std::string> testRelatedLayers = {
"batchToSpace",
"permute" };
112 BOOST_TEST(CheckRelatedLayers<DepthToSpaceLayer>(graph, testRelatedLayers));
119 INetworkPtr network = CreateTransposeTestNetwork();
120 Graph graph =
static_cast<Network*
>(network.get())->GetGraph();
123 BOOST_TEST(
CheckSequence(graph.
cbegin(), graph.
cend(), &IsLayerOfType<InputLayer>, &IsLayerOfType<TransposeLayer>,
124 &IsLayerOfType<BatchToSpaceNdLayer>, &IsLayerOfType<OutputLayer>));
130 auto checkDepthToSpace = [](
const Layer*
const layer) ->
bool {
131 return IsLayerOfType<DepthToSpaceLayer>(layer) &&
132 static_cast<const DepthToSpaceLayer*>(layer)->GetParameters().m_BlockSize == 2 &&
138 &IsLayerOfType<OutputLayer>));
141 std::list<std::string> testRelatedLayers = {
"batchToSpace",
"permute" };
142 BOOST_TEST(CheckRelatedLayers<DepthToSpaceLayer>(graph, testRelatedLayers));
146 #if defined(ARMNNREF_ENABLED) 159 BOOST_TEST(
CheckSequence(optGraph.cbegin(), optGraph.cend(), &IsLayerOfType<InputLayer>,
160 &IsLayerOfType<DepthToSpaceLayer>, &IsLayerOfType<OutputLayer>));
164 runtime->LoadNetwork(netId, std::move(optimizedNetwork));
166 std::vector<float> inputData{
169 1.0f, 2.0f, 3.0f, 4.0f, 10.0f, 20.0f, 30.0f, 40.0f, 100.0f, 200.0f, 300.0f, 400.0f,
170 -1.0f, -2.0f, -3.0f, -4.0f, -10.0f, -20.0f, -30.0f, -40.0f, -100.0f, -200.0f, -300.0f, -400.0f,
175 std::vector<float> outputData(4 * 6);
178 runtime->EnqueueWorkload(netId, inputs, outputs);
182 std::vector<float> expectedOutput = {
185 1.0f, 2.0f, 10.0f, 20.0f, 100.0f, 200.0f,
186 3.0f, 4.0f, 30.0f, 40.0f, 300.0f, 400.0f,
188 -1.0f, -2.0f, -10.0f, -20.0f, -100.0f, -200.0f,
189 -3.0f, -4.0f, -30.0f, -40.0f, -300.0f, -400.0f,
192 BOOST_TEST(outputData == expectedOutput);
199 INetworkPtr network = CreateTransposeTestNetwork();
206 BOOST_TEST(
CheckSequence(optGraph.cbegin(), optGraph.cend(), &IsLayerOfType<InputLayer>,
207 &IsLayerOfType<DepthToSpaceLayer>, &IsLayerOfType<OutputLayer>));
211 runtime->LoadNetwork(netId, std::move(optimizedNetwork));
213 std::vector<float> inputData{
216 1.0f, 2.0f, 3.0f, 4.0f, 10.0f, 20.0f, 30.0f, 40.0f, 100.0f, 200.0f, 300.0f, 400.0f,
217 -1.0f, -2.0f, -3.0f, -4.0f, -10.0f, -20.0f, -30.0f, -40.0f, -100.0f, -200.0f, -300.0f, -400.0f,
222 std::vector<float> outputData(4 * 6);
225 runtime->EnqueueWorkload(netId, inputs, outputs);
229 std::vector<float> expectedOutput = {
232 1.0f, 2.0f, 10.0f, 20.0f, 100.0f, 200.0f,
233 3.0f, 4.0f, 30.0f, 40.0f, 300.0f, 400.0f,
235 -1.0f, -2.0f, -10.0f, -20.0f, -100.0f, -200.0f,
236 -3.0f, -4.0f, -30.0f, -40.0f, -300.0f, -400.0f,
239 BOOST_TEST(outputData == expectedOutput);
BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
static IRuntimePtr Create(const CreationOptions &options)
CPU Execution: Reference C++ kernels.
Optimizer::Optimizations MakeOptimizations(Args &&... args)
OptimizeForConnection< TransposeLayer, BatchToSpaceNdLayer, PermuteAndBatchToSpaceAsDepthToSpaceImpl< TransposeLayer > > TransposeAndBatchToSpaceAsDepthToSpace
ConstIterator cbegin() const
Returns const iterator pointing to the beginning of the list. Lowercase for range-based for loops...
static void Pass(Graph &graph, const Optimizations &optimizations)
std::unique_ptr< IRuntime, void(*)(IRuntime *runtime)> IRuntimePtr
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
std::vector< std::pair< LayerBindingId, class ConstTensor > > InputTensors
Copyright (c) 2020 ARM Limited.
A BatchToSpaceNdDescriptor for the BatchToSpaceNdLayer.
A tensor defined by a TensorInfo (shape and data type) and a mutable backing store.
OptimizeForConnection< PermuteLayer, BatchToSpaceNdLayer, PermuteAndBatchToSpaceAsDepthToSpaceImpl< PermuteLayer > > PermuteAndBatchToSpaceAsDepthToSpace
IOptimizedNetworkPtr Optimize(const INetwork &network, const std::vector< BackendId > &backendPreferences, const IDeviceSpec &deviceSpec, const OptimizerOptions &options=OptimizerOptions(), Optional< std::vector< std::string > &> messages=EmptyOptional())
Create an optimized version of the network.
std::vector< unsigned int > m_BlockShape
Block shape values.
A tensor defined by a TensorInfo (shape and data type) and an immutable backing store.
std::vector< std::pair< LayerBindingId, class Tensor > > OutputTensors
std::unique_ptr< IOptimizedNetwork, void(*)(IOptimizedNetwork *network)> IOptimizedNetworkPtr
BOOST_AUTO_TEST_CASE(CheckConvolution2dLayer)
Private implementation of INetwork.
BOOST_AUTO_TEST_SUITE_END()
bool CheckSequence(const armnn::Graph::ConstIterator first, const armnn::Graph::ConstIterator last)
A TransposeDescriptor for the TransposeLayer.
ConstIterator cend() const
Returns const iterator pointing to the end of the list. Lowercase for range-based for loops...
std::unique_ptr< INetwork, void(*)(INetwork *network)> INetworkPtr
static INetworkPtr Create()
This layer represents a DepthToSpace operation.
A PermuteDescriptor for the PermuteLayer.