学习记录——Transformer、ViT、Swin-Transformer、SegFormer、TopFormer、Seaformer

news/2024/5/18 22:06:29/文章来源:https://blog.csdn.net/weixin_45464524/article/details/131668530

Transformer

2017 Computation and Language Google

Self-Attention、Multi-Head Attention

在这里插入图片描述
位置编码
在这里插入图片描述

原理参考链接
ransformer网络结构:
在这里插入图片描述

ViT

2020 ICLR
将transformer引入到cv领域
在这里插入图片描述
将输入图片224x224x3按照16x16x3大小的Patch进行划分,接着通过线性映射将每个Patch映射到一维向量中,以ViT-B/16为例,每个Patch数据shape为[16, 16, 3]通过映射得到一个长度为768的向量(后面都直接称为token)。[16, 16, 3] -> [768]。
在代码实现中,直接通过一个卷积层来实现。 以ViT-B/16为例,直接使用一个卷积核大小为16x16,步距为16,卷积核个数为768的卷积来实现。通过卷积[224, 224, 3] -> [14, 14, 768],然后把H以及W两个维度展平即可[14, 14, 768] -> [196, 768],此时正好变成了一个二维矩阵,正是Transformer想要的。
在输入Transformer Encoder之前注意需要加上[class]token以及Position Embedding。 在原论文中,作者说参考BERT,在刚刚得到的一堆tokens中插入一个专门用于分类的[class]token,这个[class]token是一个可训练的参数,数据格式和其他token一样都是一个向量,以ViT-B/16为例,就是一个长度为768的向量,与之前从图片中生成的tokens拼接在一起,Cat([1, 768], [196, 768]) -> [197, 768]。然后关于Position Embedding就是之前Transformer中讲到的Positional Encoding,这里的Position Embedding采用的是一个可训练的参数(1D Pos. Emb.),是直接叠加在tokens上的(add),所以shape要一样。以ViT-B/16为例,刚刚拼接[class]token后shape是[197, 768],那么这里的Position Embedding的shape也是[197, 768]。

Transformer Encoder

Layer Norm,这种Normalization方法主要是针对NLP领域提出的。
MLP Block,如图右侧所示,就是全连接+GELU激活函数+Dropout组成也非常简单,需要注意的是第一个全连接层会把输入节点个数翻4倍[197, 768] -> [197, 3072],第二个全连接层会还原回原节点个数[197, 3072] -> [197, 768]。
在这里插入图片描述
在这里插入图片描述

Hybrid混合模型

Hybrid混合模型,就是将传统CNN特征提取和Transformer进行结合。这里的R50的卷积层采用的StdConv2d不是传统的Conv2d,然后将所有的BatchNorm层替换成GroupNorm层。在原Resnet50网络中,stage1重复堆叠3次,stage2重复堆叠4次,stage3重复堆叠6次,stage4重复堆叠3次,但在这里的R50中,把stage4中的3个Block移至stage3中,所以stage3中共重复堆叠9次。通过R50 Backbone进行特征提取后,得到的特征矩阵shape是[14, 14, 1024],接着再输入Patch Embedding层,注意Patch Embedding中卷积层Conv2d的kernel_size和stride都变成了1,只是用来调整channel。后面的部分和前面的ViT网络一样。
在这里插入图片描述

SETR

