请勿直接解析到ip否则我司不能保证您的网站能正常运行!"js常用网页特效

web/2025/10/3 2:39:25/文章来源:
请勿直接解析到ip否则我司不能保证您的网站能正常运行!",js常用网页特效,360建筑网挂行情,网页设计实习报告总结人脸对比 人脸对比#xff0c;顾名思义#xff0c;就是对比两个人脸的相似度。本文将用Paddle实现这一功能。 PS#xff1a;作者肝了整整3天才稍微搞明白实现方法 数据集准备 这里使用百度AI Studio的开源数据集#xff1a; 人脸数据_数据集-飞桨AI Studio星河社区 (b…人脸对比 人脸对比顾名思义就是对比两个人脸的相似度。本文将用Paddle实现这一功能。 PS作者肝了整整3天才稍微搞明白实现方法 数据集准备 这里使用百度AI Studio的开源数据集 人脸数据_数据集-飞桨AI Studio星河社区 (baidu.com) 这个数据集提供了500个人的人脸各100张比较适合我们的项目。 根据这个数据集很容易写出数据集类文件名为face_dataset.py import numpy as np from PIL import Image import paddle from random import shuffleclass FaceData(paddle.io.Dataset):def __init__(self, mode, num):super().__init__()# 训练集/测试集file facecap/train_list.txt if mode train else facecap/test_list.txtself.imgs1 []self.imgs2 []self.labels []# 控制相同人脸个数与不同人脸个数各占一半_1_count 0with open(file) as f:# 读取数据集文件信息数据并洗牌lines f.readlines()shuffle(lines)lines lines[:num]print(read down)# 加载数据集for line1 in lines:line1 line1.strip()img1, label1 line1.split( )pil_img1 Image.open(ffacecap\\{img1}).convert(RGB).resize((96, 96))for line2 in lines:line2 line2.strip()img2, label2 line2.split( )if label1 label2:_1_count 1pil_img2 Image.open(ffacecap\\{img2}).convert(RGB).resize((96, 96))self.imgs1.append(np.array(pil_img1).transpose((2, 0, 1)) / 255.0)self.imgs2.append(np.array(pil_img2).transpose((2, 0, 1)) / 255.0)self.labels.append(1)elif _1_count 0:_1_count - 1pil_img2 Image.open(ffacecap\\{img2}).convert(RGB).resize((96, 96))self.imgs1.append(np.array(pil_img1).transpose((2, 0, 1)) / 255.0)self.imgs2.append(np.array(pil_img2).transpose((2, 0, 1)) / 255.0)self.labels.append(0)self.imgs1 np.array(self.imgs1, dtypenp.float32)self.imgs2 np.array(self.imgs2, dtypenp.float32)self.labels np.array(self.labels, dtypenp.float32)print(load down)def __getitem__(self, idx):return self.imgs1[idx], self.imgs2[idx], self.labels[idx]def __len__(self):return len(self.labels)需要注意的是PIL的图片维度与paddle CNN的维度不一样需要使用transpose改变  当然使用这个数据集类读取数据是非常漫长的因此我们创建了一个face_create_dataset.py创建数据集对象并保存到本地 from face_dataset import FaceData import pickletrain_dataset FaceData(modetrain, num2000) test_dataset FaceData(modetest, num200)pickle.dump(train_dataset, open(./database/train.data, wb), protocol4) pickle.dump(test_dataset, open(./database/test.data, wb), protocol4) 这里我们使用pickle保存对象注意这里要指定protocol4以保证可以存储超过4G的大文件 最后这个脚本会在本地的database文件夹下生成两个data文件使用时只需要加载即可 孪生网络 既然要输入两张图片就自然需要使用两张卷积网络分别处理两张图片。但是人脸对比与输入顺序无关这就要求两个网络对于同一张图片的输出是相同的也就是这两个网络是相同的。即共享权重的网络。因此我们可以定义网络如下 class FaceNet(paddle.nn.Layer):def __init__(self):super().__init__()# 共享权重的cnn网络self.cnn paddle.nn.Sequential(paddle.nn.Conv2D(3, 16, 3, padding1),paddle.nn.ReLU(),paddle.nn.MaxPool2D(2, 2),paddle.nn.Conv2D(16, 32, 3, padding1),paddle.nn.ReLU(),paddle.nn.MaxPool2D(2, 2),paddle.nn.Conv2D(32, 64, 3, padding1),paddle.nn.ReLU(),paddle.nn.MaxPool2D(2, 2),paddle.nn.Conv2D(64, 128, 3, padding1),paddle.nn.ReLU(),paddle.nn.MaxPool2D(2, 2),paddle.nn.Flatten(),paddle.nn.Linear(4608, 5))def forward(self, face1, face2):# 前向传播使用cnn网络分别输出两个结果并返回n1r self.cnn(face1)n2r self.cnn(face2)return n1r, n2r 这个网络还需要有特殊的损失函数。这个损失函数将会使相同的人脸距离相近不同的人脸距离更远。我们采用勾股定理计算距离这样的距离也叫欧氏距离。 因此对于一个在n维空间上的两个点(x1, x2, x3, ..., xn), (y1, y2, y3, ..., yn)就有 因此如果人脸相同损失函数将会输出的损失值是 这样的话如果距离过远损失值就会偏大 从而使输出更接近0 如果人脸不同输出的损失值是 这样的话只有当距离比设定阈值远时损失才为0. 另外损失最好使用乘方而不是绝对值这样的话就可以增加远离时的梯度。 我们定义其损失函数如下 # 损失函数定义 class FaceLoss(paddle.nn.Layer):def __init__(self, margin(512 ** 0.5)):super(FaceLoss, self).__init__()self.margin margindef forward(self, output1, output2, label):# 计算欧式距离勾股定理euclidean_distance paddle.norm(output1 - output2, axis1)# 损失值# 在数据集中1为相同0为不同。但是输出要求相似的图片距离更近loss_contrastive label * paddle.square(euclidean_distance) \(1 - label) * paddle.square(paddle.maximum(self.margin - euclidean_distance, paddle.to_tensor(0.0)))# 损失函数应对同一批次取一个损失值return paddle.mean(loss_contrastive) 在paddle中可以使用paddle.norm计算距离。axis1表示只对第1维度计算距离因为第0维度是数据批次。 在数据集中我们定义1为相同0为不同。根据我们之前的分析很容易算出损失值的公式。 接下来就可以把这两个整合在一个py文件中起名face_layers.py import paddleclass FaceNet(paddle.nn.Layer):def __init__(self):super().__init__()# 共享权重的cnn网络self.cnn paddle.nn.Sequential(paddle.nn.Conv2D(3, 16, 3, padding1),paddle.nn.ReLU(),paddle.nn.MaxPool2D(2, 2),paddle.nn.Conv2D(16, 32, 3, padding1),paddle.nn.ReLU(),paddle.nn.MaxPool2D(2, 2),paddle.nn.Conv2D(32, 64, 3, padding1),paddle.nn.ReLU(),paddle.nn.MaxPool2D(2, 2),paddle.nn.Conv2D(64, 128, 3, padding1),paddle.nn.ReLU(),paddle.nn.MaxPool2D(2, 2),paddle.nn.Flatten(),paddle.nn.Linear(4608, 5))def forward(self, face1, face2):# 前向传播使用cnn网络分别输出两个结果并返回n1r self.cnn(face1)n2r self.cnn(face2)return n1r, n2r# 损失函数定义 class FaceLoss(paddle.nn.Layer):def __init__(self, margin(512 ** 0.5)):super(FaceLoss, self).__init__()self.margin margindef forward(self, output1, output2, label):# 计算欧式距离勾股定理euclidean_distance paddle.norm(output1 - output2, axis1)# 损失值# 在数据集中1为相同0为不同。但是输出要求相似的图片距离更近loss_contrastive label * paddle.square(euclidean_distance) \(1 - label) * paddle.square(paddle.maximum(self.margin - euclidean_distance, paddle.to_tensor(0.0)))# 损失函数应对同一批次取一个损失值return paddle.mean(loss_contrastive) 训练 接下来我们需要编写训练脚本face.py import paddle from face_dataset import FaceData from face_layers import FaceNet, FaceLoss import pickle# 加载数据集 train_dataset pickle.load(open(./database/train.data, rb)) test_dataset pickle.load(open(./database/test.data, rb))# 输出数据集信息 print(f加载数据完毕训练集数据个数{len(train_dataset)}测试集数据个数{len(test_dataset)})count 0 for context1, context2, label in train_dataset:if label 1:count 1print(f训练集相同人脸个数{count})count 0 for context1, context2, label in test_dataset:if label 1:count 1print(f测试集相同人脸个数{count})# 指定设备 paddle.device.set_device(gpu)# 创建模型 model paddle.Model(FaceNet())# 打印模型信息 print(model.summary(((1, 3, 96, 96), (1, 3, 96, 96))))# 模型训练的配置准备准备损失函数优化器和评价指标 model.prepare(paddle.optimizer.Adam(parametersmodel.parameters(), learning_rate0.00001),FaceLoss())# 模型训练 model.fit(train_dataset, epochs50, batch_size64, verbose1) # 模型评估 model.evaluate(test_dataset, batch_size64, verbose1)# 保存模型 model.save(./output/face-compare)这里需要注意我们需要使用FaceLoss作为损失函数 训练完毕后训练数据将被存储在本地的output文件夹下使用时加载即可 接下来我们可以编写face_use.py使用这个模型 import paddle from face_dataset import FaceData from face_layers import FaceNet from PIL import Image import numpy as np# 加载模型 model paddle.Model(FaceNet()) model.load(./output/face-compare)print(加载模型完毕)# 打开图片 pil_img1 Image.open(ffacecap\\003\\30.jpg).convert(RGB).resize((96, 96)) pil_img2 Image.open(ffacecap\\003\\27.jpg).convert(RGB).resize((96, 96))# 转np数组 np_img1 np.array(pil_img1, dtypenp.float32).transpose((2, 0, 1)) / 255.0 np_img2 np.array(pil_img2, dtypenp.float32).transpose((2, 0, 1)) / 255.0# 预测 pred model.predict_batch((np.array([np_img1], dtypenp.float32), np.array([np_img2], dtypenp.float32)))# 计算距离 euclidean_distance paddle.norm(paddle.to_tensor([pred[0]]) - paddle.to_tensor([pred[1]])) print(euclidean_distance.numpy())这里只以两张相同人的人脸的图片做测试最后输出 加载模型完毕 [0.1978856] 改用两张不同人的人脸做测试最后输出 加载模型完毕 [1.1059165] 可以看到这个模型的效果还不错。但是经过我的多次测试发现这个模型还有一定的提升空间。这需要更大的数据集、更深的模型和更多的训练次数 总结 我们使用孪生网络技术成功实现了人脸对比模型并有一定的准确性可以应用于人脸比对等场景。但是由于数据集、模型和训练次数有限还难以实现更准确的人脸对比

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

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

