zoukankan      html  css  js  c++  java
  • AI人脸识别SDK接入 — 参数优化篇(虹软)

    引言

           使用了虹软公司免费的人脸识别算法,感觉还是很不错的,当然,如果是初次接触的话会对一些接口的参数有些疑问的。这里分享一下我对一些参数的验证结果(这里以windows版本为例,linux、android基本一样),希望能更好的帮助各位接入虹软的人脸识别算法~

    本文主要分析以下两个参数:

    • detectFaceMaxNum
    • combinedMask

    detectMode参数介绍

           在引擎初始化的时候,需要选择videoimage模式,在接口头文件中定义了宏ASF_DETECT_MODE_VIDEOASF_DETECT_MODE_IMAGE,根据需要的模式传入即可。video模式对应人脸追踪算法(FT),image模式对应人脸检测算法(FD),关于FT/FD算法的区别可以参考虹软AI 人脸识别SDK接入 — 参数优化篇(1) 通过测试数据,个人感觉image模式下的数据更能准确的体现算法的能力,下面关于其他参数的介绍均在image模式下进行;

    测试机器硬件配置:

    • 处理器:Intel(R)Corei5-7400 CPU @ 3.00GHZ 300GHZ
    • 安装内存(RAM):16.00GB(15.9GB可用)
    • 系统类型:win-10 64位操作系统

    参数介绍:

    一、detectFaceMaxNum参数说明

    1.1 推荐值

           初始化接口中detectFaceMaxNum参数的设置决定ASFDetectFaces(FT/FD)接口单帧图片允许检测的最大人脸数,官网推荐最大值不超过50,虽然可以设置更大的值,但是没有必要,下面数据可以说明;

    1.2 检测到的人脸数对应的性能消耗

    测试用例:

    1. 1280*720像素图像数据;
    2. 循环检测100次取平均值;
    • ASF_DETECT_MODE_IMAGE模式

    单帧图片中人脸数

    耗时(ms)

    1

    16

    2

    21

    4

    167

    8

    186

    16

    289

    • ASF_DETECT_MODE_VIDEO模式

    单帧图片中人脸数

    耗时(ms)

    1

    3

    2

    4

    4

    4

    8

    4

    16

    5

           通过以上数据可以看出,image模式下图片中人脸数越多单次检测的耗时会越长,video模式下图片中人脸数越多单次检测的耗时也会有略微增加。综上,detectFaceMaxNum参数的设置多少并不影响内存的分配以及性能的消耗,仅是设置算法单帧检测的最大人脸数。

    二、combinedMask参数说明

    2.1 内存占用

           combinedMask参数是初始化引擎时传入不同属性功能组合,传入的属性越多引擎分配的内存越大。实际应用情况下,传入必需的属性组合即可,传入多余属性只会占用内存。

    下表数据是在测试其他参数固定,只修改mask参数时初始化接口内存的占用情况(数据取自windows任务管理器):

    ASFInitEngine(ASF_DETECT_MODE_IMAGE, ASF_OP_0_ONLY, 32, 5, combinedMask, &handle);

    combinedMask

    内存占用(KB)

    对应算法接口

    全属性

    121,148

    全接口

    无属性

    4,920

    ASF_FACE_DETECT

    44,424

    ASFDetectFaces

    ASF_FACERECOGNITION

    27,564

    ASFFaceFeatureExtract
    ASFFaceFeatureCompare

    ASF_AGE

    23,008

    ASFProcess/ASFGetAge

    ASF_GENDER

    23,316

    ASFProcess/ASFGetGender

    ASF_FACE3DANGLE

    20,484

    ASFProcess/ASFGetFace3DAngle

    ASF_LIVENESS

    53,200

    ASFProcess/ASFGetLivenessScore

    2.2 ASFInitEngine接口与ASFProcess接口中combinedMask参数的关系

    官方文档对ASFProcess接口中combinedMask参数的解释:

    初始化中参数combinedMaskASF_AGE | ASF_GENDER | ASF_FACE3DANGLE | ASF_LIVENESS交集的子集;

    举例说明:

    例1:ASFInitEngine接口中传入全属性,则ASFProcess接口可以传入ASF_AGE、ASF_GENDER、 ASF_FACE3DANGLE、 ASF_LIVENESS四种属性的任意组合。

    例2:ASFInitEngine接口中传入ASF_FACE_DETECT | ASF_FACERECOGNITION | ASF_AGE | ASF_GENDER ,则ASFProcess接口只能传入ASF_AGE、 ASF_GENDER两种属性的任意组合。

    2.3 cpu占用

           cpu占用受设备以及测试条件影响比较大,根据使用情况ASF_AGE | ASF_GENDER | ASF_FACE3DANGLE对应的算法对cpu的消耗是比较少的,但ASF_LIVENESS是比较消耗cpu资源的,需要根据自身设备做对应处理。

    2.4 ASFProcess接口不同属性的性能

    测试用例:

    1. 1280*720像素图像数据;
    2. 循环检测100次取平均值;

    测试代码:

    LARGE_INTEGER  litmp;
    LONGLONG  QPart = 0, QPart1 = 0, QPart2 = 0;
    QueryPerformanceFrequency(&litmp);   //获得时钟频率
    QPart = litmp.QuadPart;
    //获得开始时CPU嘀哒声
    QueryPerformanceCounter(&litmp);//获得时钟初始值
    QPart1 = litmp.QuadPart;
     
    //这里要计算的的代码执行的时间
    for (int i = 0; i<100; i++)
    {
             res = ASFProcess(handle, cutImg1->width, cutImg1->height, ASVL_PAF_RGB24_B8G8R8, (MUInt8*)cutImg1->imageData, &detectedFaces1, processMask);
    }
     
    QueryPerformanceCounter(&litmp);     //获得时钟终止值
    QPart2 = litmp.QuadPart;
    //计算时间差(ms)
    double time = (double)(QPart2 - QPart1) / (double)QPart * 1000;
    printf("time = %lf
    ", time);

    测试结果

    combinedMask参数

    性能(ms)

    ASF_AGE/ASF_GENDER/
    ASF_FACE3DANGLE/ASF_LIVENESS

    193

    ASF_AGE

    29

    ASF_GENDER

    13

    ASF_FACE3DANGLE

    7

    ASF_LIVENESS

    169

           综上所述,年龄、性别、3d角度的检测是非常快的,活体检测相对较慢。在实际应用中仅需要检测ASF_AGE、ASF_GENDER、 ASF_FACE3DANGLE的话,可以放在主线程中处理,但如果需要检测ASF_LIVENESS建议单开线程去处理,这样在video模式下不会出现卡帧的情况,界面显示比较流畅。

     

    如果想下载虹软sdk的话,可以去https://ai.arcsoft.com.cn/product/arcface.html?utm_source=bky&utm_medium=referral

     

  • 相关阅读:
    mysql 新用户添加和权限
    分治法
    插入排序
    猴子分桃问题
    关于PHP面向对象 静态方法的疑问
    php中static 静态变量和普通变量的区别
    php函数引用返回
    redis 限制请求次数的写法
    cas单点登录认证原理
    聚簇索引和非聚簇索引
  • 原文地址:https://www.cnblogs.com/bodaren/p/11014964.html
Copyright © 2011-2022 走看看