当前位置: 首页 > news >正文

基于ViT的无监督工业异常检测模型汇总

基于ViT的无监督工业异常检测模型汇总

    • 论文1:VT-ADL: A Vision Transformer Network for Image Anomaly Detection and Localization(2021)
      • 1.1 主要思想
      • 1.2 系统框架
    • 论文2:Inpainting Transformer for Anomaly Detection(2021)
      • 2.1 主要思想
      • 2.2 模型架构
    • 论文3:UTRAD: Anomaly Detection and Localization with U-Transformer(2022)
      • 3.1 主要思想
      • 3.2 模型架构
      • 3.3 缺陷
    • 论文4:ADTR: Anomaly Detection Transformer with Feature Reconstruction(2022)
      • 4.1 主要内容
      • 4.2 模型结构
    • 论文5:A Unified Model for Multi-class Anomaly Detection(2022)—— 多分类无监督异常检测统一模型
      • 5.1 主要内容
      • 5.2 模型架构
    • 论文6:Exploring Plain ViT Features for Multi-class Unsupervised Visual Anomaly Detection(2024)- 多分类无监督异常检测统一模型
      • 6.1 主要内容
      • 6.2 模型架构
    • 7. 总结
      • 7.1 ViT的可用优势
      • 7.2 ViT的劣势

论文1:VT-ADL: A Vision Transformer Network for Image Anomaly Detection and Localization(2021)

1.1 主要思想

所提出的模型结合了传统的基于重建的方法和基于补丁的方法的优势。输入图像被细分为块,并使用 Vision Transformer 进行编码。然后将生成的特征馈送到解码器中以重建原始图像,从而使网络学习代表正常图像方面的特征(网络训练的唯一数据)。同时,高斯混合密度网络对 transformer 编码特征的分布进行建模,以估计该潜在空间中正常数据的分布。使用此模型检测异常会自动允许其定位,因为 transformer 编码的特征与位置信息相关联。

1.2 系统框架

在这里插入图片描述
使用基于重建的方法在全局级别检测到异常,通过应用于编码图像块的高斯混合模型进行定位。

论文2:Inpainting Transformer for Anomaly Detection(2021)

2.1 主要思想

区别与CNN,该论文作者采取基于自注意力机制的纯Transformer结构,将异常检测问题转换为图像覆盖修补问题。其解决方案实质上是基于图像重构的,其创新点在于采取自注意力机制进行全局的图像重建,重建后的图像与原图进行对比,差异部分就是异常部分。关于如何重建,还是由仅通过正常样本的训练得到的重建网络做到的。

2.2 模型架构

在这里插入图片描述

  • 每个Transformer块的输入输出都是一个序列(左侧)
  • inmatic 网络架构由一些简单的 Transformer 块堆栈组成。每个Transformer 由 MFSA 和多层感知器 (MLP) 组成。(右侧)
  • 对最后一个Transformer块的输出序列进行了平均,得到了一个向量,该向量用于通过映射得到扁平化的补丁像素空间。

对这些Transformer块进行训练,可以根据相邻的补丁对覆盖的图像块进行很好的修复。

推理和检测部分的实施过程是先生成完整的修复图像,然后使用重建后的图像和原始之间的差异来计算像素级异常图。

论文3:UTRAD: Anomaly Detection and Localization with U-Transformer(2022)

3.1 主要思想

该篇论文的解决方案实质上还是基于图像重构的方式,针对重建方式的不稳定和调整困难,以及采用大数据集预训练网络特征空间泛化能力差的问题,研究者采用了一些新颖的思想去改进:

  • 为避免预训练模型特征表示的不稳定性,在训练时采用冻结骨干网进行训练;
  • 为更好的估计深度特征,采用特征级别进行重建(重要结论:正常样本和异常样本在特征空间中更容易区分);
  • 构建了一个基于Transformer的多级自动编码器作为重建网络,利用提取到的正常样本的特征进行了训练;
    • 加入了Transformer注意力模块,全局信息可以得到很好聚合,模型更具泛化能力;
    • 考虑网络性能,降低计算成本,在构建时采用U型的Transformer(网络内部具有跳跃连接);
    • 采用金字塔层次结构,提取不同尺度的异常特征。

3.2 模型架构

