人脸识别场景下Faiss大规模向量检测性能测试评估分析

news2024/7/31 15:07:40

在前面的两篇博文中,主要是考虑基于之前以往的人脸识别项目经历结合最近使用到的faiss来构建更加高效的检索系统,感兴趣的话可以自行移步阅读即可:

《基于facenet+faiss开发构建人脸识别系统》

Facenet算法的优点:

高准确率:Facenet模型在人脸识别和人脸验证任务上取得了非常出色的准确率,甚至在大规模人脸识别数据集上也表现优异。

基于嵌入向量的表示:Facenet将人脸图像转换为紧凑的嵌入向量,使得不同人的人脸之间能够得到有效的分离,并且嵌入向量具有良好的可比性。

大规模训练:Facenet模型可以通过使用大规模的人脸图像数据集进行训练,从而获得更好的泛化能力。

Facenet算法的缺点:

高计算资源需求:由于Facenet模型的深度和复杂性,需要大量的计算资源来进行训练和推理。这使得在某些设备或场景下应用Facenet模型变得困难。

影响因素敏感:Facenet模型对输入图像的光照、角度和尺度等因素敏感。在实际应用中,需要考虑这些因素对人脸识别或验证的影响。

《基于arcFace+faiss开发构建人脸识别系统》

ArcFace模型优点:

准确性高:ArcFace在常见的人脸识别任务中取得了非常好的性能,能够实现高准确性的人脸匹配和识别。

抗干扰能力强:ArcFace模型在面对光照变化、表情变化、遮挡等干扰因素时,仍能保持较高的稳定性和可靠性,对人脸图像的变化有较好的适应性。

特征嵌入明显:ArcFace模型通过学习得到的人脸特征向量在高维空间中有较明显的嵌入效果,同一个人的人脸特征向量距离较近,不同人的特征向量距离较远,增加了模型的判别力。

ArcFace模型缺点:

复杂性高:ArcFace模型相比其他简单的人脸识别模型,比如FaceNet,模型结构更加复杂,需要更大的计算资源和更长的训练时间。

数据依赖性强:ArcFace模型的性能与训练数据的质量和数量密切相关,需要大规模的人脸数据集进行训练,从而使模型具有更好的泛化能力。

隐私问题:由于ArcFace模型具有较强的人脸识别能力,潜在的隐私问题也随之出现。在应用和部署过程中,需要遵循隐私保护的原则和规定。

在前面两篇博文中整体的计算流程是一致的,只不过是模型使用有不同区分而已,在后端向量检索的时候都用到的faiss这个框架,没有很直观地对其性能进行测试评估,本文的主要目的就是考虑基于已有的数据来完成对faiss的评估计算。

我将前文中faiss检索部分的实现封装为experiment方法,之后编写训练测试,对结果进行可视化评估,如下所示:

def show():
    """
    实验评估可视化
    """
    C,A=[],[]
    for one in [1,10,100,1000,10000,100000,100000]:
        count,avg=experiment(nums=one)
        C.append(count)
        A.append(avg)
    print("C: ", C)
    print("A: ", A)
    plt.clf()
    plt.figure(figsize=(20,8))
    x_list=list(range(len(C)))
    plt.subplot(121)
    plt.xticks(x_list,['1','10','100','1000','10000','100000','100000'])
    plt.plot(x_list,C,c='b')
    plt.title("Total Time Trend Cruve")
    plt.subplot(122)
    plt.xticks(x_list,['1','10','100','1000','10000','100000','100000'])
    plt.plot(x_list,A,c='g')
    plt.title("Average Time Trend Cruve")
    plt.savefig("time.png")

结果输出如下所示:

 可视化对比结果如下所示:

 左边蓝色曲线表示的是单次实验总的查询时耗,右边绿色曲线表示的是单次实验单次查询的平均时耗,从图像呈现出来的走势来看,单次平均时耗随着查询次数的增加保持着相对的稳定。我这里使用的是lfw数据集构建的向量数据库,样本量为13233,并不大,资源消耗占用如下:

 接下来我换用另一个大的数据集来构建向量数据集,进而评估测试在大数据量情况下faiss的性能。这个大数据集共有45w+的样本数据量,整体计算日志输出如下所示:

 总样本数据量为:452960

完整输出如下所示:

 结果对比可视化如下所示:

 可以看到:随着数据量的增大单次查询时耗也是增加不少的。

在第一组实验中lfw数据集上1w+的样本数据量,单次查询时耗如下:

 基本维持在0.0002s的水平。

