Attribute Recognition算法说明


REVISION HISTORY

Revision No.
Description
Date
1.0
  • First version
  • 09/19/2023
    1.1
  • Second version
  • 10/17/2023

    1. 概述

    1.1. 算法说明

    attribute recognition算法包括:人脸属性识别、人脸表情识别、车辆属性识别。

    Model 功能 版本 属性类别 输出索引信息
    far101_224y.img 人脸属性识别 FAR101 眼镜、性别、口罩、胡子、年龄 人脸属性输出索引对照表
    far101_224y_emo.img 人脸表情识别 FAR101 正常、高兴、难过、惊讶、害怕、厌恶、生气 人脸表情输出索引对照表, 当输出值为-1时,表示无法识别
    var100_224y.img 车辆属性识别 VAR100 颜色、车型、车标 车辆颜色输出索引对照表车辆类型输出索引对照表车辆品牌输出索引对照表, 当输出值为-1时,表示无法识别

    1.2. 算法规格

    • 板端资源

      Model Resolution Rom Ram Inference time
      far100_224y_s45.img 224*224 1099KB 1729KB 2.44ms
      far101_224y.img 224*224 4167KB 5390KB 5.25ms
      far101_224y_emo.img 224*224 3608KB 4832KB 5.08ms
      Model Resolution Rom Ram Inference time
      var100_224y.img 224*224 3921KB 5156KB 5.18ms
    • 精度

      指标:TPR/TNR

      测试集: Face Test Set

      Model attribution Threshold Test Set A Test Set B Test Set C Test Set D Test Set D
      far100_224y_s45.img eye_glass 0.5 0.999/0.984 -/- -/- 0.994/0.994 0.997/0.990
      male 0.5 0.994/0.991 -/- -/- 0.994/0.976 0.967/0.974
      mask 0.5 0.000/1.000 1.00/0.000 1.00/0.000 0.000/1.00 0.000/0.998
      age 0.5 8 - - 11 5

    2. API参考

    该功能模块提供以下API:

    API名称 功能
    ALGO_ATTR_CreateHandle 创建句柄
    ALGO_ATTR_InitHandle 初始化句柄
    ALGO_ATTR_GetInputAttr 获取模型的属性信息
    ALGO_ATTR_SetParams 设置模型参数
    ALGO_ATTR_Run 进入属性识别算法
    ALGO_ATTR_DeInitHandle 反初始化句柄
    ALGO_ATTR_ReleaseHandle 删除句柄

    2.1. ALGO_ATTR_CreateHandle

    • 功能

      创建句柄

    • 语法

      MI_S32 ALGO_ATTR_CreateHandle (void **handle);
      
    • 形参

      参数名称 描述 输入/输出
      handle 句柄 输入
    • 返回值

      返回值 描述
      0 成功
      其他 错误码
    • 依赖

      • 头文件:sgs_attr_api.h

      • 库文件:libsgsalgo_attr.a/libsgsalgo_attr.so

    2.2. ALGO_ATTR_InitHandle

    • 功能

      初始化句柄

    • 语法

      MI_S32 ALGO_ATTR_InitHandle (void *handle, AttrInitInfo_t *init_info);
      
    • 形参

      参数名称 描述 输入/输出
      handle 句柄 输入
      init_info 配置ipu_firmware_path路径、模型文件夹路径 输入
    • 返回值

      返回值 描述
      0 成功
      其他 错误码
    • 依赖

      • 头文件:sgs_attr_api.h

      • 库文件:libsgsalgo_attr.a/libsgsalgo_attr.so

    2.3. ALGO_ATTR_GetInputAttr

    • 功能

      获取模型的属性信息,包括模型输入分辨率以及输入数据的类型

    • 语法

      MI_S32 ALGO_ATTR_GetInputAttr (void *handle, AttrInputAttr_t *attr_input);
      
    • 形参

      参数名称 描述 输入/输出
      handle 句柄 输入
      attr_input 输出结构体 输出
    • 返回值

      返回值 描述
      0 成功
      其他 错误码
    • 依赖

      • 头文件:sgs_attr_api.h

      • 库文件:libsgsalgo_attr.a/libsgsalgo_attr.so

    2.4. ALGO_ATTR_SetParams

    • 功能

      设置模型参数

    • 语法

      MI_S32 ALGO_ATTR_SetParams (void *handle, AttrParam_t *attr_params);
      
    • 形参

      参数名称 描述 输入/输出
      handle 句柄 输入
      attr_params 可配参数 输入
    • 返回值

      返回值 描述
      0 成功
      其他 错误码
    • 依赖

      • 头文件:sgs_attr_api.h

      • 库文件:libsgsalgo_attr.a/libsgsalgo_attr.so

    2.5. ALGO_ATTR_Run

    • 功能

      进入属性识别算法

    • 语法

      MI_S32 ALGO_ATTR_Run (void *handle, ALGO_AttrInput_t *attr_input, Attr_t *results);
      
    • 形参

      参数名称 描述 输入/输出
      handle 句柄 输入
      attr_input 输入buffer 输入
      results 模型输出结构体 输出
    • 返回值

      返回值 描述
      0 成功
      其他 错误码
    • 依赖

      • 头文件:sgs_attr_api.h

      • 库文件:libsgsalgo_attr.a/libsgsalgo_attr.so

    2.6. ALGO_ATTR_DeInitHandle

    • 功能

      反初始化句柄

    • 语法

      MI_S32 ALGO_ATTR_DeInitHandle (void *handle);
      
    • 形参

      参数名称 描述 输入/输出
      handle 句柄 输入
    • 返回值

      返回值 描述
      0 成功
    • 依赖

      • 头文件:sgs_attr_api.h

      • 库文件:libsgsalgo_attr.a/libsgsalgo_attr.so

    2.7. ALGO_ATTR_ReleaseHandle

    • 功能

      删除句柄

    • 语法

      MI_S32 ALGO_ATTR_ReleaseHandle (void *handle);
      
    • 形参

      参数名称 描述 输入/输出
      handle 句柄 输入
    • 返回值

      返回值 描述
      0 成功
    • 依赖

      • 头文件:sgs_attr_api.h

      • 库文件:libsgsalgo_attr.a/libsgsalgo_attr.so

    3. 结构体说明

    attr相关数据类型定义如下:

    数据类型 定义
    ALGO_MODEL_TYPE_ATTR_e 属性类型枚举
    AttrFace_t 人脸属性结构体
    AttrVehicle_t 车辆属性结构体
    AttrEmotion_t 人脸表情属性结构体
    Attr_t 属性类型结构体
    AttrInputAttr_t 模型输入结构体
    AttrInitInfo_t 算法初始化参数相关结构体
    ALGO_AttrInput_t 算法输入相关结构体
    AttrParam_t 算法可配参数相关结构体

    3.1 ALGO_MODEL_TYPE_ATTR_e

    • 说明

      算法识别类型枚举

    • 定义

      typedef enum
      {
          ATTR_TYPE_FACE,
          ATTR_TYPE_VEHICLE,
          ATTR_TYPE_EMOTION,
      }ALGO_MODEL_TYPE_ATTR_e;
      
    • 成员

      成员名称 描述
      ATTR_TYPE_FACE 人脸属性识别
      ATTR_TYPE_VEHICLE 车辆属性识别
      ATTR_TYPE_EMOTION 人脸表情识别
    • 相关数据类型及接口

      ALGO_ATTR_Run

    3.2 AttrFace_t

    • 说明

      人脸属性输出信息

    • 定义

      typedef struct AttrFace_
      {
          MI_BOOL eye_glass;
          MI_BOOL male;
          MI_BOOL mask;
          MI_S32  age;
          MI_BOOL mustache;
      }AttrFace_t;
      
    • 成员

      成员名称 描述
      eye_glass 眼镜
      male 性别
      mask 口罩
      age 年龄
      mustache 胡子
    • 相关数据类型及接口

      ALGO_ATTR_Run

    3.3 AttrVehicle_t

    • 说明

      车辆属性输出信息

    • 定义

      typedef struct AttrVehicle_
      {
          MI_S32 color;
          MI_S32 type;
          MI_S32 logo;
      }AttrVehicle_t;
      
    • 成员

      成员名称 描述
      color 车辆颜色
      type 车辆类型
      logo 车辆品牌
    • 相关数据类型及接口

      ALGO_ATTR_Run

    3.4 AttrEmotion_t

    • 说明

      人脸表情属性输出信息

    • 定义

      typedef struct AttrEmotion_
      {
          MI_S32  emotion;
      }AttrEmotion_t;
      
    • 成员

      成员名称 描述
      emotion 表情
    • 相关数据类型及接口

      ALGO_ATTR_Run

    3.5 Attr_t

    • 说明

      属性输出结构体

    • 定义

      typedef struct Attr_
      {
          AttrFace_t    face;
          AttrVehicle_t vehicle;
          AttrEmotion_t emotion;
      }Attr_t;
      
    • 成员

      成员名称 描述
      face 人脸属性输出信息
      vehicle 车辆属性输出信息
      emotion 人脸表情属性输出信息
    • 相关数据类型及接口

      ALGO_ATTR_Run

    3.6 AttrInputAttr_t

    • 说明

      定义分辨率大小和模型类型

    • 定义

      typedef struct AttrInputAttr_
      {
          MI_U32 width;
          MI_U32 height;
          MI_IPU_ELEMENT_FORMAT format;
      }AttrInputAttr_t;
      
    • 成员

      成员名称 描述
      width 模型输入数据的宽
      height 模型输入数据的高
      format 模型输入数据的类型
    • 相关数据类型及接口

      ALGO_ATTR_GetInputAttr

    3.7 AttrInitInfo_t

    • 说明

      算法相关结构体

    • 定义

      typedef struct AttrInitInfo_
      {
          MI_U8 ipu_firmware_path[IPU_MAX_LENGTH];
          MI_U8 model_path[MODEL_MAX_LENGTH];
          MI_BOOL create_device;
          MI_BOOL destroy_device;
          void *model_buffers;
          MI_U32 model_buffer_len;
      }AttrInitInfo_t;
      
    • 成员

      成员名称 描述
      ipu_firmware_path[IPU_MAX_LENGTH] ipu_firmware_path路径
      model_path[MODEL_MAX_LENGTH] 模型路径
      create_device 是否创建设备
      destroy_device 是否销毁设备
      model_buffers 使用model_path时请设置为NULL,将model_path置空并且设置model_buffer和model_buffer_len可用于从模型内存块初始化算法
      model_buffer_len 使用model_path时请设置为0,设置model_buffer内存块长度
    • 相关数据类型及接口

      ALGO_ATTR_InitHandle

    3.8 ALGO_AttrInput_t

    • 说明

      输入buffer相关结构体

    • 定义

      typedef struct ALGO_AttrInput_
      {
          void*  p_vir_addr;
          MI_PHY phy_addr;
          MI_U32 buf_size;
          MI_S64 pts;
      }ALGO_AttrInput_t;
      
    • 成员

      成员名称 描述
      p_vir_addr 输入buffer的虚拟地址
      phy_addr 输入buffer的物理地址
      buf_size 输入buffer的长度
      pts 输入buffer的时间戳
    • 相关数据类型及接口

      ALGO_ATTR_Run

    3.9 AttrParam_t

    • 说明

      算法参数相关结构体

    • 定义

      typedef struct AttrParam_
      {
          MI_FLOAT threshold;
          ALGO_MODEL_TYPE_ATTR_e model_type_attr;
      }AttrParam_t;
      
    • 成员

      成员名称 描述
      threshold 阈值
      model_type_attr 模型识别类型
    • 相关数据类型及接口

      ALGO_ATTR_SetParams

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

    5. 输出索引说明

    5.1 人脸属性索引对照表

    索引 眼镜 性别 口罩 胡子 年龄
    0 没戴眼镜 女性 没戴口罩 没有胡子 0~100岁
    1 戴眼镜 男性 戴口罩 有胡子 0~100岁

    5.2 人脸表情索引对照表

    索引 人脸表情
    0 正常
    1 高兴
    2 难过
    3 惊讶
    4 害怕
    5 厌恶
    6 生气

    5.3 车辆颜色索引对照表

    索引 车辆颜色
    0 白色
    1 黑色
    2 灰色
    3 红色
    4 蓝色
    5 绿色
    6 棕色
    7 黄色
    8 青色
    9 紫色
    10 金色

    5.4 车辆类型索引对照表

    索引 车辆类型
    0 轿车
    1 SUV
    2 面包车
    3 商务车
    4 公共汽车
    5 卡车
    6 客车
    7 皮卡车
    8 其他

    5.5

    索引 车辆品牌
    0 Volkswagen
    1 Buick
    2 Ford
    3 Toyota
    4 NISSAN
    5 Honda
    6 Modern
    7 Wuling
    8 KIA
    9 Chevrolet
    10 Audi
    11 Mercedes-Benz
    12 Changan
    13 BMW
    14 Bao Jun
    15 Geely
    16 Harvard
    17 Citroen
    18 BYD
    19 JAC
    20 Cheryl
    21 Bestune
    22 Peugeot
    23 FAW
    24 Mazda
    25 Skoda
    26 Roewe
    27 Forland times
    28 Great Wall
    29 Land Rover
    30 Volvo
    31 Suzuki
    32 Cadillac
    33 BAIC Weiwang
    34 Southeast Motor
    35 Dongfeng Xiaokang
    36 Haima
    37 Jeep
    38 GAC Motor
    39 Zotye
    40 Lexus
    41 Yutong
    42 Foton
    43 Zhongtong
    44 Jinbei
    45 Dongfeng Fengxing
    46 Mitsubishi
    47 Subaru
    48 BAIC Senova
    49 Renualt
    50 Jing long
    51 Zhonghua
    52 Dongfeng Fengshen
    53 Dongfeng
    54 Jiangling
    55 SUNWIN
    56 Porsche
    57 MINI
    58 MG
    59 BAIC Motor
    60 HIGER
    61 Smart
    62 BAIC BJEV
    63 Lincoln
    64 Venucia
    65 Karry
    66 Dongfeng scenery
    67 DODGE
    68 Infiniti
    69 Jaguar
    70 Iveco
    71 FIAT
    72 TKNG
    73 Hafei Auto
    74 Kaima
    75 Old Scooter
    76 LUXGEN
    77 Golden Dragon
    78 Yuejin
    79 Changhe
    80 Leopaard
    81 Isuzu
    82 SAIC MAXUS
    83 Landwind
    84 BAIC Huansu
    85 Hawtai
    86 Ssangyong
    87 Zhongxing
    88 Lifan
    89 Chrysler
    90 Mustang
    91 Shaanqi Tongjia
    92 Huanghai
    93 Maserati
    94 DS
    95 Ankai
    96 Tesla
    97 Hengtong
    98 FAW General
    99 SINOTRUK
    100 ACURA
    101 Cowin
    102 Hongqi
    103 Heibao Auto
    104 Kowloon
    105 Borgward
    106 Qingdao Jiefang
    107 Wuzheng
    108 EVERUS
    109 Dongfeng Fengdu
    110 Dongfeng Shares
    111 Opel
    112 Car end
    113 SWM Motor
    114 Dongfeng Commercial
    115 QOROS
    116 Jiefang
    117 Concrete Mixer Class
    118 WAW Truck
    119 Lotus
    120 Daewoo
    121 Guangzhou Auto Geo
    122 CNJ
    123 BAIC
    124 Shenlong
    125 Bentley
    126 BAW
    127 Dangerous Goods Transport Vehicles
    128 Qingling
    129 FQT Motor
    130 Fudi
    131 Hanteng
    132 Sprinkler
    133 Shifeng
    134 Shaanxi Auto
    135 Youngman
    136 SMA Motor
    137 Yaxing
    138 Huazhong
    139 GMC
    140 Skannia
    141 North
    142 Yongyuan
    143 UFO
    144 Feichi
    145 KANDI
    146 Yingzhi
    147 Beiben
    148 Sediment truck