在这里插入图片描述
输入图像先使用预训练的CNN主干为输入样本提取多尺度特征,然后使用U-Transformer(多尺度重建模型)进行图像的重建,之后重建之前和重建后会出现重建误差(图中的Reconstruction error),重建误差会作为异常分数输出以及像素级异常区域的检出。

3.3 缺陷

虽然已经采用了改进后的Transformer,但与基于嵌入式的方式相比依然存在模型尺寸大、推理时间长、难部署的问题。模型设计的太过复杂!

论文4:ADTR: Anomaly Detection Transformer with Feature Reconstruction(2022)

4.1 主要内容

三点动机:

  1. 根据较少的语义信息去重建原始像素值,正常区域与异常区域往往像素值相似但是具有不同的语义,因此像素重建的方法往往会引发歧义。正常样本和异常样本在特征空间内往往具有可区分的特征,所以不以重建原始像素值为目标而以重建原始特征为目标。提取特征采用CNN预训练网络去实现。
  2. 以往CNN的重建模型倾向于通过shortcuts去学习一定程度的“相同映射”,这会导致异常区域被很好的重建为异常区域,无法获取有效的重建误差。Transformer中的query embedding可以限制“相同映射”的趋势(有助于区分正常样本和异常样本),所以重建网络采用Transformer进行构建。
  3. 对可以提供少量异常样本的情况进行兼容,使得设计的模型既可以在没有异常图片的情况下训练,也可以在有异常图像的情况下训练。(考虑到了异常可用情况,设计了相应的损失函数)

4.2 模型结构

在这里插入图片描述
方法概述(a)Embedding:应用预先训练的 CNN 主干来提取多尺度特征。(b) Reconstruction:使用Transformer通过辅助可学习查询嵌入来重建特征标记。(c) Comparison:该方法与仅正常样本的情况和异常可用的情况兼容。异常评分图是通过提取和重建特征之间的差异获得的。
模型架构与前篇论文中的模型架构有相似之处,都是采用CNN进行特征的提取,采用Transformer进行重建网络的搭建,但很明显,该篇论文提出的Transformer架构更加简洁。


Transformer 重建网络:

  • 特征图 𝒇∈ℝC×H×W 首先被拆分为 H×W 特征标记。为了减少计算消耗,1×1 应用卷积来减小这些标记的维度,然后再将其馈送到 transformer 中。此外,当 transformer 输出时,它们的维度由另一个 1×1卷积恢复。
  • transformer 编码器将 输入的feature tokens 嵌入到潜在特征空间中。每个编码器层都遵循标准架构 ,具有多头注意、前馈网络 (FFN)、残差连接和归一化。
  • transformer 解码器遵循标准架构,并带有辅助查询嵌入。辅助查询是一个可学习的嵌入与输入的feature tokens具有相同尺寸,Transformer解码器将这些可学习的查询嵌入进行转换使用多头自注意力机制来重建feature token。位置嵌入被加入到 Transformer 模型中,是因为其 自注意力机制本身对输入顺序不敏感(即 permutation-invariant)。Learned position embedding 能让模型从数据中学习位置信息,从而有效地捕获输入序列的顺序依赖关系。

异常得分计算:
从重建网络中可以了解到,解码器的目标是根据可学习的辅助查询重建出解码器的feature token,然后与解码器的feature token进行对比从而根据重建误差得到异常区域。

论文5:A Unified Model for Multi-class Anomaly Detection(2022)—— 多分类无监督异常检测统一模型

5.1 主要内容

当前所有的异常检测方法都只能用一个模型解决一个类别,这种“一个模型只处理一个类别”的separate setting是十分耗费储存空间的,并且无法处理正常样本具有一定多样性的场景 (比如,一种物体有多种正常的型号)。所以该篇论文致力于解决一个更困难的统一设定,那就是用一个模型解决所有类别的异常检测。

该篇论文还是基于重构的思想,深入研究了”恒等映射“的问题(虽然重构模型是在正常样本上训练的,其遇到异常样本同样会重构成功。这使得正常样本和异常样本的重构误差都很小,难以被区分开来)。研究者希望能够从网络结构设计上避免”恒等映射“问题。

通过实验,发现结构上Transformer结构的”恒等映射“问题与MLP和CNN相比是较轻的。研究者们认为具有query embedding的attention可以抑制“恒等映射” 。所以基于Transformer进行了整体模型框架的构建,并做了三点相关改进。

