当前位置: 首页 > news >正文

人脸识别 FaceNet人脸识别(一种人脸识别与聚类的统一嵌入表示)

人脸识别 FaceNet人脸识别(一种人脸识别与聚类的统一嵌入表示)

  • FaceNet的简介
  • Facenet的实现思路
  • 训练部分

在这里插入图片描述

FaceNet的简介

在这里插入图片描述

Facenet的实现思路

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import torch.nn as nndef conv_bn(inp, oup, stride = 1):return nn.Sequential(nn.Conv2d(inp, oup, 3, stride, 1, bias=False),nn.BatchNorm2d(oup),nn.ReLU6())def conv_dw(inp, oup, stride = 1):return nn.Sequential(nn.Conv2d(inp, inp, 3, stride, 1, groups=inp, bias=False),nn.BatchNorm2d(inp),nn.ReLU6(),nn.Conv2d(inp, oup, 1, 1, 0, bias=False),nn.BatchNorm2d(oup),nn.ReLU6(),)class MobileNetV1(nn.Module):def __init__(self):super(MobileNetV1, self).__init__()self.stage1 = nn.Sequential(# 160,160,3 -> 80,80,32conv_bn(3, 32, 2), # 80,80,32 -> 80,80,64conv_dw(32, 64, 1), # 80,80,64 -> 40,40,128conv_dw(64, 128, 2),conv_dw(128, 128, 1),# 40,40,128 -> 20,20,256conv_dw(128, 256, 2),conv_dw(256, 256, 1),)self.stage2 = nn.Sequential(# 20,20,256 -> 10,10,512conv_dw(256, 512, 2),conv_dw(512, 512, 1),conv_dw(512, 512, 1),conv_dw(512, 512, 1),conv_dw(512, 512, 1),conv_dw(512, 512, 1),)self.stage3 = nn.Sequential(# 10,10,512 -> 5,5,1024conv_dw(512, 1024, 2),conv_dw(1024, 1024, 1),)self.avg = nn.AdaptiveAvgPool2d((1,1))self.fc = nn.Linear(1024, 1000)def forward(self, x):x = self.stage1(x)x = self.stage2(x)x = self.stage3(x)x = self.avg(x)# x = self.model(x)x = x.view(-1, 1024)x = self.fc(x)return x

在这里插入图片描述

class Facenet(nn.Module):def __init__(self, backbone="mobilenet", dropout_keep_prob=0.5, embedding_size=128, num_classes=None, mode="train"):  super(Facenet, self).__init__()if backbone == "mobilenet":self.backbone = mobilenet()flat_shape = 1024elif backbone == "inception_resnetv1":self.backbone = inception_resnet()flat_shape = 1792else:raise ValueError('Unsupported backbone - `{}`, Use mobilenet, inception_resnetv1.'.format(backbone))self.avg = nn.AdaptiveAvgPool2d((1,1))self.Dropout = nn.Dropout(1 - dropout_keep_prob)self.Bottleneck = nn.Linear(flat_shape, embedding_size,bias=False)self.last_bn = nn.BatchNorm1d(embedding_size, eps=0.001, momentum=0.1, affine=True)if mode == "train":self.classifier = nn.Linear(embedding_size, num_classes)def forward(self, x):x = self.backbone(x)x = self.avg(x)x = x.view(x.size(0), -1)x = self.Dropout(x)x = self.Bottleneck(x)x = self.last_bn(x)x = F.normalize(x, p=2, dim=1)return xdef forward_feature(self, x):x = self.backbone(x)x = self.avg(x)x = x.view(x.size(0), -1)x = self.Dropout(x)x = self.Bottleneck(x)before_normalize = self.last_bn(x)x = F.normalize(before_normalize, p=2, dim=1)return before_normalize, xdef forward_classifier(self, x):x = self.classifier(x)return x

在这里插入图片描述
在pytorch代码中,只需要一行就可以实现l2标准化的层。
在这里插入图片描述

class Facenet(nn.Module):def __init__(self, backbone="mobilenet", dropout_keep_prob=0.5, embedding_size=128, num_classes=None, mode="train"): super(Facenet, self).__init__()if backbone == "mobilenet":self.backbone = mobilenet()flat_shape = 1024elif backbone == "inception_resnetv1":self.backbone = inception_resnet()flat_shape = 1792else:raise ValueError('Unsupported backbone - `{}`, Use mobilenet, inception_resnetv1.'.format(backbone))self.avg = nn.AdaptiveAvgPool2d((1,1))self.Dropout = nn.Dropout(1 - dropout_keep_prob)self.Bottleneck = nn.Linear(flat_shape, embedding_size,bias=False)self.last_bn = nn.BatchNorm1d(embedding_size, eps=0.001, momentum=0.1, affine=True)if mode == "train":self.classifier = nn.Linear(embedding_size, num_classes)def forward(self, x):x = self.backbone(x)x = self.avg(x)x = x.view(x.size(0), -1)x = self.Dropout(x)x = self.Bottleneck(x)x = self.last_bn(x)x = F.normalize(x, p=2, dim=1)return xdef forward_feature(self, x):x = self.backbone(x)x = self.avg(x)x = x.view(x.size(0), -1)x = self.Dropout(x)x = self.Bottleneck(x)before_normalize = self.last_bn(x)x = F.normalize(before_normalize, p=2, dim=1)return before_normalize, xdef forward_classifier(self, x):x = self.classifier(x)return x

在这里插入图片描述

class Facenet(nn.Module):def __init__(self, backbone="mobilenet", dropout_keep_prob=0.5, embedding_size=128, num_classes=None, mode="train"):super(Facenet, self).__init__()if backbone == "mobilenet":self.backbone = mobilenet()flat_shape = 1024elif backbone == "inception_resnetv1":self.backbone = inception_resnet()flat_shape = 1792else:raise ValueError('Unsupported backbone - `{}`, Use mobilenet, inception_resnetv1.'.format(backbone))self.avg = nn.AdaptiveAvgPool2d((1,1))self.Dropout = nn.Dropout(1 - dropout_keep_prob)self.Bottleneck = nn.Linear(flat_shape, embedding_size,bias=False)self.last_bn = nn.BatchNorm1d(embedding_size, eps=0.001, momentum=0.1, affine=True)if mode == "train":self.classifier = nn.Linear(embedding_size, num_classes)def forward(self, x):x = self.backbone(x)x = self.avg(x)x = x.view(x.size(0), -1)x = self.Dropout(x)x = self.Bottleneck(x)x = self.last_bn(x)x = F.normalize(x, p=2, dim=1)return xdef forward_feature(self, x):x = self.backbone(x)x = self.avg(x)x = x.view(x.size(0), -1)x = self.Dropout(x)x = self.Bottleneck(x)before_normalize = self.last_bn(x)x = F.normalize(before_normalize, p=2, dim=1)return before_normalize, xdef forward_classifier(self, x):x = self.classifier(x)return x

训练部分

在这里插入图片描述

在这里插入图片描述

相关文章:

人脸识别 FaceNet人脸识别(一种人脸识别与聚类的统一嵌入表示)

人脸识别 FaceNet人脸识别(一种人脸识别与聚类的统一嵌入表示) FaceNet的简介Facenet的实现思路训练部分 FaceNet的简介 Facenet的实现思路 import torch.nn as nndef conv_bn(inp, oup, stride 1):return nn.Sequential(nn.Conv2d(inp, oup, 3, stride…...

Python tkinter (6) Listbox

Python的标准Tk GUI工具包的接口 tkinter系列文章 python tkinter窗口简单实现 Python tkinter (1) —— Label标签 Python tkinter (2) —— Button标签 Python tkinter (3) —— Entry标签 Python tkinter (4) —— Text控件 GUI 目录 Listbox 创建listbox 添加元素…...

优雅的python(二)

🌈个人主页:小田爱学编程 🔥 系列专栏:c语言从基础到进阶 🏆🏆关注博主,随时获取更多关于c语言的优质内容!🏆🏆 😀欢迎来到小田代码世界~ &#x…...

Git安装详细步骤

目录 1、双击安装包,点击NEXT​编辑 2、更改安装路径,点击NEXT 3、选择安装组件 4、选择开始菜单页 5、选择Git文件默认的编辑器 6、调整PATH环境 7、选择HTTPS后端传输 8、配置行尾符号转换 9、配置终端模拟器与Git Bash一起使用 10、配置额外…...

首发:2024全球DAO组织发展研究

作者,张群(专注DAO及区块链应用研究,赛联区块链教育首席讲师,工信部赛迪特邀资深专家,CSDN认证业界专家,微软认证专家,多家企业区块链产品顾问) DAO(去中心化自治组织&am…...

【大数据】详解 Flink 中的 WaterMark

详解 Flink 中的 WaterMark 1.基础概念1.1 流处理1.2 乱序1.3 窗口及其生命周期1.4 Keyed vs Non-Keyed1.5 Flink 中的时间 2.Watermark2.1 案例一2.2 案例二2.3 如何设置最大乱序时间2.4 延迟数据重定向 3.在 DDL 中的定义3.1 事件时间3.2 处理时间 1.基础概念 1.1 流处理 流…...

【数据结构1-2】二叉树

树形结构不仅能表示数据间的指向关系,还能表示出数据的层次关系,而有很明显的递归性质。因此,我们可以利用树的性质解决更多种类的问题。 但是在平常的使用中,我们并不需要使用这么复杂的结构,只需要建立一个包含int r…...

ajax点击搜索返回所需数据

html 中body设置&#xff08;css设置跟进自身需求&#xff09; <p idsearch_head>学生信息查询表</p> <div id"div_1"> <div class"search_div"> <div class"search_div_item"> …...

Redis6基础知识梳理~

初识NOSQL&#xff1a; NOSQL是为了解决性能问题而产生的技术&#xff0c;在最初&#xff0c;我们都是使用单体服务器架构&#xff0c;如下所示&#xff1a; 随着用户访问量大幅度提升&#xff0c;同时产生了大量的用户数据&#xff0c;单体服务器架构面对着巨大的压力 NOSQL解…...

在Python中如何使用集合进行元素操作

目录 1. 创建集合 2. 添加或删除元素 3. 集合运算 4. 其他集合操作 总结 在Python中&#xff0c;集合&#xff08;set&#xff09;是一种基本的数据结构&#xff0c;用于存储无序且唯一的元素。这意味着集合中的每个元素都是独一无二的&#xff0c;且集合不保持任何元素的…...

2024年阿里云幻兽帕鲁Palworld游戏服务器优惠价格表

自建幻兽帕鲁服务器租用价格表&#xff0c;2024阿里云推出专属幻兽帕鲁Palworld游戏优惠服务器&#xff0c;配置分为4核16G和4核32G服务器&#xff0c;4核16G配置32.25元/1个月、10M带宽66.30元/1个月、4核32G配置113.24元/1个月&#xff0c;4核32G配置3个月339.72元。ECS云服务…...

Atlassian Confluence Data Center and Server 权限提升漏洞复现(CVE-2023-22515)

0x01 产品简介 Atlassian Confluence是一款由Atlassian开发的企业团队协作和知识管理软件,提供了一个集中化的平台,用于创建、组织和共享团队的文档、知识库、项目计划和协作内容。是面向大型企业和组织的高可用性、可扩展性和高性能版本。 0x02 漏洞概述 Atlassian Confl…...

打开 IOS开发者模式

前言 需要 1、辅助设备&#xff1a;苹果电脑&#xff1b; 2、辅助应用&#xff1a;Xcode&#xff1b; 3、准备工作&#xff1a;苹果手机 使用数据线连接 苹果电脑&#xff1b; 当前系统版本 IOS 17.3 通过Xcode激活 两指同时点击 Xcode 显示选择&#xff0c;Open Develop…...

【C语言刷题系列】交换两个变量的三种方式

文章目录 1.使用临时变量&#xff08;推荐&#xff09; 2.相加和相减的方式&#xff08;值较大时可能丢失数据&#xff09; 3.按位异或运算 本文所属专栏C语言刷题_倔强的石头106的博客-CSDN博客 两个变量值的交换是编程中最常见的问题之一&#xff0c;以下将介绍三种变量的…...

架构师之路(十五)计算机网络(网络层协议)

前置知识&#xff08;了解&#xff09;&#xff1a;计算机基础。 作为架构师&#xff0c;我们所设计的系统很少为单机系统&#xff0c;因此有必要了解计算机和计算机之间是怎么联系的。局域网的集群和混合云的网络有啥区别。系统交互的时候网络会存在什么瓶颈。 ARP协议 地址解…...

【JSON2WEB】03 go的模板包html/template的使用

Go text/template 是 Go 语言标准库中的一个模板引擎&#xff0c;用于生成文本输出。它使用类似于 HTML 的模板语言&#xff0c;可以将数据和模板结合起来&#xff0c;生成最终的文本输出。 Go html/template包实现了数据驱动的模板&#xff0c;用于生成可防止代码注入的安全的…...

3 JS类型 值和变量

计算机对value进行操作。 value有不同的类型。每种语言都有其自身的类型集合。编程语言的类型集是该编程语言的基本特性。 value需要保存一个变量中。 变量的工作机制是变成语言的另一个基本特性。 3.1概述和定义 JS类型分为&#xff1a; 原始类型和对象类型。 原始类型&am…...

【Android】实现简易购物车功能(附源码)

先上结果&#xff1a; 代码&#xff1a; 首先引入图片加载&#xff1a; implementation com.github.bumptech.glide:glide:4.15.1配置权限清单&#xff1a; <!-- 网络权限 --><uses-permission android:name"android.permission.INTERNET"/><uses…...

使用Excel计算--任务完成总工作日时间段

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 引言 计算任务完成时间周期&#xff0c;和计算金钱一样&#xff0c;是一个比较细致严谨的工作。 通常&#xff0c;我们可能以为&#xff0c;完成周期形如&#xff1a; 任务完成周期 任务结束时间 - 任务开始时间 但是…...

.NET高级面试指南专题一【委托和事件】

在C#中&#xff0c;委托&#xff08;Delegate&#xff09;和事件&#xff08;Event&#xff09;是两个重要的概念&#xff0c;它们通常用于实现事件驱动编程和回调机制。 委托定义&#xff1a; 委托是一个类&#xff0c;它定义了方法的类型&#xff0c;使得可以将方法当作另一个…...

【ZYNQ】AXI4总线协议实战:从握手时序到PS-PL高效通信

1. AXI4总线协议基础&#xff1a;从握手信号到通道架构 第一次接触ZYNQ的PS-PL通信时&#xff0c;我被AXI4协议里那些VALID/READY信号搞得头晕眼花。直到在示波器上抓到真实的握手波形&#xff0c;才突然理解这个看似复杂的协议其实像极了我们日常的对话机制——只有当说话方准…...

基于大语言模型的本地语义搜索工具LLocalSearch部署与应用指南

1. 项目概述&#xff1a;一个能“读懂”你电脑的本地搜索工具 如果你和我一样&#xff0c;电脑里塞满了各种文档、邮件、聊天记录和代码片段&#xff0c;那么“找东西”这件事&#xff0c;绝对能排进日常最耗时的任务前三。传统的文件搜索&#xff0c;比如Windows自带的搜索或者…...

NS-USBLoader:Switch游戏管理终极指南 - 如何实现一键安装与系统引导?

NS-USBLoader&#xff1a;Switch游戏管理终极指南 - 如何实现一键安装与系统引导&#xff1f; 【免费下载链接】ns-usbloader Awoo Installer and GoldLeaf uploader of the NSPs (and other files), RCM payload injector, application for split/merge files. 项目地址: ht…...

开源技能库构建指南:Git+Markdown+Docsify打造个人技术知识体系

1. 项目概述&#xff1a;一个开源技能库的诞生与价值在技术领域&#xff0c;尤其是软件开发、运维和数据分析等方向&#xff0c;我们每天都在与海量的工具、框架和命令打交道。时间一长&#xff0c;一个很现实的问题就摆在了面前&#xff1a;那些曾经花了好几个小时才调通的复杂…...

Arm CoreLink PCK-600电源管理架构与寄存器编程详解

1. Arm CoreLink PCK-600电源控制架构解析在嵌入式系统设计中&#xff0c;电源管理单元&#xff08;PMU&#xff09;是实现高效能耗控制的核心组件。Arm CoreLink PCK-600作为业界领先的电源控制解决方案&#xff0c;其架构设计体现了现代SoC电源管理的先进理念。PCK-600系列采…...

Apache Burr:用状态机模式构建Python流式应用

1. 项目概述&#xff1a;一个用于构建流式应用的Python框架最近在折腾一些实时数据处理和模型推理的项目&#xff0c;从简单的日志分析到复杂的在线推荐&#xff0c;总感觉现有的工具链要么太重&#xff0c;要么太散。想要一个既能处理流式数据&#xff0c;又能轻松集成机器学习…...

别再手动调色了!用Matlab bar3函数一键生成论文级渐变三维柱状图(附完整代码)

别再手动调色了&#xff01;用Matlab bar3函数一键生成论文级渐变三维柱状图&#xff08;附完整代码&#xff09; 科研图表的美观程度直接影响论文的第一印象&#xff0c;而三维柱状图在展示多维度数据时尤为常见。传统手动调整每个柱体的颜色、透明度、光照效果不仅耗时&#…...

Nextra:基于Next.js的现代化文档站构建利器

1. 项目概述&#xff1a;为什么Nextra能成为文档站构建的“瑞士军刀”&#xff1f;如果你最近在寻找一个构建技术文档、博客或个人知识库的工具&#xff0c;大概率会听到“Nextra”这个名字。它不是一个独立框架&#xff0c;而是一个基于Next.js的静态站点生成器&#xff0c;专…...

多数人支持!微软或把 Xbox 重新品牌化为 XBOX,回归最初形式

Xbox 品牌重塑&#xff1a;从民意调查到账号更名微软 Xbox 首席执行官阿莎夏尔马在 X&#xff08;原推特&#xff09;上发起民意调查&#xff0c;询问粉丝微软应使用 Xbox 还是 XBOX&#xff0c;结果多数人支持 XBOX&#xff0c;随后公司将其 X 账号更名。不过&#xff0c;Xbox…...

Chrome 扩展 uMatrix 被弃用,MV3 环境下 matrix³ 原型尝试实现其功能

Chrome 扩展 uMatrix 被弃用&#xff0c;MV3 环境下如何实现其功能&#xff1f;matrix 原型来尝试 曾经有一款很棒的 Chrome 扩展程序叫 uMatrix&#xff0c;它由 uBlock Origin 的开发者 Raymond Hill 编写&#xff0c;是一种直观控制网站权限和子资源请求的工具。 它看上去是…...