From: jijoong.moon Date: Mon, 15 Jun 2020 02:21:33 +0000 (+0900) Subject: [ Pooling2D ] Set Property for Pooling 2D Layer X-Git-Tag: accepted/tizen/unified/20200706.064221~53 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d4cc58587fc7084bbb32e26f5bfca15fd10cfeda;p=platform%2Fcore%2Fml%2Fnntrainer.git [ Pooling2D ] Set Property for Pooling 2D Layer This PR provides seting property for pooling 2d layer. which is, . stride, padding, pooling_size, pooling type **Self evaluation:** 1. Build test: [X]Passed [ ]Failed [ ]Skipped a2. Run test: [X]Passed [ ]Failed [ ]Skipped Signed-off-by: jijoong.moon --- diff --git a/nntrainer/include/pooling2d_layer.h b/nntrainer/include/pooling2d_layer.h index baf87c8..dc895f0 100644 --- a/nntrainer/include/pooling2d_layer.h +++ b/nntrainer/include/pooling2d_layer.h @@ -65,6 +65,7 @@ public: padding[1] = 0; pooling_size[0] = 0; pooling_size[1] = 0; + pooling_type = PoolingType::average; setType(LAYER_POOLING2D); }; diff --git a/nntrainer/src/conv2d_layer.cpp b/nntrainer/src/conv2d_layer.cpp index af9f71e..0965491 100644 --- a/nntrainer/src/conv2d_layer.cpp +++ b/nntrainer/src/conv2d_layer.cpp @@ -214,19 +214,19 @@ int Conv2DLayer::setProperty(std::vector values) { } break; case PropertyType::kernel_size: status = getValues(CONV2D_DIM, value, (int *)(kernel_size)); + NN_RETURN_STATUS(); if (kernel_size[0] == 0 || kernel_size[1] == 0) { - ml_loge("Error: stride must be greater than 0"); + ml_loge("Error: kernel_size must be greater than 0"); return ML_ERROR_INVALID_PARAMETER; } - NN_RETURN_STATUS(); break; case PropertyType::stride: status = getValues(CONV2D_DIM, value, (int *)(stride)); + NN_RETURN_STATUS(); if (stride[0] == 0 || stride[1] == 0) { ml_loge("Error: stride must be greater than 0"); return ML_ERROR_INVALID_PARAMETER; } - NN_RETURN_STATUS(); break; case PropertyType::padding: status = getValues(CONV2D_DIM, value, (int *)(padding)); @@ -292,6 +292,7 @@ Tensor Conv2DLayer::zero_pad(int batch, Tensor in, return output; } + Tensor Conv2DLayer::conv2d(Tensor in, Tensor kernel, unsigned int const *stride, int &status) { diff --git a/nntrainer/src/pooling2d_layer.cpp b/nntrainer/src/pooling2d_layer.cpp index ced6824..3d7ca38 100644 --- a/nntrainer/src/pooling2d_layer.cpp +++ b/nntrainer/src/pooling2d_layer.cpp @@ -3,7 +3,7 @@ * * SPDX-License-Identifier: Apache-2.0-only * - * @file pooling2d_layer.h + * @file pooling2d_layer.cpp * @date 12 June 2020 * @see https://github.com/nnstreamer/nntrainer * @author Jijoong Moon @@ -54,7 +54,52 @@ int Pooling2DLayer::setSize(int *size, int Pooling2DLayer::setProperty(std::vector values) { int status = ML_ERROR_NONE; - // NYI + + for (unsigned int i = 0; i < values.size(); ++i) { + std::string key; + std::string value; + + status = getKeyValue(values[i], key, value); + NN_RETURN_STATUS(); + unsigned int t = parseLayerProperty(key); + switch (static_cast(t)) { + case PropertyType::pooling: + pooling_type = (PoolingType)parseType(value, TOKEN_POOLING); + if (pooling_type == PoolingType::unknown) { + ml_loge("Error: Unknown pooling type"); + return ML_ERROR_INVALID_PARAMETER; + } + break; + case PropertyType::pooling_size: + status = getValues(POOLING2D_DIM, value, (int *)(pooling_size)); + NN_RETURN_STATUS(); + if (pooling_size[0] == 0 || pooling_size[1] == 0) { + ml_loge("Error: pooling_size must be greater than 0"); + return ML_ERROR_INVALID_PARAMETER; + } + break; + case PropertyType::stride: + status = getValues(POOLING2D_DIM, value, (int *)(stride)); + NN_RETURN_STATUS(); + if (stride[0] == 0 || stride[1] == 0) { + ml_loge("Error: stride must be greater than 0"); + return ML_ERROR_INVALID_PARAMETER; + } + break; + case PropertyType::padding: + status = getValues(POOLING2D_DIM, value, (int *)(padding)); + NN_RETURN_STATUS(); + if (padding[0] < 0 || padding[1] < 0) { + ml_loge("Error: padding must be greater than 0"); + return ML_ERROR_INVALID_PARAMETER; + } + break; + default: + ml_loge("Error: Unknown Layer Property Key : %s", key.c_str()); + status = ML_ERROR_INVALID_PARAMETER; + break; + } + } return status; } diff --git a/test/unittest/unittest_nntrainer_layers.cpp b/test/unittest/unittest_nntrainer_layers.cpp index 276dbf0..ee8a3ce 100644 --- a/test/unittest/unittest_nntrainer_layers.cpp +++ b/test/unittest/unittest_nntrainer_layers.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include /** @@ -538,6 +539,25 @@ TEST(nntrainer_Conv2DLayer, forwarding_01_p) { } /** + * @brief Pooling 2D Layer + */ +TEST(nntrainer_Pooling2D, setProperty_01_p) { + int status = ML_ERROR_NONE; + nntrainer::Pooling2DLayer layer; + std::vector input_str; + nntrainer::TensorDim previous_dim; + previous_dim.setTensorDim("1:2:5:5"); + + input_str.push_back("pooling_size= 2,2"); + input_str.push_back("stride=1, 1"); + input_str.push_back("padding=0,0"); + input_str.push_back("pooling = average"); + + status = layer.setProperty(input_str); + EXPECT_EQ(status, ML_ERROR_NONE); +} + +/** * @brief Main gtest */ int main(int argc, char **argv) {