提交 e3f28c9e 编写于 作者: E eclipsess

modify some mistakes in im2col and pool2d

上级 18cb9aff
...@@ -76,7 +76,7 @@ void PoolCompute(const PoolParam<CPU> &param) { ...@@ -76,7 +76,7 @@ void PoolCompute(const PoolParam<CPU> &param) {
} }
} }
} 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] && strides[0] == strides[1] && paddings[0] == paddings[1] &&
paddings[1] == 0) { paddings[1] == 0) {
#if __ARM_NEON #if __ARM_NEON
......
...@@ -78,7 +78,7 @@ class Im2ColFunctor<ColFormat::kCFO, CPU, T> { ...@@ -78,7 +78,7 @@ class Im2ColFunctor<ColFormat::kCFO, CPU, T> {
(((isize - 2 * padding[0] + filter_height) % stride[0] == 0) ? 1 : 0)); (((isize - 2 * padding[0] + filter_height) % stride[0] == 0) ? 1 : 0));
int fill = isize % 2; int fill = isize % 2;
if (stride[0] == 1 && filter_height == 3 && pad1 && pad2 && 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) { for (int c = 0; c < im_channels; ++c) {
int oosize = osize * osize; int oosize = osize * osize;
int nk4 = osize / 4; int nk4 = osize / 4;
...@@ -250,7 +250,7 @@ class Im2ColFunctor<ColFormat::kCFO, CPU, T> { ...@@ -250,7 +250,7 @@ class Im2ColFunctor<ColFormat::kCFO, CPU, T> {
im_data += isize * isize; im_data += isize * isize;
} }
} else if (stride[0] == 2 && filter_height == 3 && pad1 && } 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) { for (int c = 0; c < im_channels; ++c) {
int oosize = osize * osize; int oosize = osize * osize;
int nk4 = osize / 4; int nk4 = osize / 4;
...@@ -528,7 +528,6 @@ class Im2ColFunctor<ColFormat::kOCF, CPU, T> { ...@@ -528,7 +528,6 @@ class Im2ColFunctor<ColFormat::kOCF, CPU, T> {
int filter_width = col->dims()[4]; int filter_width = col->dims()[4];
int col_height = col->dims()[0]; int col_height = col->dims()[0];
int col_width = col->dims()[1]; int col_width = col->dims()[1];
// PADDLE_ENFORCE_EQ( // PADDLE_ENFORCE_EQ(
// (im_height + padding[0] + padding[2] - // (im_height + padding[0] + padding[2] -
// filter_height) / stride[0] // filter_height) / stride[0]
...@@ -544,7 +543,6 @@ class Im2ColFunctor<ColFormat::kOCF, CPU, T> { ...@@ -544,7 +543,6 @@ class Im2ColFunctor<ColFormat::kOCF, CPU, T> {
const T *im_data = im.data<T>(); const T *im_data = im.data<T>();
T *col_data = col->data<T>(); T *col_data = col->data<T>();
for (int col_row_idx = 0; col_row_idx < col_height; ++col_row_idx) { 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 col_col_idx = 0; col_col_idx < col_width; ++col_col_idx) {
for (int channel = 0; channel < im_channels; ++channel) { for (int channel = 0; channel < im_channels; ++channel) {
...@@ -556,7 +554,6 @@ class Im2ColFunctor<ColFormat::kOCF, CPU, T> { ...@@ -556,7 +554,6 @@ class Im2ColFunctor<ColFormat::kOCF, CPU, T> {
++filter_col_idx) { ++filter_col_idx) {
int im_col_offset = int im_col_offset =
col_col_idx * stride[1] + filter_col_idx - padding[1]; col_col_idx * stride[1] + filter_col_idx - padding[1];
int col_offset = int col_offset =
((((col_row_idx)*col_width + col_col_idx) * im_channels + ((((col_row_idx)*col_width + col_col_idx) * im_channels +
channel) * channel) *
...@@ -564,7 +561,6 @@ class Im2ColFunctor<ColFormat::kOCF, CPU, T> { ...@@ -564,7 +561,6 @@ class Im2ColFunctor<ColFormat::kOCF, CPU, T> {
filter_row_idx) * filter_row_idx) *
filter_width + filter_width +
filter_col_idx; filter_col_idx;
int im_offset = (channel * im_height + im_row_offset) * im_width + int im_offset = (channel * im_height + im_row_offset) * im_width +
im_col_offset; im_col_offset;
col_data[col_offset] = col_data[col_offset] =
......
...@@ -339,6 +339,10 @@ if (NOT FOUND_MATCH) ...@@ -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) 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) 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) #add_library(test-lib-size SHARED common/test_lib_size.h common/test_lib_size.cpp)
endif () endif ()
/* 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 <iostream>
#include "../test_helper.h"
#include "../test_include.h"
int main() {
#ifdef PADDLE_MOBILE_CPU
paddle_mobile::PaddleMobile<paddle_mobile::CPU> 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<int64_t> dims{1, 1, 48, 48};
LoDTensor input_tensor;
SetupTensor<float>(&input_tensor, {1, 1, 48, 48}, static_cast<float>(0),
static_cast<float>(1));
std::vector<float> input(input_tensor.data<float>(),
input_tensor.data<float>() + 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;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册