1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017 Arm Ltd and Contributors. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker 6*89c4ff92SAndroid Build Coastguard Worker #include "ParserFlatbuffersFixture.hpp" 7*89c4ff92SAndroid Build Coastguard Worker #include <sstream> 8*89c4ff92SAndroid Build Coastguard Worker 9*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("TensorflowLiteParser_Conv2D") 10*89c4ff92SAndroid Build Coastguard Worker { 11*89c4ff92SAndroid Build Coastguard Worker struct SimpleConv2DFixture : public ParserFlatbuffersFixture 12*89c4ff92SAndroid Build Coastguard Worker { SimpleConv2DFixtureSimpleConv2DFixture13*89c4ff92SAndroid Build Coastguard Worker explicit SimpleConv2DFixture() 14*89c4ff92SAndroid Build Coastguard Worker { 15*89c4ff92SAndroid Build Coastguard Worker m_JsonString = R"( 16*89c4ff92SAndroid Build Coastguard Worker { 17*89c4ff92SAndroid Build Coastguard Worker "version": 3, 18*89c4ff92SAndroid Build Coastguard Worker "operator_codes": [ { "builtin_code": "CONV_2D" } ], 19*89c4ff92SAndroid Build Coastguard Worker "subgraphs": [ { 20*89c4ff92SAndroid Build Coastguard Worker "tensors": [ 21*89c4ff92SAndroid Build Coastguard Worker { 22*89c4ff92SAndroid Build Coastguard Worker "shape": [ 1, 3, 3, 1 ], 23*89c4ff92SAndroid Build Coastguard Worker "type": "UINT8", 24*89c4ff92SAndroid Build Coastguard Worker "buffer": 0, 25*89c4ff92SAndroid Build Coastguard Worker "name": "inputTensor", 26*89c4ff92SAndroid Build Coastguard Worker "quantization": { 27*89c4ff92SAndroid Build Coastguard Worker "min": [ 0.0 ], 28*89c4ff92SAndroid Build Coastguard Worker "max": [ 255.0 ], 29*89c4ff92SAndroid Build Coastguard Worker "scale": [ 1.0 ], 30*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 0 ], 31*89c4ff92SAndroid Build Coastguard Worker } 32*89c4ff92SAndroid Build Coastguard Worker }, 33*89c4ff92SAndroid Build Coastguard Worker { 34*89c4ff92SAndroid Build Coastguard Worker "shape": [ 1, 1, 1, 1 ], 35*89c4ff92SAndroid Build Coastguard Worker "type": "UINT8", 36*89c4ff92SAndroid Build Coastguard Worker "buffer": 1, 37*89c4ff92SAndroid Build Coastguard Worker "name": "outputTensor", 38*89c4ff92SAndroid Build Coastguard Worker "quantization": { 39*89c4ff92SAndroid Build Coastguard Worker "min": [ 0.0 ], 40*89c4ff92SAndroid Build Coastguard Worker "max": [ 511.0 ], 41*89c4ff92SAndroid Build Coastguard Worker "scale": [ 2.0 ], 42*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 0 ], 43*89c4ff92SAndroid Build Coastguard Worker } 44*89c4ff92SAndroid Build Coastguard Worker }, 45*89c4ff92SAndroid Build Coastguard Worker { 46*89c4ff92SAndroid Build Coastguard Worker "shape": [ 1, 3, 3, 1 ], 47*89c4ff92SAndroid Build Coastguard Worker "type": "UINT8", 48*89c4ff92SAndroid Build Coastguard Worker "buffer": 2, 49*89c4ff92SAndroid Build Coastguard Worker "name": "filterTensor", 50*89c4ff92SAndroid Build Coastguard Worker "quantization": { 51*89c4ff92SAndroid Build Coastguard Worker "min": [ 0.0 ], 52*89c4ff92SAndroid Build Coastguard Worker "max": [ 255.0 ], 53*89c4ff92SAndroid Build Coastguard Worker "scale": [ 1.0 ], 54*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 0 ], 55*89c4ff92SAndroid Build Coastguard Worker } 56*89c4ff92SAndroid Build Coastguard Worker } 57*89c4ff92SAndroid Build Coastguard Worker ], 58*89c4ff92SAndroid Build Coastguard Worker "inputs": [ 0 ], 59*89c4ff92SAndroid Build Coastguard Worker "outputs": [ 1 ], 60*89c4ff92SAndroid Build Coastguard Worker "operators": [ 61*89c4ff92SAndroid Build Coastguard Worker { 62*89c4ff92SAndroid Build Coastguard Worker "opcode_index": 0, 63*89c4ff92SAndroid Build Coastguard Worker "inputs": [ 0, 2 ], 64*89c4ff92SAndroid Build Coastguard Worker "outputs": [ 1 ], 65*89c4ff92SAndroid Build Coastguard Worker "builtin_options_type": "Conv2DOptions", 66*89c4ff92SAndroid Build Coastguard Worker "builtin_options": { 67*89c4ff92SAndroid Build Coastguard Worker "padding": "VALID", 68*89c4ff92SAndroid Build Coastguard Worker "stride_w": 1, 69*89c4ff92SAndroid Build Coastguard Worker "stride_h": 1, 70*89c4ff92SAndroid Build Coastguard Worker "fused_activation_function": "NONE" 71*89c4ff92SAndroid Build Coastguard Worker }, 72*89c4ff92SAndroid Build Coastguard Worker "custom_options_format": "FLEXBUFFERS" 73*89c4ff92SAndroid Build Coastguard Worker } 74*89c4ff92SAndroid Build Coastguard Worker ], 75*89c4ff92SAndroid Build Coastguard Worker } ], 76*89c4ff92SAndroid Build Coastguard Worker "buffers" : [ 77*89c4ff92SAndroid Build Coastguard Worker { }, 78*89c4ff92SAndroid Build Coastguard Worker { }, 79*89c4ff92SAndroid Build Coastguard Worker { "data": [ 2,1,0, 6,2,1, 4,1,2 ], }, 80*89c4ff92SAndroid Build Coastguard Worker { }, 81*89c4ff92SAndroid Build Coastguard Worker ] 82*89c4ff92SAndroid Build Coastguard Worker } 83*89c4ff92SAndroid Build Coastguard Worker )"; 84*89c4ff92SAndroid Build Coastguard Worker SetupSingleInputSingleOutput("inputTensor", "outputTensor"); 85*89c4ff92SAndroid Build Coastguard Worker } 86*89c4ff92SAndroid Build Coastguard Worker }; 87*89c4ff92SAndroid Build Coastguard Worker 88*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(SimpleConv2DFixture, "ParseSimpleConv2D") 89*89c4ff92SAndroid Build Coastguard Worker { 90*89c4ff92SAndroid Build Coastguard Worker RunTest<4, armnn::DataType::QAsymmU8>( 91*89c4ff92SAndroid Build Coastguard Worker 0, 92*89c4ff92SAndroid Build Coastguard Worker { 93*89c4ff92SAndroid Build Coastguard Worker 1, 2, 3, 94*89c4ff92SAndroid Build Coastguard Worker 4, 5, 6, 95*89c4ff92SAndroid Build Coastguard Worker 7, 8, 9, 96*89c4ff92SAndroid Build Coastguard Worker }, 97*89c4ff92SAndroid Build Coastguard Worker // because of the output scaling we need to take half of the values 98*89c4ff92SAndroid Build Coastguard Worker { 99*89c4ff92SAndroid Build Coastguard Worker (1*2 + 2*1 + 3*0 + 100*89c4ff92SAndroid Build Coastguard Worker 4*6 + 5*2 + 6*1 + 101*89c4ff92SAndroid Build Coastguard Worker 7*4 + 8*1 + 9*2) /2 102*89c4ff92SAndroid Build Coastguard Worker }); 103*89c4ff92SAndroid Build Coastguard Worker } 104*89c4ff92SAndroid Build Coastguard Worker 105*89c4ff92SAndroid Build Coastguard Worker struct Conv2DWithBiasesFixture : public ParserFlatbuffersFixture 106*89c4ff92SAndroid Build Coastguard Worker { Conv2DWithBiasesFixtureConv2DWithBiasesFixture107*89c4ff92SAndroid Build Coastguard Worker explicit Conv2DWithBiasesFixture(const std::string& inputShape, 108*89c4ff92SAndroid Build Coastguard Worker const std::string& outputShape, 109*89c4ff92SAndroid Build Coastguard Worker const std::string& filterShape, 110*89c4ff92SAndroid Build Coastguard Worker const std::string& filterData, 111*89c4ff92SAndroid Build Coastguard Worker const std::string& biasShape, 112*89c4ff92SAndroid Build Coastguard Worker const std::string& biasData, 113*89c4ff92SAndroid Build Coastguard Worker const std::string& strides, 114*89c4ff92SAndroid Build Coastguard Worker const std::string& activation="NONE", 115*89c4ff92SAndroid Build Coastguard Worker const std::string& filterScale="1.0", 116*89c4ff92SAndroid Build Coastguard Worker const std::string& filterZeroPoint="0", 117*89c4ff92SAndroid Build Coastguard Worker const std::string& outputScale="2.0", 118*89c4ff92SAndroid Build Coastguard Worker const std::string& outputZeroPoint="0", 119*89c4ff92SAndroid Build Coastguard Worker const std::string& dataType = "UINT8", 120*89c4ff92SAndroid Build Coastguard Worker const std::string& filterDataType = "UINT8", 121*89c4ff92SAndroid Build Coastguard Worker const std::string& biasDataType = "INT32") 122*89c4ff92SAndroid Build Coastguard Worker { 123*89c4ff92SAndroid Build Coastguard Worker m_JsonString = R"( 124*89c4ff92SAndroid Build Coastguard Worker { 125*89c4ff92SAndroid Build Coastguard Worker "version": 3, 126*89c4ff92SAndroid Build Coastguard Worker "operator_codes": [ { "builtin_code": "CONV_2D" } ], 127*89c4ff92SAndroid Build Coastguard Worker "subgraphs": [ { 128*89c4ff92SAndroid Build Coastguard Worker "tensors": [ 129*89c4ff92SAndroid Build Coastguard Worker { 130*89c4ff92SAndroid Build Coastguard Worker "shape": )" + inputShape + R"(, 131*89c4ff92SAndroid Build Coastguard Worker "type": )" + dataType + R"(, 132*89c4ff92SAndroid Build Coastguard Worker "buffer": 0, 133*89c4ff92SAndroid Build Coastguard Worker "name": "inputTensor", 134*89c4ff92SAndroid Build Coastguard Worker "quantization": { 135*89c4ff92SAndroid Build Coastguard Worker "min": [ 0.0 ], 136*89c4ff92SAndroid Build Coastguard Worker "max": [ 255.0 ], 137*89c4ff92SAndroid Build Coastguard Worker "scale": [ 1.0 ], 138*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 0 ], 139*89c4ff92SAndroid Build Coastguard Worker } 140*89c4ff92SAndroid Build Coastguard Worker }, 141*89c4ff92SAndroid Build Coastguard Worker { 142*89c4ff92SAndroid Build Coastguard Worker "shape": )" + outputShape + R"(, 143*89c4ff92SAndroid Build Coastguard Worker "type": )" + dataType + R"(, 144*89c4ff92SAndroid Build Coastguard Worker "buffer": 1, 145*89c4ff92SAndroid Build Coastguard Worker "name": "outputTensor", 146*89c4ff92SAndroid Build Coastguard Worker "quantization": { 147*89c4ff92SAndroid Build Coastguard Worker "min": [ 0.0 ], 148*89c4ff92SAndroid Build Coastguard Worker "max": [ 511.0 ], 149*89c4ff92SAndroid Build Coastguard Worker "scale": [ )" + outputScale + R"( ], 150*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ )" + outputZeroPoint + R"( ], 151*89c4ff92SAndroid Build Coastguard Worker } 152*89c4ff92SAndroid Build Coastguard Worker }, 153*89c4ff92SAndroid Build Coastguard Worker { 154*89c4ff92SAndroid Build Coastguard Worker "shape": )" + filterShape + R"( , 155*89c4ff92SAndroid Build Coastguard Worker "type": )" + filterDataType + R"(, 156*89c4ff92SAndroid Build Coastguard Worker "buffer": 2, 157*89c4ff92SAndroid Build Coastguard Worker "name": "filterTensor", 158*89c4ff92SAndroid Build Coastguard Worker "quantization": { 159*89c4ff92SAndroid Build Coastguard Worker "min": [ 0.0 ], 160*89c4ff92SAndroid Build Coastguard Worker "max": [ 255.0 ], 161*89c4ff92SAndroid Build Coastguard Worker "scale": [ )" + filterScale + R"( ], 162*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ )" + filterZeroPoint + R"( ], 163*89c4ff92SAndroid Build Coastguard Worker } 164*89c4ff92SAndroid Build Coastguard Worker }, 165*89c4ff92SAndroid Build Coastguard Worker { 166*89c4ff92SAndroid Build Coastguard Worker "shape": )" + biasShape + R"( , 167*89c4ff92SAndroid Build Coastguard Worker "type": )" + biasDataType + R"(, 168*89c4ff92SAndroid Build Coastguard Worker "buffer": 3, 169*89c4ff92SAndroid Build Coastguard Worker "name": "biasTensor", 170*89c4ff92SAndroid Build Coastguard Worker "quantization": { 171*89c4ff92SAndroid Build Coastguard Worker "min": [ 0.0 ], 172*89c4ff92SAndroid Build Coastguard Worker "max": [ 255.0 ], 173*89c4ff92SAndroid Build Coastguard Worker "scale": [ 1.0 ], 174*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 0 ], 175*89c4ff92SAndroid Build Coastguard Worker } 176*89c4ff92SAndroid Build Coastguard Worker } 177*89c4ff92SAndroid Build Coastguard Worker ], 178*89c4ff92SAndroid Build Coastguard Worker "inputs": [ 0 ], 179*89c4ff92SAndroid Build Coastguard Worker "outputs": [ 1 ], 180*89c4ff92SAndroid Build Coastguard Worker "operators": [ 181*89c4ff92SAndroid Build Coastguard Worker { 182*89c4ff92SAndroid Build Coastguard Worker "opcode_index": 0, 183*89c4ff92SAndroid Build Coastguard Worker "inputs": [ 0, 2, 3 ], 184*89c4ff92SAndroid Build Coastguard Worker "outputs": [ 1 ], 185*89c4ff92SAndroid Build Coastguard Worker "builtin_options_type": "Conv2DOptions", 186*89c4ff92SAndroid Build Coastguard Worker "builtin_options": { 187*89c4ff92SAndroid Build Coastguard Worker "padding": "SAME", 188*89c4ff92SAndroid Build Coastguard Worker "stride_w": )" + strides + R"(, 189*89c4ff92SAndroid Build Coastguard Worker "stride_h": )" + strides + R"(, 190*89c4ff92SAndroid Build Coastguard Worker "fused_activation_function": )" + activation + R"( 191*89c4ff92SAndroid Build Coastguard Worker }, 192*89c4ff92SAndroid Build Coastguard Worker "custom_options_format": "FLEXBUFFERS" 193*89c4ff92SAndroid Build Coastguard Worker } 194*89c4ff92SAndroid Build Coastguard Worker ], 195*89c4ff92SAndroid Build Coastguard Worker } ], 196*89c4ff92SAndroid Build Coastguard Worker "buffers" : [ 197*89c4ff92SAndroid Build Coastguard Worker { }, 198*89c4ff92SAndroid Build Coastguard Worker { }, 199*89c4ff92SAndroid Build Coastguard Worker { "data": )" + filterData + R"(, }, 200*89c4ff92SAndroid Build Coastguard Worker { "data": )" + biasData + R"(, }, 201*89c4ff92SAndroid Build Coastguard Worker ] 202*89c4ff92SAndroid Build Coastguard Worker } 203*89c4ff92SAndroid Build Coastguard Worker )"; 204*89c4ff92SAndroid Build Coastguard Worker SetupSingleInputSingleOutput("inputTensor", "outputTensor"); 205*89c4ff92SAndroid Build Coastguard Worker } 206*89c4ff92SAndroid Build Coastguard Worker }; 207*89c4ff92SAndroid Build Coastguard Worker 208*89c4ff92SAndroid Build Coastguard Worker struct SimpleConv2DWithBiasesFixture : Conv2DWithBiasesFixture 209*89c4ff92SAndroid Build Coastguard Worker { SimpleConv2DWithBiasesFixtureSimpleConv2DWithBiasesFixture210*89c4ff92SAndroid Build Coastguard Worker SimpleConv2DWithBiasesFixture() 211*89c4ff92SAndroid Build Coastguard Worker : Conv2DWithBiasesFixture("[ 1, 2, 2, 1 ]", // inputShape 212*89c4ff92SAndroid Build Coastguard Worker "[ 1, 2, 2, 1 ]", // outputShape 213*89c4ff92SAndroid Build Coastguard Worker "[ 1, 2, 2, 1 ]", // filterShape 214*89c4ff92SAndroid Build Coastguard Worker "[ 2,1, 0,6 ]", // filterData 215*89c4ff92SAndroid Build Coastguard Worker "[ 1 ]", // biasShape 216*89c4ff92SAndroid Build Coastguard Worker "[ 10, 0, 0, 0 ]", // biasData 217*89c4ff92SAndroid Build Coastguard Worker "1") // stride w and h 218*89c4ff92SAndroid Build Coastguard Worker {} 219*89c4ff92SAndroid Build Coastguard Worker }; 220*89c4ff92SAndroid Build Coastguard Worker 221*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(SimpleConv2DWithBiasesFixture, "ParseConv2DWithBias") 222*89c4ff92SAndroid Build Coastguard Worker { 223*89c4ff92SAndroid Build Coastguard Worker RunTest<4, armnn::DataType::QAsymmU8>( 224*89c4ff92SAndroid Build Coastguard Worker 0, 225*89c4ff92SAndroid Build Coastguard Worker { 226*89c4ff92SAndroid Build Coastguard Worker 1, 2, 227*89c4ff92SAndroid Build Coastguard Worker 3, 4, 228*89c4ff92SAndroid Build Coastguard Worker }, 229*89c4ff92SAndroid Build Coastguard Worker // because of the output scaling we need to take half of the values 230*89c4ff92SAndroid Build Coastguard Worker { 231*89c4ff92SAndroid Build Coastguard Worker (1*2 + 2*1 + 3*0 + 4*6 + 10)/2, 232*89c4ff92SAndroid Build Coastguard Worker (2*2 + 0*1 + 4*0 + 0*6 + 10)/2, 233*89c4ff92SAndroid Build Coastguard Worker (3*2 + 4*1 + 0*0 + 0*6 + 10)/2, 234*89c4ff92SAndroid Build Coastguard Worker (4*2 + 0*1 + 0*0 + 0*6 + 10)/2 235*89c4ff92SAndroid Build Coastguard Worker }); 236*89c4ff92SAndroid Build Coastguard Worker } 237*89c4ff92SAndroid Build Coastguard Worker 238*89c4ff92SAndroid Build Coastguard Worker struct DynamicConv2DWithBiasesFixture : Conv2DWithBiasesFixture 239*89c4ff92SAndroid Build Coastguard Worker { DynamicConv2DWithBiasesFixtureDynamicConv2DWithBiasesFixture240*89c4ff92SAndroid Build Coastguard Worker DynamicConv2DWithBiasesFixture() 241*89c4ff92SAndroid Build Coastguard Worker : Conv2DWithBiasesFixture("[ 1, 2, 2, 1 ]", // inputShape 242*89c4ff92SAndroid Build Coastguard Worker "[ ]", // outputShape 243*89c4ff92SAndroid Build Coastguard Worker "[ 1, 2, 2, 1 ]", // filterShape 244*89c4ff92SAndroid Build Coastguard Worker "[ 2,1, 0,6 ]", // filterData 245*89c4ff92SAndroid Build Coastguard Worker "[ 1 ]", // biasShape 246*89c4ff92SAndroid Build Coastguard Worker "[ 10, 0, 0, 0 ]", // biasData 247*89c4ff92SAndroid Build Coastguard Worker "1") // stride w and h 248*89c4ff92SAndroid Build Coastguard Worker {} 249*89c4ff92SAndroid Build Coastguard Worker }; 250*89c4ff92SAndroid Build Coastguard Worker 251*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(DynamicConv2DWithBiasesFixture, "ParseDynamicConv2DWithBias") 252*89c4ff92SAndroid Build Coastguard Worker { 253*89c4ff92SAndroid Build Coastguard Worker RunTest<4, 254*89c4ff92SAndroid Build Coastguard Worker armnn::DataType::QAsymmU8, 255*89c4ff92SAndroid Build Coastguard Worker armnn::DataType::QAsymmU8>(0, 256*89c4ff92SAndroid Build Coastguard Worker { { "inputTensor", { 1, 2, 3, 4, } } }, 257*89c4ff92SAndroid Build Coastguard Worker { { "outputTensor", { (1*2 + 2*1 + 3*0 + 4*6 + 10)/2, 258*89c4ff92SAndroid Build Coastguard Worker (2*2 + 0*1 + 4*0 + 0*6 + 10)/2, 259*89c4ff92SAndroid Build Coastguard Worker (3*2 + 4*1 + 0*0 + 0*6 + 10)/2, 260*89c4ff92SAndroid Build Coastguard Worker (4*2 + 0*1 + 0*0 + 0*6 + 10)/2} } }, 261*89c4ff92SAndroid Build Coastguard Worker true); 262*89c4ff92SAndroid Build Coastguard Worker } 263*89c4ff92SAndroid Build Coastguard Worker 264*89c4ff92SAndroid Build Coastguard Worker struct Conv2DShapeTestFixture : Conv2DWithBiasesFixture 265*89c4ff92SAndroid Build Coastguard Worker { GenerateIntsConv2DShapeTestFixture266*89c4ff92SAndroid Build Coastguard Worker static std::string GenerateInts(unsigned int n) 267*89c4ff92SAndroid Build Coastguard Worker { 268*89c4ff92SAndroid Build Coastguard Worker std::stringstream ss; 269*89c4ff92SAndroid Build Coastguard Worker ss << " [ "; 270*89c4ff92SAndroid Build Coastguard Worker for( unsigned int i=0; i<n; ++i ) { 271*89c4ff92SAndroid Build Coastguard Worker if (i > 0 ) 272*89c4ff92SAndroid Build Coastguard Worker { 273*89c4ff92SAndroid Build Coastguard Worker ss << " , "; 274*89c4ff92SAndroid Build Coastguard Worker } 275*89c4ff92SAndroid Build Coastguard Worker ss << " " << (i%256); 276*89c4ff92SAndroid Build Coastguard Worker } 277*89c4ff92SAndroid Build Coastguard Worker ss << " ] "; 278*89c4ff92SAndroid Build Coastguard Worker return ss.str(); 279*89c4ff92SAndroid Build Coastguard Worker } 280*89c4ff92SAndroid Build Coastguard Worker Conv2DShapeTestFixtureConv2DShapeTestFixture281*89c4ff92SAndroid Build Coastguard Worker Conv2DShapeTestFixture() 282*89c4ff92SAndroid Build Coastguard Worker : Conv2DWithBiasesFixture("[ 1, 224, 224, 3 ]", // inputShape 283*89c4ff92SAndroid Build Coastguard Worker "[ 1, 112, 112, 32 ]", // outputShape 284*89c4ff92SAndroid Build Coastguard Worker "[ 32, 3, 3, 3 ]", // filterShape 285*89c4ff92SAndroid Build Coastguard Worker GenerateInts(32*3*3*3), // filterData 286*89c4ff92SAndroid Build Coastguard Worker "[ 32 ]", // biasShape 287*89c4ff92SAndroid Build Coastguard Worker GenerateInts(32*4), // biasData 288*89c4ff92SAndroid Build Coastguard Worker "2") // stride w and h 289*89c4ff92SAndroid Build Coastguard Worker {} 290*89c4ff92SAndroid Build Coastguard Worker }; 291*89c4ff92SAndroid Build Coastguard Worker 292*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(Conv2DShapeTestFixture, "ParseConv2D_112x112_out") 293*89c4ff92SAndroid Build Coastguard Worker { 294*89c4ff92SAndroid Build Coastguard Worker } 295*89c4ff92SAndroid Build Coastguard Worker 296*89c4ff92SAndroid Build Coastguard Worker struct ReluConv2DWithBiasesFixture : Conv2DWithBiasesFixture 297*89c4ff92SAndroid Build Coastguard Worker { ReluConv2DWithBiasesFixtureReluConv2DWithBiasesFixture298*89c4ff92SAndroid Build Coastguard Worker ReluConv2DWithBiasesFixture() 299*89c4ff92SAndroid Build Coastguard Worker : Conv2DWithBiasesFixture("[ 1, 2, 2, 1 ]", // inputShape 300*89c4ff92SAndroid Build Coastguard Worker "[ 1, 2, 2, 1 ]", // outputShape 301*89c4ff92SAndroid Build Coastguard Worker "[ 1, 2, 2, 1 ]", // filterShape 302*89c4ff92SAndroid Build Coastguard Worker "[ 2,1, 0,6 ]", // filterData 303*89c4ff92SAndroid Build Coastguard Worker "[ 1 ]", // biasShape 304*89c4ff92SAndroid Build Coastguard Worker "[ 16, 0, 0, 0 ]", // biasData 305*89c4ff92SAndroid Build Coastguard Worker "1", // stride w and h 306*89c4ff92SAndroid Build Coastguard Worker "RELU", // activation 307*89c4ff92SAndroid Build Coastguard Worker "1.0", // filter scale 308*89c4ff92SAndroid Build Coastguard Worker "4", // filter zero point 309*89c4ff92SAndroid Build Coastguard Worker "2.0", // output scale 310*89c4ff92SAndroid Build Coastguard Worker "20") // output zero point 311*89c4ff92SAndroid Build Coastguard Worker {} 312*89c4ff92SAndroid Build Coastguard Worker }; 313*89c4ff92SAndroid Build Coastguard Worker 314*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(ReluConv2DWithBiasesFixture, "ParseConv2DAndReluWithBias") 315*89c4ff92SAndroid Build Coastguard Worker { 316*89c4ff92SAndroid Build Coastguard Worker uint8_t bias = 16; 317*89c4ff92SAndroid Build Coastguard Worker uint8_t outZero = 20; 318*89c4ff92SAndroid Build Coastguard Worker uint8_t fz = 4; // filter zero point 319*89c4ff92SAndroid Build Coastguard Worker 320*89c4ff92SAndroid Build Coastguard Worker RunTest<4, armnn::DataType::QAsymmU8>( 321*89c4ff92SAndroid Build Coastguard Worker 0, 322*89c4ff92SAndroid Build Coastguard Worker { 323*89c4ff92SAndroid Build Coastguard Worker 1, 2, 324*89c4ff92SAndroid Build Coastguard Worker 4, 8, 325*89c4ff92SAndroid Build Coastguard Worker }, 326*89c4ff92SAndroid Build Coastguard Worker // factors to consider: 327*89c4ff92SAndroid Build Coastguard Worker // - the filter zero point is non zero, hence the (x-fz) 328*89c4ff92SAndroid Build Coastguard Worker // - the output scale is 2 hence the /2 329*89c4ff92SAndroid Build Coastguard Worker // - output zero point is non zero, hence the +outZero 330*89c4ff92SAndroid Build Coastguard Worker // - RELU cuts negative values and then we add the output zero point 331*89c4ff92SAndroid Build Coastguard Worker { 332*89c4ff92SAndroid Build Coastguard Worker std::max(outZero, static_cast<uint8_t>((1*(2-fz) + 2*(1-fz) + 4*(0-fz) + 8*(6-fz) + bias)/2 + outZero)), 333*89c4ff92SAndroid Build Coastguard Worker std::max(outZero, static_cast<uint8_t>((2*(2-fz) + 0*(1-fz) + 8*(0-fz) + 0*(6-fz) + bias)/2 + outZero)), 334*89c4ff92SAndroid Build Coastguard Worker std::max(outZero, static_cast<uint8_t>((4*(2-fz) + 8*(1-fz) + 0*(0-fz) + 0*(6-fz) + bias)/2 + outZero)), 335*89c4ff92SAndroid Build Coastguard Worker std::max(outZero, static_cast<uint8_t>((8*(2-fz) + 0*(1-fz) + 0*(0-fz) + 0*(6-fz) + bias)/2 + outZero)) 336*89c4ff92SAndroid Build Coastguard Worker }); 337*89c4ff92SAndroid Build Coastguard Worker } 338*89c4ff92SAndroid Build Coastguard Worker 339*89c4ff92SAndroid Build Coastguard Worker struct Relu6Conv2DWithBiasesFixture : Conv2DWithBiasesFixture 340*89c4ff92SAndroid Build Coastguard Worker { Relu6Conv2DWithBiasesFixtureRelu6Conv2DWithBiasesFixture341*89c4ff92SAndroid Build Coastguard Worker Relu6Conv2DWithBiasesFixture() 342*89c4ff92SAndroid Build Coastguard Worker : Conv2DWithBiasesFixture("[ 1, 2, 2, 1 ]", // inputShape 343*89c4ff92SAndroid Build Coastguard Worker "[ 1, 2, 2, 1 ]", // outputShape 344*89c4ff92SAndroid Build Coastguard Worker "[ 1, 2, 2, 1 ]", // filterShape 345*89c4ff92SAndroid Build Coastguard Worker "[ 2,1, 0,6 ]", // filterData 346*89c4ff92SAndroid Build Coastguard Worker "[ 1 ]", // biasShape 347*89c4ff92SAndroid Build Coastguard Worker "[ 0, 0, 0, 0 ]", // biasData 348*89c4ff92SAndroid Build Coastguard Worker "1", // stride w and h 349*89c4ff92SAndroid Build Coastguard Worker "RELU6", // activation 350*89c4ff92SAndroid Build Coastguard Worker "1.0", // filter scale 351*89c4ff92SAndroid Build Coastguard Worker "0", // filter zero point 352*89c4ff92SAndroid Build Coastguard Worker "2.0", // output scale 353*89c4ff92SAndroid Build Coastguard Worker "0") // output zero point 354*89c4ff92SAndroid Build Coastguard Worker {} 355*89c4ff92SAndroid Build Coastguard Worker }; 356*89c4ff92SAndroid Build Coastguard Worker 357*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(Relu6Conv2DWithBiasesFixture, "ParseConv2DAndRelu6WithBias") 358*89c4ff92SAndroid Build Coastguard Worker { 359*89c4ff92SAndroid Build Coastguard Worker uint8_t relu6Min = 6 / 2; // divide by output scale 360*89c4ff92SAndroid Build Coastguard Worker 361*89c4ff92SAndroid Build Coastguard Worker RunTest<4, armnn::DataType::QAsymmU8>( 362*89c4ff92SAndroid Build Coastguard Worker 0, 363*89c4ff92SAndroid Build Coastguard Worker { 364*89c4ff92SAndroid Build Coastguard Worker 1, 2, 365*89c4ff92SAndroid Build Coastguard Worker 4, 1, 366*89c4ff92SAndroid Build Coastguard Worker }, 367*89c4ff92SAndroid Build Coastguard Worker // factors to consider: 368*89c4ff92SAndroid Build Coastguard Worker // - the output scale is 2 hence the /2 369*89c4ff92SAndroid Build Coastguard Worker // - RELU6 cuts output values at +6 370*89c4ff92SAndroid Build Coastguard Worker { 371*89c4ff92SAndroid Build Coastguard Worker std::min(relu6Min, static_cast<uint8_t>((1*2 + 2*1 + 4*0 + 1*6)/2)), 372*89c4ff92SAndroid Build Coastguard Worker std::min(relu6Min, static_cast<uint8_t>((2*2 + 0*1 + 1*0 + 0*6)/2)), 373*89c4ff92SAndroid Build Coastguard Worker std::min(relu6Min, static_cast<uint8_t>((4*2 + 1*1 + 0*0 + 0*6)/2)), 374*89c4ff92SAndroid Build Coastguard Worker std::min(relu6Min, static_cast<uint8_t>((1*2 + 0*1 + 0*0 + 0*6)/2)) 375*89c4ff92SAndroid Build Coastguard Worker }); 376*89c4ff92SAndroid Build Coastguard Worker } 377*89c4ff92SAndroid Build Coastguard Worker 378*89c4ff92SAndroid Build Coastguard Worker 379*89c4ff92SAndroid Build Coastguard Worker struct PerChannelConv2DFixture : public ParserFlatbuffersFixture 380*89c4ff92SAndroid Build Coastguard Worker { PerChannelConv2DFixturePerChannelConv2DFixture381*89c4ff92SAndroid Build Coastguard Worker explicit PerChannelConv2DFixture() 382*89c4ff92SAndroid Build Coastguard Worker { 383*89c4ff92SAndroid Build Coastguard Worker m_JsonString = R"( 384*89c4ff92SAndroid Build Coastguard Worker { 385*89c4ff92SAndroid Build Coastguard Worker "version": 3, 386*89c4ff92SAndroid Build Coastguard Worker "operator_codes": [ 387*89c4ff92SAndroid Build Coastguard Worker { 388*89c4ff92SAndroid Build Coastguard Worker "builtin_code": "CONV_2D", 389*89c4ff92SAndroid Build Coastguard Worker "version": 3 390*89c4ff92SAndroid Build Coastguard Worker } 391*89c4ff92SAndroid Build Coastguard Worker ], 392*89c4ff92SAndroid Build Coastguard Worker "subgraphs": [ 393*89c4ff92SAndroid Build Coastguard Worker { 394*89c4ff92SAndroid Build Coastguard Worker "tensors": [ 395*89c4ff92SAndroid Build Coastguard Worker { 396*89c4ff92SAndroid Build Coastguard Worker "shape": [ 397*89c4ff92SAndroid Build Coastguard Worker 1, 398*89c4ff92SAndroid Build Coastguard Worker 4, 399*89c4ff92SAndroid Build Coastguard Worker 4, 400*89c4ff92SAndroid Build Coastguard Worker 2 401*89c4ff92SAndroid Build Coastguard Worker ], 402*89c4ff92SAndroid Build Coastguard Worker "type": "INT8", 403*89c4ff92SAndroid Build Coastguard Worker "buffer": 1, 404*89c4ff92SAndroid Build Coastguard Worker "name": "input", 405*89c4ff92SAndroid Build Coastguard Worker "quantization": { 406*89c4ff92SAndroid Build Coastguard Worker "min": [ 407*89c4ff92SAndroid Build Coastguard Worker -50.0 408*89c4ff92SAndroid Build Coastguard Worker ], 409*89c4ff92SAndroid Build Coastguard Worker "max": [ 410*89c4ff92SAndroid Build Coastguard Worker 49.0 411*89c4ff92SAndroid Build Coastguard Worker ], 412*89c4ff92SAndroid Build Coastguard Worker "scale": [ 413*89c4ff92SAndroid Build Coastguard Worker 0.388235 414*89c4ff92SAndroid Build Coastguard Worker ], 415*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 416*89c4ff92SAndroid Build Coastguard Worker 1 417*89c4ff92SAndroid Build Coastguard Worker ], 418*89c4ff92SAndroid Build Coastguard Worker "details_type": "NONE", 419*89c4ff92SAndroid Build Coastguard Worker "quantized_dimension": 0 420*89c4ff92SAndroid Build Coastguard Worker }, 421*89c4ff92SAndroid Build Coastguard Worker "is_variable": false 422*89c4ff92SAndroid Build Coastguard Worker }, 423*89c4ff92SAndroid Build Coastguard Worker { 424*89c4ff92SAndroid Build Coastguard Worker "shape": [ 425*89c4ff92SAndroid Build Coastguard Worker 4 426*89c4ff92SAndroid Build Coastguard Worker ], 427*89c4ff92SAndroid Build Coastguard Worker "type": "INT32", 428*89c4ff92SAndroid Build Coastguard Worker "buffer": 2, 429*89c4ff92SAndroid Build Coastguard Worker "name": "model/conv2d/Conv2D", 430*89c4ff92SAndroid Build Coastguard Worker "quantization": { 431*89c4ff92SAndroid Build Coastguard Worker "scale": [ 432*89c4ff92SAndroid Build Coastguard Worker 0.001523, 433*89c4ff92SAndroid Build Coastguard Worker 0.001197, 434*89c4ff92SAndroid Build Coastguard Worker 0.001517, 435*89c4ff92SAndroid Build Coastguard Worker 0.001364 436*89c4ff92SAndroid Build Coastguard Worker ], 437*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 438*89c4ff92SAndroid Build Coastguard Worker 0, 439*89c4ff92SAndroid Build Coastguard Worker 0, 440*89c4ff92SAndroid Build Coastguard Worker 0, 441*89c4ff92SAndroid Build Coastguard Worker 0 442*89c4ff92SAndroid Build Coastguard Worker ], 443*89c4ff92SAndroid Build Coastguard Worker "details_type": "NONE", 444*89c4ff92SAndroid Build Coastguard Worker "quantized_dimension": 0 445*89c4ff92SAndroid Build Coastguard Worker }, 446*89c4ff92SAndroid Build Coastguard Worker "is_variable": false 447*89c4ff92SAndroid Build Coastguard Worker }, 448*89c4ff92SAndroid Build Coastguard Worker { 449*89c4ff92SAndroid Build Coastguard Worker "shape": [ 450*89c4ff92SAndroid Build Coastguard Worker 4, 451*89c4ff92SAndroid Build Coastguard Worker 2, 452*89c4ff92SAndroid Build Coastguard Worker 2, 453*89c4ff92SAndroid Build Coastguard Worker 2 454*89c4ff92SAndroid Build Coastguard Worker ], 455*89c4ff92SAndroid Build Coastguard Worker "type": "INT8", 456*89c4ff92SAndroid Build Coastguard Worker "buffer": 3, 457*89c4ff92SAndroid Build Coastguard Worker "name": "model/conv2d/Conv2D1", 458*89c4ff92SAndroid Build Coastguard Worker "quantization": { 459*89c4ff92SAndroid Build Coastguard Worker "min": [ 460*89c4ff92SAndroid Build Coastguard Worker -0.498056, 461*89c4ff92SAndroid Build Coastguard Worker -0.362561, 462*89c4ff92SAndroid Build Coastguard Worker -0.307959, 463*89c4ff92SAndroid Build Coastguard Worker -0.207799 464*89c4ff92SAndroid Build Coastguard Worker ], 465*89c4ff92SAndroid Build Coastguard Worker "max": [ 466*89c4ff92SAndroid Build Coastguard Worker 0.339136, 467*89c4ff92SAndroid Build Coastguard Worker 0.391629, 468*89c4ff92SAndroid Build Coastguard Worker 0.496193, 469*89c4ff92SAndroid Build Coastguard Worker 0.446191 470*89c4ff92SAndroid Build Coastguard Worker ], 471*89c4ff92SAndroid Build Coastguard Worker "scale": [ 472*89c4ff92SAndroid Build Coastguard Worker 0.003922, 473*89c4ff92SAndroid Build Coastguard Worker 0.003084, 474*89c4ff92SAndroid Build Coastguard Worker 0.003907, 475*89c4ff92SAndroid Build Coastguard Worker 0.003513 476*89c4ff92SAndroid Build Coastguard Worker ], 477*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 478*89c4ff92SAndroid Build Coastguard Worker 0, 479*89c4ff92SAndroid Build Coastguard Worker 0, 480*89c4ff92SAndroid Build Coastguard Worker 0, 481*89c4ff92SAndroid Build Coastguard Worker 0 482*89c4ff92SAndroid Build Coastguard Worker ], 483*89c4ff92SAndroid Build Coastguard Worker "details_type": "NONE", 484*89c4ff92SAndroid Build Coastguard Worker "quantized_dimension": 0 485*89c4ff92SAndroid Build Coastguard Worker }, 486*89c4ff92SAndroid Build Coastguard Worker "is_variable": false 487*89c4ff92SAndroid Build Coastguard Worker }, 488*89c4ff92SAndroid Build Coastguard Worker { 489*89c4ff92SAndroid Build Coastguard Worker "shape": [ 490*89c4ff92SAndroid Build Coastguard Worker 1, 491*89c4ff92SAndroid Build Coastguard Worker 4, 492*89c4ff92SAndroid Build Coastguard Worker 4, 493*89c4ff92SAndroid Build Coastguard Worker 4 494*89c4ff92SAndroid Build Coastguard Worker ], 495*89c4ff92SAndroid Build Coastguard Worker "type": "INT8", 496*89c4ff92SAndroid Build Coastguard Worker "buffer": 4, 497*89c4ff92SAndroid Build Coastguard Worker "name": "Identity", 498*89c4ff92SAndroid Build Coastguard Worker "quantization": { 499*89c4ff92SAndroid Build Coastguard Worker "min": [ 500*89c4ff92SAndroid Build Coastguard Worker -66.578751 501*89c4ff92SAndroid Build Coastguard Worker ], 502*89c4ff92SAndroid Build Coastguard Worker "max": [ 503*89c4ff92SAndroid Build Coastguard Worker 70.137619 504*89c4ff92SAndroid Build Coastguard Worker ], 505*89c4ff92SAndroid Build Coastguard Worker "scale": [ 506*89c4ff92SAndroid Build Coastguard Worker 0.536143 507*89c4ff92SAndroid Build Coastguard Worker ], 508*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 509*89c4ff92SAndroid Build Coastguard Worker -4 510*89c4ff92SAndroid Build Coastguard Worker ], 511*89c4ff92SAndroid Build Coastguard Worker "details_type": "NONE", 512*89c4ff92SAndroid Build Coastguard Worker "quantized_dimension": 0 513*89c4ff92SAndroid Build Coastguard Worker }, 514*89c4ff92SAndroid Build Coastguard Worker "is_variable": false 515*89c4ff92SAndroid Build Coastguard Worker } 516*89c4ff92SAndroid Build Coastguard Worker ], 517*89c4ff92SAndroid Build Coastguard Worker "inputs": [ 518*89c4ff92SAndroid Build Coastguard Worker 0 519*89c4ff92SAndroid Build Coastguard Worker ], 520*89c4ff92SAndroid Build Coastguard Worker "outputs": [ 521*89c4ff92SAndroid Build Coastguard Worker 3 522*89c4ff92SAndroid Build Coastguard Worker ], 523*89c4ff92SAndroid Build Coastguard Worker "operators": [ 524*89c4ff92SAndroid Build Coastguard Worker { 525*89c4ff92SAndroid Build Coastguard Worker "opcode_index": 0, 526*89c4ff92SAndroid Build Coastguard Worker "inputs": [ 527*89c4ff92SAndroid Build Coastguard Worker 0, 528*89c4ff92SAndroid Build Coastguard Worker 2, 529*89c4ff92SAndroid Build Coastguard Worker 1 530*89c4ff92SAndroid Build Coastguard Worker ], 531*89c4ff92SAndroid Build Coastguard Worker "outputs": [ 532*89c4ff92SAndroid Build Coastguard Worker 3 533*89c4ff92SAndroid Build Coastguard Worker ], 534*89c4ff92SAndroid Build Coastguard Worker "builtin_options_type": "Conv2DOptions", 535*89c4ff92SAndroid Build Coastguard Worker "builtin_options": { 536*89c4ff92SAndroid Build Coastguard Worker "padding": "SAME", 537*89c4ff92SAndroid Build Coastguard Worker "stride_w": 1, 538*89c4ff92SAndroid Build Coastguard Worker "stride_h": 1, 539*89c4ff92SAndroid Build Coastguard Worker "fused_activation_function": "NONE", 540*89c4ff92SAndroid Build Coastguard Worker "dilation_w_factor": 1, 541*89c4ff92SAndroid Build Coastguard Worker "dilation_h_factor": 1 542*89c4ff92SAndroid Build Coastguard Worker }, 543*89c4ff92SAndroid Build Coastguard Worker "custom_options_format": "FLEXBUFFERS" 544*89c4ff92SAndroid Build Coastguard Worker } 545*89c4ff92SAndroid Build Coastguard Worker ], 546*89c4ff92SAndroid Build Coastguard Worker "name": "main" 547*89c4ff92SAndroid Build Coastguard Worker } 548*89c4ff92SAndroid Build Coastguard Worker ], 549*89c4ff92SAndroid Build Coastguard Worker "description": "MLIR Converted.", 550*89c4ff92SAndroid Build Coastguard Worker "buffers": [ 551*89c4ff92SAndroid Build Coastguard Worker { 552*89c4ff92SAndroid Build Coastguard Worker }, 553*89c4ff92SAndroid Build Coastguard Worker { 554*89c4ff92SAndroid Build Coastguard Worker }, 555*89c4ff92SAndroid Build Coastguard Worker { 556*89c4ff92SAndroid Build Coastguard Worker "data": [ 557*89c4ff92SAndroid Build Coastguard Worker 0, 558*89c4ff92SAndroid Build Coastguard Worker 0, 559*89c4ff92SAndroid Build Coastguard Worker 0, 560*89c4ff92SAndroid Build Coastguard Worker 0, 561*89c4ff92SAndroid Build Coastguard Worker 0, 562*89c4ff92SAndroid Build Coastguard Worker 0, 563*89c4ff92SAndroid Build Coastguard Worker 0, 564*89c4ff92SAndroid Build Coastguard Worker 0, 565*89c4ff92SAndroid Build Coastguard Worker 0, 566*89c4ff92SAndroid Build Coastguard Worker 0, 567*89c4ff92SAndroid Build Coastguard Worker 0, 568*89c4ff92SAndroid Build Coastguard Worker 0, 569*89c4ff92SAndroid Build Coastguard Worker 0, 570*89c4ff92SAndroid Build Coastguard Worker 0, 571*89c4ff92SAndroid Build Coastguard Worker 0, 572*89c4ff92SAndroid Build Coastguard Worker 0 573*89c4ff92SAndroid Build Coastguard Worker ] 574*89c4ff92SAndroid Build Coastguard Worker }, 575*89c4ff92SAndroid Build Coastguard Worker { 576*89c4ff92SAndroid Build Coastguard Worker "data": [ 577*89c4ff92SAndroid Build Coastguard Worker 157, 578*89c4ff92SAndroid Build Coastguard Worker 201, 579*89c4ff92SAndroid Build Coastguard Worker 86, 580*89c4ff92SAndroid Build Coastguard Worker 129, 581*89c4ff92SAndroid Build Coastguard Worker 17, 582*89c4ff92SAndroid Build Coastguard Worker 33, 583*89c4ff92SAndroid Build Coastguard Worker 209, 584*89c4ff92SAndroid Build Coastguard Worker 13, 585*89c4ff92SAndroid Build Coastguard Worker 76, 586*89c4ff92SAndroid Build Coastguard Worker 249, 587*89c4ff92SAndroid Build Coastguard Worker 127, 588*89c4ff92SAndroid Build Coastguard Worker 138, 589*89c4ff92SAndroid Build Coastguard Worker 35, 590*89c4ff92SAndroid Build Coastguard Worker 18, 591*89c4ff92SAndroid Build Coastguard Worker 250, 592*89c4ff92SAndroid Build Coastguard Worker 233, 593*89c4ff92SAndroid Build Coastguard Worker 15, 594*89c4ff92SAndroid Build Coastguard Worker 205, 595*89c4ff92SAndroid Build Coastguard Worker 98, 596*89c4ff92SAndroid Build Coastguard Worker 127, 597*89c4ff92SAndroid Build Coastguard Worker 68, 598*89c4ff92SAndroid Build Coastguard Worker 196, 599*89c4ff92SAndroid Build Coastguard Worker 246, 600*89c4ff92SAndroid Build Coastguard Worker 177, 601*89c4ff92SAndroid Build Coastguard Worker 65, 602*89c4ff92SAndroid Build Coastguard Worker 197, 603*89c4ff92SAndroid Build Coastguard Worker 230, 604*89c4ff92SAndroid Build Coastguard Worker 246, 605*89c4ff92SAndroid Build Coastguard Worker 127, 606*89c4ff92SAndroid Build Coastguard Worker 66, 607*89c4ff92SAndroid Build Coastguard Worker 212, 608*89c4ff92SAndroid Build Coastguard Worker 30 609*89c4ff92SAndroid Build Coastguard Worker ] 610*89c4ff92SAndroid Build Coastguard Worker }, 611*89c4ff92SAndroid Build Coastguard Worker { 612*89c4ff92SAndroid Build Coastguard Worker }, 613*89c4ff92SAndroid Build Coastguard Worker { 614*89c4ff92SAndroid Build Coastguard Worker "data": [ 615*89c4ff92SAndroid Build Coastguard Worker 49, 616*89c4ff92SAndroid Build Coastguard Worker 46, 617*89c4ff92SAndroid Build Coastguard Worker 53, 618*89c4ff92SAndroid Build Coastguard Worker 46, 619*89c4ff92SAndroid Build Coastguard Worker 48, 620*89c4ff92SAndroid Build Coastguard Worker 0, 621*89c4ff92SAndroid Build Coastguard Worker 0, 622*89c4ff92SAndroid Build Coastguard Worker 0, 623*89c4ff92SAndroid Build Coastguard Worker 0, 624*89c4ff92SAndroid Build Coastguard Worker 0, 625*89c4ff92SAndroid Build Coastguard Worker 0, 626*89c4ff92SAndroid Build Coastguard Worker 0, 627*89c4ff92SAndroid Build Coastguard Worker 0, 628*89c4ff92SAndroid Build Coastguard Worker 0, 629*89c4ff92SAndroid Build Coastguard Worker 0, 630*89c4ff92SAndroid Build Coastguard Worker 0 631*89c4ff92SAndroid Build Coastguard Worker ] 632*89c4ff92SAndroid Build Coastguard Worker } 633*89c4ff92SAndroid Build Coastguard Worker ], 634*89c4ff92SAndroid Build Coastguard Worker "metadata": [ 635*89c4ff92SAndroid Build Coastguard Worker { 636*89c4ff92SAndroid Build Coastguard Worker "name": "min_runtime_version", 637*89c4ff92SAndroid Build Coastguard Worker "buffer": 5 638*89c4ff92SAndroid Build Coastguard Worker } 639*89c4ff92SAndroid Build Coastguard Worker ] 640*89c4ff92SAndroid Build Coastguard Worker } 641*89c4ff92SAndroid Build Coastguard Worker )"; 642*89c4ff92SAndroid Build Coastguard Worker SetupSingleInputSingleOutput("input", "Identity"); 643*89c4ff92SAndroid Build Coastguard Worker } 644*89c4ff92SAndroid Build Coastguard Worker }; 645*89c4ff92SAndroid Build Coastguard Worker 646*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(PerChannelConv2DFixture, "ParsePerChannelConv2D") 647*89c4ff92SAndroid Build Coastguard Worker { 648*89c4ff92SAndroid Build Coastguard Worker RunTest<4, armnn::DataType::QAsymmS8>( 649*89c4ff92SAndroid Build Coastguard Worker 0, 650*89c4ff92SAndroid Build Coastguard Worker { 651*89c4ff92SAndroid Build Coastguard Worker -11, 40,-26, 11,-28, 8, 0, -8, 652*89c4ff92SAndroid Build Coastguard Worker -10, 34, 47, 0,-33,-14, 28, 35, 653*89c4ff92SAndroid Build Coastguard Worker 6,-28,-26, 8, 13, 33,-31,-41, 654*89c4ff92SAndroid Build Coastguard Worker 31,-20,-31,-16, 8,-18,-44, 0 655*89c4ff92SAndroid Build Coastguard Worker }, 656*89c4ff92SAndroid Build Coastguard Worker { 657*89c4ff92SAndroid Build Coastguard Worker -21,-17,-23,-14, -1,-14, 1, 9, 658*89c4ff92SAndroid Build Coastguard Worker 1,-12,-22,-23, 2, -1, -3, 12, 659*89c4ff92SAndroid Build Coastguard Worker 7, 6, 8,-13,-21, -6,-31, 0, 660*89c4ff92SAndroid Build Coastguard Worker 9, -6, 24, 0,-22, -4, -7,-22, 661*89c4ff92SAndroid Build Coastguard Worker -7, -9, 9, 11,-11,-16, 9,-27, 662*89c4ff92SAndroid Build Coastguard Worker -1, 0,-26, 0, 9,-12, -8,-18, 663*89c4ff92SAndroid Build Coastguard Worker -11, -3,-15, 7, 16, -2, -8, -7, 664*89c4ff92SAndroid Build Coastguard Worker -14,-15,-14, 3, 9,-12, -6,-11 665*89c4ff92SAndroid Build Coastguard Worker }); 666*89c4ff92SAndroid Build Coastguard Worker } 667*89c4ff92SAndroid Build Coastguard Worker 668*89c4ff92SAndroid Build Coastguard Worker struct Conv2FloatWithInt8WeightsAndBiasesFixture : Conv2DWithBiasesFixture 669*89c4ff92SAndroid Build Coastguard Worker { Conv2FloatWithInt8WeightsAndBiasesFixtureConv2FloatWithInt8WeightsAndBiasesFixture670*89c4ff92SAndroid Build Coastguard Worker Conv2FloatWithInt8WeightsAndBiasesFixture() 671*89c4ff92SAndroid Build Coastguard Worker : Conv2DWithBiasesFixture("[ 1, 2, 2, 1 ]", // inputShape 672*89c4ff92SAndroid Build Coastguard Worker "[ 1, 2, 2, 1 ]", // outputShape 673*89c4ff92SAndroid Build Coastguard Worker "[ 1, 2, 2, 1 ]", // filterShape 674*89c4ff92SAndroid Build Coastguard Worker "[ 2,1, 0,6 ]", // filterData 675*89c4ff92SAndroid Build Coastguard Worker "[ 1 ]", // biasShape 676*89c4ff92SAndroid Build Coastguard Worker "[ 10 ]", // biasData 677*89c4ff92SAndroid Build Coastguard Worker "1", // stride w and h 678*89c4ff92SAndroid Build Coastguard Worker "NONE", // activation 679*89c4ff92SAndroid Build Coastguard Worker "1.0", // filterScale 680*89c4ff92SAndroid Build Coastguard Worker "0", // filterZeroPoint 681*89c4ff92SAndroid Build Coastguard Worker "2.0", // outputScale 682*89c4ff92SAndroid Build Coastguard Worker "0", // outputZeroPoint 683*89c4ff92SAndroid Build Coastguard Worker "FLOAT32", // dataType 684*89c4ff92SAndroid Build Coastguard Worker "INT8", // filterDataType 685*89c4ff92SAndroid Build Coastguard Worker "INT8") // biasDataType 686*89c4ff92SAndroid Build Coastguard Worker {} 687*89c4ff92SAndroid Build Coastguard Worker }; 688*89c4ff92SAndroid Build Coastguard Worker 689*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(Conv2FloatWithInt8WeightsAndBiasesFixture, "ParseConv2FloatWithInt8WeightsAndBiasesFixture") 690*89c4ff92SAndroid Build Coastguard Worker { 691*89c4ff92SAndroid Build Coastguard Worker RunTest<4, armnn::DataType::Float32>( 692*89c4ff92SAndroid Build Coastguard Worker 0, 693*89c4ff92SAndroid Build Coastguard Worker { 694*89c4ff92SAndroid Build Coastguard Worker 1, 2, 695*89c4ff92SAndroid Build Coastguard Worker 3, 4, 696*89c4ff92SAndroid Build Coastguard Worker }, 697*89c4ff92SAndroid Build Coastguard Worker { 698*89c4ff92SAndroid Build Coastguard Worker (1*2 + 2*1 + 3*0 + 4*6 + 10), 699*89c4ff92SAndroid Build Coastguard Worker (2*2 + 0*1 + 4*0 + 0*6 + 10), 700*89c4ff92SAndroid Build Coastguard Worker (3*2 + 4*1 + 0*0 + 0*6 + 10), 701*89c4ff92SAndroid Build Coastguard Worker (4*2 + 0*1 + 0*0 + 0*6 + 10) 702*89c4ff92SAndroid Build Coastguard Worker }); 703*89c4ff92SAndroid Build Coastguard Worker } 704*89c4ff92SAndroid Build Coastguard Worker 705*89c4ff92SAndroid Build Coastguard Worker } 706