123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- /******************************************************************************
- Copyright (C), 2017-2018, Hisilicon Tech. Co., Ltd.
- ******************************************************************************
- File Name : hi_nnie.h
- Version : Initial Draft
- Author : Hisilicon multimedia software (SVP) group
- Created : 2017/09/19
- Description :
- History :
- 1.Date : 2017/09/19
- Author :
- Modification: Created file
- ******************************************************************************/
- #ifndef _HI_NNIE_H_
- #define _HI_NNIE_H_
- #ifdef __cplusplus
- #if __cplusplus
- extern "C"{
- #endif
- #endif
- #include "hi_comm_svp.h"
- //if sdk environment,include hi_common.h,else typedef HI_S32 SVP_NNIE_HANDLE
- #include "hi_common.h"
- /**************************************SVP_NNIE Error Code***********************************************************************/
- typedef enum hiEN_SVP_NNIE_ERR_CODE_E
- {
- ERR_SVP_NNIE_SYS_TIMEOUT = 0x40, /* SVP_NNIE process timeout */
- ERR_SVP_NNIE_QUERY_TIMEOUT = 0x41, /* SVP_NNIE query timeout */
- ERR_SVP_NNIE_CFG_ERR = 0x42, /* SVP_NNIE Configure error */
- ERR_SVP_NNIE_OPEN_FILE = 0x43, /* SVP NNIE open file error */
- ERR_SVP_NNIE_READ_FILE = 0x44, /* SVP NNIE read file error */
- ERR_SVP_NNIE_WRITE_FILE = 0x45, /* SVP NNIE write file error */
- ERR_SVP_NNIE_BUTT
- }EN_SVP_NNIE_ERR_CODE_E;
- /*Invalid device ID*/
- #define HI_ERR_SVP_NNIE_INVALID_DEVID HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_DEVID)
- /*Invalid channel ID*/
- #define HI_ERR_SVP_NNIE_INVALID_CHNID HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_CHNID)
- /*At least one parameter is illegal. For example, an illegal enumeration value exists.*/
- #define HI_ERR_SVP_NNIE_ILLEGAL_PARAM HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_ILLEGAL_PARAM)
- /*The channel exists.*/
- #define HI_ERR_SVP_NNIE_EXIST HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_EXIST)
- /*The UN exists.*/
- #define HI_ERR_SVP_NNIE_UNEXIST HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_UNEXIST)
- /*A null point is used.*/
- #define HI_ERR_SVP_NNIE_NULL_PTR HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_NULL_PTR)
- /*Try to enable or initialize the system, device, or channel before configuring attributes.*/
- #define HI_ERR_SVP_NNIE_NOT_CONFIG HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_CONFIG)
- /*The operation is not supported currently.*/
- #define HI_ERR_SVP_NNIE_NOT_SURPPORT HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_SUPPORT)
- /*The operation, changing static attributes for example, is not permitted.*/
- #define HI_ERR_SVP_NNIE_NOT_PERM HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM)
- /*A failure caused by the malloc memory occurs.*/
- #define HI_ERR_SVP_NNIE_NOMEM HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_NOMEM)
- /*A failure caused by the malloc buffer occurs.*/
- #define HI_ERR_SVP_NNIE_NOBUF HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_NOBUF)
- /*The buffer is empty.*/
- #define HI_ERR_SVP_NNIE_BUF_EMPTY HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_EMPTY)
- /*No buffer is provided for storing new data.*/
- #define HI_ERR_SVP_NNIE_BUF_FULL HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_FULL)
- /*The system is not ready because it may be not initialized or loaded.
- *The error code is returned when a device file fails to be opened. */
- #define HI_ERR_SVP_NNIE_NOTREADY HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY)
- /*The source address or target address is incorrect during the operations such as calling copy_from_user or copy_to_user.*/
- #define HI_ERR_SVP_NNIE_BADADDR HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_BADADDR)
- /*The resource is busy during the operations such as destroying a VENC channel without deregistering it.*/
- #define HI_ERR_SVP_NNIE_BUSY HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY)
- /*SVP_NNIE process timeout*/
- #define HI_ERR_SVP_NNIE_SYS_TIMEOUT HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, ERR_SVP_NNIE_SYS_TIMEOUT)
- /*SVP_NNIE query timeout*/
- #define HI_ERR_SVP_NNIE_QUERY_TIMEOUT HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, ERR_SVP_NNIE_QUERY_TIMEOUT)
- /*SVP_NNIE configure error*/
- #define HI_ERR_SVP_NNIE_CFG_ERR HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, ERR_SVP_NNIE_CFG_ERR)
- #define HI_ERR_SVP_NNIE_OPEN_FILE HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, ERR_SVP_NNIE_OPEN_FILE)
- #define HI_ERR_SVP_NNIE_READ_FILE HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, ERR_SVP_NNIE_READ_FILE)
- #define HI_ERR_SVP_NNIE_WRITE_FILE HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, ERR_SVP_NNIE_WRITE_FILE)
- /*macro*/
- #define SVP_NNIE_MAX_NET_SEG_NUM 8 /*NNIE max segment num that the net being cut into*/
- #define SVP_NNIE_MAX_INPUT_NUM 16 /*NNIE max input num in each seg*/
- #define SVP_NNIE_MAX_OUTPUT_NUM 16 /*NNIE max output num in each seg*/
- #define SVP_NNIE_MAX_ROI_LAYER_NUM_OF_SEG 2 /*NNIE max roi layer num in each seg*/
- #define SVP_NNIE_MAX_ROI_LAYER_NUM 4 /*NNIE max roi layer num*/
- #define SVP_NNIE_NODE_NAME_LEN 32 /*NNIE node name length*/
- /*NNIE core id*/
- typedef enum hiSVP_NNIE_ID_E
- {
- SVP_NNIE_ID_0 = 0x0,
- SVP_NNIE_ID_1 = 0x1,
- SVP_NNIE_ID_BUTT
- }SVP_NNIE_ID_E;
- /*Run Mode*/
- typedef enum hiSVP_NNIE_RUN_MODE_E
- {
- SVP_NNIE_RUN_MODE_CHIP = 0x0, /* on SOC chip running */
- SVP_NNIE_RUN_MODE_FUNC_SIM = 0x1, /* functional simultaion */
- SVP_NNIE_RUN_MODE_BUTT
- }SVP_NNIE_RUN_MODE_E;
- /*Network type*/
- typedef enum hiSVP_NNIE_NET_TYPE_E
- {
- SVP_NNIE_NET_TYPE_CNN = 0x0, /* Non-ROI input cnn net */
- SVP_NNIE_NET_TYPE_ROI = 0x1, /* With ROI input cnn net*/
- SVP_NNIE_NET_TYPE_RECURRENT = 0x2, /* RNN or LSTM net */
- SVP_NNIE_NET_TYPE_BUTT
- }SVP_NNIE_NET_TYPE_E;
- /*Node information*/
- typedef struct hiSVP_NNIE_NODE_S
- {
- SVP_BLOB_TYPE_E enType;
- union
- {
- struct
- {
- HI_U32 u32Width;
- HI_U32 u32Height;
- HI_U32 u32Chn;
- }stWhc;
- HI_U32 u32Dim;
- }unShape;
- HI_U32 u32NodeId;
- HI_CHAR szName[SVP_NNIE_NODE_NAME_LEN];/*Report layer bottom name or data layer bottom name*/
- }SVP_NNIE_NODE_S;
- /*Roi/Psroi Pooling type*/
- typedef enum hiSVP_NNIE_ROIPOOL_TYPE_E
- {
- SVP_NNIE_ROIPOOL_TYPE_NORMAL = 0x0, /* Roipooling*/
- SVP_NNIE_ROIPOOL_TYPE_PS = 0x1, /* Position-Sensitive roipooling */
- SVP_NNIE_ROIPOOL_TYPE_BUTT
- }SVP_NNIE_ROIPOOL_TYPE_E;
- /*RoiPooling information*/
- typedef struct hiSVP_NNIE_ROIPOOL_INFO_S
- {
- HI_U32 u32SrcHeight; /*ROI/PSROI Pooling src height*/
- HI_U32 u32SrcWidth; /*ROI/PSROI Pooling src width*/
- HI_U32 u32SrcMapNum; /*Input featrue map channel*/
- HI_U32 u32DstHeight; /*ROI/PSROI Pooling dst height*/
- HI_U32 u32DstWidth; /*ROI/PSROI Pooling dst width*/
- HI_U32 u32DstMapNum; /*Output featrue map channel*/
- HI_U32 u32DinWidthRamOffset;
- HI_U32 u32DinHeightRamOffset;
- HI_U32 u32TotalDinWidthRamOffset;
- HI_U32 u32TotalDinHeightRamOffset;
- HI_U32 u32BlockMaxHeight; /*Block max height*/
- HI_U32 u32BlockNum; /*Block number*/
- HI_U32 u32BboxMaxNum; /*Bbox max number*/
- HI_U32 u32SpatialScale;
- HI_BOOL bNormPPMode; /*whether use PingPang mode*/
- HI_BOOL bTotalPPMode; /*whether use PingPang mode*/
- HI_BOOL bHighPrec; /*whether use high precision mode*/
- SVP_NNIE_ROIPOOL_TYPE_E enRoiPoolType; /*ROIPooling or PSROIPooling*/
- HI_CHAR szName[SVP_NNIE_NODE_NAME_LEN];/*Report layer bottom name or data layer bottom name*/
- }SVP_NNIE_ROIPOOL_INFO_S;
- /***************************************************************/
- /*Segment information*/
- typedef struct hiSVP_NNIE_SEG_S
- {
- SVP_NNIE_NET_TYPE_E enNetType;
- HI_U16 u16SrcNum;
- HI_U16 u16DstNum;
- HI_U16 u16RoiPoolNum;
- HI_U16 u16MaxStep;
- HI_U32 u32InstOffset;
- HI_U32 u32InstLen;
- SVP_NNIE_NODE_S astSrcNode[SVP_NNIE_MAX_INPUT_NUM];
- SVP_NNIE_NODE_S astDstNode[SVP_NNIE_MAX_OUTPUT_NUM];
- HI_U32 au32RoiIdx[SVP_NNIE_MAX_ROI_LAYER_NUM_OF_SEG]; /*Roipooling info index*/
- }SVP_NNIE_SEG_S;
- /*NNIE model*/
- typedef struct hiSVP_NNIE_MODEL_S
- {
- SVP_NNIE_RUN_MODE_E enRunMode;
- HI_U32 u32TmpBufSize; /*temp buffer size*/
- HI_U32 u32NetSegNum;
- SVP_NNIE_SEG_S astSeg[SVP_NNIE_MAX_NET_SEG_NUM];
- SVP_NNIE_ROIPOOL_INFO_S astRoiInfo[SVP_NNIE_MAX_ROI_LAYER_NUM]; /*ROIPooling info*/
- SVP_MEM_INFO_S stBase;
- }SVP_NNIE_MODEL_S;
- typedef struct hiSVP_NNIE_FORWARD_CTRL_S
- {
- HI_U32 u32SrcNum; /* input node num, [1, 16] */
- HI_U32 u32DstNum; /* output node num, [1, 16]*/
- HI_U32 u32NetSegId; /* net segment index running on NNIE */
- SVP_NNIE_ID_E enNnieId; /* device target which running the seg*/
- SVP_MEM_INFO_S stTmpBuf; /* auxiliary temp mem */
- SVP_MEM_INFO_S stTskBuf; /* auxiliary task mem */
- }SVP_NNIE_FORWARD_CTRL_S;
- typedef struct hiSVP_NNIE_FORWARD_WITHBBOX_CTRL_S
- {
- HI_U32 u32SrcNum; /* input node num, [1, 16] */
- HI_U32 u32DstNum; /* output node num, [1, 16]*/
- HI_U32 u32ProposalNum; /* elment num of roi array */
- HI_U32 u32NetSegId; /* net segment index running on NNIE */
- SVP_NNIE_ID_E enNnieId; /* device target which running the seg*/
- SVP_MEM_INFO_S stTmpBuf; /* auxiliary temp mem */
- SVP_MEM_INFO_S stTskBuf; /* auxiliary task mem */
- }SVP_NNIE_FORWARD_WITHBBOX_CTRL_S;
- #ifdef __cplusplus
- #if __cplusplus
- }
- #endif
- #endif
- #endif/*_HI_NNIE_H_*/
|