点击下方卡片,关注“自动驾驶之心”公众号
ADAS巨卷干货,即可获取
点击进入→自动驾驶之心技术交流群
后台回复【transformer综述】获取2022最新ViT综述论文!
近年来,
Transformer
模型在各个领域都取得了巨大的进展。在计算机视觉领域,视觉Transformer
(ViTs
)也成为卷积神经网络(ConvNets
)的有力替代品,但它们还无法取代ConvNet
,因为两者都有各自的优点。例如,ViT善于利用注意力机制提取全局特征,而ConvNets
由于其强烈的归纳偏差,在建模局部关系时更有效。一个自然的想法是结合
ConvNets
和ViT
的优势来设计新的结构。本文提出了一种新的基本神经网络算子,称为位置感知循环卷积(ParC
)及其加速版本Fast-ParC
。ParC
算子通过使用全局核和循环卷积来捕获全局特征,同时通过位置嵌入来保持位置敏感性。
Fast-ParC
使用快速傅里叶变换将ParC
的O(n2)时间复杂度进一步降低为O(n log n)。这种加速使得在具有大型特征映射的模型的早期阶段使用全局卷积成为可能,但仍保持与使用3×3或7×7内核相当的总体计算成本。所提出的操作可以以即插即用的方式使用:1)将
ViT
转换为纯ConvNet
架构,以获得更广泛的硬件支持和更高的推理速度;2)在
ConvNets
的深层替换传统的卷积,通过扩大有效感受野来提高准确性。实验结果表明,ParC
操作可以有效地扩大传统ConvNets
的感受野,并且在所有三种流行的视觉任务(图像分类、目标检测和语义分割)中,采用所提出的操作都有利于ViT
和ConvNet
模型。
1、简介
视觉Transformer
近年来一直呈上升趋势。2017年首次提出变压器,以解决NLP
任务。2020年,Dosovitskiy等人将原始Transformer
直接应用于图像分类任务,发现在对大型数据集(如ImageNet-21K或JFM-300M)进行预处理时,它比卷积网络(ConvNets
)取得了更好的结果。ViT
及其变体随后被广泛用于其他下游视觉任务,如物体检测、语义分割和多模态任务,如人-物体交互(HOI)、文本-图像(T2I)合成等。尽管Transformer
取得了巨大成功,但它们仍然不能完全取代ConvNets
。正如在以前的工作中总结的那样,与ViTS
相比,ConvNets
具有更好的硬件支持,更易于训练。此外,ConvNets
在移动和其他边缘计算场景的轻量级模型领域仍然占据主导地位。
Transformer
和ConvNets
都有其独特的特点。对于Transformer
,广泛认可的多头注意力机制旨在捕获Token
之间的远程关系,这为Transformer
提供了强大的全局建模能力。虽然擅长这种全局表示能力,但它也需要更高的计算资源。自注意力机制的时间复杂度是Token
数量的二次方,因此处理高分辨率特征图的速度较慢。与之不同的是,卷积运算擅长于提取局部信息。它在一个小的滑动窗口(通常为3×3)内捕获局部信息,并将同一卷积核用于不同的输入和不同的空间位置。它可以解释为一种有效的隐式权重分配方案,使得卷积的所需参数仅随输入线性增长。
此外,ConvNets
已经被很好地研究并使用了更长的时间,因此它们还具有其他一些独特的优势。例如,ConvNets
的剪枝和量化等压缩算法已经成熟。至于硬件实现,无论是在CPU
、GPU
等通用平台上,还是在FPGA
、ASIC
等专用加速器上,都有许多现有的加速方案(如Winograd
、FFT
、im2col
)。总之,卷积运算的实现成本较低,但它不能像自我注意那样捕获全局关系。显然,变压器的表示能力和ConvNets
的效率之间存在互补关系,两者对于实际应用都是不可或缺的。
最近有一些工作结合了Transformer
和ConvNets
的优点。PVT
、Swin
和CoAtNet
试图重新引入卷积的感应偏差(例如其滑动窗口策略),以帮助Transformer
模型更好地学习。像LeViT
、MobileViT
、EfficientFormer
这样专注于设计高效的混合架构。这些工作大多将这两种网络结合在一起,但它们未能解决关键问题:新引入的注意力算子的额外计算和工程复杂性。很自然地会问:如果有可能设计一个不同于自注意力和传统卷积的新算子,它同时具有双方的优点吗?
本文结合Transformer
和ConvNets
的优点,构造了一种新的即插即用运算符ParC
。ParC
具有全局接受域,因为使用全局核(Kh=H或Kw=W)并采用循环卷积方案。然后,在卷积之前采用一个明确的可学习位置嵌入,以保持模型位置敏感。
如图1所示,不同的ConvNet
模型通过简单地应用提出的ParC
算子,改善了它们对全局的有效感受野。由于ParC
使用纯卷积运算,因此可以高效地部署在不同的平台上。最后,将二维卷积分解为两个一维卷积,以克服FLOP/参数的增加。基于上述设计实现了提取全局特征的目标,同时在空间和时间复杂度方面仍保持低成本。
通过实验验证了新算子在各种任务和模型中的有效性。总之,本文的贡献可以概括为以下3点:
-
结合
ViT
和ConvNets
的优点,提出了一种有效的新算子ParC
。实验证明了ParC
的优势,将其应用于广泛的模型,包括MobileViT
、ResNet50
、MobileNetV2
和ConvNext
。我们还对这些模型进行了多任务评估,包括分类、检测和分割。 -
为了克服输入特征分辨率较大时,
ParC
的复杂性变得难以克服的问题,提出了快速ParC。Fast Parc
理论上等同于Parc
,例如,当给定相同的输入时,它们的输出是相同的。然而,当给定较大的分辨率(例如112×122)时,它比ParC
效率高得多。Fast ParC
扩展了ParC
的使用场景,使其成为一个更广泛的应用操作符。 -
分析了新算子的内部机理。通过可视化显示了
ParC
和标准卷积之间的几个不同之处。实验表明,标准ConvNet
的有效感受野(ERF
)非常有限,而基于ParC
的网络确实具有全局ERF
。Grad CAM
还表明,基于ParC
的网络在关注图像的重要区域方面比普通ConvNets
更全面。作者还对ParC
和标准卷积之间的差异进行了详细分析。
2、相关工作
2.1、理论上/有效的感受野
Hebel等人在神经科学中发现,浅层神经元仅提取局部特征,覆盖范围逐层累积,称为“感受野(RF)”。自VGGNet
成功以来,CNN
架构的设计遵循了类似的模式——使用3×3这样的小卷积核堆叠,而不是更大的卷积核。之前的一些工作给出了CNN
感受野的理论计算,即理论感受野(TRF
)——在这个概念下,两层3×3的感受野等于一层5×5。
然而,一些工作对这一观点提出了质疑,因为事实上像素在特征图中的重要性从中心到边缘迅速退化。随后,有效感受野(ERF
)被提出用于测量输入图像中可能影响神经元激活模式的区域。Luo等人通过反向传播中心像素并计算输入图像的偏导数来检查该区域。通过研究一系列卷积网络,他们发现有效的感受野通常比理论上的对应物小得多。
SKNet
采用注意力机制选择合适的感受野。RF Next
提出了一个基于NAS
的工作流,用于自动搜索模型的感受野。
这些工作表明,对感受野的正确选择对网络的性能非常有利。最近的工作还发现,扩大卷积网络的感受野可以导致更好的模型性能。这里称之为“大卷积核网络”。
2.2、Vision Transformer和混合结构
ViT
在各种视觉任务上取得了令人印象深刻的表现。然而,最初的ViT
有一些限制。例如,它很重,计算效率低,很难训练。为了克服这些问题,提出了ViT
的后续变体。从改进训练策略的角度出发,Touvron等人提出使用知识蒸馏来训练ViT
模型,并用较少的预训练数据实现竞争准确性。为了进一步改进模型架构,一些研究人员试图通过学习ConvNets
来优化ViT
。其中,PVT
和CVT
将卷积操作插入到ViT
的每个阶段,以减少Token
的数量,并构建分层多阶段结构。Swin transformer
在移位的局部窗口内计算自注意力。PiT
联合使用池化层和深度卷积层来实现通道倍增和空间缩减。CCNet
提出了一种称为交叉注意力的自注意力机制的简化版本,并将其插入到ConvNets
中,以构建具有全局感受野的ConvNet
。这些论文清楚地表明,ConvNets
的一些技术可以应用于视觉transformer
,以设计更好的视觉transformer
模型。
另一个流行的研究方向是结合ViT
和ConvNets
的元素来设计新的主干。Graham等人在其LeViT
模型中混合了ConvNet
和transformer
,在速度/精度权衡方面明显优于以前的ConvNet
和ViT
模型。在ResNet
的最后几个块中,BoTNet
用多头注意力代替了标准卷积。ViT-C
为标准ViT
添加了早期Stem
。ConViT
通过门控位置自注意力结合了软卷积感应偏置。CMT
模块由基于深度卷积的局部感知单元和轻量化transformer
模块组成。CoatNet
将卷积和自注意力结合起来,设计了一个新的transformer
模块,该模块同时关注局部和全局信息。
2.3、Large Kernel卷积网络
早期的ConvNets
(如AlexNet
和GoogleNet
)使用5×5或7×7这样的大卷积核。但由于VGGNet
的成功,堆积3×3和1×1这样的小卷积核被认为是计算和存储的有效选择。最近,受视觉transformer
成功的启发,大卷积核被重用为一个强大的工具,再次提高模型的性能。ConvNext
通过引入一系列增量但有效的设计,使标准ResNet
现代化,用于视觉transformer
的设计,其中7×7深度方向卷积是按照Swin
中Window SA
使用的。RepLKNet
将卷积内核扩展到31×31并获得性能增益,但使用的重参化技巧会加重训练过程的负担,并且模型部署需要额外的转换步骤。后来,Rao等人使用了一个更大的51×51的动态稀疏卷积核。GFNet
用FFT
实现的全局傅里叶卷积代替transformer
块中的SA(自注意力)。
我们的工作与RepLKNet
和GFNet
密切相关。这些方法和我们提出的ParC
都侧重于扩大有效感受野,但我们提出的操作与以下观点不同:
-
我们的
ParC
使用可学习的位置嵌入来保持结果特征地图的位置敏感。这对于位置敏感的任务很重要,例如语义分割和对象检测。烧蚀研究中的实验也证实了这一点。 -
我们的
ParC
采用轻质设计。RepLKNet
使用重型2D卷积核,GFNet
使用2CHW形状的可学习复杂权重矩阵,而我们使用二维一维卷积,将核缩减为CH或CW。 -
与强调整体网络设计的
RepLKNet
和GFNet
不同,我们提出的ParC
是一个新的基本运营商,可以以即插即用的方式插入到ViT
和ConvNets
中。
此外,我们还提出了Fast ParC
,它进一步拓宽了ParC
的使用场景。
3、本文方法
3.1、ParC Operation
1、Vanilla Depth-wise Convolution
为了描述在B×C×H×W形状的4D输入张量上以水平维进行的一维深度卷积(称为Conv1d-H
),可以首先关注一个特定的通道。将输出表示为 ,输入为,卷积权重为 。然后,带零填充的Pytorch
型卷积(即F.conv1d
)可以表示为:
其中,用于抵消输入两侧标量的额外填充。等式1中,是其局部相邻输入,邻域的大小由卷积核大小控制。因此,单个小卷积核卷积层不可能收集远距离信息。为了解决标准卷积的这个缺点,作者提出了具有全局感受野的ParC
。
2、ParC: 位置感知循环卷积
定义作为卷积核权重,作为位置嵌入。对应图2,ParC
可以描述为:
其中。是固定大小的可学习kernel(由超参数指定),而是调整后的可学习kernel,其大小与相应的输入特征映射大小匹配。表示位置嵌入。这里采用插值函数(例如bi-linear
, bi-cubic
)来适应kernel的大小和位置嵌入(从到H)。mod
表示模运算。与普通卷积相比,ParC算子有4个主要区别:
-
Global kernel
-
Circular Convolution
-
Positional Embedding
-
1-D Decomposition
为了有效地提取全局特征,这些设计都是必不可少的,这在后面的消融实验中得到了证明。
Global kernel and Circular Convolution
为了在整个输入映射中提取全局关系,ParC
采用了Global kernel
,其大小与相应特征映射的大小相同,表示为或。在某些架构中,每个阶段都会缩小一半。例如,在ResNet50
或ConvNeXt
中,4阶段的特征分辨率分别为[56、28、14、7]。但仅仅增大普通卷积核本身的大小并不能有效地提取全局关系。由于使用了零填充,即使kernel
大小增加到分辨率,kernel
权重也会与零填充对齐,除了绝对位置之外,零填充无法提供有用的信息。当kernel
与图片边缘对齐时,这种影响最为严重——对于2D卷积,3/4的输入实际上是零。因此,还建议使用Circular Convolution
。在进行Circular Convolution
时,在窗口滑动期间,kernel
权重总是与有效像素对齐,如图2所示。
Positional Embedding
正如在之前的工作中得出的结论,标准卷积可以在使用零填充时对位置信息进行编码。然而,Circular Convolution
会周期性地重用输入图片,这会丢失部分位置信息。为了克服这个问题,引入了可学习的位置编码,它被插入到Circular Convolution
之前。在接下来的实验中证明了这对模型的性能非常重要,特别是对于对空间信息敏感的下游任务。
1D Decomposition
最后,为了确保模型尺寸和计算的可接受成本。将2D卷积和位置编码分为H(水平)和V(垂直)方向,这样可以将参数和FLOP的数量从O(H×W)减少到O(H+W),当分辨率较大时,这是一个相当大的压缩。
Implementation of Circular Convolution
从概念上讲,Circular Convolution
需要与普通卷积分开实现,因为在计算卷积像素的索引时有额外的模op。实际上,在调用普通的1D卷积例程之前,可以使用“concat”函数将输入特征映射与其副本填充,从而轻松实现该功能(参见算法1)
当考虑垂直尺寸W和通道尺寸C时,公式2可以扩展为
和,这是通道C的单层深度ParC-H
的完整表示,输入分辨率为H×W
。在ResNet50 ParC
中,还将每个通道的ParC
扩展到其稠密对应项,并重新引入通道相互作用,可以表示为:
这里 和。
3.2、Fast-ParC: 用FFT等价形式加速ParC
如图3所示,当特征分辨率较小时(如7×7),应用ParC
可以有效地提取全局特征并降低计算复杂度。但随着输入分辨率的提高,ParC
的复杂度迅速超过7×7卷积。为了克服这个问题提出了一个名为Fast ParC
的ParC
加速版本。当特征分辨率较大时(例如,56×56),Fast ParC
比ParC
效率更高。事实上,Fast ParC
虽然具有全局提取能力,但在较宽的分辨率区间内,其效率甚至比7×7卷积更高。
借助于快速傅里叶变换(FFT
)设计了Fast ParC
。众所周知,FFT
可以简化线性卷积运算。但根据卷积定理,对于离散信号,傅里叶域的点积更接近于空间域的Circular Convolution
。这正是ParC
和普通卷积的区别之一。
此外,ParC
的另外两个特征,global kernel 和right padding,也很好地符合傅里叶域卷积的默认模式。这一有趣的事实能够为ParC
开发一个非常整洁、漂亮的频域实现。将、和定义为时域中的输入、权重和输出序列,、和定义为傅里叶域中的序列,可以得到以下等价关系:
定理1:ParC
等价定理
公式5显示了两个严格等效的数学表达式。空间域中的ParC
需要卷积式运算,而在傅里叶域中,它变成了简单的逐元素乘法。基于此提出了一种傅里叶域形式的ParC
运算,称为Fast ParC
。
理论上可以证明,Fast ParC
在空间域上严格等价于ParC
。这两种实现之间的误差可以忽略不计。可以根据实际使用的平台,分别选择适当的ParC
实现进行训练和推理。这为ParC
提供了强大的灵活性。Fast ParC
的优势显而易见:
首先,长度为N的一维傅里叶变换的乘法复杂度仅为,而空间域的一维卷积需要。
与表1相对应,当N较大时,空间卷积的复杂度明显超过了基于FFT
的卷积。ParC
使用Global kernel
和Circular Convolution
,这与傅里叶卷积的默认空间格式相匹配。考虑到下游任务,如多实例检测或分割,通常需要更高的分辨率。例如,对于COCO,常用的测试分辨率为1280×800,对于ADE20k
为2048×512。当N较大时,Fast ParC
可以节省模型的FLOP
并实现更好的加速。Fast ParC
还允许在计算预算可接受的情况下,将ParC
用于较浅的阶段。这对于在新架构中实现ParC
是必要的。
另一个优势实际上来自对FFT
的软件/硬件支持。由于FFT
是一种经典的信号处理算法,许多平台都对其加速提供了现成的支持。当ParC
应用于FPGA
等定制平台时,许多资源(如片上DSP
、预先设计的IP核)可以得到有效利用。
此外,通用计算平台也有现成的工具包(例如CPU:torch.fft
、numpy.fft
;GPU:cuFFT
)。Fast ParC
的灵活性使之能够根据不同的标准(例如,最大吞吐量、最小内存占用)以及不同计算平台中算法的实际偏好选择更好的实现。
幸运的是,FastParC
完全等同于ParC
,并且替换不需要任何额外的转换。可以根据平台的要求选择ParC
的具体实现形式。由于ParC
和Fast ParC
拥有最高级别的灵活性,用于训练和推理的实现也可以解耦。
3.3、在ViT和ConvNets上应用ParC
为了验证ParC
作为即插即用元运算符的有效性,基于第3.1节中提出的操作构建了一系列基于ParC
的模型。这里,基线模型包括ViT
和ConvNets
。具体而言,对于ViT
,MobileViT
被选为基线,因为它在最近提出的轻型混合结构中实现了最佳参数/精度权衡。
采用ResNet50
、MobileNetv2
、MobileViT
和ConvNext
作为ConvNet
基线。ResNet50
是实际应用中使用最广泛的模型。MobileNetV2
是移动设备中最流行的轻量化模型。ConvNext
是第一个ConvNet
,它保留了纯ConvNets
架构,同时集成了ViT
的一些特性。在这里采用的4种模型都具有代表性。
1、ParC-ViTs
ParC-MetaFormer Block
如图4和图5所示,ConvNets
和ViTs
的外层结构差异较大。vit
通常采用 meta-former block
作为基本架构。为了在ViTs
上应用ParC
运算符,作者设计了ParC-MetaFormer block
,并使用它来替换ViTs
中的transformer blocks
。
Adopting MetaFormer like structure
MetaFormer
块是ViT
最常用的块结构,它通常由2个组件组成:token mixer
和 channel mixer
。这两个组件都使用残差结构。采用ParC
作为token mixer
来构建ParC MetaFormer
块。这样做是因为ParC
可以从全局空间中提取全局特征并交互像素之间的信息,这满足了token mixer
模块的要求。
与复杂度为二次的自注意力不同,ParC
在计算上效率更高。用ParC
替换此部分可以显著降低计算成本。在ParC MetaFormer
区块,采用了ParC-H
和ParC-V
的串行结构。考虑到对称性,一半通道首先通过ParC-H
,其他通道首先通过ParC-V
(如图4所示)。
Adding channel wise attention in channel mixer part
尽管ParC
保持了全局感受野和位置嵌入,但ViT
对ConvNets
的另一个好处是数据驱动。在ViT
中,自注意力模块可以根据输入调整权重。这使得ViT
数据驱动模型能够专注于重要特性并抑制不必要的特性,从而带来更好的性能。
以前的文献已经解释了保持模型数据驱动的重要性。通过用提出的全局循环卷积代替自注意力,得到了一个能够提取全局特征的纯卷积网络。但被替换的模型不再是数据驱动的。为了进行补偿,将通道注意力模块插入 channel mixer
部分,如图4所示。
遵循SENet
,首先通过全局平均池化聚合输入特征并获取聚合特性,然后将馈入多层感知机以生成通道权重,然后乘以通道,生成最终输出。
MobieViT-ParC Network
目前,现有的混合结构基本上可以分为3种主要结构,包括串行结构、并行结构和分叉结构。在所有三种结构中,第三种结构目前性能最佳。MobileViT
也采用了分叉结构。受此启发,基于MobileViT
,还构建了具有分叉结构的模型。MobileViT
由两种主要类型的模块组成。浅层由MobileNetV2
区块组成,具有局部感受野。深层阶段由ViT
块组成,享有全球接受场。保留所有MobileNetV2
块,并用相应的ParC
块替换所有ViT
块。此替换将模型从混合结构转换为纯ConvNet
,同时保留其全局特征提取能力。
2、ParC-ConvNets
对于ParC ConvNets
,专注于为ConvNet
提供全局感受野。用ParC
操作替换标准卷积(如图5(a)所示),作者构建了不同的基于ParC
的块。以往的混合结构工作得出了类似的结论:早期使用局部模块,深层使用全局提取模块的模型性能最佳。由于ParC
拥有一个全局感受野,按照这个规则将基于ParC
的块插入ConvNets
(如图5(e)所示)。
ParC BottleNeck and ResNet50-ParC Network
ResNet
是最经典的ConvNet
之一。只需将原始ResNet50
BottleNeck
的3×3卷积替换为ParC
运算符,即可获得ParC BottleNeck
(见图5(b))。由于ParC-H
和ParC-V
的特性可能有显著差异,因此它们之间没有引入通道相互作用。这类似于采用group=2
的组卷积。ResNet
的主要部分可以分为4个阶段,每个阶段由几个重复的瓶颈块组成。
具体来说,ResNet50
在4个阶段中分别有[3、4、6、3]个块。通过将ResNet50
倒数第二阶段的最后1/2和最后阶段的最后1/3替换为ParC BottleNeck
,获得了ResNet50 ParC
。
ParC-MobileNetV2 Block and MobileNetV2-ParC Network
MobileNetV2
是轻量级模型的典型代表。通过将Inverted Bottleneck
中的3×3深度旋转替换为depthwise ParC
,得到了ParC-MobileNetV2
块(见图5(c))。MobileNetV2
比Resnet50
要更细更深,7个阶段的块数分别为[1、2、3、4、3、3、1]。通过将第4阶段的最后1/2块和第[5,6]阶段的最后1/3块替换为ParC-MobilenetV2
块,可以获得MobilenetV2 ParC
。
ParC-ConvNeXt Block and ConvNeXt-ParC Network
ConvNeXt
对原始ResNet50
结构进行了一系列修改,以学习transformers
。在此期间,3×3卷积替换为7×7深度卷积。这扩大了局部感受野,但仍无法分级全局信息。作者进一步用depthwise ParC
替换ConvNeXt
块中的7×7深度卷积。由此得到了ParC ConvNeXt
区块(见图5(d))。将ConvNeXt
最后两个阶段的最后1/3块替换为ParC ConvNeXt
块,得到了ConvNeX t ParC
的一个示例。将ConvNeXt-T
中的基本通道数减少到48(即每个阶段为[48,96,192,384]),以获得一个轻量级ConvNeXt-XT
,这在部署边缘计算设备时更受欢迎,而且实验周期也更短。
请注意,在ParC MetaFormer
中,采用了ParC-H
和ParC-W
序列,以保持感受野与自注意力一致,因为这种设计用于取代自注意力。在ParC ConvNets
中采用了ParC-H
和ParC-V
的并行结构(每一层都是单层),如图5所示。根据实验结果,这种设置已经可以提供足够的性能增益来对抗普通ConvNet
。事实上,由于不仅使用一个ParC ConvNet
块,ParC ConvNets
仍然具有全局感受野。
4、实验
4.1、ImageNet-1K
4.2、语义分割与目标检测
4.3、实例分割
4.4、速度与参数对比
5、参考
[1].Fast-ParC:Position Aware Global Kernel for ConvNets and ViTs.
往期回顾
一文尽览 | 首篇Transformer在3D点云中的应用综述(检测/跟踪/分割/降噪/补全)
【自动驾驶之心】全栈技术交流群
自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、规划控制、模型部署落地、自动驾驶仿真测试、硬件配置、AI求职交流等方向;
加入我们:自动驾驶之心技术交流群汇总!
自动驾驶之心【知识星球】
想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球(三天内无条件退款),日常分享论文+代码,这里汇聚行业和学术界大佬,前沿技术方向尽在掌握中,期待交流!
今天的文章即插即用的缩写是什么_即插即用设备是指分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/86877.html