在大数据集45w+的向量检索条件下,实验结果单次查询时耗如下所示:

 基本维持在0.0322s的水平。

这两组实验整体对比来看,数据量增大了45倍左右,单次查询时耗增大了161倍。

当然了,这只是粗浅直观地对比分析,只是简单直接地通过实际实验数据来探索分析数据量-时耗的关系,我的实验条件是cpu环境,并没有用faiss-gpu的版本,如果是使用gpu的话应该会更快一下。

另外这里的index使用的是精准的查询也就是暴力搜索IndexFlatL2,这种方法本身在数据量很大的情况下就会是很慢的。

接下来我们来尝试使用其他类型的index方法——PQx :乘积量化来通过实验分析对应的性能。这里依旧是使用lfw数据集。计算结果输出如下所示:

 结果对比可视化如下所示:

 在大数据量条件下测试结果输出如下所示:

 结果对比可视化如下所示:

 粗略来看,大数据集上面的性能至少比暴力搜索快了一个数量级。

接下来我们基于IVFxPQy 倒排乘积量化来对faiss进行测试评估分析,以lfw数据集为例,看下结果输出:

 结果对比可视化如下所示:

 在大数据量条件下测试结果输出如下所示:

  结果对比可视化如下所示:

 接下来我们使用LSH 局部敏感哈希来对faiss进行测试评估分析,以lfw数据集为例,看下结果输出:

 结果对比可视化如下所示:

 在大数据量条件下测试结果输出如下所示:

 结果对比可视化如下所示:

 最后我们基于HNSWx图检测来对faiss进行测试评估分析,以lfw数据集为例,看下结果输出:

 结果对比可视化如下所示:

资源消耗如下:

 在大数据量条件下测试结果输出如下所示:

 结果对比可视化如下所示:

 检索速度相较于暴力搜索方法来说至少提高了两个数据级,通过本文系列的实验对比测试评估不难发现,数据量、index方法对于检索性能的影响是非常大的。

我这里45w+的样本量其实并不算大的,我这里只是为了做实验,上亿级别的数据可能才算得上是大数据量,那样级别的数据一方面构建难度是很大的,另一方面实验成本是比较高的,感兴趣的话可以尝试下更大的数据量下的性能,欢迎交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/835868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MQTT协议详解「概念、特性、版本及作用」

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是ISO标准下基于发布/订阅方式的轻量级消息协议。MQTT通常使用TCP / IP(传输控制协议/Internet协议)作为其传输,但也可以使用其他双向传输。MQ…

vue、uniapp直传阿里云文档

前端实现文件上传到oss(阿里云)适用于vue、react、uni-app,获取视频第一帧图片 用户获取oss配置信息将文件上传到阿里云,保证了安全性和减轻服务器负担。一般文件资源很多直接上传到服务器会加重服务器负担此时可以选择上传到oss&…

【C++】开源:sqlite3数据库配置使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍sqlite3数据库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下…

【Autolayout自动布局介绍 Objective-C语言】

一、好,我们开始介绍Autolayout 1.什么事Autolayout 好,那么,接下来,我们介绍一下这个Autolayout Autolayout,就是“自动布局” 那么,自动布局,它就是专门用来做UI界面的 那么,UI界面,我们为了适应不同屏幕,要进行自动布局, 所以要使用Autolayout 这个Autolayou…

物理机是什么?有什么优势?可以上堡垒机吗?

你知道物理机是什么?有什么优势?可以上堡垒机吗?今天我们就来简单聊聊。 物理机是什么? 物理机是相对于虚拟机而言的对实体计算机的称呼。物理机提供给虚拟机以硬件环境,有时也称为“寄主”或“宿主”。 物理机有什么…

C# Blazor 学习笔记(11):路由跳转和信息传值

文章目录 前言路由跳转测试用例路由传参/路由约束 前言 Blazor对路由跳转进行了封装。 ASP.NET Core Blazor 路由和导航 NavigationManager 类 本文的主要内容就是全局的跳转 路由跳转 路由跳转就要用到NavigationManager 类。 其实最常用的还是NavigateTo这个跳转函数 测…

AVI怎么转换成MP4格式?教你几种方法轻松转换

MP4格式具有广泛的兼容性,可以在大多数设备和平台上播放。无论是电脑、手机、平板还是电视,都可以播放MP4格式的视频,而且在不同的操作系统和浏览器上也能够正常播放。AVI格式的视频就不一定能这样,因此将AVI转成MP4格式会方便很多…

HCIP静态路由实验

