| // |
| // Copyright © 2017 Arm Ltd. All rights reserved. |
| // SPDX-License-Identifier: MIT |
| // |
| |
| #include <boost/test/unit_test.hpp> |
| #include "ParserFlatbuffersFixture.hpp" |
| #include "../TfLiteParser.hpp" |
| |
| BOOST_AUTO_TEST_SUITE(TensorflowLiteParser) |
| |
| struct TransposeConvFixture : public ParserFlatbuffersFixture |
| { |
| explicit TransposeConvFixture(const std::string& inputShape, |
| const std::string& outputShape, |
| const std::string& filterShape, |
| const std::string& filterData, |
| const std::string& strideX, |
| const std::string& strideY, |
| const std::string& dataType) |
| { |
| m_JsonString = R"( |
| { |
| "version": 3, |
| "operator_codes": [ { "builtin_code": "TRANSPOSE_CONV" } ], |
| "subgraphs": [ { |
| "tensors": [ |
| { |
| "shape": [ 4 ], |
| "type": "UINT8", |
| "buffer": 0, |
| "name": "outputShapeTensor", |
| "quantization": { |
| "min": [ 0.0 ], |
| "max": [ 255.0 ], |
| "scale": [ 1.0 ], |
| "zero_point": [ 0 ], |
| } |
| }, |
| { |
| "shape": )" + filterShape + R"(, |
| "type": ")" + dataType + R"(", |
| "buffer": 1, |
| "name": "filterTensor", |
| "quantization": { |
| "min": [ 0.0 ], |
| "max": [ 255.0 ], |
| "scale": [ 1.0 ], |
| "zero_point": [ 0 ], |
| } |
| }, |
| { |
| "shape": )" + inputShape + R"(, |
| "type": ")" + dataType + R"(", |
| "buffer": 2, |
| "name": "inputTensor", |
| "quantization": { |
| "min": [ 0.0 ], |
| "max": [ 255.0 ], |
| "scale": [ 1.0 ], |
| "zero_point": [ 0 ], |
| } |
| }, |
| { |
| "shape": )" + outputShape + R"(, |
| "type": ")" + dataType + R"(", |
| "buffer": 3, |
| "name": "outputTensor", |
| "quantization": { |
| "min": [ 0.0 ], |
| "max": [ 255.0 ], |
| "scale": [ 1.0 ], |
| "zero_point": [ 0 ], |
| } |
| } |
| ], |
| "inputs": [ 2 ], |
| "outputs": [ 3 ], |
| "operators": [ |
| { |
| "opcode_index": 0, |
| "inputs": [ 0, 1, 2 ], |
| "outputs": [ 3 ], |
| "builtin_options_type": "TransposeConvOptions", |
| "builtin_options": { |
| "padding": "VALID", |
| "stride_w": )" + strideX + R"(, |
| "stride_h": )" + strideY + R"( |
| }, |
| "custom_options_format": "FLEXBUFFERS" |
| } |
| ], |
| } ], |
| "buffers" : [ |
| { "data": )" + outputShape + R"( }, |
| { "data": )" + filterData + R"( }, |
| { }, |
| { } |
| ] |
| } |
| )"; |
| SetupSingleInputSingleOutput("inputTensor", "outputTensor"); |
| } |
| }; |
| |
| struct SimpleTransposeConvFixture : TransposeConvFixture |
| { |
| SimpleTransposeConvFixture() |
| : TransposeConvFixture("[ 1, 2, 2, 1 ]", // inputShape |
| "[ 1, 3, 3, 1 ]", // outputShape |
| "[ 1, 2, 2, 1 ]", // filterShape |
| "[ 0, 1, 2, 4 ]", // filterData |
| "1", // strideX |
| "1", // strideY |
| "UINT8") // dataType |
| {} |
| }; |
| |
| BOOST_FIXTURE_TEST_CASE( ParseSimpleTransposeConv, SimpleTransposeConvFixture ) |
| { |
| RunTest<4, armnn::DataType::QAsymmU8>( |
| 0, |
| { |
| 1, 2, |
| 3, 4 |
| }, |
| { |
| 0, 1, 2, |
| 2, 11, 12, |
| 6, 20, 16 |
| }); |
| } |
| |
| struct TransposeConvFixtureWithBias : public ParserFlatbuffersFixture |
| { |
| explicit TransposeConvFixtureWithBias(const std::string& inputShape, |
| const std::string& outputShape, |
| const std::string& filterShape, |
| const std::string& filterData, |
| const std::string& strideX, |
| const std::string& strideY, |
| const std::string& dataType, |
| const std::string& biasShape, |
| const std::string& biasData) |
| { |
| m_JsonString = R"( |
| { |
| "version": 3, |
| "operator_codes": [ { "builtin_code": "TRANSPOSE_CONV" } ], |
| "subgraphs": [ { |
| "tensors": [ |
| { |
| "shape": [ 4 ], |
| "type": "UINT8", |
| "buffer": 0, |
| "name": "outputShapeTensor", |
| "quantization": { |
| "min": [ 0.0 ], |
| "max": [ 255.0 ], |
| "scale": [ 1.0 ], |
| "zero_point": [ 0 ], |
| } |
| }, |
| { |
| "shape": )" + filterShape + R"(, |
| "type": ")" + dataType + R"(", |
| "buffer": 1, |
| "name": "filterTensor", |
| "quantization": { |
| "min": [ 0.0 ], |
| "max": [ 255.0 ], |
| "scale": [ 1.0 ], |
| "zero_point": [ 0 ], |
| } |
| }, |
| { |
| "shape": )" + inputShape + R"(, |
| "type": ")" + dataType + R"(", |
| "buffer": 2, |
| "name": "inputTensor", |
| "quantization": { |
| "min": [ 0.0 ], |
| "max": [ 255.0 ], |
| "scale": [ 1.0 ], |
| "zero_point": [ 0 ], |
| } |
| }, |
| { |
| "shape": )" + biasShape + R"( , |
| "type": "INT32", |
| "buffer": 3, |
| "name": "biasTensor", |
| "quantization": { |
| "min": [ 0.0 ], |
| "max": [ 255.0 ], |
| "scale": [ 1.0 ], |
| "zero_point": [ 0 ], |
| } |
| }, |
| { |
| "shape": )" + outputShape + R"(, |
| "type": ")" + dataType + R"(", |
| "buffer": 4, |
| "name": "outputTensor", |
| "quantization": { |
| "min": [ 0.0 ], |
| "max": [ 255.0 ], |
| "scale": [ 1.0 ], |
| "zero_point": [ 0 ], |
| } |
| } |
| ], |
| "inputs": [ 2 ], |
| "outputs": [ 4 ], |
| "operators": [ |
| { |
| "opcode_index": 0, |
| "inputs": [ 0, 1, 2, 3], |
| "outputs": [ 4 ], |
| "builtin_options_type": "TransposeConvOptions", |
| "builtin_options": { |
| "padding": "VALID", |
| "stride_w": )" + strideX + R"(, |
| "stride_h": )" + strideY + R"( |
| }, |
| "custom_options_format": "FLEXBUFFERS" |
| } |
| ], |
| } ], |
| "buffers" : [ |
| { "data": )" + outputShape + R"( }, |
| { "data": )" + filterData + R"( }, |
| { }, |
| { "data": )" + biasData + R"( }, |
| { } |
| ] |
| } |
| )"; |
| SetupSingleInputSingleOutput("inputTensor", "outputTensor"); |
| } |
| }; |
| |
| struct SimpleTransposeConvFixtureWithBias : TransposeConvFixtureWithBias |
| { |
| SimpleTransposeConvFixtureWithBias() |
| : TransposeConvFixtureWithBias("[ 1, 2, 2, 1 ]", // inputShape |
| "[ 1, 3, 3, 1 ]", // outputShape |
| "[ 1, 2, 2, 1 ]", // filterShape |
| "[ 0, 1, 2, 4 ]", // filterData |
| "1", // strideX |
| "1", // strideY |
| "UINT8", // dataType |
| "[ 1 ]", // bias shape |
| "[ 10, 0, 0, 0 ]") // bias data |
| {} |
| }; |
| |
| BOOST_FIXTURE_TEST_CASE( ParseSimpleTransposeConvWithBias, SimpleTransposeConvFixtureWithBias ) |
| { |
| RunTest<4, armnn::DataType::QAsymmU8>( |
| 0, |
| { |
| 1, 2, |
| 3, 4 |
| }, |
| { |
| 10, 11, 12, |
| 12, 21, 22, |
| 16, 30, 26 |
| }); |
| } |
| |
| |
| struct TransposeConvPerChannelFixture : public ParserFlatbuffersFixture |
| { |
| explicit TransposeConvPerChannelFixture() |
| { |
| m_JsonString = R"( |
| { |
| "version": 3, |
| "operator_codes": [ |
| { |
| "builtin_code": "TRANSPOSE_CONV", |
| "version": 2 |
| } |
| ], |
| "subgraphs": [ |
| { |
| "tensors": [ |
| { |
| "shape": [ |
| 1, |
| 4, |
| 4, |
| 2 |
| ], |
| "type": "INT8", |
| "buffer": 1, |
| "name": "input", |
| "quantization": { |
| "min": [ |
| -50.0 |
| ], |
| "max": [ |
| 49.0 |
| ], |
| "scale": [ |
| 0.388235 |
| ], |
| "zero_point": [ |
| 1 |
| ], |
| "details_type": "NONE", |
| "quantized_dimension": 0 |
| }, |
| "is_variable": false |
| }, |
| { |
| "shape": [ |
| 4 |
| ], |
| "type": "INT32", |
| "buffer": 2, |
| "name": "model/conv2d_transpose/stack", |
| "quantization": { |
| "details_type": "NONE", |
| "quantized_dimension": 0 |
| }, |
| "is_variable": false |
| }, |
| { |
| "shape": [ |
| 8, |
| 2, |
| 2, |
| 2 |
| ], |
| "type": "INT8", |
| "buffer": 3, |
| "name": "model/conv2d_transpose/conv2d_transpose", |
| "quantization": { |
| "min": [ |
| -0.081948, |
| -0.379918, |
| -0.223632, |
| -0.098629, |
| -0.386369, |
| -0.351057, |
| -0.348749, |
| -0.264848 |
| ], |
| "max": [ |
| 0.35091, |
| 0.229681, |
| 0.368384, |
| 0.176761, |
| 0.353717, |
| 0.377565, |
| 0.373713, |
| 0.30141 |
| ], |
| "scale": [ |
| 0.002763, |
| 0.002991, |
| 0.002901, |
| 0.001392, |
| 0.003042, |
| 0.002973, |
| 0.002943, |
| 0.002373 |
| ], |
| "zero_point": [ |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0 |
| ], |
| "details_type": "NONE", |
| "quantized_dimension": 0 |
| }, |
| "is_variable": false |
| }, |
| { |
| "shape": [ |
| 1, |
| 4, |
| 4, |
| 8 |
| ], |
| "type": "INT8", |
| "buffer": 4, |
| "name": "Identity", |
| "quantization": { |
| "min": [ |
| -63.578175 |
| ], |
| "max": [ |
| 69.305023 |
| ], |
| "scale": [ |
| 0.521111 |
| ], |
| "zero_point": [ |
| -6 |
| ], |
| "details_type": "NONE", |
| "quantized_dimension": 0 |
| }, |
| "is_variable": false |
| } |
| ], |
| "inputs": [ |
| 0 |
| ], |
| "outputs": [ |
| 3 |
| ], |
| "operators": [ |
| { |
| "opcode_index": 0, |
| "inputs": [ |
| 1, |
| 2, |
| 0 |
| ], |
| "outputs": [ |
| 3 |
| ], |
| "builtin_options_type": "TransposeConvOptions", |
| "builtin_options": { |
| "padding": "SAME", |
| "stride_w": 1, |
| "stride_h": 1 |
| }, |
| "custom_options_format": "FLEXBUFFERS" |
| } |
| ], |
| "name": "main" |
| } |
| ], |
| "description": "MLIR Converted.", |
| "buffers": [ |
| { |
| }, |
| { |
| }, |
| { |
| "data": [ |
| 1, |
| 0, |
| 0, |
| 0, |
| 4, |
| 0, |
| 0, |
| 0, |
| 4, |
| 0, |
| 0, |
| 0, |
| 8, |
| 0, |
| 0, |
| 0 |
| ] |
| }, |
| { |
| "data": [ |
| 13, |
| 239, |
| 7, |
| 125, |
| 35, |
| 127, |
| 55, |
| 226, |
| 77, |
| 150, |
| 159, |
| 192, |
| 180, |
| 129, |
| 51, |
| 48, |
| 108, |
| 9, |
| 21, |
| 179, |
| 12, |
| 39, |
| 127, |
| 107, |
| 44, |
| 206, |
| 127, |
| 185, |
| 108, |
| 82, |
| 86, |
| 218, |
| 38, |
| 149, |
| 16, |
| 1, |
| 129, |
| 163, |
| 116, |
| 136, |
| 138, |
| 43, |
| 65, |
| 186, |
| 154, |
| 138, |
| 64, |
| 127, |
| 120, |
| 127, |
| 207, |
| 70, |
| 43, |
| 33, |
| 141, |
| 137, |
| 93, |
| 215, |
| 65, |
| 92, |
| 122, |
| 144, |
| 120, |
| 127 |
| ] |
| }, |
| { |
| }, |
| { |
| "data": [ |
| 49, |
| 46, |
| 57, |
| 46, |
| 48, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0 |
| ] |
| } |
| ], |
| "metadata": [ |
| { |
| "name": "min_runtime_version", |
| "buffer": 5 |
| } |
| ] |
| } |
| )"; |
| SetupSingleInputSingleOutput("input", "Identity"); |
| } |
| }; |
| |
| BOOST_FIXTURE_TEST_CASE( ParseTransposeConvPerChannel, TransposeConvPerChannelFixture ) |
| { |
| RunTest<4, armnn::DataType::QAsymmS8>( |
| 0, |
| { |
| -11, 40,-26, 11,-28, 8, 0, -8, |
| -10, 34, 47, 0,-33,-14, 28, 35, |
| 6,-28,-26, 8, 13, 33,-31,-41, |
| 31,-20,-31,-16, 8,-18,-44, 0 |
| }, |
| { |
| -8,-17, -8, -9,-16, 1, 2,-11, |
| 3,-16,-19,-12,-11, -6, -3, -6, |
| -5, -8,-16,-12,-11, -3, -7,-13, |
| -4, 1, -9,-10, -5,-12, -5, -8, |
| 2,-25, -5, -6,-20, -7, 2,-21, |
| 1, 4, 5,-13,-10,-12, 3, 4, |
| -10,-17,-17, -6, -7, 12,-22,-17, |
| -17, 0, -5,-14,-21,-12, 17,-13, |
| 3, -6, -3, -3, -2,-16,-11,-12, |
| -15,-14, -1, -2,-35, 5,-18, 0, |
| -6, 8, 5,-12, 12, 7, -6, -3, |
| 11,-28,-28, -3,-18,-29, -5,-13, |
| -12, 11, -2, -5, 6, -9, -6, 7, |
| -9,-11,-14, -2, 12, 5,-21,-23, |
| -4, -4, -6, -6,-21,-25, 0,-18, |
| -26, 10, -7,-13, 3, 39,-39, -4 |
| }); |
| } |
| |
| BOOST_AUTO_TEST_SUITE_END() |