基于 AdaFace 提供适合低质量人脸识别的人脸特征向量输出服务

news2024/10/7 10:22:49

写在前面


  • 工作原因,简单整理
  • 理解不足小伙伴帮忙指正

对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》


简单介绍

通过 AdaFace 提取人脸特征向量服务,项目来自:

https://github.com/mk-minchul/AdaFace

拿到人脸特征向量可以用于获取人脸相似度,通过两个人脸向量的余弦相似度得分

AdaFace 简单介绍

低质量人脸数据集中的识别具有挑战性,因为人脸属性被模糊和降级。基于裕量的损失函数的进步提高了嵌入空间中人脸的可辨别性。

此外,以前的研究已经研究了适应性损失的影响,以更加重视错误分类的(硬)例子。在这项工作中,我们介绍了损失函数自适应性的另一个方面,即图像质量。我们认为,强调错误分类样本的策略应根据其图像质量进行调整。具体来说,简单和硬样品的相对重要性应基于样品的图像质量。

我们提出了一种新的损失函数,该函数根据图像质量强调不同难度的样本。我们的方法通过用特征范数近似图像质量,以自适应裕量函数的形式实现这一点。大量的实验表明,我们的方法AdaFace在四个数据集(IJB-B,IJB-C,IJB-S和TinyFace)上提高了最先进的(SoTA)的人脸识别性能。

@inproceedings{kim2022adaface,
  title={AdaFace: Quality Adaptive Margin for Face Recognition},
  author={Kim, Minchul and Jain, Anil K and Liu, Xiaoming},
  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
  year={2022}
}

实际测试中发现,AdaFace 确实很强大,特别适合远距离,小目标,图片质量低的人脸识别。

关于 AdaFace 更多信息见: https://github.com/mk-minchul/AdaFace

详细信息可以看 AdaFace 的项目,或者我之前的文章,有一个结合作者 代码写的完整的人脸识别的Demo

当前项目做了简化,只提供 输出人脸特征向量的 能力

项目地址: https://github.com/LIRUILONGS/adaface

在这里插入图片描述

特别说明,输入图片不管是 字节还是,b64 编码,需要符合 照片为单个人脸,做面部对齐处理(不是必须,可能会影响),大小: 112*112

部署方式

conda env create -f /environment.yml
source activate AdaFace
pip install -r /requirements.txt  -i  https://pypi.tuna.tsinghua.edu.cn/simple

需要的预训练模型文件下载可以在作者的 github 项目主页找

使用方式,脚本方式可以直接运行测试

python AdaFaceFeature.py
PS W:\AdaFace_demo>  w:; cd 'w:\AdaFace_demo'; & 'C:\Users\liruilong\AppData\Local\conda\conda\envs\AdaFace\python.exe' 'c:\Users\liruilong\.vscode\extensions\ms-python.python-2023.18.0\pythonFiles\lib\python\debugpy\adapter/../..\debugpy\launcher' '54612' '--' 'w:\AdaFace_demo\AdaFaceFeature.py'
获取特征开始
w:\AdaFace_demo\AdaFaceFeature.py:82: UserWarning: Creating a tensor from a list of numpy.ndarrays is extremely slow. Please consider converting the list to a single numpy.ndarray with numpy.array() before converting to a tensor. (Triggered internally at C:\actions-runner\_work\pytorch\pytorch\builder\windows\pytorch\torch\csrc\utils\tensor_new.cpp:248.)
  tensor = torch.tensor([brg_img.transpose(2, 0,1)]).float()
