孪生网络:图片相似度对比神器

news2024/9/24 19:23:47

本文来自公众号“AI大道理”

Siamese Network(孪生网络)很早就被发明了,它的作者是著名的卷积神经网络LeNet-5的作者LeCun。

最早用来从相似图片数据集上学习图片表示的网络结构就是siamese网络。

两幅图通过两个共享权重的CNN得到各自的表示,而各自表示的距离决定了他们是相似还是不相似。

1、真假孪生网络

Siamese网络有两个输入,两个网络,根据这两个网络是否共享权重,可以分为真孪生网络siamese network和伪孪生网络pseudo-siamese network。

真孪生网络:

伪孪生网络:

对于pseudo-siamese network,两边可以是不同的神经网络(如一个是lstm,一个是cnn),也可以是相同类型的神经网络。

可以看出差别就在于是否共享权重。

不同应用:

孪生神经网络用于处理两个输入"比较类似"的情况。

伪孪生神经网络适用于处理两个输入"有一定差别"的情况。

我们要计算两个句子或者词汇的语义相似度,使用siamese network比较适合;

如果验证标题与正文的描述是否一致(标题和正文长度差别很大),或者文字是否描述了一幅图片(一个是图片,一个是文字),就应该使用pseudo-siamese network。

2、Siamese Network的主要特点

(1)Siamese 网络采用两个不同的输入,通过两个具有相同架构、参数和权重的相似子网络。

(2)这两个子网络互为镜像,就像连体双胞胎一样。因此,对任何子网架构、参数或权重的任何更改也适用于其他子网。

(3)两个子网络输出一个编码来计算两个输入之间的差异。

(4)Siamese 网络的目标是使用相似度分数对两个输入是相同还是不同进行分类。可以使用二元交叉熵、对比函数或三元组损失来计算相似度分数,这些都是用于一般距离度量学习方法的技术。

(5)Siamese 网络是一种one-shot分类器,它使用判别特征从未知分布中概括不熟悉的类别。

3、孪生网络结构

模型主要两个部分组成,第一部分是提取特征的全联接层和一个全联接层,第二个全联接网络用于对比卷积神经网络提取向量之间的距离。

  • 设计一个卷积神经网络用于提取图像特征。

  • 每次将两张图片输入到同一个神经网络,得到一个特征向量。

  • 将这两个特征向量相减得到一个新的向量。

  • 将相减得到的新的向量输入到一个全联接层得到一个标量。

  • 用 sigmoid 函数将结果映射到0或1。如果两张图片是同一个类别输出应该接近 1,不同类输出接近 0。

4、训练孪生网络

对于sigmoid 输出的预测值和真实值计算距离也就是损失函数,损失函数可以是输出和真实值的交叉熵来反应预测和真实值之间差别。

这样就可以通过梯度下降在反向传播来更新参数。

模型主要有两个部分分别是卷积神经网络和全连接神经网络,训练过程就是更新这两部分网络的参数。

训练 Siamese 神经网络:

(1)加载包含不同类的数据集

(2)创建正负数据对。当两个输入相同时为正数据对,当两个输入不同时为负数据对。

(3)构建卷积神经网络,它使用全连接层输出特征编码。我们将通过姊妹 CNN传递两个输入。姐妹 CNN 应该具有相同的架构、超参数和权重。

(4)构建差分层以计算两个姐妹 CNN 网络编码输出之间的距离。

(5)最后一层是具有单个节点的全连接层,使用 sigmoid 激活函数输出相似度分数。

(6)使用二元交叉熵作为损失函数。

5、测试孪生网络

向训练模型发送两个输入以输出相似度分数。

由于最后一层使用 sigmoid 激活函数,它输出一个范围在 0 到 1 之间的值。

接近 1 的相似度得分意味着两个输入是相似的,接近 0 的相似度得分意味着两个输入不相似。

选择一个相似性截止阈值。

6、为什么姐妹网络要一样?

两个姐妹卷积网络的模型架构、超参数和权重必须相同。

它确保它们各自的网络不会将两个极其相似的图像映射到非常不同的特征空间。

也就是说加入输入的是不同的网络,即使输入的是一类两张图片,提取出来的特征也会天差地别,使得相似度不高。

7、为什么要两个分支,一个基础网络不能搞定吗?

一个网路实现方法:

Siamese net 其实名字很具有欺骗性,连论文都有欺骗性,很多人一听名字都以为有两个网络,至少看图就是这么想的。

在代码实现的时候,甚至可以是同一个网络,不用实现另外一个,因为权值都一样。

input1 和 input2 其实是前后分别输入得到两个向量后做计算,尽可能大或者小,然后loss直接更新网络。

这样就没有“两个网络”,各种操作其实都在同一个网络下进行。

同时在推理的时候也不需要两个网络同时进行,人脸库中的特征可以提前提取好等待匹配,需要进行推理的图片也只需要一个网络进行提取然后和库中的人脸特征进行匹配就行。

