mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
414 lines
15 KiB
C
414 lines
15 KiB
C
/**
|
|
******************************************************************************
|
|
* @file layers_pool.h
|
|
* @author AST Embedded Analytics Research Platform
|
|
* @brief header file of AI platform pooling layers datatypes
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* Copyright (c) 2018 STMicroelectronics.
|
|
* All rights reserved.
|
|
*
|
|
* This software is licensed under terms that can be found in the LICENSE file
|
|
* in the root directory of this software component.
|
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
#ifndef LAYERS_POOL_H
|
|
#define LAYERS_POOL_H
|
|
|
|
#include "layers_common.h"
|
|
#include "lite_maxpool_dqnn.h"
|
|
#include "lite_pool_f32.h"
|
|
|
|
/*!
|
|
* @defgroup layers_pool Pooling Layers Definitions
|
|
* @brief definition
|
|
*
|
|
*/
|
|
|
|
AI_API_DECLARE_BEGIN
|
|
|
|
/*!
|
|
* @struct ai_layer_pool
|
|
* @ingroup layers_pool
|
|
* @brief Pooling layer
|
|
*
|
|
* The type of pooling function is handled by the specific forward function
|
|
* @ref forward_pool
|
|
*/
|
|
typedef AI_ALIGNED_TYPE(struct, 4) ai_layer_pool_ {
|
|
AI_LAYER_COMMON_FIELDS_DECLARE
|
|
ai_shape_2d pool_size; /*!< pooling size */
|
|
ai_shape_2d pool_stride; /*!< pooling stride */
|
|
ai_shape pool_pad; /*!< pooling pad, y,x border sizes */
|
|
ai_u8 count_include_pad; /*!< include pad flag */
|
|
} ai_layer_pool;
|
|
|
|
|
|
|
|
/*!
|
|
* @brief Max Pooling on a 8/16 bits fixed point data array
|
|
* @ingroup layers_pool
|
|
* @param in opaque handler to input data to process
|
|
* @param dim_im_in_x input feature map width
|
|
* @param dim_im_in_y input feature map height
|
|
* @param ch_im_in number of input channels
|
|
* @param dim_kernel_x kernel width
|
|
* @param dim_kernel_y kernel height
|
|
* @param padding_x right padding value
|
|
* @param padding_y top padding value
|
|
* @param stride_x stride value on x dimension
|
|
* @param stride_y stride value on y dimension
|
|
* @param dim_im_out_x output feature map width
|
|
* @param dim_im_out_y output feature map height
|
|
* @param out opaque handler to output data
|
|
*/
|
|
AI_INTERNAL_API
|
|
void pool_func_mp_array_fixed(ai_handle in,
|
|
const ai_u16 dim_im_in_x, const ai_u16 dim_im_in_y,
|
|
const ai_u16 ch_im_in,
|
|
const ai_u16 dim_kernel_x, const ai_u16 dim_kernel_y,
|
|
const ai_u16 padding_x, const ai_u16 padding_y,
|
|
const ai_u16 stride_x, const ai_u16 stride_y,
|
|
const ai_u16 dim_im_out_x, const ai_u16 dim_im_out_y,
|
|
ai_handle out);
|
|
|
|
/*!
|
|
* @brief Max Pooling on a 8-bits integer quantized data array
|
|
* @ingroup layers_pool
|
|
* @param in opaque handler to input data to process
|
|
* @param dim_im_in_x input feature map width
|
|
* @param dim_im_in_y input feature map height
|
|
* @param ch_im_in number of input channels
|
|
* @param dim_kernel_x kernel width
|
|
* @param dim_kernel_y kernel height
|
|
* @param padding_x right padding value
|
|
* @param padding_y top padding value
|
|
* @param stride_x stride value on x dimension
|
|
* @param stride_y stride value on y dimension
|
|
* @param dim_im_out_x output feature map width
|
|
* @param dim_im_out_y output feature map height
|
|
* @param out opaque handler to output data
|
|
*/
|
|
AI_INTERNAL_API
|
|
void pool_func_mp_array_integer(ai_handle in,
|
|
const ai_u16 dim_im_in_x, const ai_u16 dim_im_in_y,
|
|
const ai_u16 ch_im_in,
|
|
const ai_u16 dim_kernel_x, const ai_u16 dim_kernel_y,
|
|
const ai_u16 padding_x, const ai_u16 padding_y,
|
|
const ai_u16 stride_x, const ai_u16 stride_y,
|
|
const ai_u16 dim_im_out_x, const ai_u16 dim_im_out_y,
|
|
ai_handle out);
|
|
|
|
/*!
|
|
* @brief Max Pooling on a signed 8-bits integer quantized data array
|
|
* @ingroup layers_pool
|
|
* @param in opaque handler to input data to process
|
|
* @param dim_im_in_x input feature map width
|
|
* @param dim_im_in_y input feature map height
|
|
* @param ch_im_in number of input channels
|
|
* @param dim_kernel_x kernel width
|
|
* @param dim_kernel_y kernel height
|
|
* @param padding_x right padding value
|
|
* @param padding_y top padding value
|
|
* @param stride_x stride value on x dimension
|
|
* @param stride_y stride value on y dimension
|
|
* @param dim_im_out_x output feature map width
|
|
* @param dim_im_out_y output feature map height
|
|
* @param out opaque handler to output data
|
|
*/
|
|
AI_INTERNAL_API
|
|
void pool_func_mp_array_integer_INT8(ai_handle in,
|
|
const ai_u16 dim_im_in_x, const ai_u16 dim_im_in_y,
|
|
const ai_u16 ch_im_in,
|
|
const ai_u16 dim_kernel_x, const ai_u16 dim_kernel_y,
|
|
const ai_u16 padding_x, const ai_u16 padding_y,
|
|
const ai_u16 stride_x, const ai_u16 stride_y,
|
|
const ai_u16 dim_im_out_x, const ai_u16 dim_im_out_y,
|
|
ai_handle out);
|
|
|
|
/*!
|
|
* @brief Max Pooling on a unsigned 8-bits integer quantized data array
|
|
* @ingroup layers_pool
|
|
* @param in opaque handler to input data to process
|
|
* @param dim_im_in_x input feature map width
|
|
* @param dim_im_in_y input feature map height
|
|
* @param ch_im_in number of input channels
|
|
* @param dim_kernel_x kernel width
|
|
* @param dim_kernel_y kernel height
|
|
* @param padding_x right padding value
|
|
* @param padding_y top padding value
|
|
* @param stride_x stride value on x dimension
|
|
* @param stride_y stride value on y dimension
|
|
* @param dim_im_out_x output feature map width
|
|
* @param dim_im_out_y output feature map height
|
|
* @param out opaque handler to output data
|
|
*/
|
|
AI_INTERNAL_API
|
|
void pool_func_mp_array_integer_UINT8(ai_handle in,
|
|
const ai_u16 dim_im_in_x, const ai_u16 dim_im_in_y,
|
|
const ai_u16 ch_im_in,
|
|
const ai_u16 dim_kernel_x, const ai_u16 dim_kernel_y,
|
|
const ai_u16 padding_x, const ai_u16 padding_y,
|
|
const ai_u16 stride_x, const ai_u16 stride_y,
|
|
const ai_u16 dim_im_out_x, const ai_u16 dim_im_out_y,
|
|
ai_handle out);
|
|
|
|
/*!
|
|
* @brief Average Pooling on a 8/16 bits fixed point data array
|
|
* @ingroup layers_pool
|
|
* @param in opaque handler to input data to process
|
|
* @param dim_im_in_x input feature map width
|
|
* @param dim_im_in_y input feature map height
|
|
* @param ch_im_in number of input channels
|
|
* @param dim_kernel_x kernel width
|
|
* @param dim_kernel_y kernel height
|
|
* @param padding_x right padding value
|
|
* @param padding_y top padding value
|
|
* @param stride_x stride value on x dimension
|
|
* @param stride_y stride value on y dimension
|
|
* @param dim_im_out_x output feature map width
|
|
* @param dim_im_out_y output feature map height
|
|
* @param out opaque handler to scratch memory
|
|
*/
|
|
AI_INTERNAL_API
|
|
void pool_func_ap_array_fixed(ai_handle in,
|
|
const ai_u16 dim_im_in_x, const ai_u16 dim_im_in_y,
|
|
const ai_u16 ch_im_in,
|
|
const ai_u16 dim_kernel_x, const ai_u16 dim_kernel_y,
|
|
const ai_u16 padding_x, const ai_u16 padding_y,
|
|
const ai_u16 stride_x, const ai_u16 stride_y,
|
|
const ai_u16 dim_im_out_x, const ai_u16 dim_im_out_y,
|
|
ai_handle out);
|
|
|
|
/*!
|
|
* @brief Average Pooling on a 8-bits integer quantized data array
|
|
* @ingroup layers_pool
|
|
* @param in opaque handler to input data to process
|
|
* @param dim_im_in_x input feature map width
|
|
* @param dim_im_in_y input feature map height
|
|
* @param ch_im_in number of input channels
|
|
* @param dim_kernel_x kernel width
|
|
* @param dim_kernel_y kernel height
|
|
* @param padding_x right padding value
|
|
* @param padding_y top padding value
|
|
* @param stride_x stride value on x dimension
|
|
* @param stride_y stride value on y dimension
|
|
* @param dim_im_out_x output feature map width
|
|
* @param dim_im_out_y output feature map height
|
|
* @param out opaque handler to scratch memory
|
|
*/
|
|
AI_INTERNAL_API
|
|
void pool_func_ap_array_integer(ai_handle in,
|
|
const ai_u16 dim_im_in_x, const ai_u16 dim_im_in_y,
|
|
const ai_u16 ch_im_in,
|
|
const ai_u16 dim_kernel_x, const ai_u16 dim_kernel_y,
|
|
const ai_u16 padding_x, const ai_u16 padding_y,
|
|
const ai_u16 stride_x, const ai_u16 stride_y,
|
|
const ai_u16 dim_im_out_x, const ai_u16 dim_im_out_y,
|
|
ai_handle out);
|
|
|
|
/*!
|
|
* @brief Average Pooling on a signed 8-bits integer quantized data array
|
|
* @ingroup layers_pool
|
|
* @param in opaque handler to input data to process
|
|
* @param dim_im_in_x input feature map width
|
|
* @param dim_im_in_y input feature map height
|
|
* @param ch_im_in number of input channels
|
|
* @param dim_kernel_x kernel width
|
|
* @param dim_kernel_y kernel height
|
|
* @param padding_x right padding value
|
|
* @param padding_y top padding value
|
|
* @param stride_x stride value on x dimension
|
|
* @param stride_y stride value on y dimension
|
|
* @param dim_im_out_x output feature map width
|
|
* @param dim_im_out_y output feature map height
|
|
* @param out opaque handler to scratch memory
|
|
*/
|
|
AI_INTERNAL_API
|
|
void pool_func_ap_array_integer_INT8(ai_handle in,
|
|
const ai_u16 dim_im_in_x, const ai_u16 dim_im_in_y,
|
|
const ai_u16 ch_im_in,
|
|
const ai_u16 dim_kernel_x, const ai_u16 dim_kernel_y,
|
|
const ai_u16 padding_x, const ai_u16 padding_y,
|
|
const ai_u16 stride_x, const ai_u16 stride_y,
|
|
const ai_u16 dim_im_out_x, const ai_u16 dim_im_out_y,
|
|
ai_handle out);
|
|
|
|
/*!
|
|
* @brief Average Pooling on a unsigned 8-bits integer quantized data array
|
|
* @ingroup layers_pool
|
|
* @param in opaque handler to input data to process
|
|
* @param dim_im_in_x input feature map width
|
|
* @param dim_im_in_y input feature map height
|
|
* @param ch_im_in number of input channels
|
|
* @param dim_kernel_x kernel width
|
|
* @param dim_kernel_y kernel height
|
|
* @param padding_x right padding value
|
|
* @param padding_y top padding value
|
|
* @param stride_x stride value on x dimension
|
|
* @param stride_y stride value on y dimension
|
|
* @param dim_im_out_x output feature map width
|
|
* @param dim_im_out_y output feature map height
|
|
* @param out opaque handler to scratch memory
|
|
*/
|
|
AI_INTERNAL_API
|
|
void pool_func_ap_array_integer_UINT8(ai_handle in,
|
|
const ai_u16 dim_im_in_x, const ai_u16 dim_im_in_y,
|
|
const ai_u16 ch_im_in,
|
|
const ai_u16 dim_kernel_x, const ai_u16 dim_kernel_y,
|
|
const ai_u16 padding_x, const ai_u16 padding_y,
|
|
const ai_u16 stride_x, const ai_u16 stride_y,
|
|
const ai_u16 dim_im_out_x, const ai_u16 dim_im_out_y,
|
|
ai_handle out);
|
|
|
|
/******************************************************************************/
|
|
/* Forward Functions Section */
|
|
/******************************************************************************/
|
|
|
|
/*!
|
|
* @brief Computes the activations of a max pooling layer.
|
|
* @ingroup layers_pool
|
|
* @param layer the pooling (pool) layer
|
|
*/
|
|
AI_INTERNAL_API
|
|
void forward_mp(ai_layer* layer);
|
|
|
|
/*!
|
|
* @brief Computes the activations of a fixed point max pooling layer.
|
|
* @ingroup layers_pool
|
|
* @param layer the pooling (pool) layer
|
|
*/
|
|
AI_INTERNAL_API
|
|
void forward_mp_fixed(ai_layer *pLayer);
|
|
|
|
/*!
|
|
* @brief Computes the activations of an integer-quantized max pooling layer.
|
|
* @ingroup layers_pool
|
|
* @param layer the pooling (pool) layer
|
|
*/
|
|
AI_INTERNAL_API
|
|
void forward_mp_integer(ai_layer *pLayer);
|
|
|
|
/*!
|
|
* @brief Computes the activations of an integer-quantized max pooling layer
|
|
* with int8 I/O
|
|
* @ingroup layers_pool
|
|
* @param layer the pooling (pool) layer
|
|
*/
|
|
AI_INTERNAL_API
|
|
void forward_mp_integer_INT8(ai_layer *pLayer);
|
|
|
|
/*!
|
|
* @brief Computes the activations of an integer-quantized max pooling layer
|
|
* with int8 I/O. Optimized for HSP
|
|
* @ingroup layers_pool
|
|
* @param layer the pooling (pool) layer
|
|
*/
|
|
AI_INTERNAL_API
|
|
void forward_mp_hsp_INT8(ai_layer *pLayer);
|
|
|
|
|
|
/*!
|
|
* @brief Computes the activations of an integer-quantized max pooling layer
|
|
* with int8 I/O. Optimized for HSP: 2 Step variant for bigger tensors
|
|
* @ingroup layers_pool
|
|
* @param layer the pooling (pool) layer
|
|
*/
|
|
AI_INTERNAL_API
|
|
void forward_mp_hsp_2step_INT8(ai_layer *pLayer);
|
|
|
|
|
|
/*!
|
|
* @brief Computes the activations of an integer-quantized max pooling layer
|
|
* with uint8 I/O
|
|
* @ingroup layers_pool
|
|
* @param layer the pooling (pool) layer
|
|
*/
|
|
AI_INTERNAL_API
|
|
void forward_mp_integer_UINT8(ai_layer *pLayer);
|
|
|
|
/*!
|
|
* @brief Computes the activations of an integer-quantized max pooling layer
|
|
* with int16 I/O
|
|
* @ingroup layers_pool
|
|
* @param layer the pooling (pool) layer
|
|
*/
|
|
AI_INTERNAL_API
|
|
void forward_mp_integer_INT16(ai_layer *pLayer);
|
|
|
|
/*!
|
|
* @brief Computes the activations of an integer-quantized max pooling layer
|
|
* with uint16 I/O
|
|
* @ingroup layers_pool
|
|
* @param layer the pooling (pool) layer
|
|
*/
|
|
AI_INTERNAL_API
|
|
void forward_mp_integer_UINT16(ai_layer *pLayer);
|
|
|
|
/*!
|
|
* @brief Computes the activations of an average pooling layer.
|
|
* @ingroup layers_pool
|
|
* @param layer the pooling (pool) layer
|
|
*/
|
|
AI_INTERNAL_API
|
|
void forward_ap(ai_layer* layer);
|
|
|
|
|
|
/*!
|
|
* @brief Computes the activations of a fixed point average pooling layer.
|
|
* @ingroup layers_pool
|
|
* @param layer the pooling (pool) layer
|
|
*/
|
|
AI_INTERNAL_API
|
|
void forward_ap_fixed(ai_layer *pLayer);
|
|
|
|
/*!
|
|
* @brief Computes the activations of an integer-quantized average pooling layer.
|
|
* @ingroup layers_pool
|
|
* @param layer the pooling (pool) layer
|
|
*/
|
|
AI_INTERNAL_API
|
|
void forward_ap_integer(ai_layer *pLayer);
|
|
|
|
/*!
|
|
* @brief Computes the activations of an average pooling layer. Optimized for HSP
|
|
* @ingroup layers_pool
|
|
* @param layer the pooling (pool) layer
|
|
*/
|
|
AI_INTERNAL_API
|
|
void forward_ap_hsp_INT8(ai_layer *pLayer);
|
|
|
|
/*!
|
|
* @brief Computes the activations of an average pooling layer. Optimized for HSP
|
|
* Variant for larger tensors
|
|
* @ingroup layers_pool
|
|
* @param layer the pooling (pool) layer,
|
|
*/
|
|
AI_INTERNAL_API
|
|
void forward_ap_hsp_2step_INT8(ai_layer *pLayer);
|
|
|
|
/*!
|
|
* @brief Computes the activations of an integer-quantized average pooling layer
|
|
* with int8 I/O
|
|
* @ingroup layers_pool
|
|
* @param layer the pooling (pool) layer
|
|
*/
|
|
AI_INTERNAL_API
|
|
void forward_ap_integer_INT8(ai_layer *pLayer);
|
|
|
|
/*!
|
|
* @brief Computes the activations of an integer-quantized average pooling layer
|
|
* with uint8 I/O
|
|
* @ingroup layers_pool
|
|
* @param layer the pooling (pool) layer
|
|
*/
|
|
AI_INTERNAL_API
|
|
void forward_ap_integer_UINT8(ai_layer *pLayer);
|
|
|
|
AI_API_DECLARE_END
|
|
|
|
#endif /*LAYERS_POOL_H*/
|