温馨提示:
本篇文章已同步至"AI专题精讲" ViLT: 无卷积或区域监督的视觉-语言Transformer

摘要

视觉与语言预训练(Vision-and-Language Pre-training, VLP)在多种联合视觉与语言的下游任务中显著提升了性能。目前的 VLP 方法在很大程度上依赖图像特征提取过程,其中大多数涉及区域监督(例如,目标检测)以及卷积结构(例如 ResNet)。尽管这一点在文献中常被忽视,我们发现这在以下两个方面存在问题:(1)效率/速度:仅提取输入特征的计算开销远大于多模态交互步骤;(2)表达能力:受限于视觉嵌入器及其预定义视觉词汇的表达上限。

本文提出了一种极简的 VLP 模型——ViLT(Vision-and-Language Transformer),其特点是处理视觉输入的方式被极大简化,与处理文本输入相同,完全不依赖卷积结构。我们展示了 ViLT 相比以往 VLP 模型的速度提升高达数十倍,同时在下游任务上仍保持竞争力甚至更优的性能。

我们的代码与预训练模型已开放获取:https://github.com/dandelin/vilt

1. 引言

预训练-微调(pre-train-and-fine-tune)方案已经扩展到了视觉与语言的联合领域,从而催生了视觉与语言预训练(VLP)模型(Lu et al., 2019; Chen et al., 2019; Su et al., 2019; Li et al., 2019; Tan & Bansal, 2019; Li et al., 2020a; Lu et al., 2020; Cho et al., 2020; Qi et al., 2020; Zhou et al., 2020; Huang et al., 2020; Li et al., 2020b; Gan et al., 2020; Yu et al., 2020; Zhang et al., 2021)。这些模型通常使用图文匹配(Image-Text Matching)和掩码语言建模(Masked Language Modeling)作为预训练目标,在图像及其对齐的描述上进行训练,并在输入包含两种模态的下游视觉-语言任务上进行微调。
在这里插入图片描述

为了输入到 VLP 模型,图像像素需要与语言标记一起以密集形式进行嵌入。自从 Krizhevsky 等人(2012)的开创性工作以来,深度卷积网络一直被视为该视觉嵌入步骤的核心。大多数 VLP 模型使用在 Visual Genome 数据集(Krizna et al., 2017)上预训练的目标检测器,后者标注了 1,600 个物体类别和 400 个属性类别,如 Anderson 等人(2018)所示。PixelBERT(Huang 等人,2020)是这一趋势的一个例外,它使用在 ImageNet 分类任务(Russakovsky 等人,2015)上预训练的 ResNet 变种(He 等人,2016;Xie 等人,2017),将像素直接嵌入,而不是采用目标检测模块。
在这里插入图片描述

迄今为止,大多数 VLP 研究集中在通过增强视觉嵌入器的能力来提高性能。由于区域特征通常在训练时提前缓存,以减轻特征提取的负担,因此学术实验中往往忽视了使用重型视觉嵌入器的缺点。然而,这些限制在实际应用中仍然显而易见,因为现实中的查询必须经过一个缓慢的提取过程。

为此,我们将注意力转向轻量级且快速的视觉输入嵌入。最近的研究(Dosovitskiy 等人,2020;Touvron 等人,2020)表明,使用简单的线性投影来处理图像块足以在将其输入到变换器之前进行像素嵌入。尽管变换器(Vaswani 等人,2017)已经成为文本处理的主流(Devlin 等人,2019),但直到最近,变换器才开始应用于图像。我们假设,变换器模块——在 VLP 模型中用于模态交互——也能够代替卷积视觉嵌入器处理视觉特征,就像它处理文本特征一样。

本文提出了视觉与语言变换器(ViLT),它以统一的方式处理两种模态。与之前的 VLP 模型不同,它通过浅层、无卷积的方式来嵌入像素级输入。去除专门处理视觉输入的深层嵌入器,显著减少了模型的规模和运行时间。图 1 显示,我们的参数高效模型比使用区域特征的 VLP 模型快数十倍,且至少比使用网格特征的模型快四倍,同时在视觉与语言下游任务中展现出相似甚至更好的性能。