相关文章

口碑好的番禺网站建设seo推广沧州公司电话

随着信息化时代的到来,数据安全已成为国家、企业和个人共同关注的焦点。政府系统国产化作为提高信息安全和自主可控能力的重要举措,正逐步得到广泛实施。在这一过程中,沙箱技术作为一种先进的安全机制,其在国产化系统加密效果方面…

成都网站建设外包业务网络文学网站开发

系统环境 一、FS相关网站 二、第三方库安装 1.apt安装 2.指定版本sofia-sip安装 3.指定版本spandsp安装 4.指定版本libks安装 5.指定版本openssl安装 三、指定版本FS安装 1.CPPFLAGS配置 2.编译器版本 3.FS配置编译 四、FS,fs_cli运行,模块加载 附录 1.安…

广州哪家做网站mt4外汇网站建设

文章目录前言一、什么是毕昇 JDK?1.1、毕昇 JDK 发展历程1.2、毕昇 JDK 的支持架构1.3、毕昇 JDK、OpenJDK 和 Oracle JDK 区别二、为什么要做毕昇 JDK?2.1、Oracle JDK 授权方式发生变化2.2、高版本 JDK 有价值特性的渴望2.3、应用的定制化优化诉求三、…

四川住房与城乡城乡建设厅网站做模板下载网站挣钱吗

