CMSIS-NN  Version 1.2.0
CMSIS NN Software Library
 All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Macros Groups Pages
Neural Network Pooling Functions

Functions

void arm_avgpool_s8 (const int dim_src_height, const int dim_src_width, const int dim_dst_height, const int dim_dst_width, const int stride_height, const int stride_width, const int dim_kernel_height, const int dim_kernel_width, const int padding_height, const int padding_width, const int act_min, const int act_max, const int ch_src, int8_t *src, int16_t *bufferA, int8_t *dst)
 s8 average pooling function More...
 
int32_t arm_avgpool_s8_get_buffer_size (const int dim_dst_width, const int ch_src)
 Get the required buffer size for S8 average pooling function. More...
 
void arm_max_pool_s8 (const uint16_t input_y, const uint16_t input_x, const uint16_t output_y, const uint16_t output_x, const uint16_t stride_y, const uint16_t stride_x, const uint16_t kernel_y, const uint16_t kernel_x, const uint16_t pad_y, const uint16_t pad_x, const int8_t act_min, const int8_t act_max, const uint16_t channel_in, int8_t *input, int16_t *tmp_buffer, int8_t *output)
 s8 pure C max pooling function More...
 
void arm_max_pool_s8_opt (const uint16_t input_y, const uint16_t input_x, const uint16_t output_y, const uint16_t output_x, const uint16_t stride_y, const uint16_t stride_x, const uint16_t kernel_y, const uint16_t kernel_x, const uint16_t pad_y, const uint16_t pad_x, const int8_t act_min, const int8_t act_max, const uint16_t depth, int8_t *src, int16_t *tmp_buffer, int8_t *dst)
 s8 DSP optimized max pooling function More...
 
void arm_maxpool_q7_HWC (q7_t *Im_in, const uint16_t dim_im_in, const uint16_t ch_im_in, const uint16_t dim_kernel, const uint16_t padding, const uint16_t stride, const uint16_t dim_im_out, q7_t *bufferA, q7_t *Im_out)
 Q7 max pooling function. More...
 
void arm_avepool_q7_HWC (q7_t *Im_in, const uint16_t dim_im_in, const uint16_t ch_im_in, const uint16_t dim_kernel, const uint16_t padding, const uint16_t stride, const uint16_t dim_im_out, q7_t *bufferA, q7_t *Im_out)
 Q7 average pooling function. More...
 

Description

Perform pooling functions, including max pooling and average pooling

Function Documentation

void arm_avepool_q7_HWC ( q7_t *  Im_in,
const uint16_t  dim_im_in,
const uint16_t  ch_im_in,
const uint16_t  dim_kernel,
const uint16_t  padding,
const uint16_t  stride,
const uint16_t  dim_im_out,
q7_t *  bufferA,
q7_t *  Im_out 
)
Parameters
[in,out]Im_inpointer to input tensor
[in]dim_im_ininput tensor dimention
[in]ch_im_innumber of input tensor channels
[in]dim_kernelfilter kernel size
[in]paddingpadding sizes
[in]strideconvolution stride
[in]dim_im_outoutput tensor dimension
[in,out]bufferApointer to buffer space for input
[in,out]Im_outpointer to output tensor

Buffer size:

bufferA size: 2*dim_im_out*ch_im_in

The pooling function is implemented as split x-pooling then y-pooling.

This pooling function is input-destructive. Input data is undefined after calling this function.

References arm_q7_to_q15_no_shift().

void arm_avgpool_s8 ( const int  dim_src_height,
const int  dim_src_width,
const int  dim_dst_height,
const int  dim_dst_width,
const int  stride_height,
const int  stride_width,
const int  dim_kernel_height,
const int  dim_kernel_width,
const int  padding_height,
const int  padding_width,
const int  act_min,
const int  act_max,
const int  ch_src,
int8_t *  src,
int16_t *  bufferA,
int8_t *  dst 
)
Parameters
[in]dim_src_heightinput tensor dimension
[in]dim_src_widthinput tensor dimension
[in]dim_dst_heightoutput tensor dimension
[in]dim_dst_widthoutput tensor dimension
[in]stride_heightstride along y
[in]stride_widthstride along x
[in]dim_kernel_heightfilter kernel size along y
[in]dim_kernel_widthfilter kernel size along x
[in]padding_heightpadding size along y
[in]padding_widthpadding size along x
[in]act_minMin clamping
[in]act_maxMax clamping
[in]ch_srcnumber of input tensor channels
[in,out]srcpointer to input tensor
[in]bufferAtemporary buffer used for optimization and is necessary when both ARM_MATH_LOOPUNROLL and ARM_MATH_DSP are defined. Required space: (ch_src * dim_dst_width) * sizeof(q15_t) bytes Use arm_avgpool_s8_get_buffer_size() to get the size
[in,out]dstpointer to output tensor
Note
This pooling function is input-destructive. Input data is undefined after calling this function.
  • The pooling function is implemented as split x-pooling then y-pooling.
  • Supported Framework: TensorFlow Lite