我们的关键贡献总结如下:

  • ViLT 是迄今为止最简洁的视觉与语言模型架构,它通过委托变换器模块来提取和处理视觉特征,而不是使用单独的深层视觉嵌入器。这一设计天然地带来了显著的运行时和参数效率。
  • 首次,我们在没有使用区域特征或深度卷积视觉嵌入器的情况下,成功地在视觉与语言任务上取得了竞争力的性能。
  • 首次,我们通过实验证明,VLP 训练方案中前所未有的整体词掩码和图像增强方法,进一步推动了下游任务的性能提升。

2. 背景

2.1 视觉与语言模型的分类

我们提出了一种基于以下两个方面的视觉与语言模型分类法:
(1) 两种模态是否在专门的参数和/或计算方面具有相等的表达能力;
(2) 两种模态是否在深度网络中进行交互。
这两点的组合导致了图 2 中的四种原型。

视觉语义嵌入(VSE)模型,如 VSE++(Faghri 等人,2017)和 SCAN(Lee 等人,2018),属于图 2a 类别。它们使用分别的图像和文本嵌入器,其中图像嵌入器通常更重。然后,它们通过简单的点积或浅层注意力层来表示两种模态的嵌入特征之间的相似性。

CLIP(Radford 等人,2021)属于图 2b 类别,因为它为每种模态使用了分别但同样昂贵的变换器嵌入器。尽管图像和文本向量的交互仍然较为浅显(通过点积),CLIP 在图像到文本检索的零样本性能上取得了显著成绩,但我们在其他视觉与语言下游任务上未能观察到相同的性能水平。例如,使用 CLIP 从图像和文本中提取的点积融合向量作为多模态表示,再对 NLVR2(Suhr 等人,2018)进行微调,得到了低开发集准确率 50.99 ± 0.38(使用了三种不同的随机种子);由于机会水平的准确率为 0.5,我们得出结论认为这些表示无法学习这个任务。这与 Suhr 等人(2018)的发现一致,即所有仅通过简单融合多模态表示的模型都未能学习 NLVR2。

这一结果支持了我们的推测,即即使是来自高性能单模态嵌入器的简单融合输出也可能不足以学习复杂的视觉与语言任务,进一步强调了需要一种更严格的模态交互方案。

与浅层交互模型不同,最近的 VLP 模型(图 2c 类别)使用深度变换器来建模图像和文本特征的交互。然而,除了交互模块外,这些模型仍然需要卷积网络来提取和嵌入图像特征,这占用了大部分计算量,如图 1 所示。基于调制的视觉与语言模型(Perez 等人,2018;Nguyen 等人,2020)也属于图 2c 类别,它们的视觉 CNN 核心对应视觉嵌入器,RNN 生成用于文本嵌入器的调制参数,调制后的 CNN 用于模态交互。

我们提出的 ViLT 是图 2d 类别中的第一个模型,它的原始像素嵌入层与文本标记一样浅且计算轻量。这种架构将大部分计算集中在建模模态交互上。

2.2 模态交互方案

当代 VLP 模型的核心是变换器。它们将视觉和文本嵌入序列作为输入,在各层中建模模态间和可选的模态内交互,然后输出上下文化的特征序列。

Bugliarello 等人(2020)将交互方案分为两类:
(1) 单流方法(例如,VisualBERT(Li 等人,2019)、UNITER(Chen 等人,2019)),在这些方法中,各层共同作用于图像和文本输入的连接;
(2) 双流方法(例如,ViLBERT(Lu 等人,2019)、LXMERT(Tan & Bansal,2019)),在这些方法中,两种模态在输入层级上并不连接。我们为我们的交互变换器模块选择了单流方法,因为双流方法会引入额外的参数。

2.3 视觉嵌入方案

尽管所有高性能的 VLP 模型都共享来自预训练 BERT 的相同文本嵌入器——包括词汇和位置嵌入,这些嵌入与 BERT 类似——但它们在视觉嵌入器上有所不同。然而,在大多数(如果不是所有)情况下,视觉嵌入是现有 VLP 模型的瓶颈。我们通过引入补丁投影来简化这一过程,而不是使用需要重型提取模块的区域或网格特征。

区域特征
VLP 模型主要使用区域特征,也称为自下而上的特征(Anderson 等人,2018)。这些特征是通过现成的物体检测器(如 Faster R-CNN(Ren 等人,2016))获得的。

