From 83d08b09d9f94bd86e54f82bc7206a59882a380f Mon Sep 17 00:00:00 2001 From: =?utf8?q?PRAVEEN=20DORESWAMY=20NAIDU/SRI-Bangalore-System=20SW/=2E/?= =?utf8?q?=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Thu, 17 May 2018 00:01:35 +0000 Subject: [PATCH] Enable L2_POOL_2D operation (#1222) Enabling l2pool2d operation along with the tflite test file addition and enabling the test in config file Signed-off-by: praveen D N --- runtimes/nn/common/CpuExecutor.cpp | 121 +++++++++++++++---------------- tests/framework/tests/l2pool2d/config.sh | 3 + 2 files changed, 61 insertions(+), 63 deletions(-) create mode 100644 tests/framework/tests/l2pool2d/config.sh diff --git a/runtimes/nn/common/CpuExecutor.cpp b/runtimes/nn/common/CpuExecutor.cpp index 06a6669..eee6b4d 100644 --- a/runtimes/nn/common/CpuExecutor.cpp +++ b/runtimes/nn/common/CpuExecutor.cpp @@ -694,72 +694,67 @@ int CpuExecutor::executeOperation(const Operation &operation) } } break; -#if 0 // REF-ANN - case OperationType::L2_POOL_2D: { - const size_t inCount = ins.size(); - if ((inCount != 10 && inCount != 7) || - !allParametersPresent(inCount, 1)) { - return ANEURALNETWORKS_BAD_DATA; - } - const RunTimeOperandInfo& input = mOperands[ins[0]]; + case OperationType::L2_POOL_2D: + { + const size_t inCount = ins.size(); + if ((inCount != 10 && inCount != 7) || !allParametersPresent(inCount, 1)) + { + return ANEURALNETWORKS_BAD_DATA; + } + const RunTimeOperandInfo &input = mOperands[ins[0]]; - int32_t padding_left, padding_right; - int32_t padding_top, padding_bottom; - int32_t stride_width, stride_height; - int32_t filter_width, filter_height; - int32_t activation; - - if (inCount == 10) { - padding_left = getScalarData(mOperands[ins[1]]); - padding_right = getScalarData(mOperands[ins[2]]); - padding_top = getScalarData(mOperands[ins[3]]); - padding_bottom = getScalarData(mOperands[ins[4]]); - stride_width = getScalarData(mOperands[ins[5]]); - stride_height = getScalarData(mOperands[ins[6]]); - filter_width = getScalarData(mOperands[ins[7]]); - filter_height = getScalarData(mOperands[ins[8]]); - activation = getScalarData(mOperands[ins[9]]); - } else { - int32_t padding_implicit = getScalarData(mOperands[ins[1]]); - stride_width = getScalarData(mOperands[ins[2]]); - stride_height = getScalarData(mOperands[ins[3]]); - filter_width = getScalarData(mOperands[ins[4]]); - filter_height = getScalarData(mOperands[ins[5]]); - activation = getScalarData(mOperands[ins[6]]); - - Shape inputShape = input.shape(); - int32_t input_width = getSizeOfDimension(inputShape, 2); - int32_t input_height = getSizeOfDimension(inputShape, 1); - calculateExplicitPadding(input_width, stride_width, - filter_width, padding_implicit, - &padding_left, &padding_right); - calculateExplicitPadding(input_height, stride_height, - filter_height, padding_implicit, - &padding_top, &padding_bottom); - } + int32_t padding_left, padding_right; + int32_t padding_top, padding_bottom; + int32_t stride_width, stride_height; + int32_t filter_width, filter_height; + int32_t activation; - RunTimeOperandInfo& output = mOperands[outs[0]]; - Shape outShape = output.shape(); + if (inCount == 10) + { + padding_left = getScalarData(mOperands[ins[1]]); + padding_right = getScalarData(mOperands[ins[2]]); + padding_top = getScalarData(mOperands[ins[3]]); + padding_bottom = getScalarData(mOperands[ins[4]]); + stride_width = getScalarData(mOperands[ins[5]]); + stride_height = getScalarData(mOperands[ins[6]]); + filter_width = getScalarData(mOperands[ins[7]]); + filter_height = getScalarData(mOperands[ins[8]]); + activation = getScalarData(mOperands[ins[9]]); + } + else + { + int32_t padding_implicit = getScalarData(mOperands[ins[1]]); + stride_width = getScalarData(mOperands[ins[2]]); + stride_height = getScalarData(mOperands[ins[3]]); + filter_width = getScalarData(mOperands[ins[4]]); + filter_height = getScalarData(mOperands[ins[5]]); + activation = getScalarData(mOperands[ins[6]]); - if (input.type == OperandType::TENSOR_FLOAT32) { - success = genericPoolingPrepare(input.shape(), - padding_left, padding_right, - padding_top, padding_bottom, - stride_width, stride_height, - filter_width, filter_height, - &outShape) && - setInfoAndAllocateIfNeeded(&output, outShape) && - l2PoolFloat32(reinterpret_cast(input.buffer), - input.shape(), - padding_left, padding_right, - padding_top, padding_bottom, - stride_width, stride_height, - filter_width, filter_height, activation, - reinterpret_cast(output.buffer), - outShape); - } - } break; -#endif // REF-ANN + Shape inputShape = input.shape(); + int32_t input_width = getSizeOfDimension(inputShape, 2); + int32_t input_height = getSizeOfDimension(inputShape, 1); + calculateExplicitPadding(input_width, stride_width, filter_width, padding_implicit, + &padding_left, &padding_right); + calculateExplicitPadding(input_height, stride_height, filter_height, padding_implicit, + &padding_top, &padding_bottom); + } + + RunTimeOperandInfo &output = mOperands[outs[0]]; + Shape outShape = output.shape(); + + if (input.type == OperandType::TENSOR_FLOAT32) + { + success = genericPoolingPrepare(input.shape(), padding_left, padding_right, padding_top, + padding_bottom, stride_width, stride_height, filter_width, + filter_height, &outShape) && + setInfoAndAllocateIfNeeded(&output, outShape) && + l2PoolFloat32(reinterpret_cast(input.buffer), input.shape(), + padding_left, padding_right, padding_top, padding_bottom, + stride_width, stride_height, filter_width, filter_height, + activation, reinterpret_cast(output.buffer), outShape); + } + } + break; case OperationType::MAX_POOL_2D: { const size_t inCount = ins.size(); diff --git a/tests/framework/tests/l2pool2d/config.sh b/tests/framework/tests/l2pool2d/config.sh new file mode 100644 index 0000000..814b86a --- /dev/null +++ b/tests/framework/tests/l2pool2d/config.sh @@ -0,0 +1,3 @@ +MODELFILE_SERVER="http://npuarchive.mooo.com/archive/nnfw/nn_framework_test" +MODELFILE_NAME="l2pool2d_test.tflite" +MODELFILE_MD5SUM="2d92cebdea4ed7cb22b5cd363abf1329" -- 2.7.4