From e3f28c9e9152faa9826884679a21175b45f893c2 Mon Sep 17 00:00:00 2001 From: eclipsess Date: Wed, 24 Oct 2018 11:21:18 +0800 Subject: [PATCH] modify some mistakes in im2col and pool2d --- .../kernel/central-arm-func/pool_arm_func.h | 2 +- src/operators/math/im2col.cpp | 8 +-- test/CMakeLists.txt | 4 ++ test/net/test_eng.cpp | 50 +++++++++++++++++++ 4 files changed, 57 insertions(+), 7 deletions(-) create mode 100644 test/net/test_eng.cpp diff --git a/src/operators/kernel/central-arm-func/pool_arm_func.h b/src/operators/kernel/central-arm-func/pool_arm_func.h index 37479c22ef..1c22a2646e 100644 --- a/src/operators/kernel/central-arm-func/pool_arm_func.h +++ b/src/operators/kernel/central-arm-func/pool_arm_func.h @@ -76,7 +76,7 @@ void PoolCompute(const PoolParam ¶m) { } } - } else if (ksize[0] == 2 && ksize[0] == ksize[1] && strides[0] == 2 && + } else if (0 && ksize[0] == 2 && ksize[0] == ksize[1] && strides[0] == 2 && strides[0] == strides[1] && paddings[0] == paddings[1] && paddings[1] == 0) { #if __ARM_NEON diff --git a/src/operators/math/im2col.cpp b/src/operators/math/im2col.cpp index 090ccdf24e..e23b02486b 100644 --- a/src/operators/math/im2col.cpp +++ b/src/operators/math/im2col.cpp @@ -78,7 +78,7 @@ class Im2ColFunctor { (((isize - 2 * padding[0] + filter_height) % stride[0] == 0) ? 1 : 0)); int fill = isize % 2; if (stride[0] == 1 && filter_height == 3 && pad1 && pad2 && - dilation[0] == 1 && im_height > 2) { + dilation[0] == 1 && im_height > 2 && im_height == im_width) { for (int c = 0; c < im_channels; ++c) { int oosize = osize * osize; int nk4 = osize / 4; @@ -250,7 +250,7 @@ class Im2ColFunctor { im_data += isize * isize; } } else if (stride[0] == 2 && filter_height == 3 && pad1 && - dilation[0] == 1 && im_height > 2) { + dilation[0] == 1 && im_height > 2 && im_height == im_width) { for (int c = 0; c < im_channels; ++c) { int oosize = osize * osize; int nk4 = osize / 4; @@ -528,7 +528,6 @@ class Im2ColFunctor { int filter_width = col->dims()[4]; int col_height = col->dims()[0]; int col_width = col->dims()[1]; - // PADDLE_ENFORCE_EQ( // (im_height + padding[0] + padding[2] - // filter_height) / stride[0] @@ -544,7 +543,6 @@ class Im2ColFunctor { const T *im_data = im.data(); T *col_data = col->data(); - for (int col_row_idx = 0; col_row_idx < col_height; ++col_row_idx) { for (int col_col_idx = 0; col_col_idx < col_width; ++col_col_idx) { for (int channel = 0; channel < im_channels; ++channel) { @@ -556,7 +554,6 @@ class Im2ColFunctor { ++filter_col_idx) { int im_col_offset = col_col_idx * stride[1] + filter_col_idx - padding[1]; - int col_offset = ((((col_row_idx)*col_width + col_col_idx) * im_channels + channel) * @@ -564,7 +561,6 @@ class Im2ColFunctor { filter_row_idx) * filter_width + filter_col_idx; - int im_offset = (channel * im_height + im_row_offset) * im_width + im_col_offset; col_data[col_offset] = diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 1893491f11..e52db8b8f0 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -339,6 +339,10 @@ if (NOT FOUND_MATCH) ADD_EXECUTABLE(test-multi-process net/test_multi_inference_predict.cpp test_helper.h test_include.h) target_link_libraries(test-multi-process paddle-mobile) + # gen test + ADD_EXECUTABLE(test-eng net/test_eng.cpp test_helper.h test_include.h) + target_link_libraries(test-eng paddle-mobile) + #add_library(test-lib-size SHARED common/test_lib_size.h common/test_lib_size.cpp) endif () diff --git a/test/net/test_eng.cpp b/test/net/test_eng.cpp new file mode 100644 index 0000000000..d10cb33a69 --- /dev/null +++ b/test/net/test_eng.cpp @@ -0,0 +1,50 @@ +/* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ + +#include +#include "../test_helper.h" +#include "../test_include.h" + +int main() { +#ifdef PADDLE_MOBILE_CPU + paddle_mobile::PaddleMobile paddle_mobile; +#endif + // paddle_mobile.SetThreadNum(4); + auto time1 = time(); + if (paddle_mobile.Load(std::string(g_eng) + "/model", + std::string(g_eng) + "/params", false, false, 1, + true)) { + auto time2 = time(); + std::cout << "load cost :" << time_diff(time1, time1) << "ms" << std::endl; + std::vector dims{1, 1, 48, 48}; + LoDTensor input_tensor; + SetupTensor(&input_tensor, {1, 1, 48, 48}, static_cast(0), + static_cast(1)); + + std::vector input(input_tensor.data(), + input_tensor.data() + input_tensor.numel()); + // 预热十次 + for (int i = 0; i < 1; ++i) { + paddle_mobile.PredictLod(input_tensor); + } + auto time3 = time(); + // for (int i = 0; i < 10; ++i) { + // paddle_mobile.Predict(input, dims); + // } + auto time4 = time(); + std::cout << "predict cost :" << time_diff(time3, time4) << "ms" + << std::endl; + } + return 0; +} -- GitLab