生成区域特征的一般流程如下。首先,区域提议网络(RPN)基于从 CNN 主干池化得到的网格特征提出兴趣区域(RoI)。然后,非最大抑制(NMS)减少 RoI 的数量,最终只有几千个。经过如 RoI Align(He 等人,2017)等操作池化后,RoI 通过 RoI 头并变为区域特征。NMS 再次应用于每个类别,最终将特征数减少到一百个以内。

上述过程涉及几个影响性能和运行时间的因素:主干网络、NMS 风格、RoI 头。先前的研究在控制这些因素时较为宽松,各自的选择存在差异,如表 7.2 所示:

  • 主干网络:ResNet-101(Lu 等人,2019;Tan & Bansal,2019;Su 等人,2019)和 ResNext-152(Li 等人,2019;2020a;Zhang 等人,2021)是两种常用的主干网络。
  • NMS:NMS 通常是按类别进行的。对每个类别应用 NMS 会在类别数量较多时成为主要的运行时瓶颈,例如在 VG 数据集中有 1.6K 类(Jiang 等人,2020)。最近引入了类别无关 NMS 来解决这一问题(Zhang 等人,2021)。
  • RoI 头:最初使用的是 C4 头(Anderson 等人,2018),后来引入了 FPN-MLP 头(Jiang 等人,2018)。由于头部操作针对每个 RoI,因此它们会对运行时带来较大的负担。

然而,尽管物体检测器比较轻量,但它们的速度不太可能超过主干网络或单层卷积。冻结视觉主干并提前缓存区域特征仅在训练时有帮助,而在推理时并无用处,此外,这可能会限制性能。
在这里插入图片描述

网格特征
除了检测头外,卷积神经网络(如 ResNets)的输出特征网格也可以作为视觉特征,用于视觉与语言预训练。直接使用网格特征最早由 VQA 特定的模型提出(Jiang 等人,2020;Nguyen 等人,2020),主要目的是避免使用非常缓慢的区域选择操作。

X-LXMERT(Cho 等人,2020)通过将区域提议固定为网格,而不是来自区域提议网络的区域,再次审视了网格特征。然而,它们的特征缓存排除了对主干的进一步调整。

Pixel-BERT 是唯一一种将 VG 预训练的物体检测器替换为基于 ImageNet 分类预训练的 ResNet 变体主干的 VLP 模型。与基于区域特征的 VLP 模型中冻结的检测器不同,Pixel-BERT 的主干在视觉与语言预训练期间会进行调整。尽管 Pixel-BERT 使用 ResNet-50 的下游性能低于基于区域特征的 VLP 模型,但在使用更重的 ResNeXt-152 时,其性能与其他竞争模型相当。

然而,我们认为网格特征并不是首选,因为深度 CNN 仍然较为昂贵,它们占用了大量计算资源,如图 1 所示。

补丁投影
为了最小化开销,我们采用了最简单的视觉嵌入方案:对图像补丁进行线性投影。补丁投影嵌入由 ViT(Dosovitskiy 等人,2020)为图像分类任务引入。补丁投影将视觉嵌入步骤极大简化,达到了与文本嵌入相同的简单投影(查找)操作级别。我们使用的 32 × 32 补丁投影仅需 2.4M 参数。这与复杂的 ResNe(X)t 主干和检测组件相比有很大差异。其运行时间也可以忽略不计,如图 1 所示。我们将在第 4.6 节进行详细的运行时分析。

3. 视觉与语言变换器

3.1. 模型概述