5.2 模型架构

图3:UniAD的框架,由邻居掩码编码器(NME)和分层查询解码器(LQD)组成。LQD中的每一层都采用可学习的查询嵌入来帮助对复杂的训练数据分布进行建模。变压器中的全部注意力被邻居掩码注意力所取代,以避免信息从输入泄漏到输出。特征抖动策略鼓励模型在有噪声的输入下恢复正确的消息。所有这三个改进都有助于模型避免学习“相同的快捷方式
改进1:Layer-wise Query Embedding
通过增加query embedding,来增加其抑制“恒等映射”的能力。以transformer为基础,提出了Layer-wise Query Embedding,即,在decoder的每一层都加入query embedding。

改进2:Neighbor Masked Attention
研究者认为,在传统的Attention中,一个token是可以利用自己的信息的,这可能会防止信息泄漏,即,直接将输入进行输出,形成“恒等映射”。因此,提出了Neighbor Masked Attention,即,一个token是不能利用自己和自己的邻居的信息的。这样,网络就必须通过更远处的token来理解这个点的信息应该是什么,进而在这个过程中理解了正常样本,拟合了正常样本的分布。

改进3:Feature Jittering
受到De-noising Auto-Encoder的启发,设计了一个Feature Jittering策略。即,在输入的feature tokens中加入噪声,而重构的目标依然是未加噪声的feature tokens。因此,Feature Jittering可以将重构任务转化为去噪任务网络通过去除噪声来理解正常样本,并拟合正常样本的分布。同时,恒等映射在这种情况下不能使得loss等于0,也就不是最优解了。

论文6:Exploring Plain ViT Features for Multi-class Unsupervised Visual Anomaly Detection(2024)- 多分类无监督异常检测统一模型

6.1 主要内容

针对异常检测中,异常样本是多类的,以往的异常检测中每个类都需要单独的进行模型的训练,大大增加了模型训练和存储的成本。该篇论文提出了基于Plain ViT的多分类无监督的异常检测(MUAD)框架ViTAD。

6.2 模型架构

对于基于重建方式的异常检测模型,该篇论文抽象出一个基础的框架Meta-AD,包括一个编码器,特征融合器,解码器。与以往采用CNN搭建编码器和解码器的方式不同,该篇论文从Plain ViT 出发,搭建列状的ViT编码器和解码器,并从全局和局部的角度利用一些策略进行了改进。最终得到一个简单有效的基于ViT的模型框架。
在这里插入图片描述
改进前的模型架构:
改进前模型架构
改进后的模型架构:
在这里插入图片描述
论文出发点:

ViT的优势:与更复杂的CNN特征金字塔相比,Plain ViT得益于全局动态建模能力,列状的Plain ViT提供更多出色可用性和使用价值。ViT特征在各个阶段都比CNN的特征更加丰富和多样化,正常图像和异常图像之间的差异更加显著,这一现象表明VIT结构具有更强的建模能力和更大的感受野,可用于AD任务的潜在应用。

橙色数字表示从全局角度做的改进:

第一点:融合模块去除了多尺度跳跃链接,仅仅使用最后一级F作为输入(结构图中没有看到去除多尺度跳跃连接!)
原由:原因是列状的ViT深层特征F,足以包含丰富的纹理和语义属性。早期特征的注入会缩短信息流路经,导致潜在信息的泄露。使得模型能够学习到恒等映射并且影响模型在图像级别的判断能力。
第二点:在推理期间,使用F1, F2, F3来约束计算异常得分图A1,A2,A3,这样可以有效利用不同级别的特征图中的细粒度特征,得到更准确的异常分割图。
第三点:采用更强语义力度的DINO作为预训练数据集以便得到更好的特征提取效果。 (由于ImageNet-1k与AD数据集之间存在领域差异,这种直接的方式效果不佳)

蓝色数字表示从局部角度做的改进:

第一点:在归一化之前使用特征,输入到特征融合模块;

第二点:使用轻量级线性单层作为Fuser结构;(简化模型)

第三点:不维护类token(降低计算复杂度,提高计算性能);

第四点:增加基于ViT解码器位置的嵌入会带来轻微的性能提升。(提供位置信息)

