分类算法


REVISION HISTORY

Revision No.
Description
Date
1.0
  • First version
  • 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 模型输入数据的类型
    • 相关数据类型及接口

      ALGO_CLS_GetInputAttr

    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 时间戳
    • 相关数据类型及接口

      ALGO_CLS_Run

    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大于该值表示命中
    • 相关数据类型及接口

      ALGO_CLS_InitHandle

    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的时间戳
    • 相关数据类型及接口

      ALGO_CLS_Run

    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 无效的算法输出数据维度