【自监督论文阅读 4】BYOL

news2024/12/22 16:15:08

文章目录

  • 一、摘要
  • 二、引言
  • 三、相关工作
  • 四、方法
    • 4.1 BYOL的描述
    • 4.2 Intuitions on BYOL’s behavior(BYOL行为的直觉)
    • 4.3 实验细节
  • 五、实验评估
    • 5.1 Linear evaluation on ImageNet(ImageNet上的线性评估)
    • 5.2 Semi-supervised training on ImageNet(ImageNet上的半监督训练)
    • 5.3 Transfer to other classification tasks(迁移到其他分类任务)
    • 5.4 Transfer to other vision tasks(迁移到其他视觉任务)
  • 六、消融实验(用消融来建立直觉)
    • 6.1 相比SimCLR, BYOL对batch size的依赖更低
    • 6.2 数据增强
    • 6.3 Bootstrapping
  • 七、结论
  • 八、附录中图标的解释
  • 参考


自监督论文阅读系列:
【自监督论文阅读 1】SimCLR
【自监督论文阅读 2】MAE
【自监督论文阅读 3】DINOv1
【自监督论文阅读 4】BYOL


论文地址:https://arxiv.org/pdf/2006.07733.pdf
github代码地址:https://github.com/deepmind/deepmind-research/tree/master/byol
论文题目:Bootstrap Your Own Latent A New Approach to Self-Supervised Learning


一、摘要

介绍了一种新的自监督图像表示学习方法BYOL(Bootstrap Your Own Latent )。

  • BYOL依赖于两个神经网络,分别是在线网络和目标网络,它们相互作用并相互学习。
  • 从图像的增强视图出发,我们训练在线网络来预测同一图像在不同增强视图下的目标网络的表示。
  • 同时,使用在线网络的缓慢移动平均值来更新目标网络。

BYOL在没有负样本对的情况下达到了SOTA水平。在ImageNet数据集上,BYOL采用ResNet-50的Top-1线性分类精度为74.3%,采用更大的ResNet的精度可以达到79.6%。BYOL在迁移学习和半监督学习上的表现与当前的SOTA水平相当,甚至更好。
在这里插入图片描述

二、引言

学习良好的图像表示是计算机视觉的一个关键挑战,因为它允许对下游任务进行有效的训练。

已经提出了很多不同的训练方法来学习这种表示,这些方法通常依赖于视觉前置任务 pretext task。

  • 最先进的对比方法通过减小同一图像的不同增强视图的表示之间的距离(正样本对)和增加来自不同图像的增强视图的表示之间的距离(负样本对)来训练。

这些方法需要很仔细的方法来处理negative pair, 比如通过依赖大batchsize、记忆库、或定制挖掘策略来检索negative pair, 此外,它们的性能主要取决于图像增强的选择。

在这篇文章中,我们介绍了BYOL,一种新的自监督图像表示学习的方法。

  • 在不使用负样本对的情况下,BYOL获得了比最先进的对比方法更高的性能;
  • 它迭代引导网络的输出,以作为强大的表征目标;
  • 此外,与对比方法相比,BYOL对图像增强的选择更加鲁棒(本文猜测,不依赖负对是其鲁棒性提高的主要原因之一)
    -本文直接引导表征信息的输出( 之前基于引导的方法,用了伪标签、聚类索引、一些少量的标签等)
  • BYOL使用两个神经网络,称为在线和目标网络,相互作用和相互学习。

从图像的增强视图开始,BYOL训练在线网络来预测目标网络,即预测同一图像的另一个增强视图的表示,实验表明,并没有出现模型坍塌的情况。

  • 本文猜测,是因为在线网络添加了一个预测头和使用slow-moving average的方法讲online的参数更新到target网络中,鼓励了在线的prejection编码了更多的信息,从而避免模型坍塌。

这篇文章使用ResNet架构评估了BYOL在ImageNet和其他视觉基准上所学的表现。在ImageNet上的线性评估协议下,包括在冻结层来训练线性分类器,BYOL在标准ResNet-50上达到74.3%的top-1精度,在更大的ResNet上达到79.6%的top-1精度(图1)。在ImageNet上的半监督和 迁移学习中,也获得了与当前技术水平相当或更好的结果。