ViLT 作为一个 VLP 模型,具有简洁的架构,采用最小化的视觉嵌入管道,并遵循单流架构。我们与文献中的做法有所不同,选择将交互变换器的权重从预训练的 ViT 初始化,而非 BERT。这种初始化方式利用了交互层处理视觉特征的能力,同时避免了使用单独的深度视觉嵌入器。
tˉ=[tclass;t1T;⋯;tLT]+Tpos(1)\bar { t } = [ t _ { \mathrm { c l a s s } } ; t _ { 1 } T ; \cdots ; t _ { L } T ] + T ^ { \mathrm { p o s } }\quad(1) tˉ=[tclass;t1T;;tLT]+Tpos(1)
vˉ=[vclass;v1V;⋯;vNV]+Vpos(2)\bar { v } = [ v _ { \mathrm { c l a s s } } ; v _ { 1 } V ; \cdots ; v _ { N } V ] + V ^ { \mathrm { p o s } }\quad(2) vˉ=[vclass;v1V;;vNV]+Vpos(2)
z0=[tˉ+ttype;vˉ+vtype](3)z ^ { 0 } = [ \bar { t } + t ^ { \mathrm { { t y p e } } } ; \bar { v } + v ^ { \mathrm { { t y p e } } } ]\quad(3) z0=[tˉ+ttype;vˉ+vtype](3)
z^d=MSA(LN(zd−1))+zd−1,d=1…D(4)\hat { z } ^ { d } = \mathbf { M } \mathbf { S } \mathbf { A } ( \mathbf { L } \mathbf { N } ( z ^ { d - 1 } ) ) + z ^ { d - 1 } , \qquad d = 1 \ldots D\quad(4) z^d=MSA(LN(zd1))+zd1,d=1D(4)
zd=MLP(LN(z^d))+z^d,d=1⋅⋅⋅D(5)z ^ { d } = \mathrm { M L P } ( \mathrm { L N } ( \hat { z } ^ { d } ) ) + \hat { z } ^ { d } , \qquad \qquad d = 1 \cdot \cdot \cdot D\quad(5) zd=MLP(LN(z^d))+z^d,d=1D(5)

p=tanh⁡(z0DWpool)(6)p = \operatorname { t a n h } ( z _ { 0 } ^ { D } W _ { \mathrm { p o o l } } )\quad(6) p=tanh(z0DWpool)(6)

ViT 由堆叠的块组成,每个块包含一个多头自注意力(MSA)层和一个 MLP 层。ViT 和 BERT 唯一的区别在于层归一化(LN)的位置:在 BERT 中,LN 位于 MSA 和 MLP 之后(“post-norm”);而在 ViT 中,LN 位于 MSA 和 MLP 之前(“pre-norm”)。输入文本 t∈RL×∣V∣t \in \mathbb{R}^{L \times |V|}tRL×V 通过词嵌入矩阵 T∈R∣V∣×HT \in \mathbb{R}^{|V| \times H}TRV×H 和位置嵌入矩阵 Tpos∈R(L+1)×HT_{pos} \in \mathbb{R}^{(L+1) \times H}TposR(L+1)×H 被嵌入为 tˉ∈RL×H\bar{t} \in \mathbb{R}^{L \times H}tˉRL×H

输入图像 I∈RC×H×WI \in \mathbb{R}^{C \times H \times W}IRC×H×W 被切割成图像块并展平为 v∈RN×(P2⋅C)v \in \mathbb{R}^{N \times (P^2 \cdot C)}vRN×(P2C),其中 (P,P)(P, P)(P,P) 是图像块的分辨率,N=HWP2N = \frac{HW}{P^2}N=P2HW。然后通过线性投影 V∈R(P2⋅C)×HV \in \mathbb{R}^{(P^2 \cdot C) \times H}VR(P2C)×H 和位置嵌入 Vpos∈R(N+1)×HV_{pos} \in \mathbb{R}^{(N+1) \times H}VposR(N+1)×Hvvv 被嵌入为 vˉ∈RN×H\bar{v} \in \mathbb{R}^{N \times H}vˉRN×H

文本和图像的嵌入通过各自的模态类型嵌入向量 ttype,vtype∈RHt_{type}, v_{type} \in \mathbb{R}^Httype,vtypeRH 相加,然后合并为一个序列 z0z_0z0。这个上下文化的向量 zzz 通过 D 层变换器迭代更新,直到最终的上下文化序列 zDz^DzDppp 是整个多模态输入的池化表示,通过对序列 zDz^DzD 的第一个索引应用线性投影 Wpool∈RH×HW_{pool} \in \mathbb{R}^{H \times H}WpoolRH×H 和双曲正切激活函数得到。

在所有实验中,我们使用在 ImageNet 上预训练的 ViT-B/32 权重,因此称之为 ViLT-B/32。隐藏层大小 HHH 为 768,层深度 DDD 为 12,图像块大小 PPP 为 32,MLP 大小为 3,072,注意力头的数量为 12。

3.2. 预训练目标

