【facenet人脸识别】利用LFW数据集进行人脸比对测试

近期,做人脸识别项目,用到了facenet这个开源框架,并使用LFW人脸数据集进行了测试。现将该过程总结如下:

1 facenet简介

GitHub地址:GitHub - davidsandberg/facenet: Face recognition using Tensorflow

facenet的原理就是基于同一人脸总是比不同人脸更相似这一先验知识,然后利用传统卷积神经网络特征提取,利用三元损失函数进行训练。最终,将人脸映射到特征空间后,同一身份的人脸距离较近,不同身份的人脸距离较远。模型的输出是一个512维的向量(原来是128维)。

算法详情可参考其论文:https://arxiv.org/pdf/1503.03832.pdf。

-------------------------2021.04.13更新:-----------------------------------------

这里放出当初我用的模型权重:

链接:https://pan.baidu.com/s/1nBRLuwBjMwm6UGhY-atIfA 
提取码:jdbt 
 

2 LFW数据集简介

lfw 链接: https://pan.baidu.com/s/1uMAZchfnr6OK8KuAZogB-w 提取码: 7nv6 

lfw_funneled 链接: https://pan.baidu.com/s/1jCwRHV27O_OmZtcKSUsfyA 提取码: 967h 

LFW数据集是对5000多人在自然场景下采集的共13000多张图像。lfw_funneled文件夹中每个子文件夹代表一个人,其中包含其若干张同一身份不同场景下的照片,有的只有一张,有的有多张。

lfw_funneled中还包含了几个txt文档,这里面记录了这些人脸的不同组合,我们使用其中的pairs.txt中的组合进行人脸比对测试。

pairs.txt里面包含了6000对人脸,3000对同一身份,3000对不同身份。文档第一行的10  300代表正负样本以300的数量依次罗列,重复10次,因此共10*(300对正样本+300对负样本)= 6000对人脸。

3  测试过程

3.1 图像路径提取

首先,我们根据pairs.txt进行图片路径的提取:

def get_img_pairs_list(pairs_txt_path,img_path):""" 指定图片组合及其所在文件,返回各图片对的绝对路径Args:pairs_txt_path:图片pairs文件,里面是6000对图片名字的组合img_path:图片所在文件夹return:img_pairs_list:深度为2的list,每一个二级list存放的是一对图片的绝对路径"""file = open(pairs_txt_path)img_pairs_list,labels = [],[]while 1:img_pairs = []line = file.readline().replace('\n','')if line == '':breakline_list = line.split('\t')if len(line_list) == 3:# 图片路径示例:# 'C:\Users\thinkpad1\Desktop\image_set\lfw_funneled\Tina_Fey\Tina_Fey_0001.jpg'img_pairs.append(img_path+'\\'+line_list[0]+'\\'+line_list[0]+'_'+('000'+line_list[1])[-4:]+'.jpg')img_pairs.append(img_path+'\\'+line_list[0]+'\\'+line_list[0]+'_'+('000'+line_list[2])[-4:]+'.jpg')labels.append(1)elif len(line_list) == 4:img_pairs.append(img_path+'\\'+line_list[0]+'\\'+line_list[0]+'_'+('000'+line_list[1])[-4:]+'.jpg')img_pairs.append(img_path+'\\'+line_list[2]+'\\'+line_list[2]+'_'+('000'+line_list[3])[-4:]+'.jpg')labels.append(0)else:continueimg_pairs_list.append(img_pairs)return img_pairs_list,labels

利用上述代码,即可提取所有人类对的绝对路径,返回一个路径list及其标签(1或0)。

3.2 人脸检测、对比