本文主要贡献如下:

  • 引入了BYOL, 一种新的自监督图像表示学习的方法。在不使用负样本对的情况下,BYOL获得了比最先进的对比方法更高的性能
  • 展示了,在弱监督和迁移学习的benchmarks, 我们学习的表征优于先进的方法;
  • 相比于对比学习,BYOL在batchsize和数据增强的选择上,更有弹性;
  • 在仅使用随机裁剪的数据增强时,BUOL性能下降明显比SimCLR低

三、相关工作

大多数无监督方法可以分成生成式和判别式。

  • 生成式:在数据和潜在编码上建立分布,并将学习到的编码用作图像表示。

大多数方法依靠图像自编码、对抗学习、联合建模数据和表征。生成式方法通常直接操作在像素空间,但计算量大,且图像生成所需要的高水平细节可能不是表示学习所必须的。

  • 判别式:比学习最近取得了最佳的性能。

对比学习通过将同一图像不同视角的表征拉近,不同图像的视图表征远离,来避免在像素空间中昂贵的生成步骤。

但是对比学习通常需要将每个样本与许多其他样本进行比较才能更好的工作,这就带来一个问题、使用负样本对是否是必要的。

  • DeepCluster:使用以前版本表征的引导来为下一个表征生成目标;

DeepCluster是一个繁琐的解决方案,崽使用先验表征对数据点进行聚类,并使用每个样本的聚类索引作为新表示的分类目标。这个避免使用了负样本对,但是需要昂贵的聚类阶段和特定的预防措施来避免崩溃。

  • 其他的自监督方法:没有采用对比的方式,而是依赖于使用辅助的人工设定预测任务来学习它们的表示。

比如相关patch预测、彩色灰度拓展图像、图像inpainting、图像拼接、图像超分辨率、集合变换, 这些已被证明是有用的。然而,即使有合适的构,这些方法也被对比方法所超越。

  • PBL,Predictions of Bootstrapped Latents:强化学习(reinforcement learning (RL))里的自监督表征学习技术,本文方法与PBL相似。

PBL共同训练代理的历史表征和未来观察的编码。观察编码作为目标训练代理表征;代理表征作为目标训练观察编码。与PBL不同,BYOL使用表征的slow-moving average来提供目标,且不需要第二个网络。

  • reinforcement learning (RL) 强化学习: 使用slow-moving average目标网络为在线网络产生稳定目标,到了深度RL(深度强化学习)的启发。

大多数RL的方法,使用固定的目标网络;而BYOL使用以前网络的加权平均移动,以便在目标表征中提供更平滑的变化

  • 半监督设置: 半监督设置中,无监督的损失和少量标签的分类损失相结合来进行训练。

这些方法中,***mean teacher (MT)***使用slow-moving average network,为一个被称之为学生的在线网络产生目标。
通常在分类损失中teacher和student的L2一致性,但是当移除分类损失时,类似的方法会出现模型坍塌。而BYOL在oneline上增加了一个额外的预测器来避免坍塌。

  • MoCo : 使用移动平均网络(动量编码器)来保持一致的表征(从记忆库中提取的负对)。

BYOL与MoCo不一样,BYOL直接使用移动平均网络来产生目标,作为稳定引导步骤的一种手段。这种纯粹稳定效应也可以改进现有的对比方法。

四、方法

先提了下研究动机:

  • 在保持高性能的同时,负样本对防止模型坍塌是否是不可或缺的

许多成功的自监督学习方法建立在交叉视图预测框架的基础上。通常,这些方法通过彼此预测同一图像的不同视图(例如,不同的随机裁剪)来学习表征。

许多这样的方法将预测问题直接投射到表示空间中,图像的增强视图的表示应该是同一图像的另一增强视图的表示的预测。

然而,直接在表示空间中进行预测会导致表征的坍塌: 例如,一个表示在视图之间是恒定的,它总是对自己有完全的预测。

对比方法通过将预测问题重新表述为一个辨别问题来回避这个问题:从一个增强视图的表示中,他们学会辨别同一图像的另一个增强视图的表征和不同图像的增强视图的表征。

在绝大多数情况下,这阻止了训练找到崩塌的表征。然而,这种辨别方法通常需要将增强视图的每个表示与许多负面示例进行比较,以找到足够接近的示例,从而使辨别任务具有挑战性。

  • 通过预测目标表征来训练一个新的,潜在的增强的在线表征