我们使用两种常见的目标来训练 ViLT:图像-文本匹配(ITM)和掩蔽语言建模(MLM)。

图像-文本匹配 (ITM)

我们以 0.5 的概率随机将对齐的图像替换为不同的图像。一个线性层 ITM 头将池化后的输出特征 pp 投影到二分类的 logits 上,然后我们计算负对数似然损失作为 ITM 损失。

此外,受到 Chen 等人(2019)中词区域对齐目标的启发,我们设计了词图像块对齐(WPA),计算两个子集 zDz_DzD 的对齐分数:zD∣tz ^ { D } | _ { t }zDt(文本子集)和 zD∣vz ^ { D } | _ { v }zDv(视觉子集),使用不精确近点方法(IPOT)进行最优传输(Xie 等,2020)。我们根据 Chen 等人(2019)设置了 IPOT 的超参数(β=0.5,N=50β=0.5,N = 50β=0.5N=50),并将近似 Wasserstein 距离乘以 0.1 加到 ITM 损失中。

温馨提示:
阅读全文请访问"AI深语解构" ViLT: 无卷积或区域监督的视觉-语言Transformer

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

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

相关文章

初识决策树-理论部分

决策树 前言 参考了大佬的博客:博客地址 适合分析离散数据,若是连续数据需要转换成离散数据再做分析(比如图中的年龄) 结构 决策树由节点和有向边组成;节点可分为内部节点和叶节点 内部节点:特征叶节点:类别有向边:特征的取值范围 在用决…

opencv--day02--图像颜色处理及图像仿射变换

文章目录前言一、 图像颜色处理1. 颜色加法1.1 OpenCV加法1.2 numpy加法1.3 颜色加权加法2.颜色空间2.1 RGB颜色空间2.2 HSV颜色空间3. 颜色转换3.1 读取的图片同时转换3.2 对已有图片转换4. 图像灰度化4.1 灰度图概念4.2 最大值灰度化4.3 平均值灰度化4.4 加权均值灰度化5. 图…

第一层nginx访问url如何透传到第二层nginx

要让第一层Nginx将客户端请求的URL完整透传到第二层Nginx,关键在于正确配置proxy_pass指令及路径拼接规则。以下是具体配置方法和注意事项: 核心配置原则 proxy_pass指令末尾是否添加/会直接影响URL的透传方式: 不带/:会将locatio…

【2025最新毕业设计】外卖点餐小程序(外卖点餐管理系统)