2021 CVPR 由复旦和腾讯优图联合提出的一个基于ViT的新型架构的语义分割模型。
现有的语义分割模型大多都是基于FCN的Encoder-Decoder结构:Encoder用于学习图像特征,Decoder则基于Encoder学到的特征对图片中的每一个像素进行分类。其中,Encoder通常以卷积分类网络作为Backbone,将输入图片不断下采样以增加感受野,学习更加抽象的图像特征。但是,通过不断堆叠卷积层来增加感受野无法有效地学习图像信息中的远距离依赖关系。而这一点对于提升语义分割的效果十分重要。
为了解决这个问题,SETR完全舍弃卷积操作,Encoder将输入图像看作图像patch序列,通过全局注意力建模学习图像特征;Decoder利用从Transformer Encoder中学到的特征,将图像恢复到原始大小,完成分割任务。整个过程没有使用卷积操作,没有对图片进行下采样,而是在Encoder Transformer的每一层进行全局上下文建模,从而为语义分割问题的解决提供了新思路。
在这里插入图片描述
SETR编码器流程跟作为backbone的ViT模型较为一致。先对输入图像做分块处理,然后对每个图像分块做块嵌入并加上位置编码,这个过程就将图像转换为向量序列。之后就是Transformer block,里面包括24个Transformer层,每个Transformer层都是由MSA+MLP+Layer Norm+残差连接组成。
在这里插入图片描述
解码器
SETR设计了三种解码器上采样方法。第一种就是最原始的上采样,论文中叫Naive upsampling,通过简单的1x1卷积加上双线性插值来实现图像像素恢复。这种上采样方法简称为SETR-Naive。
重点是第二种和第三种解码器设计。第二种解码器设计叫渐进式上采样 (Progressive UPsampling),作者认为一步到位式的上采样可能会产生大量的噪声,采样渐进式的上采样则可以最大程度上缓解这种问题。渐进式的上采样在于,每一次上采样只恢复上一步图像的2倍,这样经过4次操作就可以回复原始图像。这种解码设计简称为SETR-PUP,如图1中的(b)图所示。第三种解码设计为多层次特征加总 (Multi-Level feature Aggregation, MLA),这种设计跟特征金字塔网络类似,如图1中©图所示。

Swin-Transformer

2021 微软 CVPR
Swin Transformer 引入了两个关键的概念来解决原始 ViT 所面临的问题——分层特征图(hierarchical feature maps)和转移窗口注意力(shifted window attention)。
Swin Transformer使用了类似卷积神经网络中的层次化构建方法(Hierarchical feature maps),比如特征图尺寸中有对图像下采样4倍的,8倍的以及16倍的,这样的backbone有助于在此基础上构建目标检测,实例分割等任务。而在之前的Vision Transformer中是一开始就直接下采样16倍,后面的特征图也是维持这个下采样率不变。
在Swin Transformer中使用了Windows Multi-Head Self-Attention(W-MSA)的概念,比如在下图的4倍下采样和8倍下采样中,将特征图划分成了多个不相交的区域(Window),并且Multi-Head Self-Attention只在每个窗口(Window)内进行。相对于Vision Transformer中直接对整个(Global)特征图进行Multi-Head Self-Attention,这样做的目的是能够减少计算量的,尤其是在浅层特征图很大的时候。这样做虽然减少了计算量但也会隔绝不同窗口之间的信息传递,所以在论文中作者又提出了 Shifted Windows Multi-Head Self-Attention(SW-MSA)的概念,通过此方法能够让信息在相邻的窗口中进行传递
在这里插入图片描述

在这里插入图片描述

首先将图片输入到Patch Partition模块中进行分块,即每4x4相邻的像素为一个Patch,然后在channel方向展平(flatten)。假设输入的是RGB三通道图片,那么每个patch就有4x4=16个像素,然后每个像素有R、G、B三个值所以展平后是16x3=48,所以通过Patch Partition后图像shape由 [H, W, 3]变成了 [H/4, W/4, 48]。然后在通过Linear Embeding层对每个像素的channel数据做线性变换,由48变成C,即图像shape再由 [H/4, W/4, 48]变成了[H/4, W/4, C]。其实在源码中Patch Partition和Linear Embeding就是直接通过一个卷积层实现的,和之前Vision Transformer中讲的 Embedding层结构一模一样。

然后就是通过四个Stage构建不同大小的特征图,除了Stage1中先通过一个Linear Embeding层外,剩下三个stage都是先通过一个Patch Merging层进行下采样(后面会细讲)。然后都是重复堆叠SwinTransformer Block注意这里的Block其实有两种结构,如图(b)中所示,这两种结构的不同之处仅在于一个使用了W-MSA结构,一个使用了SW-MSA结构。而且这两个结构是成对使用的,先使用一个W-MSA结构再使用一个SW-MSA结构。所以你会发现堆叠Swin Transformer Block的次数都是偶数(因为成对使用)。

最后对于分类网络,后面还会接上一个Layer Norm层、全局池化层以及全连接层得到最终输出。

W-MSA

在这里插入图片描述

SW-MSA

