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

在前面的两篇博文中,主要是考虑基于之前以往的人脸识别项目经历结合最近使用到的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.mzph.cn/news/22680.shtml

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

相关文章

HTTP隧道识别与防御:机器学习的解决方案

随着互联网的快速发展,HTTP代理爬虫已成为数据采集的重要工具。然而,随之而来的是恶意爬虫对网络安全和数据隐私的威胁。为了更好地保护网络环境和用户数据,我们进行了基于机器学习的HTTP代理爬虫识别与防御的研究。以增强对HTTP代理爬虫的识…

springboot+vue网红酒店客房预定系统的设计与实现_ui9bt

随着计算机技术发展,计算机系统的应用已延伸到社会的各个领域,大量基于网络的广泛应用给生活带来了十分的便利。所以把网红酒店预定管理与现在网络相结合,利用计算机搭建网红酒店预定系统,实现网红酒店预定的信息化。则对于进一步…

基于ROS的IMU航向锁定(C++)

文章目录 操作流程节点代码 操作流程 1、让nodeHandle发布 /cmd_vel话题; 2、设定一个目标朝向角,当姿态信息中的朝向角和目标朝向角不一致时,控制机器人转向目标朝向角。 节点代码 /***************************************************…

DBeaver安装+连接使用mysql

1、下载Dbeaver 官网:Download | DBeaver Community github:Releases dbeaver/dbeaver (github.com) 这里是在github下载的,下的是23.1.3版本 (根据系统自己选择,这里下的是windows的版本) 2、安装 3、…

单元测试之 - Review一个微服务的单元测试

这里以github上一个microservice的demo代码为例,来看看如何为一个完整的服务编写单元测试。具体代码如下所示,我们重点查看一下catalog和customer,order中的单元测试有哪些。 首先来看catalog服务的单元测试,这个服务下面主要编写了CatalogWe…

物联网|按键实验---学习I/O的输入及中断的编程|函数说明的格式|如何使用CMSIS的延时|读取通过外部中断实现按键捕获代码的实现及分析-学习笔记(14)

文章目录 通过外部中断实现按键捕获代码的实现及分析Tip1:函数说明的格式Tip2:如何使用CMSIS的延时GetTick函数原型stm32f407_intr_handle.c解析中断处理函数:void EXTI4_IRQHandler 调试流程软件模拟调试 两种代码的比较课后作业: 通过外部中断实现按键捕获代码的实…

c++调用ffmpeg api将视频文件内容进行udp推流

代码及工程见https://download.csdn.net/download/daqinzl/88156926 开发工具&#xff1a;visual studio 2019 播放&#xff0c;采用ffmpeg工具集里的ffplay.exe, 执行命令 ffplay udp://238.1.1.10:6016 主要代码如下: #include "pch.h" #include <iostream&g…

5G网络在中国已经普及了,政策支持加大5G投入力度,这意味着什么呢?

5G网络是新型基础设施的重要组成部分&#xff0c;中国5G商用牌照已发放四年多&#xff0c;目前发展得怎样了&#xff1f;最近&#xff0c;官方公布了最新数据&#xff0c;截至7月底&#xff0c;中国5G移动电话用户已达7亿户&#xff0c;5G基站累计达到293.7万个&#xff0c;5G覆…

【perl】报错合集

perl报错合集 &#xff08;注&#xff1a;可能会不定时更新&#xff09; 1.Name “main::x” used only once: possible typo at … 1.Name "main::x" used only once: possible typo at ...给某个变量赋值但是从来没有用它&#xff0c;或者变量之只用一次但没有…

MobPush iOS SDK iOS实时活动

开发工具&#xff1a;Xcode 功能需要: SwiftUI实现UI页面&#xff0c;iOS16.1以上系统使用 功能使用: 需应用为启动状态 功能说明 iOS16.1 系统支持实时活动功能&#xff0c;可以在锁定屏幕上实时获知各种事情的进展&#xff0c;MobPushSDK iOS 4.0.3版本已完成适配&#xf…

使用手机相机检测电脑屏幕刷新率Hz

使用手机相机检测电脑屏幕刷新率Hz 1、电脑打开https://www.testufo.com/frameskipping 2、相机专业模式&#xff1a;快门1/10、ISO自动&#xff0c;拍摄一张照片。120Hz至少要有12个亮块&#xff0c;50Hz至少有6个亮块。 更改刷新速率 1、选择 “开始>设置>系统>显示…

中国氢化松香行业发展现状及“十四五”前景预测报告(新版)2023-2030年

中国氢化松香行业发展现状及“十四五”前景预测报告&#xff08;新版&#xff09;2023-2030年 ################################### 《报告编号》: BG460771 《出版时间》: 2023年8月 《出版机构》: 中智正业研究院 《交付方式》: EMIL电子版或特快专递 《报告价格》:【纸质…

《安富莱嵌入式周报》第319期:声音编程器,开源激光雕刻机,自制600W海尔贝克无刷电机,车用被动元件AEC-Q200规范,简单易上手的PySimpleGUI

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! ​ 更新视频教程&#xff1a; 更新第7期ThreadX视频教程&#xff1a;如何实现RTOS高效的任务管理&#xff0c;抢占式调…

媒介易讲解体育冠军助力品牌解锁市场营销新玩法

在当今竞争激烈的市场中&#xff0c;品牌推广成为企业取得商业成功的重要一环。然而&#xff0c;随着传统市场推广方式的日益饱和&#xff0c;企业急需创新的市场营销策略来吸引消费者的关注和认可。在这样的背景下&#xff0c;体育冠军助力品牌成为了一种备受瞩目的市场营销新…

Autosar诊断系列介绍20 - UDS应用层P2Server/P2Client等时间参数解析

本文框架 1. 前言2.几个时间参数含义2.1 P2Client与P2Server2.2 P2*Client与P2*Server2.3 P3Client_Phys与P3Client_Func2.4 S3Client与S3Server 1. 前言 本系列Autosar 诊断入门介绍&#xff0c;会详细介绍诊断相关基础知识&#xff0c;如您对诊断实战有更高需求&#xff0c;…

安防监控国标GB28181平台EasyGBS视频快照无法显示是什么原因?如何解决?

安防视频监控国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入&#xff0c;并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强&#xff0c;支持将接入的视频流进行全终端、全平台分发&#xff…

数据结构:复习笔记

目录 前言1. 数据结构绪论1.1 数据结构的概念及分类1.1.1 知识点提要1.1.2 选择判断与简答归纳1.1.3 算法编程题 1.2 算法设计与算法分析1.2.1 知识点提要1.2.2 选择判断与简答归纳1.2.3 算法编程题 2. 线性表2.1 线性表的概念2.1.1 知识点提要2.1.2 选择判断与简答归纳2.1.3 算…

2023牛客暑期多校训练营6-C-idol!!

奇数的双阶乘等于小于等于本身的奇数的乘积&#xff0c;偶数的双阶乘等于小于等于本身的非零偶数的乘积。 思路&#xff1a;考虑末位0的个数&#xff0c;我们能想到的最小两数相乘有零的就是2*5&#xff0c;所以本题我们思路就是去找因子2的个数以及因子5的个数&#xff0c;2的…

用Log4j 2记录日志

说明 maven工程中增加对Log4j 2的依赖 下面代码示例的maven工程中的pom.xml文件中需要增加对Log4j 2的依赖&#xff1a; <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.20.0&…

kafka中幂等性producer和事务性producer

幂等性producer 在Kafka中,“幂等性生产者”的概念是指一种特性,它确保消息在生产者的发送操作被重试时仅发送一次。幂等性是一种重要的特性,因为在分布式系统中,网络问题或其他故障可能导致生产者发送的消息在传输过程中失败,从而需要重新发送。如果生产者没有幂等性保证…