[[0.04365507885813713, -0.02032642811536789, -0.011309171095490456, ......................-0.002891642739996314, -0.00423774728551507, -0.08181970566511154, 0....
  • 提供了 字节,b64 编码 图片处理
  • 支持输出特征向量方式为 字节和JSON

提供了 Web 服务能力

开发

python flask_http_server.py

生产

gunicorn  --worker-class gevent  -b 0.0.0.0:30035  --timeout 300  flask_http_server:app

HTTP 调用

在这里插入图片描述

curl --location --request POST 'http://192.168.26.81:30035/b64_represent_json' \
--header 'Content-Type: text/plain' \
--data-raw 'iVBORw0KGgoAA.................................mCC'

输出 向量的 JSON 表示

[
    [
        0.054347388446331024,
        -0.031644247472286224,
   ........................
        0.022828513756394386,
        -0.03679579123854637
    ]
]

打包了 Docker 镜像,可以直接使用

镜像地址: https://hub.docker.com/r/liruilong/adaface-face

docker pull liruilong/adaface-face

在这里插入图片描述

(adaface) ┌──[root@vms81.liruilongs.github.io]-[~/adaface/AdaFace_demo]
└─$ docker run --rm  -p 30035:30035  adaface-face
(adaface) ┌──[root@vms81.liruilongs.github.io]-[~/adaface/AdaFace_demo]
└─$ docker run -p 30035:30035 --rm adaface-face gunicorn -w 3  --worker-class gevent  -b 0.0.0.0:30035  --timeout 300  flask_http_server:app

该项目可以配合 https://github.com/LIRUILONGS/mtcnn_demo 使用

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知,这是一个开源项目,如果你认可它,不要吝啬星星哦 😃


https://github.com/mk-minchul/AdaFace

https://hub.docker.com/r/liruilong/adaface-face


© 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

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

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

相关文章

如何选择高防CDN和高防IP?

目录 前言 一、对高防CDN的选择 1. 加速性能 2. 抗攻击能力 3. 全球覆盖能力 4. 可靠性和稳定性 二、对高防IP的选择 1. 防御能力 2. 服务质量 3. 安全性 4. 价格 三、高防CDN和高防IP的优缺点对比 1. 高防CDN的优缺点 2. 高防IP的优缺点 总结 前言 随着互联网…

04-RocketMQ源码解读

目录汇总:RocketMQ从入门到精通汇总 上一篇:03-RocketMQ高级原理 这一部分,我们开始深入RocketMQ的源码。源码的解读是个非常困难的过程,每个人的理解程度都会不一样,也不太可能通过讲解把其中的细节全部讲明白。我们今…

【Zabbix】Zabbix学习笔记

现在Zabbix Server存在的问题: 问题1: Zabbix server: Utilization of discoverer processes over 75% 问题2: Zabbix server: Utilization of icmp pinger processes over 75% 优化的解决办法是修改配置文件把Discovery和Pinger进程数量调大…

windows10下 iperf3测试带宽

iperf3下载网址:iPerf - Download iPerf3 and original iPerf pre-compiled binaries 可以用来测试TCP以及UDP带宽质量 通俗来说是用来测试网速的 准备:两台设备 1. 根据自己的设备选择下载工具(两台都要有,这里我用的Window…

R语言的计量经济学实践技术应用

计量经济学通常使用较小样本,但这种区别日渐模糊,机器学习在经济学领域、特别是经济学与其它学科的交叉领域表现日益突出,R语言是用于统计建模的主流计算机语言,在本次培训中,我们将从实际应用出发,重点从数…

零售数据分析报表这样做,老板狂点赞!

随着零售数据量的增加和企业精细化管理、数字化运营的转变,零售数据分析报表也需要及时转变,以更加高效、直观、灵活的方式来分析呈现数据,辅助数字化运营决策。接下来要介绍的几张BI零售数据分析就能很好地满足大数据时代,智能零…

如何解决笔记本上有GPU但是torch.cuda.device_count()==0的问题?

安装CUDA Toolkit 查看显卡版本 打开NVIDIA控制面板->帮助->系统信息->组件->NVCUDA64.DLL,查看其版本号。我的是12.0.151。 更新显卡驱动 打开控制面板->所有控制面板项->设备管理器->显示适配器->右键NVIDIA**->选择更新驱动程序…

Chrome 同站策略(SameSite)问题

问题产生 问题复现: A项目页面使用 iframe 引用了B项目 B项目登录页面输入账号密码后点击登录 无法跳转 尝试解决: 在B项目修改了跳转方式 但无论是 this.$router.push 还是 window.herf 都无法实现跳转在iframe中使用 sandbox 沙箱属性 无法更换浏览器…

网页游戏的开发框架

网页游戏开发通常使用不同的开发框架和技术栈,以创建各种类型的游戏,从简单的HTML5游戏到复杂的多人在线游戏(MMO)等。以下是一些常见的网页游戏开发框架和它们的特点,希望对大家有所帮助。北京木奇移动技术有限公司&a…

英国物联网初创公司【FourJaw】完成180万英镑融资

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于英国谢菲尔德的物联网初创公司【FourJaw】今日宣布已完成180万英镑融资。 本轮融资完成后,FourJaw的总融资金额已达400万英镑,本轮融资的投资机构包括:…

华为发布LampSite X室内数字化创新解决方案,释放数字世界无限潜能

【阿联酋,迪拜,2023年10月11日】2023全球移动宽带论坛(Global MBB Forum 2022)期间,华为董事、ICT产品与解决方案总裁杨超斌重磅发布了全新一代5G室内数字化产品解决方案LampSite X系列,助力运营商打开商业…

构建精致 Chrome 插件:开箱即用的 TypeScript 模板 | 开源日报 No.51

tonsky/FiraCode Stars: 72.7k License: OFL-1.1 Fira Code 是一种免费的等宽字体,具有编程连字符。 Fira Code 提供了丰富多样的箭头和标点符号调整功能。Fira Code 支持各种不同的字符变体、风格集和其他字体特性,以满足用户个性化需求。Fira Code …

自定义pycharm的debug控件

写在前面的话 默认的 pycharm-professional-2023.2.2 的debug控件显示不全,比如 run to cursor 和 evaluate expression 是隐藏起来的,用的时候不太方便,因此需要知道如何对这些debug这些控件进行自定义显示 修改后的样子 修改按钮 修改…

实用的嵌入式编码技巧:第四部分

嵌入式工程师详细的结构模式分析甚至确定了系统将如何振动,从而避免了残酷的发射阶段引起的破坏性共振。尽管他们创建的产品可以在恶劣且经常未知的环境中工作,但他们的详细计算却描述了系统的运行方式。 想想土木工程师。今天,没有人不做数…

商家制作回收小程序有什么作用呢

商家制作回收小程序的作用主要体现在以下几个方面: 一、提升品牌形象 回收小程序是商家向外界展示自身社会责任感和环保意识的重要窗口。在当今社会,企业的环保形象日益受到消费者的关注,拥有一个专业、高效的回收小程序无疑可以让商家在消费…

想玩配音的小伙伴,赶快来试试这个款配音神器~

手机玩配音真的很方便,平时没事的时候直接打开就可以配音。而且手机上可以配音的软件都很简单,操作也不复杂,完成一个配音真的是分分钟的事。今天就给大家分享一款好玩又有趣的配音软件! 一、悦音配音,一款可以媲美真人…

uniapp 微信小程序 vue3.0+TS手写自定义封装步骤条(setup)

uniapp手写自定义步骤条&#xff08;setup&#xff09; 话不多说 先上效果图&#xff1a; setup.vue组件代码&#xff1a; <template><view class"stepBox"><viewclass"stepitem"v-for"(item, index) in stepList":key"i…

Python 之 sqrt函数浅析

一、函数介绍 Python中的sqrt( )函数。sqrt是square root的简写&#xff0c;用于求非负实数的平方根。 return sqrt(x) # x为非负实数函数定义&#xff08;位于math.py中&#xff09;&#xff1a; 二、函数使用 sqrt( )函数位于数学运算库math当中&#xff0c;使用前需要先…

latex如何对.pdf格式的图片实现裁剪

目录 问题描述&#xff1a; 问题解决&#xff1a; 问题描述&#xff1a; 在使用draw.io进行绘图&#xff0c;导出的时候不知道为什么周围会有留白&#xff0c;比如下图&#xff1a; 在导入latex的时候&#xff0c;会因为两侧的留白导致整张图片缩小。 如果直接进行裁剪.pdf&a…

TVS选型:瞬态抑制二极管选型!|深圳比创达EMC

提到TVS&#xff0c;大部分电子工程师基本都知道是用来端口防护的&#xff0c;防止端口瞬间的电压冲击造成后级电路的损坏。 一、工作原理 TVS即瞬态电压抑制器&#xff0c;又称雪崩击穿二极管。它是采用半导体工艺制成的单个PN结或多个 PN结集成的器件。TVS有单向与双向之分…