W-MSA为了减少计算量,只会在每个窗口内进行自注意力计算,窗口与窗口之间是无法进行信息传递的。
在这里插入图片描述

在这里插入图片描述

SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers

SegFormer:简单高效的变压器语义分割设计 2021 CVPR

提出了一种简单、高效、功能强大的语义分割框架SegFormer,它将transformer与轻量级多层感知器(MLP)解码器结合在一起。SegFormer有两个吸引人的特点:
1)SegFormer包括一个新颖的分层结构的变压器编码器,输出多尺度特征。它不需要位置编码,从而避免了当测试分辨率与训练分辨率不同时插入位置编码导致性能下降的问题。
2) SegFormer避免复杂的解码器。所提出的MLP解码器聚合了来自不同层的信息,从而结合了局部注意和全局注意来呈现强大的表示。我们表明,这种简单和轻量级的设计是有效分割变压器的关键。

在这里插入图片描述
SegFormer由两个主要模块组成:
一个分层的Transformer编码器,用于生成高分辨率的粗特征和低分辨率的细特征。一种新颖的无位置编码和分层变压器编码器。
一个轻量级的All-MLP解码器,融合这些多级特征,产生最终的语义分割掩码。

——编码器在对与训练图像分辨率不同的图像进行推理时避免了插入位置码。因此,编码器可以很容易地适应任意的测试分辨率,而不会影响性能。分层部分使编码器能够同时生成高分辨率的精细特征和低分辨率的粗特征,这与ViT只能生成单个固定分辨率的低分辨率特征图形成了鲜明对比。
——轻量级的MLP解码器,其关键思想是利用变压器诱导的特征,其中低层的注意力往往停留在局部,而最高层的注意力则高度非局部。通过聚合来自不同层的信息,MLP解码器结合了本地和全局关注。

Overlapped Patch Merging

ViT的Patch Embedding是无重叠的(non-overlapping),但是non-overlapping对语义分割任务来说,会导致patch边缘不连续。MiT使用overlapped patch embedding,保证patch边缘连续。

自注意力 Efficient Self-Attention

减少K,减少计算量
在这里插入图片描述

混合前馈网络 Mix-FFN(Feed-forward Network)

ViT使用位置编码(PE)来引入位置信息。但是PE的分辨率是固定的。因此,当测试分辨率与训练分辨率不同时,位置代码需要插值,这通常会导致精度下降。作者认为位置编码对于语义分割实际上是不必要的。因此SegFormer引入Mix-FFN,它考虑了零填充对泄漏位置信息的影响,直接在前馈网络(FFN)中使用3×3 Conv。Mix-FFN公式为:
在这里插入图片描述
实验证明3x3的卷积可以提供给transformer充分的位置信息。

ALL-MLP解码结构 Lightweight All-MLP Decoder

SegFormer集成了一个轻量级解码器,只包含MLP层。实现这种简单解码器的关键是,SegFormer的分级Transformer编码器比传统CNN编码器具有更大的有效接受域(ERF)。
在这里插入图片描述

在这里插入图片描述

对于不同分辨率的特征图Fi,将其上采样至1/4,然后将多个特征图concat后,送入后续网络,得到分割结果。

TopFormer: Token Pyramid Transformer for Mobile Semantic Segmentation

TopFormer:移动语义分割的令牌金字塔转换器 2022 CVPR
尽管视觉变压器(vision transformer, ViTs)在计算机视觉领域取得了巨大的成功,但沉重的计算成本阻碍了其在移动设备语义分割等密集预测任务中的应用。在本文中,我们提出了一个移动友好的架构,名为令牌金字塔视觉变压器(TopFormer)。所提出的TopFormer将来自各种尺度的token作为输入,以产生可感知尺度的语义特征,然后将这些特征注入到相应的token中以增强表示。实验结果表明,我们的方法在多个语义分割数据集上明显优于基于CNN和vit的网络,并在准确率和延迟之间取得了很好的平衡。

