From: PRAVEEN DORESWAMY NAIDU/SRI-Bangalore-System SW/./삼성전자 Date: Thu, 17 May 2018 00:01:35 +0000 (+0000) Subject: Enable L2_POOL_2D operation (#1222) X-Git-Tag: 0.2~900 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=83d08b09d9f94bd86e54f82bc7206a59882a380f;p=platform%2Fcore%2Fml%2Fnnfw.git 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 --- 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"