分类算法
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
1.0 | 04/19/2023 |
1. 概述¶
1.1. 算法说明¶
分类算法包括:行人分类、人宠物分类
1.2. 算法规格¶
-
板端资源
Model Resolution Rom Ram Inference time HC36.img 352*640 723KB 1700KB 6.3ms HPC36.img 352*640 725KB 1716KB 6.3ms -
精度
指标:TPR/FPR
测试集: HC Test Set | HPC Test Set
Model Classes Threshold Test Set A Test Set B Test Set C Test Set D HC36.img Person 0.7 0.860/0.048 0.863/0.033 0.909/0.048 0.897/0.048 Model Classes Threshold Test Set A Test Set B Test Set C Test Set D HPC36.img Person 0.7 0.861/0.038 0.862/0.041 0.894/0.069 0.887/0.065 Pets 0.5 0.667/0.027 0.483/0.008 0.531/0.017 0.553/0.019 -
距离
行人检测距离:25m
宠物检测距离:15m
2. API参考¶
该功能模块提供以下API:
API名称 | 功能 |
---|---|
ALGO_CLS_CreateHandle | 创建句柄 |
ALGO_CLS_InitHandle | 初始化句柄 |
ALGO_CLS_GetInputAttr | 获取模型的属性信息 |
ALGO_CLS_SetThreshold | 设置阈值 |
ALGO_CLS_Run | 进入分类算法 |
ALGO_CLS_DeInitHandle | 反初始化句柄 |
ALGO_CLS_ReleaseHandle | 删除句柄 |
2.1. ALGO_CLS_CreateHandle¶
-
功能
创建句柄
-
语法
MI_S32 ALGO_CLS_CreateHandle (void** handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
返回值 描述 0 成功 其他 错误码 -
依赖
-
头文件:sstar_cls_api.h
-
库文件:libsstaralgo_cls.a/libsstaralgo_cls.so
-
2.2. ALGO_CLS_InitHandle¶
-
功能
初始化句柄
-
语法
MI_S32 ALGO_CLS_InitHandle (void* handle, InitInfo_t* initInfo);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 InitInfo 配置ipu_firmware_path路径、模型文件夹路径、阈值 输入 -
返回值
返回值 描述 0 成功 其他 错误码 -
依赖
-
头文件:sstar_cls_api.h
-
库文件:libsstaralgo_cls.a/libsstaralgo_cls.so
-
2.3. ALGO_CLS_GetInputAttr¶
-
功能
获取模型的属性信息,包括模型输入分辨率以及输入数据的类型
-
语法
MI_S32 ALGO_CLS_GetInputAttr (void* handle, InputAttr_t* inputInfo);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 inputInfo 输出结构体 输出 -
返回值
返回值 描述 0 成功 其他 错误码 -
依赖
-
头文件:sstar_cls_api.h
-
库文件:libsstaralgo_cls.a/libsstaralgo_cls.so
-
2.4. ALGO_CLS_SetThreshold¶
-
功能
设置阈值
-
语法
MI_S32 ALGO_CLS_SetThreshold (void* handle, MI_FLOAT threshold);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 threshold 阈值 输入 -
返回值
返回值 描述 0 成功 其他 错误码 -
依赖
-
头文件:sstar_cls_api.h
-
库文件:libsstaralgo_cls.a/libsstaralgo_cls.so
-
2.5. ALGO_CLS_Run¶
-
功能
进入分类算法
-
语法
MI_S32 ALGO_CLS_Run (void* handle, const ALGO_Input_t *algoBufInfo, OutputInfo_t results[NUM_OUTPUS], MI_S32* outputCount);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 algoBufInfo 输入buffer 输入 results 模型输出结构体 输出 outputCount 输出个数 输出 -
返回值
返回值 描述 0 成功 其他 错误码 -
依赖
-
头文件:sstar_cls_api.h
-
库文件:libsstaralgo_cls.a/libsstaralgo_cls.so
-
2.6. ALGO_CLS_DeInitHandle¶
-
功能
反初始化句柄
-
语法
MI_S32 ALGO_CLS_DeInitHandle (void* handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
返回值 描述 0 成功 -
依赖
-
头文件:sstar_cls_api.h
-
库文件:libsstaralgo_cls.a/libsstaralgo_cls.so
-
2.7. ALGO_CLS_ReleaseHandle¶
-
功能
删除句柄
-
语法
MI_S32 ALGO_CLS_ReleaseHandle (void* handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
返回值 描述 0 成功 -
依赖
-
头文件:sstar_cls_api.h
-
库文件:libsstaralgo_cls.a/libsstaralgo_cls.so
-
3. 结构体说明¶
classification相关数据类型定义如下:
数据类型 | 定义 |
---|---|
InputAttr_t | 算法输入结构体 |
OutputInfo_t | 算法输出结构体 |
InitInfo_t | 算法参数相关结构体 |
ALGO_Input_t | 算法参数相关结构体 |
3.1 InputAttr_t¶
-
说明
定义分辨率大小和模型类型
-
定义
typedef struct{ MI_U32 width; MI_U32 height; MI_IPU_ELEMENT_FORMAT format; }InputAttr_t;
-
成员
成员名称 描述 width 模型输入数据的宽 height 模型输入数据的高 format 模型输入数据的类型 -
相关数据类型及接口
3.2 OutputInfo_t¶
-
说明
算法输出结构体
-
定义
typedef struct{ MI_U32 class_id; MI_FLOAT score; MI_U64 pts; }OutputInfo_t;
-
成员
成员名称 描述 class_id 类别(0: person; 1: cat; 2: dog) score 目标的分值 Pts 时间戳 -
相关数据类型及接口
3.3 InitInfo_t¶
-
说明
算法相关结构体
-
定义
typedef struct{ char ipu_firmware_path[MAX_CLS_STRLEN]; char model[MAX_CLS_STRLEN]; float threshold; }InitInfo_t;
-
成员
成员名称 描述 ipu_firmware_path[MAX_CLS_STRLEN] ipu_firmware_path路径 model[MAX_CLS_STRLEN] 模型路径 threshold 阈值, 当socre大于该值表示命中 -
相关数据类型及接口
3.4 ALGO_Input_t¶
-
说明
输入buffer相关结构体
-
定义
typedef struct{ void* p_vir_addr; MI_PHY phy_addr; MI_U32 buf_size; MI_U64 pts; }ALGO_Input_t;
-
成员
成员名称 描述 p_vir_addr 输入buffer的虚拟地址 phy_addr 输入buffer的物理地址 buf_size 输入buffer的长度 pts 输入buffer的时间戳 -
相关数据类型及接口
4. 错误码¶
错误码 | 数值 | 描述 |
---|---|---|
E_ALGO_SUCCESS | 0 | 操作成功 |
E_ALGO_HANDLE_NULL | 1 | 算法句柄为空 |
E_ALGO_INVALID_PARAM | 2 | 无效的输入参数 |
E_ALGO_DEVICE_FAULT | 3 | 硬件错误 |
E_ALGO_LOADMODEL_FAIL | 4 | 加载模型失败 |
E_ALGO_INIT_FAIL | 5 | 算法初始化失败 |
E_ALGO_NOT_INIT | 6 | 算法尚未初始化 |
E_ALGO_INPUT_DATA_NULL | 7 | 算法输入数据为空 |
E_ALGO_INVALID_INPUT_SIZE | 8 | 无效的算法输入数据维度 |
E_ALGO_INVALID_LICENSE | 9 | 无效的license许可 |
E_ALGO_MEMORY_OUT | 10 | 内存不足 |
E_ALGO_FILEIO_ERROR | 11 | 文件读写操作错误 |
E_ALGO_INVALID_OUTPUT_SIZE | 12 | 无效的算法输出数据维度 |