外卖点餐小程序的设计与实现技术大纲(Vue.js Element UI)需求分析与功能设计用户需求调研:分析目标用户群体的核心需求(如快速点餐、支付便捷、订单跟踪等)核心功能模块划分:用户端(登录/注册、…

两台电脑连接交换机,使用其中一台电脑的网络上网(NAT转发)

场景 windows 电脑和 linux电脑连在同一台交换机上,linux电脑有通过无线网络。要实现Windows电脑通过交换机共享Linux电脑的无线网络上网,需将Linux设为网关并进行网络共享,步骤如下: 一、Linux电脑设置(网关配置&…

OpenCV Mat UMat GpuMat Matx HostMem InputArray等设计哲学

一、概览: GpuMat对应于cuda;HostMem 可以看作是一种特殊的Mat,其存储对应cuda在主机分配的锁页内存,可以不经显示download upload自动转变成GpuMat(但是和GpuMat并无继承关系);UMat对应于openc…

ATR2652SGNSS全频段低噪声放大器

ATR2652S是一款具有高增益、低噪声系数的低噪声放大器芯片。支持GNSS全频段信号,同时GNSS 的两个频段可以应用于GNSS双频导航接收机中。 采用先进的 SiGe 工艺设计和制作,工艺稳定,低噪声放大器在 GNSS 整个频段内可以获得非常好的射频性能&a…

大数据中心——解读60页IDC云数据中心机房运维服务解决方案【附全文阅读】

该方案主要面向云数据中心运营管理者、IT 运维人员、企业决策者等,旨在解决云资源和业务网络管理难题,提升 IT 资源掌控能力。方案核心是 EVM VirtualViz 仿真可视化系统,它整合多源数据,提供 3D 仿真展示,实现数据中心…

环境变量-进程概念(7)

文章目录Linux 真实调度算法1. queue[140]2. bitmap[5] 位图3. nr_active4. 活跃进程与过期进程环境变量1. 基本概念2. 命令行参数3. PATH 环境变量4. 环境变量具体操作Linux 真实调度算法 下图是Linux2.6内核中进程队列的数据结构,也有Linux2.6内核进程O(1)调度算…

为什么数组可以做到时间复杂度为O(1)的随机访问

这个问题涉及数组底层结构与内存寻址机制 一、数组元素在内存中连续存储 数组在内存中会开辟一块连续地址空间。假设数组A为int类型,共有n个元素,每个元素大小为4字节,那么他们在内存中的存储结构可能如下:内存地址数组元素A0x100…

《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——5. 集成OpenCV:让程序拥有“视力”

目录一、概述1.1 背景介绍:赋予应用“视力”1.2 学习目标二、集成OpenCV2.1 安装OpenCV2.2 在Qt项目中配置CMake三、项目数据集介绍与准备四、图像的桥梁:ImageProvider与格式转换五、加载、转换并显示图像六、总结与展望一、概述 1.1 背景介绍&#xf…

智慧驾驶疲劳检测算法的实时性优化

智慧驾驶疲劳检测:从技术突破到场景革命全球每年因疲劳驾驶引发的交通事故占比超20%,夜间及长途驾驶场景中这一比例更高。当驾驶员出现疲劳甚至晕倒等危险驾驶行为时,传统检测手段因依赖单一传感器或受环境干扰,存在误报率高、响应…

USRP X440

产品概述 USRP X440 是 Ettus Research 推出的高性能、多通道、宽带软件定义无线电(SDR)系统。基于 Xilinx Zynq UltraScale RFSoC 架构,它提供高密度、相干性的信号收发能力,帮助您快速构建雷达、电子战(EW&#xff0…

[特殊字符] GitHub 2025年7月月度精选项目 Top5

🚀 GitHub 2025年7月月度精选项目 Top5 本月GitHub有哪些值得关注的优质开源项目?我从数千个新项目中,精选了5个有趣 实用 可演示的仓库 无论你是开发者、AI爱好者、工具控,还是正在做副业产品,这篇文章都值得收藏&a…

微服务架构下的自动化测试策略调优经验分享

微服务架构下,自动化测试策略需针对分布式特性、服务自治性和高耦合风险进行针对性调整的关键调整方向及实施方法: 一、​​测试策略重构:分层与契约驱动​​ 1. ​​测试金字塔升级为钻石模型​​ ​​调整逻辑​​:传统金字塔中UI测试占比过高,而微服务需强化契约测试与…

图论:并查集

入门 久闻并查集的大名,今天来一探究竟,到底什么是并查集,并查集有什么用? 并查集(Disjoint Set Union, DSU)是一种处理不相交集合的合并及查询问题的数据结构。 其实并查集的作用主要就有两个: 1、将两个元素添加到…

告别静态文档!Oracle交互式技术架构图让数据库学习“活“起来

🗺️ 当数据库架构图学会"互动" 想象一下,你正在学习Oracle数据库架构,面对密密麻麻的静态文档和复杂的组件关系图,是不是常常感到: 像在迷宫里找路,不知道组件间如何协作?想深入了…

day62-可观测性建设-全链路监控zabbix+grafana

🌟监控api接口 🔍监控zabbix-api接口 生成API tokens命令行测试 curl -s -X POST -H "Content-Type: application/json-rpc" -d {"jsonrpc": "2.0","method": "host.get","params": {&quo…

通过Deepseek找工作

推送的结果如下,对应的AI提示词在底部: 计算机方向远程工作职位汇总 整合全球远程技术岗位 | 支持全地域远程办公 | 涵盖开发、安全、云计算等方向 覆盖方向:8+个技术领域 薪资范围:10K-40K/月 工作模式:100%远程 远程技术职位列表 职位名称 技能要求 经验要求 薪资…

vscode文件颜色,只显示自己更改的文件颜色、刚git下来的库,vscode打开后,显示所有文件都被修改了

问题:git新的库,然后我用vscode打开,默认显示所有的文件都更改了,但是我打开他们修改的对比,没有显示任何有被修改的地方,是怎么回事 linux/wsl下这么设置就可以了:git config core.autocrlf in…