文 | Akhil Raju源 | 机器之心在这里,既有头脑风暴,也有生活气息。本月初,时任苹果机器学习总监的 Ian Goodfellow 宣布在加入公司三年后辞职,没过几天,就有消息曝出大神去向定了,他将重返谷歌加入 DeepMin…

美容院网站源码如何在服务器上放网站

1.外墙外保温系统耐候性试验设备,测温点不应少于( ),每个测温点的温度与平均温度偏差不应大于( )。 A、2个,5℃ B、4个,5℃ C、2

天河企业网站建设网站总是跳转

目录 测试计划书 1. 引言 2. 测试目标 3. 测试方法 3.1 黑盒测试 (1)等价类划分: (2)边界值分析: (3)因果图: ​编辑(4)错误推测法 3.2 白盒测试 测试用例!! 4. 测试环境 5. 测试计划 6…

建设企业网站官网登录网站可以做二维码吗

十年婚姻总结八 女人一生的合伙人不能只是帅哥哥 女人一生的合伙人不能只是帅哥哥 浪漫的本质还是你的筹码。 比如你送男人5万的手表,但你没什么其他筹码(皮肤粗糙蜡黄、没人脉金钱资源、长的胖)。 那个男人会觉得你胡闹,你送的…

建筑网站模版网站权重排行榜

