百度site app网站添加到网站首页源文件中的代码是哪些?网站新类型

news/2025/9/22 21:20:42/文章来源:
百度site app网站添加到网站首页源文件中的代码是哪些?,网站新类型,做ps彩图什么网站好,工艺宣传网站建设人脸对比 人脸对比#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/news/910409.shtml

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

相关文章

上海做网站的多吗wordpress小说站数据库

队列(Queue) 在Python的queue模块中,Queue类是一个线程安全的队列实现,用于在多线程编程中安全地交换信息。它遵循先入先出(FIFO)的原则。Queue类提供了几种主要的方法: put(item): 将一个项目…

详细介绍:深入理解Kafka事务

详细介绍:深入理解Kafka事务pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

能碳园区 / 工厂系统 - 智慧园区

智慧能碳园区 / 工厂:能碳协同驱动的低碳高效运营新范式 在 “双碳” 目标与产业数字化深度融合的背景下,智慧能碳园区 / 工厂已成为企业绿色转型的核心载体 —— 它并非 “智慧能源” 与 “碳管理” 的简单叠加,而…

郑州网站推广营销wordpress 修改邮箱

我们做接口测试时候,会发现通常需要测试的接口类型有好几种,比较多的是http类型的接口,其他还有webservice接口,rpc接口等等,本次主要说下http类型的接口我们该怎么测试,还有该测试哪些东西。HTTP接口概念:…

上海工程建设执业资格注册中心网站网站建设排名北京

在计算机科学的世界里,排序是一项基本而重要的操作。无论是数据库管理、搜索引擎,还是日常编程,高效的排序算法都是提高性能的关键。本文将介绍四种基本的排序算法:冒泡排序、选择排序、插入排序和快速排序,并探讨它们…

有什么免费开发网站建设软件有哪些做外贸有哪些好的网站有哪些

java8根据某个id删选Java 8带有新的Optional类型,类似于其他语言中可用的类型。 这篇文章将介绍这种新类型的使用方式,即主要用途。 什么是可选类型? 可选的是新容器类型,如果有可用值,则该容器类型将包装单个值。 因…

汕头网站优化公司沈阳电商网站建设

本章主要讲解微信公众号自定义菜单、微信网页开发、模板消息推送等功能的实现;发福利了,下方关注公众号,就能免费获取项目源码1、自定义菜单开发前需要了解以下几点:1、微信公众号的自定义菜单最多包括3个一级菜单,每个…

深圳网站建设与设计制作笑话小网站模板html

它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前;中缀和后缀同理。举例:(3 4) 5 - 6 就是中缀表达式- 3 4 …

dell公司网站设计特色石油 技术支持 东莞网站建设

上篇文章介绍了如何利用pyhook模块监听鼠标键盘的事件,接下来如果需要通过监听的事件内容,来做对应的操作,需要对event的内容进行相应的判断。 如果仅仅通过event.key来进行判断,可以写成str(evnet.key) F12等,如果需…

佛山网站开发公司秦皇岛微信公众号

2019双11,支付宝参战的第十一年。 与十一年前相比,双11的许多东西都改变了。比如金额——2684亿,差不多是十一年前的5000倍;比如流量——订单峰值54.4万笔/秒,曾经是想都不敢想的数字;再比如层出不穷的新技…

国外域名查询网站装修设计公司哪个好

前言 今天我们来做个小试验,用PHP和RabbitMQ实现消息队列功能。 前期准备,需要安装好docker、docker-compose的运行环境。 如何使用docker部署php服务_php如何使用docker发布-CSDN博客 一、安装RabbitMQ 1、创建相关目录,执行如下命令。…

代码随想录算法训练营第五天 |242.有效的字母异位词、349. 两个数组的交集、第202题. 快乐数、1. 两数之和

242.有效的字母异位词思路:想到的是分别遍历两个数组,然后用map统计值,一个数组遍历的时候对值++,一个--,如果value没有能消除完,那就不一样。 优化:其实一次遍历就可以做完。func isAnagram(s string, t string…

Python - GaussDB table sync to Hive

Python - GaussDB table sync to Hive import psycopg2 from datetime import date, datetimeSRC_TABLE = "aaa" TARGET_TABLE = "bbb"# ---------------------------- # Step 1: Connect to Gaus…

淄博网站开发恶意代码 wordpress

下载地址:网盘下载 基本介绍 编辑内容简介 到底是本什么书,拥有这样一份作序推荐人列表:阿里集团章文嵩博士|新浪TimYang|去哪网吴永强|丁香园冯大辉|蘑菇街岳旭强|途牛汤峥嵘|豆瓣洪强宁|某电商陈皓/林昊…… 这本书出自某电商技术部总监之手…

Photoshop 2025 v26.0(PS2025)下载安装教程(含一键安装包下载)

目录一、PS2025 软件介绍:学 Photoshop 2025 v26.0 下载安装教程前,先懂它为啥好用二、Photoshop 2025 v26.0 下载方法三、Photoshop 2025 v26.0 安装教程详细步骤步骤 1:解压安装包 ——Photoshop 2025 v26.0 下载…

装修设计公司网站腾讯企业邮箱登录入口免费版

文章目录[toc]第一章 面试流程1.1 面试官谈面试1.2 面试3种形式1.3 面试的3个环节第一章 面试流程 1.1 面试官谈面试 初级的程序员谈算法和数据结构,高级的程序员谈项目经验要对公司近况和项目情况了解不要紧张,不要马上上手写代码 1.2 面试3种形式 …

成都市金牛区建设和交通局网站手机软件下载大全

背景 最近遇到了一个问题,在使用rabbitmq的时候出现了丢消息、消息重复消费等一系列的问题,使用的是.net框架,背景是高并发压力下的mq消费,按理说即使队列中堆了几百条消息,我客户端可以同处理5个消息。 原因是多线程…

宁夏网站建设报价毕业设计代写网站

SNAP软件下载与安装 一、下载地址 首先进入网站 找到DOWNLOAD下载页, 安装完成后,界面如下 还需要再装一个Sen2cor下载好之后,解压到用户文件夹下 然后打开L2A_Process.bat文件 打开CMD,输入 cd C:\Users\lenovo\AppData\L…

网站一般怎么维护企业的网站建设费用

字节数组转为二进制数 c#低延迟系统需要高性能的消息处理和传递。 由于在大多数情况下,数据必须通过有线传输或序列化才能保持持久性,因此编码和解码消息已成为处理管道的重要组成部分。 高性能数据编码的最佳结果通常涉及应用程序数据细节的知识。 本文…