7. 总结

7.1 ViT的可用优势

  • 全局特征提取:Transformer通过自注意力机制对图像的每一部分进行建模,能够从全局的角度捕捉特征。这使得它在提取长距离依赖和图像的全局特征方面表现出色。

  • 自适应性强:Transformer可以灵活调整不同位置之间的权重,因此在处理需要建模复杂关系的任务(如细粒度识别)上更具优势。

  • 不依赖卷积操作:Vision Transformer(ViT)将图像分割为小块后处理,从而避免了局限于局部的卷积操作。每个图像块会与其他图像块进行关联,从而捕捉到更丰富的全局特征

7.2 ViT的劣势

(1)模型结构与CNN相比较为复杂,且计算复杂度高
(2)训练快,推理慢
(3)空间位置信息不敏感,需要额外的位置向量嵌入

相关文章:

基于ViT的无监督工业异常检测模型汇总

基于ViT的无监督工业异常检测模型汇总 论文1:VT-ADL: A Vision Transformer Network for Image Anomaly Detection and Localization(2021)1.1 主要思想1.2 系统框架 论文2:Inpainting Transformer for Anomaly Detection&#xf…...

数据库管理-第258期 23ai:Oracle Data Redaction(20241104)

数据库管理258期 2024-11-04 数据库管理-第258期 23ai:Oracle Data Redaction(20241104)1 简介2 应用场景与有点3 多租户环境4 特性与能力4.1 全数据编校4.2 部分编校4.3 正则表达式编校4.4 随机编校4.5 空值编校4.6 无编校4.7 不同数据类型上…...

运放进阶篇-多种波形可调信号发生器-产生方波-三角波-正弦波

引言:前几节我们已经说到硬件相关基础的电路,以及对于运放也讲到了初步的理解,特别是比较器的部分,但是放大器的部分我们对此并没有阐述,在这里通过实例进行理论结合实践的学习。而运放真正的核心,其实就是…...

CSS中的变量应用——:root,Sass变量,JavaScript中使用Sass变量

:root—— 原生CSS 自定义属性(变量) 在 SCSS 文件中定义 CSS 自定义属性。然后通过 JavaScript 读取这些属性。 // variables.scss :root { --login-bg-color: #293146;--left-menu-max-width: 200px;--left-menu-min-width: 64px;--left-menu-bg-…...

WPF+MVVM案例实战与特效(二十八)- 自定义WPF ComboBox样式:打造个性化下拉菜单

文章目录 1. 引言案例效果3. ComboBox 基础4. 自定义 ComboBox 样式4.1 定义 ComboBox 样式4.2 定义 ComboBoxItem 样式4.3 定义 ToggleButton 样式4.4 定义 Popup 样式5. 示例代码6. 结论1. 引言 在WPF应用程序中,ComboBox控件是一个常用的输入控件,用于从多个选项中选择一…...

速盾:怎么使用cdn加速?

CDN(Content Delivery Network)即内容分发网络,是一种通过在网络各处部署节点来缓存和传输网络内容的技术。通过使用CDN加速,可以提高网站的访问速度、减轻服务器负载、提供更好的用户体验。 使用CDN加速的步骤如下: …...

C++ 优先算法 —— 三数之和(双指针)

目录 题目:三数之和 1. 题目解析 2. 算法原理 ①. 暴力枚举 ②. 双指针算法 不漏的处理: 去重处理: 固定一个数 a 的优化: 3. 代码实现 Ⅰ. 暴力枚举(会超时 O(N)) Ⅱ.…...

YOLOv7-0.1部分代码阅读笔记-yolo.py

yolo.py models\yolo.py 目录 yolo.py 1.所需的库和模块 2.class Detect(nn.Module): 3.class IDetect(nn.Module): 4.class IAuxDetect(nn.Module): 5.class IBin(nn.Module): 6.class Model(nn.Module): 7.def parse_model(d, ch): 8.if __name__ __main__…...

【缓存与加速技术实践】Web缓存代理与CDN内容分发网络

文章目录 Web缓存代理Nginx配置缓存代理详细说明 CDN内容分发网络CDN的作用CDN的工作原理CDN内容的获取方式解决缓存集中过期的问题 Web缓存代理 作用: 缓存之前访问过的静态网页资源,以便在再次访问时能够直接从缓存代理服务器获取,减少源…...

