mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
214 lines
9.6 KiB
C
214 lines
9.6 KiB
C
/**
|
|
******************************************************************************
|
|
* @file lite_dense_is16.h
|
|
* @author Giacomo Turati
|
|
* @brief header file of AI platform lite conv2d kernel (with signed int16 input)
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* Copyright (c) 2024 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_CONV2D_IS16_H
|
|
#define LITE_CONV2D_IS16_H
|
|
|
|
|
|
#include "stai.h"
|
|
#include "ai_lite_interface.h"
|
|
|
|
/*!
|
|
* @brief Conv2d layer with fixed-point int16_t weights (e.g., Qkeras "auto_po2").
|
|
* Support signed integer 16 input and signed integer 16 output activations.
|
|
* Both weights and bias (if any) must be quantized with 16 bits.
|
|
* Manage different fixed-point scales between weights and bias (if any).
|
|
* @param output Pointer to the output buffer
|
|
* @param input Pointer to the input buffer
|
|
* @param weights Pointer to the weights array
|
|
* @param n_channel_in Number of input channels
|
|
* @param n_channel_out Number of output channels, i.e.,the number of conv2d hidden filters
|
|
* @param width_in Input width
|
|
* @param height_in Input height
|
|
* @param width_out Output width
|
|
* @param height_out Output height
|
|
* @param filt_width Filters width
|
|
* @param filt_height Filters height
|
|
* @param filt_pad_x Filters pad width
|
|
* @param filt_pad_y Filters pad height
|
|
* @param stride_x Stride width
|
|
* @param stride_y Stride height
|
|
* @param shifts Array of fixed-point binary scales for the weights
|
|
* @param bias_shifts Array of fixed-point binary scales for the bias
|
|
* @param signed_input Signed input flag
|
|
* @param signed_output Signed output flag
|
|
*/
|
|
LITE_API_ENTRY
|
|
void forward_lite_conv2d_is16os16ws16_fxp(
|
|
int16_t* output,
|
|
const int16_t* input,
|
|
const int16_t* weights,
|
|
const int16_t* bias,
|
|
const ai_size n_channel_in,
|
|
const ai_size n_channel_out,
|
|
const ai_size width_in,
|
|
const ai_size height_in,
|
|
const ai_size width_out,
|
|
const ai_size height_out,
|
|
const ai_size filt_width,
|
|
const ai_size filt_height,
|
|
const ai_size filt_pad_x,
|
|
const ai_size filt_pad_y,
|
|
const uint16_t stride_x,
|
|
const uint16_t stride_y,
|
|
const uint8_t* shifts,
|
|
const uint8_t* bias_shifts
|
|
);
|
|
|
|
/*!
|
|
* @brief Conv2d layer with fixed-point int16_t weights (e.g., Qkeras "auto_po2").
|
|
* Support signed integer 16 input and unsigned integer 16 output activations.
|
|
* Both weights and bias (if any) must be quantized with 16 bits.
|
|
* Manage different fixed-point scales between weights and bias (if any).
|
|
* @param output Pointer to the output buffer
|
|
* @param input Pointer to the input buffer
|
|
* @param weights Pointer to the weights array
|
|
* @param n_channel_in Number of input channels
|
|
* @param n_channel_out Number of output channels, i.e.,the number of conv2d hidden filters
|
|
* @param width_in Input width
|
|
* @param height_in Input height
|
|
* @param width_out Output width
|
|
* @param height_out Output height
|
|
* @param filt_width Filters width
|
|
* @param filt_height Filters height
|
|
* @param filt_pad_x Filters pad width
|
|
* @param filt_pad_y Filters pad height
|
|
* @param stride_x Stride width
|
|
* @param stride_y Stride height
|
|
* @param shifts Array of fixed-point binary scales for the weights
|
|
* @param bias_shifts Array of fixed-point binary scales for the bias
|
|
* @param signed_input Signed input flag
|
|
* @param signed_output Signed output flag
|
|
*/
|
|
LITE_API_ENTRY
|
|
void forward_lite_conv2d_is16ou16ws16_fxp(
|
|
uint16_t* output,
|
|
const int16_t* input,
|
|
const int16_t* weights,
|
|
const int16_t* bias,
|
|
const ai_size n_channel_in,
|
|
const ai_size n_channel_out,
|
|
const ai_size width_in,
|
|
const ai_size height_in,
|
|
const ai_size width_out,
|
|
const ai_size height_out,
|
|
const ai_size filt_width,
|
|
const ai_size filt_height,
|
|
const ai_size filt_pad_x,
|
|
const ai_size filt_pad_y,
|
|
const uint16_t stride_x,
|
|
const uint16_t stride_y,
|
|
const uint8_t* shifts,
|
|
const uint8_t* bias_shifts
|
|
);
|
|
|
|
/*!
|
|
* @brief Conv2d layer with fixed-point int16_t weights (e.g., Qkeras "auto_po2").
|
|
* Support unsigned integer 16 input and signed integer 16 output activations.
|
|
* Both weights and bias (if any) must be quantized with 16 bits.
|
|
* Manage different fixed-point scales between weights and bias (if any).
|
|
* @param output Pointer to the output buffer
|
|
* @param input Pointer to the input buffer
|
|
* @param weights Pointer to the weights array
|
|
* @param n_channel_in Number of input channels
|
|
* @param n_channel_out Number of output channels, i.e.,the number of conv2d hidden filters
|
|
* @param width_in Input width
|
|
* @param height_in Input height
|
|
* @param width_out Output width
|
|
* @param height_out Output height
|
|
* @param filt_width Filters width
|
|
* @param filt_height Filters height
|
|
* @param filt_pad_x Filters pad width
|
|
* @param filt_pad_y Filters pad height
|
|
* @param stride_x Stride width
|
|
* @param stride_y Stride height
|
|
* @param shifts Array of fixed-point binary scales for the weights
|
|
* @param bias_shifts Array of fixed-point binary scales for the bias
|
|
* @param signed_input Signed input flag
|
|
* @param signed_output Signed output flag
|
|
*/
|
|
LITE_API_ENTRY
|
|
void forward_lite_conv2d_iu16os16ws16_fxp(
|
|
int16_t* output,
|
|
const uint16_t* input,
|
|
const int16_t* weights,
|
|
const int16_t* bias,
|
|
const ai_size n_channel_in,
|
|
const ai_size n_channel_out,
|
|
const ai_size width_in,
|
|
const ai_size height_in,
|
|
const ai_size width_out,
|
|
const ai_size height_out,
|
|
const ai_size filt_width,
|
|
const ai_size filt_height,
|
|
const ai_size filt_pad_x,
|
|
const ai_size filt_pad_y,
|
|
const uint16_t stride_x,
|
|
const uint16_t stride_y,
|
|
const uint8_t* shifts,
|
|
const uint8_t* bias_shifts
|
|
);
|
|
|
|
/*!
|
|
* @brief Conv2d layer with fixed-point int16_t weights (e.g., Qkeras "auto_po2").
|
|
* Support unsigned integer 16 input and unsigned integer 16 output activations.
|
|
* Both weights and bias (if any) must be quantized with 16 bits.
|
|
* Manage different fixed-point scales between weights and bias (if any).
|
|
* @param output Pointer to the output buffer
|
|
* @param input Pointer to the input buffer
|
|
* @param weights Pointer to the weights array
|
|
* @param n_channel_in Number of input channels
|
|
* @param n_channel_out Number of output channels, i.e.,the number of conv2d hidden filters
|
|
* @param width_in Input width
|
|
* @param height_in Input height
|
|
* @param width_out Output width
|
|
* @param height_out Output height
|
|
* @param filt_width Filters width
|
|
* @param filt_height Filters height
|
|
* @param filt_pad_x Filters pad width
|
|
* @param filt_pad_y Filters pad height
|
|
* @param stride_x Stride width
|
|
* @param stride_y Stride height
|
|
* @param shifts Array of fixed-point binary scales for the weights
|
|
* @param bias_shifts Array of fixed-point binary scales for the bias
|
|
* @param signed_input Signed input flag
|
|
* @param signed_output Signed output flag
|
|
*/
|
|
LITE_API_ENTRY
|
|
void forward_lite_conv2d_iu16ou16ws16_fxp(
|
|
uint16_t* output,
|
|
const uint16_t* input,
|
|
const int16_t* weights,
|
|
const int16_t* bias,
|
|
const ai_size n_channel_in,
|
|
const ai_size n_channel_out,
|
|
const ai_size width_in,
|
|
const ai_size height_in,
|
|
const ai_size width_out,
|
|
const ai_size height_out,
|
|
const ai_size filt_width,
|
|
const ai_size filt_height,
|
|
const ai_size filt_pad_x,
|
|
const ai_size filt_pad_y,
|
|
const uint16_t stride_x,
|
|
const uint16_t stride_y,
|
|
const uint8_t* shifts,
|
|
const uint8_t* bias_shifts
|
|
);
|
|
|
|
#endif /* LITE_CONV2D_IS16_H */
|