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

本文主要是介绍基于 AdaFace 提供适合低质量人脸识别的人脸特征向量输出服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面


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

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


简单介绍

通过 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)

这篇关于基于 AdaFace 提供适合低质量人脸识别的人脸特征向量输出服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/201899

相关文章

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

关于DNS域名解析服务

《关于DNS域名解析服务》:本文主要介绍关于DNS域名解析服务,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录DNS系统的作用及类型DNS使用的协议及端口号DNS系统的分布式数据结构DNS的分布式互联网解析库域名体系结构两种查询方式DNS服务器类型统计构建DNS域

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

使用Java将实体类转换为JSON并输出到控制台的完整过程

《使用Java将实体类转换为JSON并输出到控制台的完整过程》在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用JSON格式,用Java将实体类转换为J... 在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用j