MySQL的约束和三大范式

一.约束 什么是约束,为什么要用到约束? 约束就是用于创建表时,给对应的字段添加对应的约束 约束的作用就是当我们用insert into时,如果传入的数据有问题,不符合创建表时我们定的规定,这时MySQL就会自动帮…...

Unity网络通信(part7.分包和黏包)

目录 前言 概念 解决方案 具体代码 总结 分包黏包概念 分包 黏包 解决方案概述 前言 在探讨Unity网络通信的深入内容时,分包和黏包问题无疑是其中的关键环节。以下是对Unity网络通信中分包和黏包问题前言部分的详细解读。 概念 在网络通信中,…...

练习题 - DRF 3.x Overviewses 框架概述

Django REST Framework (DRF) 是一个强大的工具,用于构建 Web APIs。作为 Django 框架的扩展,DRF 提供了丰富的功能和简洁的 API,使得开发 RESTful Web 服务变得更加轻松。对于想要在 Django 环境中实现快速且灵活的 API 开发的开发者来说,DRF 是一个非常有吸引力的选择。学…...

Linux 经典面试八股文

快速鉴别十个题 1,你如何描述Linux文件系统的结构? 答案应包括对/, /etc, /var, /home, /bin, /lib, /usr, 和 /tmp等常见目录的功能和用途的描述。 2,在Linux中如何查看和终止正在运行的进程? 期望的答案应涵盖ps, top, htop, …...

Filter和Listener

一、Filter过滤器 1 概念 可以实现拦截功能,对于指定资源的限定进行拦截,替换,同时还可以提高程序的性能。在Web开发时,不同的Web资源中的过滤操作可以放在同一个Filter中完成,这样可以不用多次编写重复代码&#xf…...

Go 项目中实现类似 Java Shiro 的权限控制中间件?

序言: 要在 Go 项目中实现类似 Java Shiro 的权限控制中间件,我们可以分为几个步骤来实现用户的菜单访问权限和操作权限控制。以下是一个基本的实现框架步骤: 目录 一、数据库设计 二、中间件实现 三、使用中间件 四、用户权限管理 五…...

【Javascript】-一些原生的网页设计案例

JavaScript 网页设计案例 1. 动态时钟 功能描述&#xff1a;在网页上显示一个动态更新的时钟&#xff0c;包括小时、分钟和秒。实现思路&#xff1a; 使用 setInterval 函数每秒更新时间。获取当前时间并更新页面上的文本。 代码示例&#xff1a;<div id"clock"…...

SpringBoot开发——Spring Boot 3种定时任务方式

文章目录 一、什么是定时任务二、代码示例1、 @Scheduled 定时任务2、多线程定时任务3、基于接口(SchedulingConfigurer)实现动态更改定时任务3.1 数据库中存储cron信息3.2 pom.xml文件中增加mysql依赖3.3 application.yaml文件中增加mysql数据库配置:3.4 创建定时器3.5 启动…...

Flutter鸿蒙next 实现长按录音按钮及动画特效

在 Flutter 中实现长按录音按钮并且添加动画特效&#xff0c;是一个有趣且实用的功能。本文将通过实现一个具有动画效果的长按录音按钮&#xff0c;带领你一步步了解如何使用 Flutter 完成这个任务&#xff0c;并解释每一部分的实现。 一、功能需求 我们需要一个按钮&#xf…...

【计网】实现reactor反应堆模型 --- 框架搭建

没有一颗星&#xff0c; 会因为追求梦想而受伤&#xff0c; 当你真心渴望某样东西时&#xff0c; 整个宇宙都会来帮忙。 --- 保罗・戈埃罗 《牧羊少年奇幻之旅》--- 实现Reactor反应堆模型 1 前言2 框架搭建3 准备工作4 Reactor类的设计5 Connection连接接口6 回调方法 1 …...

力扣中等难度热题——长度为K的子数组的能量值

目录 题目链接&#xff1a;3255. 长度为 K 的子数组的能量值 II - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示&#xff1a; 解法一&#xff1a;通过连续上升的长度判断 Java写法&#xff1a; C写法&#xff1a; 相比与Java写法的差别 运行时间 时间复杂…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...