// // Copyright © 2021 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #include "ParserFlatbuffersSerializeFixture.hpp" #include #include #include TEST_SUITE("Deserializer_DepthwiseConv2d") { struct DepthwiseConv2dFlatbufferVersion1Fixture : public ParserFlatbuffersSerializeFixture { explicit DepthwiseConv2dFlatbufferVersion1Fixture() { m_JsonString = R"( { "layers": [ { "layer_type": "InputLayer", "layer": { "base": { "base": { "index": 0, "layerName": "Input", "layerType": "Input", "inputSlots": [ ], "outputSlots": [ { "index": 0, "tensorInfo": { "dimensions": [ 1, 3, 3, 3 ], "dataType": "QAsymmS8", "quantizationScale": 1.0, "quantizationOffset": 0, "quantizationDim": 0, "dimensionality": 1, "dimensionSpecificity": [ true, true, true, true ] } } ] }, "layerBindingId": 0 } } }, { "layer_type": "DepthwiseConvolution2dLayer", "layer": { "base": { "index": 1, "layerName": "depwiseConvolution2dWithPerAxis", "layerType": "DepthwiseConvolution2d", "inputSlots": [ { "index": 0, "connection": { "sourceLayerIndex": 0, "outputSlotIndex": 0 } } ], "outputSlots": [ { "index": 0, "tensorInfo": { "dimensions": [ 1, 3, 3, 3 ], "dataType": "QAsymmS8", "quantizationScale": 1.0, "quantizationOffset": 0, "quantizationDim": 0, "dimensionality": 1, "dimensionSpecificity": [ true, true, true, true ] } } ] }, "descriptor": { "padLeft": 1, "padRight": 1, "padTop": 1, "padBottom": 1, "strideX": 1, "strideY": 1, "dilationX": 1, "dilationY": 1, "biasEnabled": false, "dataLayout": "NHWC" }, "weights": { "info": { "dimensions": [ 1, 3, 3, 3 ], "dataType": "QSymmS8", "quantizationScale": 0.25, "quantizationOffset": 0, "quantizationScales": [ 0.25, 0.2, 0.1 ], "quantizationDim": 0, "dimensionality": 1, "dimensionSpecificity": [ true, true, true, true ] }, "data_type": "ByteData", "data": { "data": [ 4, 20, 0, 8, 20, 30, 4, 0, 10, 12, 0, 40, 0, 5, 30, 16, 10, 40, 12, 0, 30, 16, 20, 0, 12, 20, 20 ] } } } }, { "layer_type": "OutputLayer", "layer": { "base": { "base": { "index": 2, "layerName": "Output", "layerType": "Output", "inputSlots": [ { "index": 0, "connection": { "sourceLayerIndex": 1, "outputSlotIndex": 0 } } ], "outputSlots": [ ] }, "layerBindingId": 0 } } } ], "inputIds": [ 0 ], "outputIds": [ 0 ], "featureVersions": { "bindingIdsScheme": 1 } } )"; SetupSingleInputSingleOutput("Input", "Output"); } }; // This test uses a model that was created before weights layout scheme version was added to our flatbuffers // file. It ensures older models can still be read and executed // featureVersion weights layout scheme 1 indicates a change in the depthwise weights layout within // armm from [M,I,H,W] --> [1,H,W,I*M] TEST_CASE_FIXTURE(DepthwiseConv2dFlatbufferVersion1Fixture, "DepthwiseConv2d_FlatbufferVersion1") { RunTest<4, armnn::DataType::QAsymmS8>( 0, { 3,2,0,0,4,3,0,1,2, 0,1,3,0,4,2,2,2,3, 2,4,3,2,0,4,3,4,0}, { 15,60,10,11,37,20, 0,18,17, 20,65,28,28,74,26,12,20,18, 25,36,12,37,42,25,29,14, 9}); } }