获取到人脸对的图片路径及标签之后,在使用facenet将其转化为512维的向量之前,需要先对图像进行人脸提取,即截取其中的人脸区域。这里用到了MTCNN模型,用于检测出人脸并将人脸区域单独提出来,然后就可以利用facenet进行人脸特征向量的转化了。得到这对人脸的特征向量之后,求其欧氏距离,即可根据该距离判断其是否为同一身份了。提取及比对过程如下(其中模型model是MTCNN的参数,在facenet的GitHub项目的“facenet/src/models/”路径下已有;model_facenet模型因为比较大,需要单独下载,点击下载:链接: https://pan.baidu.com/s/1nBRLuwBjMwm6UGhY-atIfA  提取码: jdbt):

def face_verification(img_pairs_list):model = './model/'model_facenet = r'XXX\XXX\20180402-114759.pb' # 模型在你电脑中的路径# mtcnn相关参数minsize=40threshold=[0.4,0.5,0.6] # pnet、rnet、onet三个网络输出人脸的阈值,大于阈值则保留,小于阈值则丢弃factor = 0.709  # scale factor# 创建mtcnn网络with tf.Graph().as_default():sess=tf.Session()with sess.as_default():pnet,rnet,onet=detect_face.create_mtcnn(sess, model)margin = 44image_size = 160with tf.Graph().as_default():with tf.Session() as sess:# 根据模型文件载入模型facenet.load_model(model_facenet)# 得到输入、输出等张量images_placeholder = tf.get_default_graph().get_tensor_by_name("input:0")embeddings = tf.get_default_graph().get_tensor_by_name("embeddings:0")phase_train_placeholder = tf.get_default_graph().get_tensor_by_name("phase_train:0")# 设置可视化进度条相关参数jd = '\r   %2d%%\t [%s%s]'bar_num_total = 50    total_num = len(img_pairs_list)result, dist = [],[]for i in range(len(img_pairs_list)):# 画进度条if i%round(total_num/bar_num_total) == 0 or i == total_num-1:bar_num_alright = round(bar_num_total*i/total_num)alright = '#'*bar_num_alrightnot_alright = '□'*(bar_num_total-bar_num_alright)percent = (bar_num_alright/bar_num_total)*100print(jd % (percent,alright,not_alright),end='')# 读取一对人脸图像img_pairs = img_pairs_list[i]img_list = []img1 = cv2.imread(img_pairs[0])img2 = cv2.imread(img_pairs[1])img_size1 = np.asarray(img1.shape)[0:2]img_size2 = np.asarray(img2.shape)[0:2]# 检测该对图像中的人脸bounding_box1,_1=detect_face.detect_face(img1,minsize,pnet,rnet,onet,threshold,factor)bounding_box2,_2=detect_face.detect_face(img2,minsize,pnet,rnet,onet,threshold,factor)# 未检测到人脸,则将结果标为-1,后续计算准确率时排除if len(bounding_box1)<1 or len(bounding_box2)<1:result.append(-1)dist.append(-1)continue# 将图片1加入img_listdet = np.squeeze(bounding_box1[0,0:4])bb = np.zeros(4, dtype=np.int32)bb[0] = np.maximum(det[0]-margin/2, 0)bb[1] = np.maximum(det[1]-margin/2, 0)bb[2] = np.minimum(det[2]+margin/2, img_size1[1])bb[3] = np.minimum(det[3]+margin/2, img_size1[0])cropped = img1[bb[1]:bb[3],bb[0]:bb[2],:]aligned = cv2.resize(cropped, (image_size, image_size))prewhitened = facenet.prewhiten(aligned)img_list.append(prewhitened)# 将图片2加入img_listdet = np.squeeze(bounding_box2[0,0:4])bb = np.zeros(4, dtype=np.int32)bb[0] = np.maximum(det[0]-margin/2, 0)bb[1] = np.maximum(det[1]-margin/2, 0)bb[2] = np.minimum(det[2]+margin/2, img_size2[1])bb[3] = np.minimum(det[3]+margin/2, img_size2[0])cropped = img2[bb[1]:bb[3],bb[0]:bb[2],:]aligned = cv2.resize(cropped, (image_size, image_size))prewhitened = facenet.prewhiten(aligned)img_list.append(prewhitened)images = np.stack(img_list)# 将两个人脸转化为512维的向量feed_dict = { images_placeholder: images, phase_train_placeholder:False }emb = sess.run(embeddings, feed_dict=feed_dict)# 计算两个人脸向量的距离ed = np.sqrt( np.sum( np.square( np.subtract(emb[0], emb[1]) ) ) )dist.append(ed)# 根据得出的人脸间的距离,判断是否属于同一个人if ed<=1.1:result.append(1)else:result.append(0)return result,dist

上述代码可以实现在某一指定阈值下,进行人脸比对,得出对比结果存于result中,用于后续计算准确率;同时,为了画出ROC曲线,这里还返回了,所有人脸对的欧氏距离,存于dist中。

实际上,上述result是dist在某一个阈值下的截面数据,通过设置不同阈值,即可根据dist得出不同的result,下面正是利用这个原理画出的ROC曲线。

3.3 ROC曲线

根据3.2得出的每对人脸的欧氏距离,还有3.1得出的各对人脸样本的标签,即可画出计算出ROC曲线所需指标:TPR、FPR。

代码如下:

def roc(dist,labels):TP_list,TN_list,FP_list,FN_list,TPR,FPR = [],[],[],[],[],[]for t in range(180):threh = 0.1+t*0.01TP,TN,FP,FN = 0,0,0,0for i in range(len(dist)):if labels[i]==1 and dist[i]!=-1:if dist[i]<threh:TP += 1else:FN += 1elif labels[i]==0 and dist[i]!=-1:if dist[i]>=threh:TN += 1else:FP += 1TP_list.append(TP)TN_list.append(TN)FP_list.append(FP)FN_list.append(FN)TPR.append(TP/(TP+FN))FPR.append(FP/(FP+TN))return TP_list,TN_list,FP_list,FN_list,TPR,FPR

 4 完整代码

# -*- coding: utf-8 -*-
"""
Created on Fri Mar 22 09:59:41 2019@author: Leon
内容:
人脸验证准确率测试
样本:LFW人脸集,共6000对人脸,中3000对同一身份、3000对不同身份。"""
import numpy as np
import cv2
import tensorflow as tf
import matplotlib.pyplot as plt
# facenet 和 detect_face 均在facenet项目文件中,这里是直接将其放到测试脚本同一路径下了,也可以安装facenet,然后调用之
import facenet
import align.detect_face as detect_facedef face_verification(img_pairs_list):model = './model/'model_facenet = r'XXX\XXX\20180402-114759.pb'# mtcnn相关参数minsize=40threshold=[0.4,0.5,0.6] # pnet、rnet、onet三个网络输出人脸的阈值,大于阈值则保留,小于阈值则丢弃factor = 0.709  # scale factor# 创建mtcnn网络with tf.Graph().as_default():sess=tf.Session()with sess.as_default():pnet,rnet,onet=detect_face.create_mtcnn(sess, model)margin = 44image_size = 160with tf.Graph().as_default():with tf.Session() as sess:# 根据模型文件载入模型facenet.load_model(model_facenet)# 得到输入、输出等张量images_placeholder = tf.get_default_graph().get_tensor_by_name("input:0")embeddings = tf.get_default_graph().get_tensor_by_name("embeddings:0")phase_train_placeholder = tf.get_default_graph().get_tensor_by_name("phase_train:0")# 设置可视化进度条相关参数jd = '\r   %2d%%\t [%s%s]'bar_num_total = 50    total_num = len(img_pairs_list)result, dist = [],[]for i in range(len(img_pairs_list)):# 画进度条if i%round(total_num/bar_num_total) == 0 or i == total_num-1:bar_num_alright = round(bar_num_total*i/total_num)alright = '#'*bar_num_alrightnot_alright = '□'*(bar_num_total-bar_num_alright)percent = (bar_num_alright/bar_num_total)*100print(jd % (percent,alright,not_alright),end='')# 读取一对人脸图像img_pairs = img_pairs_list[i]img_list = []img1 = cv2.imread(img_pairs[0])img2 = cv2.imread(img_pairs[1])img_size1 = np.asarray(img1.shape)[0:2]img_size2 = np.asarray(img2.shape)[0:2]# 检测该对图像中的人脸bounding_box1,_1=detect_face.detect_face(img1,minsize,pnet,rnet,onet,threshold,factor)bounding_box2,_2=detect_face.detect_face(img2,minsize,pnet,rnet,onet,threshold,factor)# 未检测到人脸,则将结果标为-1,后续计算准确率时排除if len(bounding_box1)<1 or len(bounding_box2)<1:result.append(-1)dist.append(-1)continue# 将图片1加入img_listdet = np.squeeze(bounding_box1[0,0:4])bb = np.zeros(4, dtype=np.int32)bb[0] = np.maximum(det[0]-margin/2, 0)bb[1] = np.maximum(det[1]-margin/2, 0)bb[2] = np.minimum(det[2]+margin/2, img_size1[1])bb[3] = np.minimum(det[3]+margin/2, img_size1[0])cropped = img1[bb[1]:bb[3],bb[0]:bb[2],:]aligned = cv2.resize(cropped, (image_size, image_size))prewhitened = facenet.prewhiten(aligned)img_list.append(prewhitened)# 将图片2加入img_listdet = np.squeeze(bounding_box2[0,0:4])bb = np.zeros(4, dtype=np.int32)bb[0] = np.maximum(det[0]-margin/2, 0)bb[1] = np.maximum(det[1]-margin/2, 0)bb[2] = np.minimum(det[2]+margin/2, img_size2[1])bb[3] = np.minimum(det[3]+margin/2, img_size2[0])cropped = img2[bb[1]:bb[3],bb[0]:bb[2],:]aligned = cv2.resize(cropped, (image_size, image_size))prewhitened = facenet.prewhiten(aligned)img_list.append(prewhitened)images = np.stack(img_list)# 将两个人脸转化为512维的向量feed_dict = { images_placeholder: images, phase_train_placeholder:False }emb = sess.run(embeddings, feed_dict=feed_dict)# 计算两个人脸向量的距离ed = np.sqrt( np.sum( np.square( np.subtract(emb[0], emb[1]) ) ) )dist.append(ed)# 根据得出的人脸间的距离,判断是否属于同一个人if ed<=1.1:result.append(1)else:result.append(0)return result,distdef get_img_pairs_list(pairs_txt_path,img_path):""" 指定图片组合及其所在文件,返回各图片对的绝对路径Args:pairs_txt_path:图片pairs文件,里面是6000对图片名字的组合img_path:图片所在文件夹return:img_pairs_list:深度为2的list,每一个二级list存放的是一对图片的绝对路径"""file = open(pairs_txt_path)img_pairs_list,labels = [],[]while 1:img_pairs = []line = file.readline().replace('\n','')if line == '':breakline_list = line.split('\t')if len(line_list) == 3:# 图片路径示例:# 'C:\Users\thinkpad1\Desktop\image_set\lfw_funneled\Tina_Fey\Tina_Fey_0001.jpg'img_pairs.append(img_path+'\\'+line_list[0]+'\\'+line_list[0]+'_'+('000'+line_list[1])[-4:]+'.jpg')img_pairs.append(img_path+'\\'+line_list[0]+'\\'+line_list[0]+'_'+('000'+line_list[2])[-4:]+'.jpg')labels.append(1)elif len(line_list) == 4:img_pairs.append(img_path+'\\'+line_list[0]+'\\'+line_list[0]+'_'+('000'+line_list[1])[-4:]+'.jpg')img_pairs.append(img_path+'\\'+line_list[2]+'\\'+line_list[2]+'_'+('000'+line_list[3])[-4:]+'.jpg')labels.append(0)else:continueimg_pairs_list.append(img_pairs)return img_pairs_list,labelsdef roc(dist,labels):TP_list,TN_list,FP_list,FN_list,TPR,FPR = [],[],[],[],[],[]for t in range(180):threh = 0.1+t*0.01TP,TN,FP,FN = 0,0,0,0for i in range(len(dist)):if labels[i]==1 and dist[i]!=-1:if dist[i]<threh:TP += 1else:FN += 1elif labels[i]==0 and dist[i]!=-1:if dist[i]>=threh:TN += 1else:FP += 1TP_list.append(TP)TN_list.append(TN)FP_list.append(FP)FN_list.append(FN)TPR.append(TP/(TP+FN))FPR.append(FP/(FP+TN))return TP_list,TN_list,FP_list,FN_list,TPR,FPRif __name__ == '__main__':pairs_txt_path = 'C:/Users/thinkpad1/Desktop/image_set/lfw_funneled/pairs.txt'img_path = 'C:/Users/thinkpad1/Desktop/image_set/lfw_funneled'img_pairs_list,labels = get_img_pairs_list(pairs_txt_path,img_path)result,dist = face_verification(img_pairs_list)num_right, num_total = 0, 0num_total = len([r for r in result if r != -1])num_right = len([result[i] for i in range(len(result)) if result[i] == labels[i]])print("人脸验证测试完毕")print("阈值为1.1,共%d对人脸,准确率%2.4f%%"%(num_total, round(100*num_right/num_total,4)))TP_list,TN_list,FP_list,FN_list,TPR,FPR = roc(dist,labels)plt.plot(FPR,TPR,label='Roc')plt.plot([0, 1], [0, 1], '--', color=(0.6, 0.6, 0.6), label='Luck')plt.xlabel('FPR')plt.ylabel('TPR')plt.legend()plt.plot(np.linspace(0.1,1.89,180),TP_list,label='TP')plt.plot(np.linspace(0.1,1.89,180),TN_list,label='TN')plt.plot(np.linspace(0.1,1.89,180),FP_list,label='FP')plt.plot(np.linspace(0.1,1.89,180),FN_list,label='FN')plt.legend()

5 测试结果

在阈值1.1下测试准确率为93.48%,这里没有达到其宣称的99%+的准确率。

利用每对人脸距离,通过设置不同距离阈值,画出ROC曲线,如下图(左),将TP,TN,FP,FN的曲线也画出来,可以佐证阈值在1.1时,达到最好的分类效果(TP、TN最大,FP、FN最小)。

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

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

相关文章

识别人脸关键点给人脸加眼镜特效

作者&#xff1a;busyboxs 本项目主要使用的 API 是人脸关键点检测。因为给人脸加眼镜特效其实只需要眼睛相关的关键点即可&#xff0c;所以本项目为了简单&#xff0c;使用的是百度 AI 人脸检测 API 中的 landmark4&#xff08;左眼中心、右眼中心、鼻尖、嘴中心&#xff09;…

开发之路,穷且益坚,不坠青云之志(入门开发者共勉)

引言 2023毕业季&#xff0c;距离笔者毕业已过2年有余。 互联网从业环境由盛转衰&#xff0c;互联网从业者数量剧增&#xff0c;市场竞争异常激烈&#xff0c;原本的利润空间被不断挤压&#xff0c;以至于很多开发者对互联网已经失去了信心与激情。 互联网的市场份额依旧是占…

【数据架构系列-03】数据仓库、大数据平台、数据中台... 我不太认同《DataFun数据智能知识地图》中的定义

关注DataFunTalk有2年多了&#xff0c;DataFun确实像创始人王大川讲的那样&#xff0c;践行选择、努力和利他原则&#xff0c;专注于大数据、人工智能技术应用的分享与交流&#xff0c;秉承着开源开放的精神&#xff0c;免费的共享了很多有营养的行业实践专业知识&#xff0c;对…

VS2022配置OpenGL+GLAD

Glew&#xff08;The OpenGL Extension Wrangler Library&#xff09;是对底层OpenGL接口的封装&#xff0c;可以让你的代码跨平台。Glad与Glew作用相同&#xff0c;可以看作它的升级版。 Freeglut&#xff08;OpenGL Utility Toolkit&#xff09;主要用于创建并管理窗口和Ope…

chatMOSS的使用方法

1、开发者们在VScode界面找到应用商店扩展 2、搜索ChatMoss 并安装 3、CtrlF9快速唤醒使用 4、注册登录 字符数会更多&#xff08;填&#xff1a;zgy999139.com 双方都会获得可用字符数&#xff09;。 笔者体验用来写点小东西确实体验&#xff0c;加快效率&#xff0c;大家可以…

CoinMarketCap推出加密资产数据APP

点击上方 “蓝色字” 可关注我们&#xff01; 暴走时评&#xff1a; 加密货币数据提供商CoinMarketCap推出了其首款Android应用程序并改进了其Apple iOS产品。 值得注意的是&#xff0c;该应用程序提供了CoinMarketCap网站上尚未提供的功能&#xff0c;包括投资组合跟踪&#x…

加密货币--Cryptocurrency

原文链接 Ever since Nas Daily’s video came out about how I earned over $400,000 with less than $10,000 investing in Bitcoin and Ethereum, I’ve been getting hundreds of questions from people around the world about how to get started with cryptocurrency i…

GIBXChange上线MT5交易平台:MT5 LP MAM+5A对冲模式强势来袭

引子 人类近代史就是一部金融的发展史,尤其21世纪更是金融的时代。金融市场的流动性带动着社会资源更广维度流动分配。交易的全球化,推动着地区资源和生产资料的全球化分配。尤其以外汇、期货市场的发展,携带着全球最大规模资金流通量的交易盘口,重构着全球金融市场的新秩…

Ubcoin市场:加密货币-商品交易平台

Ubcoin是一个区块链平台&#xff0c;使用例如亚马逊、Etsy和eBay所用的线上市场模型&#xff0c;打造全球首个真正有别于传统的加密货币交易平台。Ubcoin用户仅需售卖真实商品即可换取加密货币&#xff0c;并且能够使用加密货币购买商品&#xff0c;整条链上无需法定货币的参与…

印度尼西亚通过加密货币期货交易规则

点击上方 “蓝色字” 可关注我们&#xff01; 暴走时评&#xff1a; 印度尼西亚贸易部下属的商品期货交易监管机构&#xff08;Bappebti&#xff09;于周一公布了该国期货交易所的加密资产交易新规则&#xff0c;规定加密货币期货交易所必须进行登记&#xff0c;获准后才能运营…

放弃几百万年薪的后续

厂长&#xff1a;和洋哥认识很久了&#xff0c;最近他从网易离职&#xff0c;放弃了几百万的年薪&#xff0c;全身心的投入AIGC&#xff0c;刚开始我得到这个消息很是诧异&#xff0c;在详谈之后才明白了洋哥背后的思考逻辑&#xff0c;刚好今天他也写了篇文章做了解释&#xf…

盘点一个AI你画我猜的小工具

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 寻声暗问弹者谁&#xff0c;琵琶声停欲语迟。 大家好&#xff0c;我是Python进阶者。 一、前言 前几天在【ChatGPT&AI破局俱乐部】知识星球发现了一…

不愧是比亚迪!

最近这段时间&#xff0c;因为我自己准备买车嘛&#xff0c;然后先后去试驾了比亚迪汉、小鹏P7i、蔚来ET5、智己LS7这几辆车&#xff0c;接下来想分4篇文章依次给大家分享一下这四个品牌的车试驾体验。 比亚迪汉 小鹏P7i 蔚来ET5 这四个品牌总共花了三天时间&#xff0c;也算是…

使用AI,做抖音漫画短视频,4个人2天的工作量,1人仅需5小时即可完成

3 天前 ChatGPT云炬学长 ​关注 ​之前仅用一个多月就在抖音涨粉25w&#xff0c;虽然涨粉速度还可以&#xff0c;但账号至少需要4~5个人&#xff0c;&#xff08;其中包括1个文案&#xff0c;2个漫画师&#xff0c;一个剪辑师&#xff0c;一个运营&#xff09;才能保证日更。…

雷军也入局了...

风口理论的发明者雷总最近也杀入大模型&AI领域了&#xff0c;早在10多天前雷军在微博就发过一段话&#xff1a; 这段话其实已经暗示了雷军和他的小米已经在研发大模型产品了&#xff0c;相信要不了多久小米的大模型产品就会面世。 这下国内几乎所有互联网巨头都杀入了大模型…

阿里放大招了...

昨天阿里放了个大招&#xff1a;宣布自研大模型“通义千问”发布&#xff0c;不过目前只邀请企业用户进行体验测试&#xff0c;用户可通过官网申请&#xff0c;符合条件的用户可参与体验。 我没还没拿到邀请码&#xff0c;申请了体验资格正在排队中。但看完第三方的评测还是充满…

我干了一件大事!

最近读者朋友们应该都知道我做了一个付费社群&#xff0c;马上就要突破10000人了。 我一口气推了10多篇文章&#xff0c;都是关于我的AI星球&#xff1a;ChatGPT破局俱乐部。有些读者抱怨我&#xff1a;洋哥是不是在割韭菜&#xff1f; 另一方面因为我这个星球发展实在太快了&a…

转身卷OpenAI,这才真的香!

ChatGPT爆火后&#xff0c;OpenAI逐渐进入人们的视野。据levels.fyi显示&#xff0c;最近OpenAI给AI/ML岗&#xff08;L5&#xff09;开出$900k的高薪&#x1f447; 反观其他大厂lowball的现状&#xff0c;转身卷OpenAI&#xff0c;是真的香&#xff01; HC多、面试难&#xff…

自注意力机制(Self-Attention)

目录 一、注意力机制和自注意力机制的区别 二、引入自注意力机制的目的 三、Self-Attention详解 3.1 单个输出 3.2 矩阵形式 四、Multi-head Self-attention 五、Positional Encoding 六、Self-Attention和RNN的区别 一、注意力机制和自注意力机制的区别 Attention机制与…

慌了!ChatGPT吃我饭,还要掀我碗?

ChatGPT面世&#xff0c;各种被AI取代“失业言论”笼罩在人们头顶&#xff0c;本文聚焦这一问题&#xff0c;推荐关注ChatGPT的小伙伴阅读。 一时间火爆全网的新晋网红——ChatGPT&#xff0c;就问&#xff1a;还有谁不认识&#xff1f; 谷歌计划在旗舰搜索引擎中添加对话式人…