SSD仿真代码
2019-10-21 23:07:15 0 举报
SSD_NNIE
作者其他创作
大纲/内容
SvpSampleCnnDetSSD
memory needed by post-process of get detection result
4.解析完的结果:stBox : vTaggedBoxes
输入:1.netType
重要的步骤
draw detection rect boxes to src Image
输入:1.stSSDParam
#define SVP_NNIE_LAYER_CONF_CNT (4)//6#define SVP_NNIE_LAYER_PRIORBOX_CNT (4)//6#define SVP_NNIE_LAYER_SOFTMAX_CNT (4)//6#define SVP_NNIE_LAYER_DETECT_CNT (4)//6#define SVP_NNIE_LAYER_INCNT (8)//12#define SVP_NNIE_LAYER_OUTCNT (8)//12#define SVP_NNIE_AR_NUM (2)#define SVP_NNIE_PRIORBOX_NUM (4)#define SVP_NNIE_MINSIZE_NUM (3)#define SVP_SAMPLE_SSD_REPORT_NUM (8)//12/**********************************parameter struct*************************************/typedef struct hiSVP_NNIE_SSD_S{ //------ parameters for PriorBox ------ HI_S32 priorbox_layer_width[SVP_NNIE_LAYER_PRIORBOX_CNT]; HI_S32 priorbox_layer_height[SVP_NNIE_LAYER_PRIORBOX_CNT]; HI_S32 img_width; HI_S32 img_height; HI_FLOAT priorbox_min_size[SVP_NNIE_LAYER_PRIORBOX_CNT][SVP_NNIE_MINSIZE_NUM]; // HI_S32 min_size_num; HI_FLOAT priorbox_max_size[SVP_NNIE_LAYER_PRIORBOX_CNT]; HI_S32 max_size_num; HI_S32 flip; HI_S32 clip; HI_S32 input_ar_num[SVP_NNIE_LAYER_PRIORBOX_CNT]; HI_FLOAT priorbox_aspect_ratio[SVP_NNIE_LAYER_PRIORBOX_CNT][SVP_NNIE_AR_NUM]; HI_FLOAT priorbox_step_w[SVP_NNIE_LAYER_PRIORBOX_CNT]; HI_FLOAT priorbox_step_h[SVP_NNIE_LAYER_PRIORBOX_CNT]; HI_FLOAT offset; HI_S32 priorbox_var[SVP_NNIE_PRIORBOX_NUM]; HI_S32* priorbox_output_data[SVP_NNIE_LAYER_PRIORBOX_CNT + 1]; // ------ parameters for Softmax ------ HI_S32 softmax_in_height; HI_U32 softmax_in_channel[SVP_NNIE_LAYER_SOFTMAX_CNT]; HI_S32 concat_num; HI_S32 softmax_out_width; HI_S32 softmax_out_height; HI_S32 softmax_out_channel; HI_S32 softmax_input_width[SVP_NNIE_LAYER_SOFTMAX_CNT]; HI_S32* softmax_input_data[SVP_NNIE_LAYER_SOFTMAX_CNT]; HI_S32* softmax_output_data; //------ parameters for concat conv bias ------ HI_S32* conv_data[SVP_NNIE_LAYER_INCNT]; HI_S32 conv_width[SVP_NNIE_LAYER_INCNT]; HI_S32 conv_height[SVP_NNIE_LAYER_INCNT]; HI_S32 conv_channel[SVP_NNIE_LAYER_INCNT]; HI_S32 conv_stride[SVP_NNIE_LAYER_INCNT]; // ------ parameters for Permute ------ HI_S32* permute_output_data[SVP_NNIE_LAYER_OUTCNT]; HI_S32 permute_output_width[SVP_NNIE_LAYER_OUTCNT]; HI_S32 permute_output_height[SVP_NNIE_LAYER_OUTCNT]; HI_S32 permute_output_channel[SVP_NNIE_LAYER_OUTCNT]; // ------ parameters for detectionOut ------ HI_S32* detection_out_loc_data[SVP_NNIE_LAYER_DETECT_CNT]; HI_S32* detection_out_assist_mem; HI_U32 detect_input_channel[SVP_NNIE_LAYER_DETECT_CNT]; HI_S32 num_classes; HI_S32 top_k; HI_S32 keep_top_k; HI_S32 nms_thresh; HI_S32 conf_thresh;} SVP_NNIE_SSD_S;
ssd_inerface.cpp
输出的输出
输入:2.stSSDParam
数据结构
cv_draw_rect.cpp
1. check input para
输入:3.&stBoxesInfo
输入:3.netType
输入:2.stDetParam
stDetCfgtypedef struct hiSVP_NNIE_CFG_S{ const HI_CHAR *pszModelName; const HI_CHAR *paszPicList[SVP_NNIE_MAX_INPUT_NUM]; const HI_CHAR *paszLabel[SVP_NNIE_MAX_OUTPUT_NUM]; HI_U32 u32MaxInputNum; HI_U32 u32MaxBboxNum; HI_U32 u32TopN; HI_BOOL bNeedLabel;}SVP_NNIE_CFG_S;
HI_S32 SvpDetSsdGetDetectInputNum(const SVP_NNIE_SSD_S *para){ HI_S32 s32PriorSum = 0; for (HI_S32 i = 0; i < para->concat_num; i++) { s32PriorSum += para->detect_input_channel[i] / 4; } return s32PriorSum;}HI_S32 SvpDetSsdGetDetectOutSize(const SVP_NNIE_SSD_S *para){ HI_S32 s32PriorNum = SvpDetSsdGetDetectInputNum(para); return s32PriorNum*(4 + 6 + 6)*sizeof(HI_S32) + MAX_STACK_DEPTH * sizeof(SVP_SAMPLE_STACK_S);}
SvpSampleDetectionOneSeg.cpp
输入:1.pstDetParam
stDetParamstDetCfg
pszModelNamepaszPicList
HI_MPI_SVP_NNIE_Query
输入:6.imgNameRecoder
dst_score_sizedst_bbox_sizedst_roicnt_sizeu32PriorSizeu32SoftmaxSizeu32DetectionOutSizeu32ResultMemSize = 以上相加
SVP_SAMPLE_MIN
SvpSampleCom.cpp
SvpSampleOneSegDetCnnDeinit(&stDetParam);
step7 set ctrl param
输入:1.pstSSDParam
hi_comm_svp.h
2. declare definitions
5.j为共输入几张照片
4. run forward and detection
3. init resources
输入:4.p32BoxNum
typedef struct tagSVPUtils_Rect_S{ HI_U32 x; HI_U32 y; HI_U32 w; HI_U32 h;} SVPUtils_Rect_S;typedef struct tagSVPUtil_TaggedBox_S{ SVPUtils_Rect_S stRect; HI_U32 u32Class; HI_FLOAT fScore;} SVPUtils_TaggedBox_S;
1.pstDetParam->astSrc=====pstSrcBlob
SvpSampleSsd.cpp
重要的函数
所在的文件名字
dst_score
HI_MPI_SVP_NNIE_Forward
cv_draw_rect.h
u32DetectionOutSize = SvpDetSsdGetDetectOutSize(pstSSDParam);
ssd_interface.h
stDetParamtypedef struct hiSVP_NNIE_ONE_SEG_DET_S{ HI_U32 u32TotalImgNum; FILE *fpSrc[SVP_NNIE_MAX_INPUT_NUM]; FILE *fpLabel[SVP_NNIE_MAX_OUTPUT_NUM]; HI_U32 u32ModelBufSize; HI_U32 u32TmpBufSize; SVP_NNIE_MODEL_S stModel; SVP_MEM_INFO_S stModelBuf; SVP_MEM_INFO_S stTmpBuf; SVP_MEM_INFO_S stTskBuf; HI_U32 u32TaskBufSize; SVP_SRC_BLOB_S astSrc[SVP_NNIE_MAX_INPUT_NUM]; SVP_DST_BLOB_S astDst[SVP_NNIE_MAX_OUTPUT_NUM]; SVP_NNIE_FORWARD_CTRL_S stCtrl; //memory needed by post-process of getting detection result HI_S32 *ps32ResultMem;}SVP_NNIE_ONE_SEG_DET_S;
typedef struct hiSVP_SAMPLE_BOX_S{ HI_FLOAT f32Xmin; HI_FLOAT f32Xmax; HI_FLOAT f32Ymin; HI_FLOAT f32Ymax; HI_FLOAT f32ClsScore; HI_U32 u32MaxScoreIndex; HI_U32 u32Mask;}SVP_SAMPLE_BOX_S;typedef struct hiSVP_SAMPLE_BOX_RESULT_INFO_S{ HI_U32 u32OriImHeight; HI_U32 u32OriImWidth; SVP_SAMPLE_BOX_S* pstBbox;}SVP_SAMPLE_BOX_RESULT_INFO_S;
重要的参数
2.输入的数据:pstSSDParam->conv_data
use resultMem
SvpSampleMkdir
3.画好的图片保存在哪里?
SvpSampleWk.h
SvpSampleCnnDetectionOneSeg
calc batch loop count
输入:1.stDetCfg
SvpSampleNetCom.cpp
输入:1.g_paszModelName_d2.g_paszPicList_d3.netType(非)4:s32Cnt,最大为16,一般为1
2.图片类型:RGBPLANAR
5. deinit resources
输入:2.pstSSDParam
0 条评论
下一页