topfomer吸收了CNN与transfomer结构上的优势,通过CNN常用的金字塔结构来把高分辨率图像快速生成特征,金字塔分为4层,使用下采样来构建金字塔,代码里面是用1x1Conv,步长取2来逐步实现H,W的成倍减小。再使用减小后融合的token作为trnasfomer模块的输入,这样计算量就大大减小了。transfomer模块负责提取出丰富的语义特征。
贡献:
1.将不同尺度的token作为输入,并将它们融合到非常小的scale,以极低的成本来获得语义。
2.Semantics Injection Module可以把语义注入token,实现局部特征和全局特征的融合
3.topformer的 base model 在 ARM移动设备上测试ADE20K 数据集,比MobileNetV3高 5% mIoU, tiny模型可以实现实时分割,分割效果也是比较有竞争力的。
在这里插入图片描述
Token Pyramid Module
金字塔部分用的是MobileNets块的堆叠,特点就是一步stride=1,一步stride=2这样叠了4块相当于H,W下降16倍。因为之前conv_stem将H,W降为1/2,维度从3升到16,所以在融合前H,W降为1/32,通过平均池化融合后再降1/2,所以输入transfomer的时候H,W是1/64.因为H,W实在太小了,所以通道数即使拼接起来计算成本也很小。
Scale-aware Semantics Extractor
本部分是transfomer编码器部分,本文没有对attention结构进行修改,attention计算的时间复杂度也是平方。所谓语义提取器就是将数个transfomer块堆叠在一块,图上数量为L。q,k的shapeNxC维度C取16,v取32。attention计算中shape是这样变化的:N * C @ C * N -> N * N,N * N @ N * 2C->N * 2C(文中指定C=16)
本文transfomer模块中另外几个改变是1x1卷积代替linearReLU6代替GELU,每个卷积后跟 batch normalization而不是Layer normalization
Semantics Injection Module
从transfomer块里面出来的全局语义要与金字塔中的局部语义融合,但是它们存在着明显的语义差距,本文使用Semantics Injection Module来缓解它们之间的语义差距。
语义注入模块 (SIM) 将token金字塔模块的局部特征token和transfomer的全局特征图作为输入。 局部token我们把它暂时叫T,transfomer的全局特征图我们暂时叫F。
  1.T通过 1×1 卷积层,BN以生成特征。
  2.F通过一边 1×1 卷积层,BN, sigmoid 层,
  3.F通过 1×1 卷积层,BN。
  总共三个输出,具有相同的大小。
  这三个输出怎么融合呢,先是1和2做Hadamard 积,文中把他叫做把全局语义注入局部特征。。。然后是在注入之后将积与3相加。 文中也说语义注入减轻了token之间的语义差距。
Segmentation Head
经过处理后局部语义和全局语义相乘再加上全局语义。这就是局部语义和全局语义融合的方法。这样我们获得了4张特征图。
  将多尺度特征图转化为分割结果也很简单。将4张特征图上采样到统一规格后相加,在经过1x1conv通道取物体class种类的数量即可。实际上就是将不同分辨率的token通过bilinear插值到与高分辨率token相同的大小,然后对所有特征图求和。

SeaFormer: Squeeze-enhanced Axial Transformer for Mobile Semantic Segmentation

Seaformer:用于移动语义分割的挤压增强轴向变压器 ICLR 2023

自从引入视觉变形器以来,许多计算机视觉任务(例如,语义分割)的前景一直由cnn压倒性地主导,最近发生了重大变革。然而,计算成本和内存需求使得这些方法不适合移动设备,特别是对于高分辨率的逐像素语义分割任务。本文介绍了一种新的用于移动语义分割的挤压增强轴向变压器(SeaFormer)方法。具体来说,我们**设计了一个通用的注意力块,其特点是挤压轴和细节增强的配方。**它可以进一步用于创建一系列具有卓越成本效益的骨干体系结构。再加上一个轻分割头,我们在基于arm的移动设备上在ADE20K和cityscape数据集上实现了分割精度和延迟之间的最佳权衡。关键的是,我们以更好的性能和更低的延迟击败了移动友好型竞争对手和基于transformer的对手,而且没有花哨的东西。除了语义分割之外,我们进一步将提出的SeaFormer架构应用于图像分类问题,展示了作为多功能移动友好骨干网的潜力。
Transformer在服务器端的多类别语义分割数据集上均获得了碾压的效果,Topformer第一次在移动端上使用了Transformer的注意力机制增强了特征,但是使用的注意力还是不够高效,因此只能在下采样64倍的分辨率上进行特征增强。现有的高效注意力机制包含基于窗口的注意力机制和轴线注意力等,但是这些注意力在高分辨率上的延时对于移动端来说还是损失了全局信息/不够高效。为此这篇文章设计 增加了位置信息的轴线压缩增强注意力,一方面将QKV特征进行轴线压缩后再注意力增强,另一方面将QKV特征使用卷积网络提升局部信息,最后将二者融合,输出增强特征。