为了防止崩溃,一个简单的解决方案是使用一个固定的随机初始化的网络来产生我们预测的目标。虽然避免了崩溃,但从经验上看,它不会产生很好的表现。

尽管如此,有趣的是,使用该过程获得的表示已经比初始固定表示好得多。

4.1 BYOL的描述

BYOL的目的是学习一个可以被用到下游任务的表征 y θ y_θ yθ,描述如下:

  • BYOL由两个网络组成: o n l i n e online online t a r g e t target target 网络.
  • o n l i n e online online网络 :有三个阶段,编码器 f θ f_θ fθ、投影头 g θ g_θ gθ 和预测头 q θ q_θ qθ, 其中 θ θ θ o n l i n e online online网络的权重;
  • t a r g e t target target网络:与 o n l i n e online online网络有着相似的结构,但使用不同的权重 ξ ξ ξ
  • 训练方式: t a r g e t target target 网络提供回归目标给 o n l i n e online online网络进行训练, t a r g e t target target 的参数 ξ ξ ξ 是通过指数移动平均(EMA, exponential moving average)从 o n l i n e online online网络的权重 θ θ θ获取,公式如下:
    ξ ← τ ξ + ( 1 − τ ) θ , τ ∈ [ 0 , 1 ] , ξ ← τ ξ + (1 − τ )θ, τ ∈ [0, 1], ξτξ+(1τ)θ,τ[0,1], , τ τ τ 为target的衰减比例
  • 给定一个图像集合 D D D, 从 D D D中均匀采样图片 x , x ∼ D x, x ∼ D x,xD, 两种数据增强的分布 T 和 T ′ T 和T' TT
  • 图像 x x x 经过两种数据增强后,分别得到同一个图的两个视角 v v v v ′ v' v
  • 第一个视角 v v v 经过在线网络输出表征信息 y θ = f θ ( v ) y_θ =f_θ(v) yθ=fθ(v) ,在经过投影头 z θ = g θ ( y ) z_θ =g_θ(y) zθ=gθ(y)
  • 第二个视角 v ′ v' v 输入目标网络中,得到 y ξ ′ = f ξ ( v ′ ) y'_ξ =f_ξ(v') yξ=fξ(v) 和目标投影头 z ξ ′ = g ξ ( y ′ ) z'_ξ =g_ξ(y') zξ=gξ(y)
  • 整个架构最终输出预测头 q θ ( z θ ) q_θ(z_θ) qθ(zθ) z ξ ′ z'_ξ zξ
  • 最后对两个输入进行l2归一化。
    在这里插入图片描述
  • 注意,预测头仅用在online的分支上,online 和 target在结构上是不对称的
  • 最后,损失函数为 均方误差(MSE)
    在这里插入图片描述
    为了对称 L θ , ξ L_{θ,ξ} Lθ,ξ, 又将 v v v v ′ v' v 再分别送入到 target 和online中,得到 L ~ θ , ξ \widetilde{L}_{θ,ξ} L θ,ξ

使用随机梯度下降法最小化最终的损失

在这里插入图片描述

  • 更新参数的时候,仅更新在线网络中的参数 θ θ θ, target网络中的 参数 ξ ξ ξ则停止更新,如下公式, η η η指学习率。
    在这里插入图片描述
    BYOL的结构如下:

在这里插入图片描述
以神经网络为架构的草图如下:
在这里插入图片描述
算法伪代码如下:
在这里插入图片描述

4.2 Intuitions on BYOL’s behavior(BYOL行为的直觉)

BYOL没有使用显示的对策来防止模型坍塌,仅通过最小化损失来更新参数(没有使用负样本,也没有对比损失)
总结两点如下:

  • 目标网络的参数不是直接通过损失函数来更新的,在训练中只训练online network,target network实际上是一种过去的online network。这也就导致了无论怎么训练这个模型都不能使loss达到最小值。有些类似于GAN,有两个network进行对抗,始终无法将loss降下来。

  • BYOL增加了一个预测头,BYOL在online network后又增加了几层神经网络将online network中的projection预测到target network的latent space中, 为了能够完美的达成以上目标,整体的网络结构必须能够很好的克服图像增强对图像的影响,能够准确的将增广后的图像聚集(靠拢)在一起。这样实际上强迫了encoder学习出一个好的、更高级语义的表达。

4.3 实验细节

  • 数据增强: BYOL使用与SimCLR中相同的图像增强集。

首先,通过随机水平翻转选择图像的随机块并将其大小调整到224 × 224,随后是颜色失真,由亮度、对比度、饱和度、色调调整和可选灰度转换的随机序列组成。最后,高斯模糊和solarization被用于随机块。

  • 架构: 具有50层和后激活(ResNet-50(1×) v1)的卷积残差网络作为我们的基本参数编码器。我们还使用更深(50、101、152和200层)和更宽(从1倍到4倍)的ResNets。

表征 y y y对应着最后一层平均池化层的输出,维度为2014。和SimSLR一样,表征 y y y被多层感知器(MLP) g θ g_θ gθ投影到更小的空间,并且对于目标投影 g ξ g_ξ gξ也是相同。该MLP包括输出尺寸为4096的线性层,随后是批量归一化]、校正线性单元(ReLU) ,以及输出尺寸为256的最终线性层。与SimCLR相反,这个MLP的输出不是批量标准化的。预测器 q θ qθ 采用与 g θ gθ gθ相同的架构。

  • 优化器:使用LARS优化器 和余弦衰减学习速率表 ,没有重新启动,超过1000个epoch,预热周期为10个epoch。

基本学习率设置为0.2,随批次大小线性缩放(学习率= 0.2 ×批次大小/256)。此外,我们使用 1.5 ⋅ 1 0 − 6 1.5 · 10^{−6} 1.5106的全局权重衰减参数,同时从LARS自适应和权重衰减中排除偏差和批次标准化参数。对于目标网络,指数移动平均参数 τ τ τ τ b a s e = 0.996 τ_{base}= 0.996 τbase=0.996开始,在训练期间增加到1。具体来说,我们设置 τ = 1 − ( 1 − τ b a s e ) ⋅ ( c o s ( π k / K ) + 1 ) / 2 τ =1 − (1 − τ_{base}) · (cos(πk/K) + 1)/2 τ=1(1τbase)(cos(πk/K)+1)/2,k为当前训练步骤,K为最大训练步骤数。我们使用的批量大小为4096,分布在512个云TPU v3内核上。使用这种设置,ResNet-50(×1)的训练大约需要8个小时。

五、实验评估

用ImageNet的数据进行自监督预训练,然后在各种下游任务中进行评估。

  • 首先在 ImageNet (IN)上使用线性评估和半监督设置中对其进行评估。
  • 在其他数据集和任务上测量其迁移学习 能力,包括分类、分割、对象检测和深度估计。
  • 为了进行比较,还报告了使用来自训练 ImageNet子集 (称为监督输入)的标签训练的表示的效果。
  • 为了评估BYOL的通用性,在复制该评估协议前,还在Place-365标准数据集上进行预训练特征。

5.1 Linear evaluation on ImageNet(ImageNet上的线性评估)

冻结表征层,然后训练一个线性分类器
在这里插入图片描述

5.2 Semi-supervised training on ImageNet(ImageNet上的半监督训练)

在ImageNet的一个小子集分类任务上,微调震哥哥网络。这里没有冻结表征层
在这里插入图片描述
下图展示了不同训练数据比例的性能,可以看到,有监督在训练数据很少的情况下,性能是非常差的。
在这里插入图片描述
下图是在多个Resnet上,不同比例的数据Fintuning的结果在这里插入图片描述

5.3 Transfer to other classification tasks(迁移到其他分类任务)

评估在ImageNet上学到的表征是否通用,因此在其他分类数据集上进行了评估。同样两种实验,冻结表征层和全部层进行微调。
在这里插入图片描述

5.4 Transfer to other vision tasks(迁移到其他视觉任务)

在语义分割、目标检测、深度估计都评估了BYOL学习到的表征能否推广到分类任务之外
在这里插入图片描述

六、消融实验(用消融来建立直觉)

6.1 相比SimCLR, BYOL对batch size的依赖更低

猜测SimCLR batchsize小时,负样本对就比较少,所以对batchsize很敏感。
BYOL在batch从256-4096时,相对比较稳定。此外还提到,由于编码器中的批归一化层,只有在较小的值上下降
在这里插入图片描述

6.2 数据增强

也依赖数据增强,但相比SimCLR, 对数据增强没那么敏感。
在这里插入图片描述
在这里插入图片描述

6.3 Bootstrapping

评估了动量更新的参数、网络结构等

  • 预测头结合目标网络效果最好
  • EMA参数更新效果最好,衰减指数为0.99效果最好
  • 随机常量固定目标网络,还达到18.8的精度,和online一起更新只有0.3的精度。

在这里插入图片描述

七、结论

  • 介绍了BYOL,一种新的自监督表征学习方法
  • 通过预测以前版本的数据来学习标准,可以不使用负样本对
  • 在带有ResNet-50 (1×)的ImageNet上的线性评估协议下,BYOL实现了新的技术水平,并弥合了自我监督方法和监督学习baseline之间的大部分剩余差距, 使用ResNet-200上,精度达到79.6%的top-1精度,同时参数减少了30%
  • BYOL仍然依赖于特定视觉任务的数据增强,为了将BYOL推广到其他模态(例如,音频、视频、文本、.。。)有必要为它们中的每一个获得类似的合适的增强。设计这样的增强可能需要大量的努力和专业知识。
  • 因此,自动搜索这些增强将是将BYOL推广到其他模式的重要的下一步。

八、附录中图标的解释

本文的实验数据非常详细,有着很重要参考价值,并且都记录在附录中。

详细见这篇博客:

BYOL:一种新的自监督学习方法

参考

BYOL论文简析——笔记

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

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

相关文章

宝塔面板 - 如何通过宝塔面板设置服务器禁止 Ping?

问题描述 在介绍如何通过宝塔面板设置服务器禁止ping之前,我们先来简单了解一下什么是ping。 Ping 可用于测试网络上IP系统的可用性,也可用于通过监控往返时间和数据包丢失,来测试网络连接的质量。ping 也可以用于识别网络子网,…

数字孪生和GIS结合将为智慧园区带来什么样的改变?

数字孪生和地理信息系统(GIS)是当今智慧园区发展中的两个重要技术,它们的结合将为智慧园区带来根本性的改变和巨大的发展机遇。这种结合将深刻影响园区的规划、建设、运营和管理,为人们创造更智能、高效、可持续的生活环境。 首先…

真的不想知道文字转语音真人发声免费有哪些软件吗

曾经有一个盲人作家,他热爱写作却无法看到自己的文字成品。直到有一天,他听说了一款文字转语音的软件,可以将他的文字转化为声音,让他能够听到自己的作品。这则故事令我们体会到文字转语音这项技术的重要性。那么,你知…

【⑤MySQL函数】:让你的数据库操作更高效(二)

前言 ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL日期时间、条件判断、系统信息、加密、进制转换和IP地址转换函数的讲解✨ 目录 前言一、日期和时间函数二、条件判断函数三、系统信息函数四、加密函数五、进制转换函数六、IP地址转换函数七、总结 一、日期和时…

韦纳VeighNa(VNPY)新手入门到写策略

韦纳VeighNa(VNPY)新手入门到写策略 1.VeighNa终端如何登录交易?勾选好相应接口和功能启动后在哪输入账号?2.在哪开发策略?策略文件夹在哪?3.如何写策略?如何开发策略?4.有策略模板吗…

离线语音识别芯片IC方案,打造智能眼部按摩仪WTK6900H-C-24SS

随着科技的不断进步,智能化产品已经成为人们日常生活中的一部分。眼部按摩仪作为舒缓眼部疲劳的利器,如今更是加入了离线语音识别芯片IC方案,让使用体验更加智能化、便捷化,WTK6900H-C-24SS离线语音识别芯片IC方案,将为…

Tomcat 8.5 环境搭建指南

文章目录 导言环境搭建总结 导言 欢迎阅读本篇博客,本文将为您提供关于如何搭建Tomcat 8.5环境的详细指南。Tomcat是一个流行的开源Java Servlet容器,它提供了一个运行Java Web应用程序的平台。无论您是新手还是有经验的开发人员,本文都将帮…

Selenium教程__使用switch_to.alert处理弹窗(14)

与switch_to.window 和 switch_to.frame 相比,switch_to.alert的alert方法使用了property 装饰器,所以在使用时alert被当成属性调用。 演示如下 from selenium import webdriverdriver webdriver.Chrome() driver.maximize_window() driver.get("…

推荐一个好用的Python词云展示库-wordcloud

目录标题 前言1.介绍2.使用说明尾语 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 1.介绍 wordcloud是优秀的词云展示第三方库,wordcloud能够将一段文本变成一个词云。 词云就是将词语通过图形可视化的方式,直观和艺术的展示出来。词云在我们的…

Word模板替换,并转PDF格式输出

Poi-tl参考文档地址&#xff1a;http://deepoove.com/poi-tl/1.8.x/#hack-loop-table word模板替换&#xff0c;转pdf 1. 依赖引入&#xff1a;2. word模板配置&#xff1a;3. 示例demo:4 . 效果图 1. 依赖引入&#xff1a; <dependency><groupId>org.apache.poi&…

Unity3D:在 Inspector 中操作

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 在 Inspector 中操作 本页面描述了一些用于控制 Inspector 窗口本身的选项。有关设置游戏对象、脚本和资源的属性的信息&#xff0c;请参阅编辑属性。 Lock the Inspector 通常&…

网络安全零基础学习路线

一&#xff0c;怎么入门&#xff1f; 1、Web 安全相关概念&#xff08;2 周&#xff09; 了解网络安全相关法律法规 熟悉基本概念&#xff08;SQL 注入、上传、XSS、CSRF、一句话木马等&#xff09;。 通过关键字&#xff08;SQL 注入、上传、XSS、CSRF、一句话木马等&#…

C. Robot Collisions(暑期集训)

原题链接 题意&#xff1a; 有n个机器人在OX轴上运动&#xff0c;运动范围为[0,m]。 第i个机器人开始位于xi的位置&#xff0c;然后以1单位距离每秒的速度向左或向右运动&#xff0c;当其运动到0点或m点时会调转方向。 如果任意时刻多于一个机器人在同一整数位置&#xff0c;…

【硬件自动化测试--测试软件的设计及实现】测试框架设计及实现!

如何设计并实现自动化框架? 首先,需要了解我们的产品,需要做哪些测试,如有很多硬件产品的测试中,需要用到示波器、频谱仪、信号源等等一系列的仪器,仪器的型号也各有不同,所以在设计框架之前,一定得了解我们的产品。 那么,就以一台服务器为例子,基带部分的测试,包括…

酷开系统 |酷开科技持续创造大屏生命力

在这个信息爆炸的时代&#xff0c;人们对于互联网和智能生活的需求&#xff0c;不再局限于碎片化或工作场景&#xff0c;更多的是延伸至连续化的家庭化使用环境。而智能大屏作为互联网时代下的产物&#xff0c;融合了互联网流媒体的数据处理方式&#xff0c;深受年轻人的青睐&a…

牛客·矩阵取数游戏

矩阵取数游戏 这里我们推一下这个题的精髓&#xff1a; dp[i][j]max(int(b[c][i])dp[i1][j],dp[i][j-1]int(b[c][j])) dp[i][j]2*dp[i][j]假定某一行有两个数x,y; 那么我们有两种选择&#xff1a; 先拿x&#xff0c;再拿y&#xff1a;x*2y*4&#xff1b; 先拿y&#xff0c;再…

Rust in Action笔记 第八章 网络

P253的图展示了网络各层用到的协议Box<dyn std::error::Error>表示一个指针指向的实现了标准错误库的类型&#xff0c;dyn表明这是一个特征对象&#xff08;trait object&#xff09;&#xff0c;是rust里多态的一种实现方式&#xff1b;特征对象和模板对象&#xff08;g…

短视频------Adobe Photoshop 笔记总结

一、Adobe Photoshop 使用方式方法 ctrlc/v 复制 粘贴 ctrlx 剪切 ctrla 全选 ctrlz撤销 ctrls保存 ENTER 回车 换行 CTRL 调取定界框 CAPSLOCK 大写锁定 Esc 退出 Delete 删除 Backspace 退格 Ctrl shi alt 三个控制键 Shi 连选 ctrl 加选/减选 锁屏 WinL 打开运行命令窗口 …

vue实现输入网址生成二维码、解码、下载、更改功能

功能&#xff1a; 1.输入网址生成二维码 2.二维码可以下载 3.可以更改二维码中心的图片 4.可以通过本地相册的二维码进行解码 1.下载三个插件 下载vue-qr&#xff0c;用于生成二维码 npm install vue-qr 下载vue-jimp并指定版本号&#xff0c;最新版不行&#xff0c;实…

Linux中yum、dnf、rpm

yum 1、看是否安装了某些东西 yum list all | grep php