mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
217 lines
8.8 KiB
C
217 lines
8.8 KiB
C
/**
|
|
******************************************************************************
|
|
* @file lite_bn_integer.h
|
|
* @author AIS
|
|
* @brief header file of AI platform lite integer batch normalization
|
|
* normalization functions
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* Copyright (c) 2023 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 LITE_BN_INTEGER_H
|
|
#define LITE_BN_INTEGER_H
|
|
|
|
|
|
#include "ai_lite_interface.h"
|
|
|
|
/**
|
|
* @brief Batch Normalization with 16-bit input, 16-bit threshold and binary output.
|
|
* It is implemented using a threshold, and this is possible because the output is binary.
|
|
*
|
|
* @param[in] pIn Input data pointer
|
|
* @param[out] pOut_32 Output data pointer
|
|
* @param[in] pThreshold Thresholds pointer (one per channel)
|
|
* @param[in] dim_x X dimension
|
|
* @param[in] dim_y Y dimension
|
|
* @param[in] channels_num Channels number
|
|
*/
|
|
LITE_API_ENTRY
|
|
void forward_lite_bn_is16os1ws16(const ai_i16 *pIn,
|
|
ai_u32 *pOut_32,
|
|
const ai_i16 *pThreshold,
|
|
const ai_i16 dim_x,
|
|
const ai_i16 dim_y,
|
|
const ai_i16 channels_num);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* @brief Batch Normalization with signed 8-bit input, output.
|
|
*
|
|
* @param[in] p_in Input data pointer
|
|
* @param[out] p_out Output data pointer
|
|
* @param[in] n_channel_inout nb channels
|
|
* @param[in] n_elements nb elements
|
|
* @param[in] in_scale input scale
|
|
* @param[in] in_zeropoint input zero point
|
|
* @param[in] out_scale output scale
|
|
* @param[in] out_zeropoint output zero point
|
|
* @param[in] pSc_scale pointer on scale scales
|
|
* @param[in] pSc_zeropoint pointer on scale zero_point
|
|
* @param[in] pScale_data pointer on scale input
|
|
* @param[in] pBias_scale pointer on bias scales
|
|
* @param[in] pBias_zeropoint pointer on bias zero_point
|
|
* @param[in] pBias_data pointer on bias input
|
|
* @param[in] bnl_param_sign sign of BNL parameters (0=unsigned, 1=signed)
|
|
* @param[in] pBuffer_a scratch buffer for:
|
|
* out factor: nb channels * sizeof(ai_i32) +
|
|
* out offset: nb channels * sizeof(ai_i32) +
|
|
* out shift: nb channels * sizeof(ai_i16)
|
|
*/
|
|
void forward_lite_bn_is8os8( const ai_i8 *p_in,
|
|
ai_i8 *p_out,
|
|
ai_size n_channel_inout,
|
|
ai_size n_elements,
|
|
ai_float in_scale,
|
|
const ai_i32 in_zeropoint,
|
|
ai_float out_scale,
|
|
const ai_i32 out_zeropoint,
|
|
const ai_float *pSc_scale,
|
|
const ai_i8 *pSc_zeropoint,
|
|
const ai_i8 *pData_scale,
|
|
const ai_float *pBias_scale,
|
|
const ai_i8 *pBias_zeropoint,
|
|
const ai_i8 *pData_bias,
|
|
ai_i16 bnl_param_sign,
|
|
ai_i32 scratch_size,
|
|
ai_i16 *pBuffer_a);
|
|
|
|
/**
|
|
* @brief Batch Normalization with signed 8-bit input, output
|
|
* per channel quantization
|
|
*
|
|
*
|
|
* @param[in] p_in Input data pointer
|
|
* @param[out] p_out Output data pointer
|
|
* @param[in] n_channel_inout nb channels
|
|
* @param[in] n_elements nb elements
|
|
* @param[in] in_scale input scale
|
|
* @param[in] in_zeropoint input zero point
|
|
* @param[in] out_scale output scale
|
|
* @param[in] out_zeropoint output zero point
|
|
* @param[in] pSc_scale pointer on scale scales
|
|
* @param[in] pSc_zeropoint pointer on scale zero_point
|
|
* @param[in] pScale_data pointer on scale input
|
|
* @param[in] pBias_scale pointer on bias scales
|
|
* @param[in] pBias_zeropoint pointer on bias zero_point
|
|
* @param[in] pBias_data pointer on bias input
|
|
* @param[in] bnl_param_sign sign of BNL parameters (0=unsigned, 1=signed)
|
|
* @param[in] pBuffer_a scratch buffer for:
|
|
* out factor: nb channels * sizeof(ai_i32) +
|
|
* out offset: nb channels * sizeof(ai_i32) +
|
|
* out shift: nb channels * sizeof(ai_i16)
|
|
*/
|
|
void forward_lite_bn_is8os8_ch( const ai_i8 *p_in,
|
|
ai_i8 *p_out,
|
|
ai_size n_channel_inout,
|
|
ai_size n_elements,
|
|
ai_float in_scale,
|
|
const ai_i32 in_zeropoint,
|
|
ai_float out_scale,
|
|
const ai_i32 out_zeropoint,
|
|
const ai_float *pSc_scale,
|
|
const ai_i8 *pSc_zeropoint,
|
|
const ai_i8 *pData_scale,
|
|
const ai_float *pBias_scale,
|
|
const ai_i8 *pBias_zeropoint,
|
|
const ai_i8 *pData_bias,
|
|
ai_i16 bnl_param_sign,
|
|
ai_i32 scratch_size,
|
|
ai_i16 *pBuffer_a);
|
|
|
|
/**
|
|
* @brief Batch Normalization with unsigned 8-bit input, output
|
|
*
|
|
*
|
|
* @param[in] p_in Input data pointer
|
|
* @param[out] p_out Output data pointer
|
|
* @param[in] n_channel_inout nb channels
|
|
* @param[in] n_elements nb elements
|
|
* @param[in] in_scale input scale
|
|
* @param[in] in_zeropoint input zero point
|
|
* @param[in] out_scale output scale
|
|
* @param[in] out_zeropoint output zero point
|
|
* @param[in] pSc_scale pointer on scale scales
|
|
* @param[in] pSc_zeropoint pointer on scale zero_point
|
|
* @param[in] pScale_data pointer on scale input
|
|
* @param[in] pBias_scale pointer on bias scales
|
|
* @param[in] pBias_zeropoint pointer on bias zero_point
|
|
* @param[in] pBias_data pointer on bias input
|
|
* @param[in] bnl_param_sign sign of BNL parameters (0=unsigned, 1=signed)
|
|
* @param[in] pBuffer_a scratch buffer for:
|
|
* out factor: nb channels * sizeof(ai_i32) +
|
|
* out offset: nb channels * sizeof(ai_i32) +
|
|
* out shift: nb channels * sizeof(ai_i16)
|
|
*/
|
|
void forward_lite_bn_iu8ou8( const ai_u8 *p_in,
|
|
ai_u8 *p_out,
|
|
ai_size n_channel_inout,
|
|
ai_size n_elements,
|
|
ai_float in_scale,
|
|
const ai_i32 in_zeropoint_32,
|
|
ai_float out_scale,
|
|
const ai_i32 out_zeropoint_32,
|
|
const ai_float *pSc_scale,
|
|
const ai_i8 *pSc_zeropoint,
|
|
const ai_i8 *pData_scale,
|
|
const ai_float *pBias_scale,
|
|
const ai_i8 *pBias_zeropoint,
|
|
const ai_i8 *pData_bias,
|
|
ai_i16 bnl_param_sign,
|
|
ai_i32 scratch_size,
|
|
ai_i16 *pBuffer_a);
|
|
|
|
/**
|
|
* @brief Batch Normalization with unsigned 8-bit input, output
|
|
* per channel quantization
|
|
*
|
|
*
|
|
* @param[in] p_in Input data pointer
|
|
* @param[out] p_out Output data pointer
|
|
* @param[in] n_channel_inout nb channels
|
|
* @param[in] n_elements nb elements
|
|
* @param[in] in_scale input scale
|
|
* @param[in] in_zeropoint input zero point
|
|
* @param[in] out_scale output scale
|
|
* @param[in] out_zeropoint output zero point
|
|
* @param[in] pSc_scale pointer on scale scales
|
|
* @param[in] pSc_zeropoint pointer on scale zero_point
|
|
* @param[in] pScale_data pointer on scale input
|
|
* @param[in] pBias_scale pointer on bias scales
|
|
* @param[in] pBias_zeropoint pointer on bias zero_point
|
|
* @param[in] pBias_data pointer on bias input
|
|
* @param[in] bnl_param_sign sign of BNL parameters (0=unsigned, 1=signed)
|
|
* @param[in] pBuffer_a scratch buffer for:
|
|
* out factor: nb channels * sizeof(ai_i32) +
|
|
* out offset: nb channels * sizeof(ai_i32) +
|
|
* out shift: nb channels * sizeof(ai_i16)
|
|
*/
|
|
void forward_lite_bn_iu8ou8_ch( const ai_u8 *p_in,
|
|
ai_u8 *p_out,
|
|
ai_size n_channel_inout,
|
|
ai_size n_elements,
|
|
ai_float in_scale,
|
|
const ai_i32 in_zeropoint,
|
|
ai_float out_scale,
|
|
const ai_i32 out_zeropoint,
|
|
const ai_float *pSc_scale,
|
|
const ai_i8 *pSc_zeropoint,
|
|
const ai_i8 *pData_scale,
|
|
const ai_float *pBias_scale,
|
|
const ai_i8 *pBias_zeropoint,
|
|
const ai_i8 *pData_bias,
|
|
ai_i16 bnl_param_sign,
|
|
ai_i32 scratch_size,
|
|
ai_i16 *pBuffer_a);
|
|
#endif /* LITE_BN_INTEGER_H */
|