References arm_nn_accumulate_q7_to_q15(), arm_q7_to_q15_no_shift(), MAX, and MIN.

int32_t arm_avgpool_s8_get_buffer_size ( const int  dim_dst_width,
const int  ch_src 
)
Parameters
[in]dim_dst_widthoutput tensor dimension
[in]ch_srcnumber of input tensor channels
Returns
The function returns required buffer size
void arm_max_pool_s8 ( const uint16_t  input_y,
const uint16_t  input_x,
const uint16_t  output_y,
const uint16_t  output_x,
const uint16_t  stride_y,
const uint16_t  stride_x,
const uint16_t  kernel_y,
const uint16_t  kernel_x,
const uint16_t  pad_y,
const uint16_t  pad_x,
const int8_t  act_min,
const int8_t  act_max,
const uint16_t  channel_in,
int8_t *  input,
int16_t *  tmp_buffer,
int8_t *  output 
)
Parameters
[in]input_yinput tensor dimension along y
[in]input_xinput tensor dimension along x
[in]output_youtput tensor dimension along y
[in]output_xoutput tensor dimension along x
[in]stride_ystride along y
[in]stride_xstride along x
[in]kernel_yfilter kernel size along y
[in]kernel_xfilter kernel size along x
[in]pad_ypadding size along y
[in]pad_xpadding size along x
[in]act_minActivation min. Lower limit to clamp output to. Range: int8
[in]act_maxActivation max. Upper limit to clamp output to. Range: int8
[in]channel_innumber of input channels
[in]inputpointer to input tensor
[in]tmp_bufferNot used.
[in,out]outputpointer to output tensor
  • This basic implementation is recommended when number of channels is less than 4 and/or dimensions are small.

References MAX, and MIN.

Referenced by arm_max_pool_s8_opt().

void arm_max_pool_s8_opt ( const uint16_t  input_y,
const uint16_t  input_x,
const uint16_t  output_y,
const uint16_t  output_x,
const uint16_t  stride_y,
const uint16_t  stride_x,
const uint16_t  kernel_y,
const uint16_t  kernel_x,
const uint16_t  pad_y,
const uint16_t  pad_x,
const int8_t  act_min,
const int8_t  act_max,
const uint16_t  depth,
int8_t *  input,
int16_t *  tmp_buffer,
int8_t *  output 
)
Parameters
[in]input_yinput tensor dimension along y
[in]input_xinput tensor dimension along x
[in]output_youtput tensor dimension along y
[in]output_xoutput tensor dimension along x
[in]stride_ystride along y
[in]stride_xstride along x
[in]kernel_yfilter kernel size along y
[in]kernel_xfilter kernel size along x
[in]pad_ypadding size along y
[in]pad_xpadding size along x
[in]act_minActivation min. Lower limit to clamp output to. Range: int8
[in]act_maxActivation max. Upper limit to clamp output to. Range: int8
[in]depthnumber of input channels
[in]inputpointer to input tensor
[in]tmp_bufferNot used.
[in,out]outputpointer to output tensor
Note
The input data is corrupted by this function.

This optimized implementation is recommended when depth is >= 4 and dimensions are large.

References arm_max_pool_s8().

void arm_maxpool_q7_HWC ( q7_t *  Im_in,
const uint16_t  dim_im_in,
const uint16_t  ch_im_in,
const uint16_t  dim_kernel,
const uint16_t  padding,
const uint16_t  stride,
const uint16_t  dim_im_out,
q7_t *  bufferA,
q7_t *  Im_out 
)
Parameters
[in,out]Im_inpointer to input tensor
[in]dim_im_ininput tensor dimention
[in]ch_im_innumber of input tensor channels
[in]dim_kernelfilter kernel size
[in]paddingpadding sizes
[in]strideconvolution stride
[in]dim_im_outoutput tensor dimension
[in,out]bufferANot used
[in,out]Im_outpointer to output tensor

The pooling function is implemented as split x-pooling then y-pooling.

This pooling function is input-destructive. Input data is undefined after calling this function.

Referenced by main().