Contrastive Representation Learning 对比表征学习(三)视觉:图像嵌入(1)

news2024/10/6 13:28:26

原文翻译自这里

视觉:图像嵌入(Image Embedding)

图像增强

在视觉领域,大多数面向对比表征学习的方案均依赖于通过应用数据增强技术的序列组合来创建样本的噪声形式。而这种增强需要满足保持语义不变的同时极大的改变其视觉外观。

基本图像增强技术

以下列举了一些修改图像但保持其语义的方法。我们可以使用以下任一增强或几种的组合。

  • 随即裁剪,然后调整尺寸与原图一致
  • 随机色彩失真
  • 随机高斯模糊
  • 随机色彩抖动(color jittering)
  • 随机水平翻转
  • 随机灰度转换
  • Multi-crop 增强:使用两个标准分辨率的裁剪块,并采样一组额外的低分辨率的裁剪块,将其覆盖在原图的部分区域,以降低计算消耗。
  • 。。。

增强策略

许多框架的设计初衷是学习优秀的数据增强策略(可能是多种变换的一个组合)。这有一些例子。

  • AutoAugment:受 NAS 启发,AutoAugment将最优数据增强搜寻视为强化学习问题,通过验证集上的最优精确度来确定增强组合。
  • RandAugment:RandAugme通过使用幅度参数控制不同变换操作的幅度,极大的减小了AutoAugment的搜索空间。
  • PBA(Population based augmentation):PBA将AutoAugment与PBT结合在一起,使用进化算法训练子模型群体同时进化出最优策略。
  • UDA(Unsupervised Data Augmentation):给出一系列可能的增强策略,UDA选择能够最小化无标签示例的预测分布和其无标签增强版本之间KL距离的策略。

图像混合

图像混合方法能够从现有数据点中构建出新的训练样本。

  • Mixup:该方法通过对两幅图像使用一种加权逐像素结合的方法实现全局混合: I m i x u p ← α I 1 + ( 1 − α ) I 2 I_{mixup}\leftarrow \alpha I_1+(1-\alpha)I_2 ImixupαI1+(1α)I2 and α ∈ [ 0 , 1 ] \alpha \in[0,1] α[0,1].
  • Cutmix: Cutmix通过生成一个新样本来实行区域混合。该样本由一张图片的局部区域与任一张其他图片混合组成。 I c u t m i x ← M b ⨀ I 1 + ( 1 − M b ) ⨀ I 2 I_{cutmix}\leftarrow M_b\bigodot I_1+(1-M_b)\bigodot I_2 IcutmixMbI1+(1Mb)I2,其中 M b ∈ { 0 , 1 } I M_b\in \{0,1\}^I Mb{0,1}I为二进制mask, ⨀ \bigodot 是逐像素乘法。当区域内不放图时,与Cutout等效。
  • MoCHi(Mixing of Contrastive Hard Negatives)给一query q q q,MoCHi维持 K K K个负样本特征 Q = { n 1 , . . . , n K } Q=\{n_1,...,n_K\} Q={n1,...,nK}的队列,并通过比较与 q q q的相似程度 q T n q^Tn qTn进行降序排序。队列中的前 N N N个项目 Q N Q^N QN被视为最复杂负样本。 然后通过以下形式生成复杂示例: h = h ~ / ∣ h ~ ∣ h=\tilde{h}/|\tilde{h}| h=h~/∣h~。其中, h ~ = α n i + ( 1 − α ) n j \tilde{h}=\alpha n_i+(1-\alpha)n_j h~=αni+(1α)nj, α ∈ ( 0 , 1 ) \alpha\in(0,1) α(0,1)。更复杂的样本甚至可以通过与query q q q混合而得到: h ′ = h ′ / ∣ h ′ ∣ 2 ~ h^{'}=\tilde{h^{'}/|h^{'}|_2} h=h/∣h2~。其中 h ′ ~ = β q + ( 1 − β ) n j \tilde{h^{'}}=\beta q+(1-\beta)n_j h~=βq+(1β)nj, β ∈ ( 0 , 0.5 ) \beta\in (0,0.5) β(0,0.5)

并行增强

该类别方法生成一张锚图(anchor image)的两个带噪声版本,其目标为学习某种表征以使这两种增强的样本具有同样的嵌入形式

SimCLR