在这里插入图片描述

网络结构

如上面的框架图所示,该网络先对图像进行1/2、1/4和1/8的下采样,再分别用两个分支进行处理,红色的是上下文分支,蓝色的是空间分支。上下文分支交替使用了MobileNetV2 Block(MV2)和SeaFormer Layers,中间使用Fusion block对两个分支进行融合,使用卷积和Sigmoid提取权重信息,再将权重信息与空间分支相乘,连续迭代三次后使用Light segmentation head进行处理。
SeaFormer Layer的结构
在这里插入图片描述
SeaFormer采用了轴向注意力机制,先对Q,K,V分别进行池化,再转换维度,分别使用横向压缩和纵向压缩得到Hx1xCp和1xWxCp的两个向量,对这两个向量分别计算多头自注意力,再将得到的结果进行广播,将两个结果扩大为相同的维度再进行相加。为了增强细节信息,SeaFormer中使用了Detail enhancement kernel,通过该kernel得到的结果与压缩的轴向注意力的计算结果进行相乘,得到最终的注意力。

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

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

相关文章

阿里云RockMQ与SpringBoot的整合

前言: 开源版本Rocket和商业版本的RocketMQ有些不同,研究的是商业版本的RocketMQ,阿里云的官方文档,感觉有点乱。看不咋明白,网上虽然有教程,大都还是有点缺少,有时候会突然跳了步骤&#xff0c…

JMeter 中 3 种参数值的传递

目录 前言: (一) 从 CSV 文件读取要批量输入的变量 (二) 利用 Cookie 进行值的传递 (三) 利用正则匹配提取上一个接口的返回数据作为下个请求的输入 前言: 在JMeter中,参数值的传递是非常重要的,因为它允许你在测试过程中动态…

layui树形菜单的实现

前言 继续上一篇博客的内容,在原来代码的基础上实现树形菜单功能 一. 树形菜单是什么? 在layui中,树形菜单是通过 Tree 组件实现的。Tree 组件提供了一种树形结构展示数据的方式,常用于显示层级结构的菜单、目录等。开发者可以…

Java-通过IP获取真实地址

文章目录 前言功能实现测试 前言 最近写了一个日志系统,需要通过访问的 IP 地址来获取真实的地址,并且存到数据库中,我也是在网上看了一些文章,遂即整理了一下供大家参考。 功能实现 这个是获取正确 IP 地址的方法,可…

探索基于300W-LP的3D人脸关键点检测

目录 前言一、3D 关键点可视化二、使用步骤1.300W-LP转为YOLO数据格式2.修改数据入口3.开始训练 总结 前言 300WLP数据集提供来丰富的人脸线索,包括2D或3D的关键点信息,Head Angle和3DMM的参数等&#xff…

Spring5学习笔记--详细一文通

Spring5学习笔记--详细一文通 1 Spring 框架概述1.1 Spring 5 简述1.2 Spring5入门案例1.2.1 Spring5下载1.1.2 打开 idea 工具,创建普通 Java 工程1.2.3 导入 Spring5 相关 jar 包1.2.4 创建普通类,在这个类创建普通方法1.2.5 创建 Spring 配置文件&…

分布式定时任务xxl-Job

目录 前言 项目介绍 1.源码目录介绍 2 “调度数据库”配置 3 架构设计 3.1 设计思想 5.3.3 架构图 实战 1.服务端部署 2.执行端配置 3.任务开发 3.1 基于方法注解任务 3.2 基于api任务 3.3 分片广播任务 4.任务执行 4.1 单任务执行 4.2 子任务执行 4.3 分片广…

一、rocketmq整体架构及nameServer源码分析

