|
|
|
@@ -16,8 +16,9 @@ |
|
|
|
|
|
|
|
#include "nnacl/int8/pooling_int8.h" |
|
|
|
#include "nnacl/common_func.h" |
|
|
|
#include "nnacl/errorcode.h" |
|
|
|
|
|
|
|
void AvgPoolingInt8(const int8_t *input_ptr, int8_t *output_ptr, PoolingParameter *pooling_param, int task_id) { |
|
|
|
int AvgPoolingInt8(const int8_t *input_ptr, int8_t *output_ptr, PoolingParameter *pooling_param, int task_id) { |
|
|
|
int stride_w = pooling_param->stride_w_; |
|
|
|
int stride_h = pooling_param->stride_h_; |
|
|
|
int pad_w = pooling_param->pad_l_; |
|
|
|
@@ -64,6 +65,9 @@ void AvgPoolingInt8(const int8_t *input_ptr, int8_t *output_ptr, PoolingParamete |
|
|
|
} |
|
|
|
} // win_w loop |
|
|
|
} // win_h loop |
|
|
|
if (real_count == 0) { |
|
|
|
return NNACL_ERR; |
|
|
|
} |
|
|
|
int16_t tmp_out = round((float)tmp_avg / (float)real_count); |
|
|
|
tmp_out = (int8_t)(round((tmp_out - input_zp) * real_multiplier) + output_zp); |
|
|
|
int8_t real_out = tmp_out < out_min ? out_min : tmp_out; |
|
|
|
@@ -72,9 +76,10 @@ void AvgPoolingInt8(const int8_t *input_ptr, int8_t *output_ptr, PoolingParamete |
|
|
|
} // in_channel loop |
|
|
|
} // out_plane loop |
|
|
|
} // out_batch loop |
|
|
|
return NNACL_OK; |
|
|
|
} |
|
|
|
|
|
|
|
void AvgPoolingOptInt8(const int8_t *input_ptr, int8_t *output_ptr, PoolingParameter *pooling_param, int task_id) { |
|
|
|
int AvgPoolingOptInt8(const int8_t *input_ptr, int8_t *output_ptr, PoolingParameter *pooling_param, int task_id) { |
|
|
|
int stride_w = pooling_param->stride_w_; |
|
|
|
int stride_h = pooling_param->stride_h_; |
|
|
|
int pad_w = pooling_param->pad_l_; |
|
|
|
@@ -118,6 +123,9 @@ void AvgPoolingOptInt8(const int8_t *input_ptr, int8_t *output_ptr, PoolingParam |
|
|
|
int kh_s = MSMAX(0, -in_h_index); |
|
|
|
int kh_e = MSMIN(win_h, in_h - in_h_index); |
|
|
|
int real_count = (kw_e - kw_s) * (kh_e - kh_s); |
|
|
|
if (real_count == 0) { |
|
|
|
return NNACL_ERR; |
|
|
|
} |
|
|
|
|
|
|
|
// 16 channels |
|
|
|
for (int j = 0; j < c16; j++) { |
|
|
|
@@ -272,6 +280,7 @@ void AvgPoolingOptInt8(const int8_t *input_ptr, int8_t *output_ptr, PoolingParam |
|
|
|
} // out_plane loop |
|
|
|
} // out_batch loop |
|
|
|
} |
|
|
|
return NNACL_OK; |
|
|
|
} |
|
|
|
|
|
|
|
void MaxPoolingInt8(const int8_t *input_ptr, int8_t *output_ptr, PoolingParameter *pooling_param, int task_id) { |
|
|
|
|