因此,两个网络只是思想,实现起来一个网络就够了。

两个网络实现方法:

当然也是可以用两个一模一样的网络的,这样训练的时候会快些。

上述训练前后两个图片是一对的,需要一前一后输入一个网络才能训练,两个网络就是同时输入网络进行训练,但是这样注意要共享权重,而一个网络则不用管这点。

一个网络是串行训练,两个网络是并行训练。

但是推理的时候两个网络就浪费了一个网络,只需要一个网络。

8、triplet network

在siamese网络之后,又提出了用triplet loss来学习图片的表示,大概思路如下:

  • 拿到3张图片A, B, C。其中A,B相似,A,C不相似。

  • 学到A, B, C 的表示,使得A,B之间的距离尽量小,而A,C之间的距离尽量大。

在 Triplet loss 中,我们使用数据的三元组而不是二元对。三元组由anchor、正样本和负样本组成。

在 Triplet loss 中,anchor和正样本编码之间的距离被最小化,而anchor和负样本编码之间的距离被最大化。

训练人脸识别网络的时候需要输入图像对来判断是不是同一个人,loss是两个样本之间的相似度。

不过,光是相似度是不够的。

不仅要将正负样本区分开,还要让类内更加紧凑(方差小),类间更加疏远(方差大)。

triplet network将输入改成三个,训练的时候使用一个正例+两个负例,或者一个负例+两个正例。

训练的目标就是同类别间的距离尽可能的小,不同类别间的距离尽可能的大。

9、Siamese 神经网络的应用

(1)签名验证

(2)人脸识别

(3)指纹对比

(4)文本匹配

(5)目标跟踪

10、总结

孪生网络可以看做分类模型,输出是0和1的分类。

只不过这种分类的对象是两张图片,而传统分类则是一张图片。

传统分类若想增加一类则需要大量这类图片数据集并重新训练,而孪生网络在训练结束后只需要一张对比图片放入比对库中即可,无需重复训练模型。

孪生网络用于特征提取的网络可以多种多样,比如VGG、Resnet等都可以作为特征提取网络。

基于特征比对的思想,人脸识别等应用也不一定要用孪生网络,传统的图像算法只要能获取人脸特征,并用一维向量表示这些特征,也是可以用的。

在目标跟踪领域需要进行下一帧的检测框目标与当前检测框目标的匹配,孪生网络可以计算这两帧目标的相似度,从而进行匹配。

 ——————

浅谈则止,细致入微AI大道理

扫描下方“AI大道理”,选择“关注”公众号

—————————————————————

 

—————————————————————

投稿吧   | 留言吧

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

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

相关文章

【Redis】Redis简介及安装部署

Redis简介及安装部署 1.关系数据库 VS 非关系型数据库1.1 关系型数据库1.2 非关系型数据库1.3 关系型数据库和非关系型数据库区别1.4 非关系型数据库产生背景1.5 关系型数据库与非关系型数据库总结 2.Redis简介2.1 Redis概述2.2 Redis的优点2.3 Redis使用场景2.4 关于Redis的高…

一步一步学OAK之一: Hello World(使用DepthAI Python API 显示彩色视频流)

作为编程世界的传统入门仪式,我们这里也以Hello World来命名我们的第一个项目,其实我们这个项目与Hello World没有半毛钱关系。 在这个程序中,我们使用DepthAI Python API来一步步实现显示OAK相机彩色视频流,并捕捉物体的功能 目…

CSS 仿 -webkit-box-reflect 属性实现 图片 镜面 倒影 效果

背景 最近在支付宝小程序上面要实现图片的镜面倒影效果,于是乎,马上找到了-webkit-box-reflect属性,用上之后真的绝绝子,模拟器上也很完美,可是到真机上一看,iOS 不支持,只有安卓手机支持&…

基于web的家校联系平台的设计与实现(源码+文档+PPT+数据库)

以 web为基础、以 Java SSM (springmvc mybatis mysql)为框架、以spring, springmvc, mybatis, bootstrap, JSP, jquery为主要技术来完成一个家庭与学校之间的联系。在框架下进行开发,管理员可以在后台输入信息、管理信息,设置网站信息,管理和…

【FFmpeg实战】H264 NALU分析

视频序列 宏块结构 NALU分层 H264的主要目标是为了有高的视频压缩比和良好的网络亲和性,为了达成这两个目标,H264的解决方案是将系统框架分为两个层面, VCL(视频编码层)和 NAL(网络提取层). VCL:包括核心压缩引擎和块&#xff…

[数据分析与可视化] 基于matplotlib-scalebar库绘制比例尺

matplotlib-scalebar是一个Python库,用于在matplotlib图形中添加比例尺。它允许用户指定比例尺的大小、位置、字体和颜色,以及比例尺的单位。该库支持不同的比例尺单位,例如米、英尺、英寸等。matplotlib-scalebar安装命令如下: p…