实验要求为: 1、R6为isp,接口IP地址均为公有地址;该设备只能配置IP地址,之后不能进行任何配置; 2、R1-R5为局域网,私有IP地址192.168.1.0/24,请合理分配; 3、所有路由器上环回&…

RF手机天线仿真介绍(二):孔径调谐和阻抗调谐

目录 简介孔径调谐阻抗调谐孔径调谐组件选择分析 简介 由于手机运行所需的频段、功能和模式的数量不断增加,现代手机的 RF 前端 (RFFE) 设计也日益复杂。需要采用更多天线,使用载波聚合 (CA)、4x4 MIMO、Wi-Fi MIMO 和新的宽带 5G 频段来提供更高的数据…

wireshark简单使用(一)

前两天为同事处理交换机故障,接触到wireshark使用,意识到这个工具对于工程师来说,查询报文还是必须的,了解基本的使用。 于是接触到一些视频,开始自学。 第一步 查询本机IP地址 cmd---ipconfig 查看本机IP地址和网关…

【IDEA】常用插件清单

【IDEA】常用插件清单 arthas ideaCodeium: AI Autocomplete for xxxCommit-MessageGenerateAllSetterMaven HelperMybatisPlusOne Dark themePDF ViewerRainbow BracketsRestfulToolSequenceDiagramSonarLintTranslation arthas idea 快捷生成arthas命令 Codeium: AI Autoc…

Agent:OpenAI的下一步,亚马逊云科技站在第5层

什么是Agent?在大模型语境下,可以理解成能自主理解、规划、执行复杂任务的系统。Agent也将成为新的起点,成为各行各业构建新一代AI应用必不可少的组成部分。 对此,初创公司Seednapse AI创始人提出构建AI应用的五层基石理论&#…

redis原理 8:有备无患 —— 主从同步

很多企业都没有使用到 Redis 的集群,但是至少都做了主从。有了主从,当 master 挂掉的时候,运维让从库过来接管,服务就可以继续,否则 master 需要经过数据恢复和重启的过程,这就可能会拖很长的时间&#xff…

中国农村程序员学习了【正则表达式入门】购买大平层,开上帕拉梅拉,迎娶白富美出任CEO走上人生巅峰

文章目录 正则表达式使用测试方法匹配文字字符串同时用多种模式匹配文字字符串匹配时忽略大小写提取匹配项全局匹配用通配符匹配任何内容将单个字符与多种可能性匹配匹配字母表中的字母匹配字母表中的数字和字母匹配单个未指定的字符匹配出现一次或多次的字符匹配出现零次或多次…

AQS源码分析

AbstractQueueSynchronizer简称AQS(抽象的队列同步器),是重量级基础框架以及JUC体系的基石,主要用于解决锁分配给谁的问题。 AQS入门级理论知识 整体就是一个抽象的FIFO队列来完成线程获取资源排队的工作,并通过一个in…

UGUI图文混排超链接

目录 一、LinkSpriteText二、EmojiText1、EmojiText2、支持超链接的EmojiText出现的问题 三、通用版EmojiText1、使用方法 之前做web项目有个需求需要通过某种方式打开试题中所提到的关键字介绍,当时是在试题旁边放个小按钮点击打开,后来要求把图标放在题干中,或者直接点击关键…

小程序swiper结合swiper-item实现banner轮播

swiper 基础库 1.0.0 开始支持,低版本需做兼容处理。 微信 Windows 版:支持 微信 Mac 版:支持 渲染框架支持情况:Skyline (使用最新 Nighly 工具调试)、WebView 功能描述 滑块视图容器。其中只可放置swip…

ssh连接之xshell软件远程连接主机无法通过password登录

一、背景概述 使用xshell软件ssh连接远程控制系统时,输入用户名后,发现默认不可通过password登录,但是可通过Public Key和Keyboard Interactive方式进行连接。网上查询到解决办法,尝试ok之后记录一下问题解决。 二、问题解决步骤…

信号的频谱分析与信号滤波

信号的频谱分析与信号滤波 试验目的:熟悉信号的频谱分析与信号滤波。 信号的频谱分析 例、建立一个含50Hz和120Hz幅值为2的正弦信号(sin),然后叠加一个幅值为1的随机信号,利用Matlab分析其频谱。并滤除噪声信号和12…

多平台打包快捷方式

一个项目会有好几个环境&#xff0c;不同环境用的时候总是需要改配置&#xff0c;比较麻烦&#xff0c;这次给大家讲一个简单的方法&#xff0c;关于Springboot项目在不同平台下的快捷打包方式。需要配合maven。 在pom文件中加入如下配置&#xff1a; <profiles><pr…