RocketMQ源码深入剖析 1 RocketMQ介绍 RocketMQ 是阿里巴巴集团基于高可用分布式集群技术,自主研发的云正式商用的专业消息中间件,既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠…

一次零基础靶机渗透细节全程记录

一、打靶总流程 1.确定目标: 在本靶场中,确定目标就是使用nmap进行ip扫描,确定ip即为目标,只是针对此靶场而言。其他实战中确定目标的方式包括nmap进行扫描,但不局限于这个nmap。 2.信息收集: 比如平常挖…

经典的网络安全技术

以我的理解,“黑客”大体上应该分为“正”、“邪”两类,正派黑客依靠自己掌握的知识帮助系统管理员找出系统中的漏洞并加以完善,而邪派黑客则是通过各种黑客技能对系统进行攻击、入侵或者做其他一些有害于网络的事情,因为邪派黑客…

RPC分布式网络通信框架(二)—— moduo网络解析

文章目录 一、框架通信原理二、框架初始化框架初始化 三、调用端(客户端)调用端框架调用端主程序 四、提供端(服务器)提供端主程序提供端框架NotifyService方法Run方法muduo库的优点网络代码RpcProvider::OnConnection业务代码Rpc…

win11利用start11实现全屏菜单,磁贴配置

Win11磁贴配置 最近电脑还是升级到 win11 了。我之前采用的美化方案是桌面上的图标全部移到 win10 开始菜单里的全屏菜单上,用磁贴贴一排。每次要访问文件的时候都去开始菜单里找,而不是放在桌面上,这样桌面也可以空出来欣赏壁纸。参考配置链…

springboot+MySQL大学生体质测试管理系统

功能需求分析的任务是通过详细调查大学生体质测试的测试信息管理系统要处理的所有对象,通过充分了解大学生体质测试管理系统的工作流程,明确使用者的各种需求,充分思考之后可能扩充和改变的情况,然后在这个基础上来设计数据库。

论文笔记--TinyBERT: Distilling BERT for Natural Language Understanding

论文笔记--TinyBERT: Distilling BERT for Natural Language Understanding 1. 文章简介2. 文章概括3 文章重点技术3.1 Transformer Distillation3.2 两阶段蒸馏 4. 数值实验5. 文章亮点5. 原文传送门6. References 1. 文章简介 标题:TinyBERT: Distilling BERT fo…

赛效:如何用在线压缩GIF图片

1:在电脑网页上打开并登录快改图,点击左侧菜单栏里的“GIF压缩”。 2:点击页面中间的上传按钮,将电脑本地的GIF文件上传上去。 3:GIF文件上传成功后,设置下方压缩设置,点击右下角“开始压缩”。…

数据结构(王卓版)——线性表

数据的存储结构之线性表 1、线性表的定义和特点

java后端开发环境搭建 mac

在mac pro上搭建一套java 后端开发环境,主要安装的内容有:jdk、maven、git、tomcat、mysql、navicat、IntelliJ、redis。 本人mac pro的系统为mac OS Monterey 12.6.7,主机的硬件架构为x86_64。 左上角关于本机查看系统版本;终端…

前端框架Layui实现动态树效果(书籍管理系统左侧下拉列表)

目录 一、前言 1.什么是树形菜单 2.树形菜单的使用场景 二、案例实现 1.需求分析 2.前期准备工作 ①导入依赖 ②工具类 BaseDao(通用增删改查) BuildTree(完成平级数据到父子级的转换) ResponseUtil(将数据转换成json格式进行回显&…

数据可视化之Tableau可视化||绘制标靶图

标靶图是一种用于评估、测试和优化计算机视觉算法的基准测试工具。它通常由多个具有不同特征的目标物体组成,如车辆、行人、交通信号灯等,同时包括各种不同的复杂场景,如城市街道、高速公路和人行道等。通过使用标靶图,研究人员可以检验算法的准确性、速度和适应性,同时拓…

由于找不到d3dx9_43.dll,有什么可靠的修复方法?

由于找不到d3dx9_43.dll,无法继续执行代码,这种情况大家是否有遇见过?其实就算没遇到过,大家应该也有遇到别的dll文件丢失吧?道理都一样,都是dll文件丢失,我们只需要把它给修复就可以了&#xf…