王道考研计算机网络第三章知识点汇总

3.1数据链路层功能概述: 3.2封装成帧和透明传输 重点理解透明传输的概率:可以形象地理解为小秘没有权限打开这5份文件 字符计数法如果其中一个计数字段出差错那么后续字段全部都错误,将会导致灾难性的错误。 字符填充法相当于编程时在/前面再…

JsFu0k批量探测JS存在的敏感关键字

这是一个演示 GitHub地址:https://github.com/jumppppp/go/tree/master/htools/jsfu0k 输出窗口 输出的详细文件 以上演示的是全字匹配 这个自动化工具模仿人工在一个网页内进行寻找js中敏感信息 流程: 填写配置(输入批量域名&#xff0…

【每天40分钟,我们一起用50天刷完 (剑指Offer)】第九天 9/50

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

Eclipse中的实用工具之Debug

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Debug的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.什么是Debug 二.为什么要使用Debug 三…

springboot+element-ui多文件一次上传

前端&#xff1a; <el-uploaddrag:multiple"true":limit"10":auto-upload"false":file-list"fileList"ref"fileUpload"><i class"el-icon-upload"></i><div class"el-upload__text&quo…

【云原生】Pause 容器介绍

Pause 容器 Pause 容器&#xff0c;又叫 Infra 容器 我们知道在 kubelet 的配置中有这样一个参数&#xff1a; KUBELET_POD_INFRA_CONTAINER--pod-infra-container-imageregistry.access.redhat.com/rhel7/pod-infrastructure:latest上面是 openshift 中的配置参数&#xff…

关于Java类加问题我竟让面试官哑口无言

学习类加载之前我们先看看从面试官的角度会问哪些问题&#xff1f;毕竟带着问题学习会比较高效。 直击面试 看你简历写得熟悉 JVM&#xff0c;那你说说类的加载过程吧&#xff1f; 我们可以自定义一个 String 类来使用吗&#xff1f; 什么是类加载器&#xff0c;类加载器有哪些…

雨水情自动监测报警系统解决方案

随着夏季雨季的到来&#xff0c;对全国各地的防汛工作形成挑战&#xff0c;为了实现有效的雨水管理和应对极端天气情况&#xff0c;建立一套科学高效的雨水情监测系统有着重要作用。雨水情监测系统能够提供及时准确的雨水信息&#xff0c;帮助决策者进行全面的天气分析和预警&a…

数字化转型排头兵,金融行业如何利用科技赋能业务 | TVP金融交流会

引言 金融行业&#xff0c;是数字化转型浪潮中的排头兵。这个上千年来&#xff0c;不断创新的行业&#xff0c;从以物易物到纸币发行再到数字资产&#xff0c;承袭至今的是保障客户资产安全&#xff0c;提升资产流通效率的本心。进入产业互联网时代以后&#xff0c;金融科技的发…

第5讲:使用ajax技术实现局部刷新功能(xml数据)

使用ajax技术实现局部刷新功能&#xff0c;每2秒刷新一次数据&#xff0c;本案例使用原生态xmlhttprequest对象&#xff0c;GET方法通讯&#xff0c;使用responseXML属性返回xml格式数据&#xff0c;同时刷新界面数据。 ajax封装库(ajax.js) var xmlhttpnull; //创建XMLHttpRe…

adb-学会查看日志文件

目录 一、获取日志文件 二、日志级别 三、日志缓冲区 四、缓冲区的类型 &#x1f381;更多干货 完整版文档下载方式&#xff1a; 一、获取日志文件 一般情况下&#xff0c;我们在做app测试时&#xff0c;其实并不需要经常使用adb去抓取我们的日志&#xff0c;通常情况下…

使用GPIO来模拟UART

前言 最近在看一些秋招的笔试和面试题&#xff0c;刚好看到一个老哥的经验贴&#xff0c;他面试的时候被问到了如果芯片串口资源不够了该怎么办&#xff1f;其实可以用IO口来模拟串口&#xff0c;但我之前也没有具体用代码实现过&#xff0c;借此机会用32开发板上的两个IO口来…

力扣 404. 左叶子之和

题目来源&#xff1a;https://leetcode.cn/problems/sum-of-left-leaves/description/ C题解1&#xff1a;递归法&#xff0c;前序遍历。 1. 确定输入参数&#xff1a;当前节点&#xff0c;左叶子的和&#xff1b; 2. 确定终止条件&#xff1a;空节点时返回&#xff1b; 3. …

【每日一短语】在必要情况下

1、短语及释义 in a pinch 释义&#xff1a; 在紧要关头&#xff1b;在必要情况下 2、示例及出处 美剧&#xff1a;《生活大爆炸》第七季第21集 The Big Bang Theory, Season 7 Episode 21 Sheldon Cooper: Penny, there’s only one cookie with something in the middle tha…