遇到问题,npm install less-loader7.3.0 --save安装好less-loader后,执行npm run serve 项目运行不起来,排查后发现在安装less-loader后就提示需要安装less,正确的安装应如下: npm install less less-loader7.3.0 --sa…

可信网站标准版做网站一万

对于那些拥有多个微信号的用户来说,频繁地在不同微信号和设备之间切换既麻烦又容易搞混。这时候,一款多微信聚合聊天神器——微信管理系统应运而生,为我们带来了极大的便利与高效。 下面一起来看看它都有哪些功能吧! 1、多微信同…

江西建设信息网站营销推广方式

NoSQL-Redis集群 一、集群:1.单点Redis带来的问题:2.解决:3.集群的介绍:4.集群的优势:5.集群的实现方式: 二、集群的模式:1.类型:2.主从复制: 三、搭建主从复制&#xff…

直接ip访问网站页面设计介绍

Spring事务-两种开启事务管理的方式 1、前期准备2、基于注解的声明式事务管理3、基于编程式的事务管理4、声明式事务失效的情况 例子:假设有一个银行转账的业务,其中涉及到从一个账户转钱到另一个账户。在这个业务中,我们需要保证要么两个账户…

建立内部网站需要多少钱郑州男科

目录 专栏导读之前的课程1、小球类设计2、挡板类的设计3、砖块类4、砖块与小球的边界碰撞检测5、检测到碰撞,删除砖块,改变运动方向完整版代码总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 …

网站建设的前期准备微博代替wordpress评论框

文章目录 vue3使用响应式数据 v-model导致响应式失效el-form表单无法输入的问题 vue3使用响应式数据 v-model导致响应式失效el-form表单无法输入的问题 参考文章 重构vue2项目时发现的问题,原始项目使用的是Element-ui。 其实vue3可以使用适配的Element-plus 问…

深圳网站建设公司服务平台如何建立小程序商城

题目描述 题目链接:21. 合并两个有序链表 - 力扣(LeetCode) 题目分析 这个算法思路很简单:就是直接找小尾插 定义一个tail和head,对比两个链表结点的val,小的尾插到tail->next,如果一个链表…

网站是怎么搭建的做好网站建设静态化

SQL优化是提升数据库性能的重要手段,以下是SQL优化的详细知识点: 正确使用索引:索引是加速数据检索的关键因素,可以通过合理的索引设计来提升查询性能。例如,在频繁使用的列上创建索引,使用联合索引等。 避…

蓝海国际版网站建设网络组建与安全通知

Vue.js 是一个流行的前端 JavaScript 框架,它提供了一种用于构建用户界面的渐进式方法。Vue 组件的生命周期钩子函数是一些特定的函数,它们在组件不同阶段被自动调用,可以让你在这些阶段执行特定的逻辑。下面是 Vue 组件的生命周期钩子函数以…

广东网站建站系统哪家好wordpress屏蔽广告

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目: 实现strstr函数功能 C 库函数 char *strstr(const char *haystack, const char *nee…

学校网站方案阜阳做网站

v-for​ 我们可以使用 v-for 指令基于一个数组来渲染一个列表。v-for 指令的值需要使用 item in items 形式的特殊语法&#xff0c;其中 items 是源数据的数组&#xff0c;而 item 是迭代项的别名&#xff1a; const items ref([{ message: Foo }, { message: Bar }]) <l…

垂直购物网站建设网站备案进程查询

Node.js中Buffer API详解 在Node.js中&#xff0c;Buffer是一个用于处理二进制数据流的全局对象&#xff0c;它类似于数组&#xff0c;但可以存储任意大小的数据。Buffer对象是由C代码实现的底层结构&#xff0c;而JavaScript代码则提供了一些高级的API。本文将介绍Node.js中B…

顺德区建设局网站做跳转链接到自己的网站

一、成员变量及其基本结构 1.基本结构模型 本质是一个带头双向循环列表&#xff0c;将节点进行封装&#xff0c;并且为了方便使用&#xff0c;进行重定义 2.节点的封装定义 template<class T>//定义节点struct list_node{list_node<T>* _prev;list_node<T>…