SimCLR 提出了一种用于视觉表征对比学习的简单的框架。其通过在潜在空间中最大化同一样本不同增强版本的对比损失的一致性来学习视觉输入的表征。

一口气说完不累吗,真是无语啊
It learns representations for visual inputs by maximizing agreement between differently augmented views of the same sample via a contrastive loss in the latent space.

在这里插入图片描述

  1. 样本集中随机采样 N N N个样本,对每个样本执行两种不同的数据增强操作,得到 2 N 2N 2N个增强后的样本。
    x ~ i = t ( x ) , x ~ j = t ′ ( x ) , t , t ′ ∼ T \tilde{x}_i = t(x), \tilde{x}_j = t^{'}(x), t, t^{'}\sim T x~i=t(x),x~j=t(x),t,tT
    其中上述两种不同的数据增强操作子 t t t t ′ t^{'} t,采样于增强集合 T T T中的同一系列。数据增强操作包括随机裁剪,带有随机翻转的尺寸缩放,颜色失真,以及高斯模糊。
  2. 给一正样本对,其他 2 ( N − 1 ) 2(N-1) 2(N1)个数据点被认为是负样本。表达式可通过一基础编码器 f ( ⋅ ) f(\cdot) f()给出:
    h i = f ( x ~ i ) , h j = f ( x ~ j ) h_i = f(\tilde{x}_i), h_j = f(\tilde{x}_j) hi=f(x~i),hj=f(x~j)
  3. 对比学习损失函数使用余弦相似度 s i m ( . , . ) sim(.,.) sim(.,.)定义。这里注意,损失函数并不直接针对表征空间 g ( . ) g(.) g(.),而是作用于该表征的额外一映射层。但最终只有表征 h h h被用于下游任务中。
    z i = g ( h i ) , z j = g ( h j ) \mathbf{z}_i = g(h_i), \mathbf{z}_j = g(h_j) zi=g(hi),zj=g(hj)
    L S i m C L R ( i , j ) = − l o g e x p ( s i m ( z i , z j ) / τ ) ∑ k = 1 2 N I k ≠ i e x p ( s i m ( z i , z k ) / τ ) L_{SimCLR}^{(i,j)}=-log\frac{exp(sim(\mathbf{z}_i,\mathbf{z}_j)/\tau)}{\sum_{k=1}^{2N}\mathbb{I}_{k\neq i}exp(sim(\mathbf{z}_i,\mathbf{z}_k)/\tau)} LSimCLR(i,j)=logk=12NIk=iexp(sim(zi,zk)/τ)exp(sim(zi,zj)/τ)
    其中 I k ≠ i \mathbb{I}_{k\neq i} Ik=i是指示函数: 1 1 1 if k ≠ i k\neq i k=i 0 0 0 otherwise。

SimCLR需要很大的batch size来引入足够的负样本,以实现最终优秀的性能。

在这里插入图片描述

BYOL

与上述方法(SimCLR)不同,BYOL (Bootstrap Your Own Latent; Grill, et al 2020)在不使用负样本地情况下实现了SOTA性能。其依赖于两个神经网络,名为在线目标网络,它们彼此交互并互相学习。目标网络(参数化为 ξ \xi ξ)与在线网络(参数化为 θ \theta θ)具有相同的结构,但使用了 polyak 均值权重, ξ ← τ ξ + ( 1 − τ ) θ \xi \leftarrow \tau \xi + (1-\tau)\theta ξτξ+(1τ)θ

该方法旨在学习某一可被用于下游任务中的表征 y y y。由 θ \theta θ参数化的在线网络包含:

  • 编码器 f θ f_\theta fθ
  • 映射器 g θ g_\theta gθ
  • 预测器 q θ q_\theta qθ

在这里插入图片描述

sg表示停止梯度。

给一图像 x \mathbf{x} x,BYOL损失由以下方式构建:

  • 利用采样于 t ∼ T , t ′ ∼ T t\sim\mathcal{T}, t^{'}\sim\mathcal{T} tT,tT的增强技术得到 x \mathbf{x} x的增强版本 v = t ( x ) ; v ′ = t ′ ( x ) \mathbf{v}=t(\mathbf{x});\mathbf{v}^{'}=t^{'}(\mathbf{x}) v=t(x);v=t(x);
  • 将其编码为表征, y θ = f θ ( v ) , y ′ = f ξ ( v ′ ) \mathbf{y}_\theta=f_\theta(\mathbf{v}),\mathbf{y}^{'}=f_{\xi}(\mathbf{v}^{'}) yθ=fθ(v),y=fξ(v);
  • 将其映射为潜变量, z θ = g θ ( y θ ) , z ′ = g ξ ( y ′ ) \mathbf{z}_\theta=g_\theta(\mathbf{y}_\theta), \mathbf{z}^{'}=g_\xi (\mathbf{y}^{'}) zθ=gθ(yθ),z=gξ(y)
  • 在线网络输出预测 q θ ( z θ ) q_\theta(\mathbf{z}_\theta) qθ(zθ);
  • q θ ( z θ ) q_\theta(\mathbf{z}_\theta) qθ(zθ) z ′ \mathbf{z}^{'} z做L2规范化,得到 q ˉ θ ( z θ ) = q θ ( z θ ) / ∣ ∣ q θ ( z θ ) ∣ ∣ 2 \bar{q}_\theta(\mathbf{z}_\theta)=q_\theta(\mathbf{z}_\theta)/||q_\theta(\mathbf{z}_\theta)||_2 qˉθ(zθ)=qθ(zθ)/∣∣qθ(zθ)2
  • 计算规范化项 q ˉ θ ( z θ ) \bar{q}_\theta(\mathbf{z}_\theta) qˉθ(zθ) z ′ \mathbf{z}^{'} z之间的MSE损失函数 L θ B Y O L \mathcal{L}_\theta^{\mathbf{BYOL}} LθBYOL
  • 其对称损失 L ~ θ B Y O L \tilde{\mathcal{L}}_\theta^{\mathbf{BYOL}} L~θBYOL可以通过交换 v ′ \mathbf{v}^{'} v v \mathbf{v} v得到;即,将 v ′ \mathbf{v}^{'} v送入在线网络, v \mathbf{v} v送入目标网络。
  • 最终损失项为 L θ B Y O L + L ~ θ B Y O L \mathcal{L}_\theta^{\mathbf{BYOL}}+\tilde{\mathcal{L}}_\theta^{\mathbf{BYOL}} LθBYOL+L~θBYOL,且只有 θ \theta θ被优化。

与现有多数基于对比学习的方法不同,BYOL不使用负样本。大多数自举法(Bootstrap approaches) 都依赖于伪标签或聚类索引,但是BYOL直接对潜在表征进行bootstrap。

没有负样本,BYOL依然表现很好。Abe Fetterman & Josh Albrecht 的博客列出了两个关于复现BYOL的意外发现:

  1. 移除 batch normalization 后,BYOL 的性能与随机输出无异。
  2. Batch normalization操作隐式带入了对比学习。他们相信使用负样本对避免模型崩塌具有重要作用(比如,如果你使用全零向量表示每个数据点该怎么办?)。Batch normalization 隐式地带入了对负样本地依赖,因为不论一组输入有多相似,输出值总会被重分布(re-distributed, 服从 ∼ N ( 0 , 1 ) \sim\mathcal{N}(0,1) N(0,1))。因此 batch normalization避免了模型崩塌。

Barlow Twins

Barlow Twins (Zbontar et al.2021) 将某一样本的两个失真版本输入同一网络来提取特征,同时试着令两组输出特征之间的互相关矩阵趋于单位阵。其目标在于使属于同一样本的不同失真版本的表征向量保持相似,同时最小化向量之间的冗余。
在这里插入图片描述

我们令 C C C为计算得的由同一网络预测的不同输出间的互相关矩阵。其为方阵,尺寸等于特征网络输出的维度。矩阵 C i j C_{ij} Cij中的每个条目为网络输出的,位于索引 i , j i, j i,j和batch索引 b b b的向量 z b , i A \mathbf{z}_{b,i}^{A} zb,iA z b , j B \mathbf{z}_{b,j}^{B} zb,jB维度之间的余弦相似度。其值域为 − 1 -1 1(完全负相关)与 1 1 1(完全相关)之间。
L B T = ∑ i ( 1 − C i i ) 2 ⏟ 不变项 + λ ∑ i ∑ i ≠ j C i j 2 ⏟ 减少冗余项 L_{BT}=\underbrace{\sum_{i}(1-C_{ii})^2}_{不变项}+\lambda\underbrace{\sum_{i}\sum_{i\neq j}C_{ij}^2}_{减少冗余项} LBT=不变项 i(1Cii)2+λ减少冗余项 ii=jCij2

其中 C i j = ∑ b z b , i A z b , j B ∑ b ( z b , i A ) 2 ∑ b ( z b , j B ) 2 C_{ij}=\frac{\sum_{b}\mathbf{z}_{b,i}^A\mathbf{z}_{b,j}^B}{\sqrt{\sum_{b}(\mathbf{z}_{b,i}^A)^2}\sqrt{\sum_{b}(\mathbf{z}_{b,j}^B)^2}} Cij=b(zb,iA)2 b(zb,jB)2 bzb,iAzb,jB

Barlow Twins 在自监督学习方面的表现丝毫不弱于SOTA。它很自然地避免了琐碎的常数(比如,塌陷表征),并且对不同训练batch都很鲁棒 ∗ ^*

原文:It naturally avoids trivial constants (i.e. collapsed representations), and is robust to different training batch sizes.

在这里插入图片描述

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

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

相关文章

既有内销又有外贸,多样性外贸业务管理解决方案

随着外贸数字化贸易全球化的深入发展,出口、进口、内销业务越来越受到关注。外贸业务是企业在海外市场进行商品贸易,而内销业务是企业在国内市场进行商品贸易。在管理这种业务时,想要实现降本增效,企业需要有一套成熟的管理解决方…

Redis什么是缓存穿透、击穿、雪崩?如何解决

缓存与后端系统 通常后端会采用Mysql等磁盘数据库,可以持久化但是访问慢,高并发时性能差,需要设置Nosql内存型数据库缓存:Redis等 但缓存可能出现:缓存穿透、缓存击穿、缓存雪崩等问题 认识缓存穿透、击穿、雪崩 热点…

Vue2:怎么实现响应式双向绑定?

一、vue2怎么实现双向绑定原理 在Vue2中,双向绑定的实现是通过Vue2的响应式系统和数据绑定机制来完成的。下面是Vue2实现双向绑定的简要原理: 数据劫持:当创建Vue实例时,Vue2会对data选项中的所有属性进行数据劫持。这通过使用Ob…

【单元测试】Junit 4教程(一)--白盒测试方法

目录 1.0 流程图标识 1.1 语句覆盖法(C0标准) 1.2 判定/分支覆盖法(C1标准) 1.3 条件覆盖法(C2标准) 1.4 判定条件覆盖法(C1C2标准) 1.5 条件组合覆盖法(C3标准&am…

【ESP8266】基础AT指令和常用WIF指令

【ESP8266 (12F)】硬件参数 以及 固件烧录 文章目录 一、常用AT命令1.1 基础1.2 WiFi相关1.21 ATCWMODE:查询/设置 Wi-Fi 模式 (Station/SoftAP/StationSoftAP)1.22 ATCWJAP:连接 AP1.23 ATCWLAP:扫描当前可用的 AP1.2…

容器JVM内存配置最佳实践

背景信息 当您的业务是使用Java开发,且设置的JVM堆空间过小时,程序会出现系统内存不足OOM(Out of Memory)的问题。事件中心的OOM事件是指系统内存不足时,触发了Linux的内存回收(OOM Killer)机制…

7D性能工程初级班第一期开班了!

Slogan:领略性能艺术的壮阔、感受性能测试的博大精深 课程大纲见:【7D-RESAR 性能工程初级班大纲】 报名流程 讲师介绍 高楼老师: 性能领域公认的具有匠心的技术专家。架构级性能解决方案资深专家。性能测试调优分析18年经验,…

Java中的实体类为什么要 implements Serializable?

1. 序列化和反序列化 首先来解释一下什么是序列化和反序列化: 序列化:把对象转换为字节序列的过程称为对象的序列化。 反序列化:把字节序列恢复为对象的过程称为对象的反序列化。 在 Java 和其他语言进行通信的时候,需要将对象…

安卓手机ROOT和刷机基本操作——以红米Note7刷安卓原生系统并Root为例

文章目录 前言一.简介1. 安卓权限2. 安卓分区Boot分区System分区Data分区Cache分区Recovery分区 3. Fastboot 二.前置准备1. Android SDK 工具2. 解BL锁 三. ROOT1.Fastboot线刷(推荐)获取系统boot镜像修补boot.img刷入boot 2. Recovery卡刷(可以尝试) 四. 红米Note7刷安卓原生…

Burpsuite介绍及2022.8.2版本超详细安装教程(图文版)

Burpsuite介绍及2022.8.2版本超详细安装教程(图文版) 文章目录 Burpsuite介绍及2022.8.2版本超详细安装教程(图文版)Burpsuite是什么?Burpsuite环境配置及安装JDK选择及配置Burpsuite下载安装 Burpsuite快捷启动方式选…

卷积神经网络中池化层的详细介绍

卷积神经网络自2012年,到2023年经历了翻天覆地的变化。最早的卷积神经网络由卷积层、池化层和全连接层所构成。其中卷积层用于提取图像的特征,池化层削减特征数量,全连接层用于对特征进行非线性组合并预测类别。然而在transformer横行的年代&…

【瑞吉外卖】适合速成SpringBoot和MyBatis的作业项目

文章目录 零、MyBatisPlus一、管理端登录1.0 统一的返回结果Result类1.1 admin/login1.2 admin/logout1.3 Filter1.4 自定义消息转换器 二、员工管理2.1 新增员工-字段填充2.2 全局异常捕获2.3 员工信息分页查询 三、分类管理3.1 分类的删除 四、菜品管理4.1 文件的上传与下载1…

CNAPPs投资热度持续攀升 腾讯云被Gartner评为全球案例厂商

近日,Gartner发布《新兴技术:在三重挤压中蓬勃发展—对云安全风险投资的关键洞察》(Emerging Tech: Thriving Amid the Triple Squeeze— Critical Insights on VC Funding for Cloud Security)(以下简称《报告》&…

Flink 学习五 Flink 时间语义

Flink 学习五 Flink 时间语义 1.时间语义 在流式计算中.时间是一个影响计算结果非常重要的因素! (窗口函数,定时器等) Flink 可以根据不同的时间概念处理数据。 处理时间: process time System.currentTimeMillis()是指执行相应操作的机器系统时间(也称为纪元时间…

优化|如何减小噪声和误差对梯度下降法的影响

编者按: ​ 许多精确算法在理论上能保证我们的目标函数值一直下降。在随机梯度下降以及无导数优化等情况下,目标移动方向受到噪声干扰,与实际下降方向往往会存在偏差。本文将分析噪声和下降偏差对于梯度下降法等算法的影响,并且介…

SpringMVC08:拦截器+文件下载

目录 一、概述 二、自定义拦截器 1、新建一个Moudule,SpringMVC-07-Interceptor,添加web支持; 2、配置web.xml和springmvc-servlet.xml文件 3、编写一个拦截器 4、在springmvc的配置文件中配置拦截器 5、编写一个Controller&#xff0…

【数据库】Mysq备份与恢复

文章目录 一、数据库备份的分类1. 数据备份的重要性2. 数据库备份的分类3. 常见的备份方法 二、Mysql 完全备份与恢复1. Mysql 完全备份2. 数据库完全备份分类2.1 物理冷备份及恢复2.2 mysqldump 备份数据库完全备份一个或多个完整的库(包括其中所有的表&#xff09…

基于YOLOv5实现安全帽检测识别

目录 1、作者介绍2、YOLOv5网络模型2.1 算法简介2.2 数据集介绍2.2.1 VOC数据集准备2.2.2 YOLOv5算法检测流程 3、代码实现3.1 数据集划分部分代码3.2 训练阶段3.3 测试阶段3.4 检测结果 4、问题与分析参考链接 1、作者介绍 陈梦丹,女,西安工程大学电子…

【6.20】sleep()和wait()的区别

sleep()和wait()的区别 1、wait()方法 1.1使用场景 当某个线程获取到锁后,却还是不满足执行的条件,就可以调用对象锁的wait方法,进入等待状态。 直到外在条件满足了,就可以由其它线程调用notify或者notifyAll方法,…

在软件研发排期中要求“倒推时间”,项目结束后悲剧了……

有没有遇到某个项目任务的研发周期已被各路boss定下,研发团队都觉得时间不合理,反馈给上级无果,而要求“倒推时间”进行任务排期的情况? 什么是“倒推时间”? 目标倒推法,从剩下的时间反推算出每天该做的事…