CVPR2023:图像分类中的学习瓶颈概念

admin 2025-11-07 阅读:3 评论:0
论文题目: Learning Bottleneck Concepts in Image Classification 摘要 解释深度神经网络的行为对于许多任务都是至关重要的,可解释的AI提供了一种解决这一挑战的方法,主要是通过为决策提供逐...

BotCL concept learning_Learning Bottleneck Concepts in Image Classification_micorsoft

论文题目:

Learning Bottleneck Concepts in Image Classification

摘要

解释深度神经网络的行为对于许多任务都是至关重要的,可解释的AI提供了一种解决这一挑战的方法,主要是通过为决策提供逐像素相关性。然而,解释这些解释可能需要专业知识。最近一些对可解释性的尝试采用了基于概念的框架,在一些概念和模型决策之间给出了更高层次的关系。本文提出瓶颈概念学习者(BotCL),它仅通过在目标任务上训练学习到的概念的存在/不存在来表示图像,而不需要对概念进行明确的监督。它使用自我监督和定制的正则化器,使学习到的概念可以被人类理解。使用一些图像分类任务作为我们的测试平台,我们展示了BotCL重建神经网络以获得更好的可解释性的潜力。

1. 介绍

理解深度神经网络(dnn)的行为是可解释人工智能(XAI)领域的一个主要挑战,特别是在医疗应用、识别dnn中的偏差等方面。大量的研究工作已经投入到事后解释的事后范式中。这个范例产生一个关联映射,以在输入图像中发现与模型决策交互的区域。因此,相关性映射只告诉低级(或逐像素)关系,而不显式地传达决策背后的任何语义,解释相关图可能需要专业知识。

基于概念的框架的灵感来自于人类通过(下意识地)寻找更细粒度的概念来学习新概念的能力,并以不同的方式重用它们以获得更好的识别。这个框架不是给出逐像素的相关性,而是在图像和决策之间提供了由有限数量的概念介导的更高层次的关系。也就是说,通过给出图像中的一组概念来解释决策。因此,一旦对每个概念的解释确定下来,对判决的解释就很简单了。

一些作品将概念用于事后范式,以便更好地解释决策,而决策与图像中的概念之间的联系并不明显。概念瓶颈结构使用概念的存在/缺失作为图像表示(称为概念激活)。分类器只能访问概念激活,因此决策与概念紧密相关。这种瓶颈结构已经成为基于概念的框架的主流。

这个框架的一个主要困难是设计一组适合目标任务的概念,一种很有前途的方法是手工制作它们,这在本质上提供了更好的可解释性,但代价是对概念进行额外的注释,最近的尝试自动发现概念。这些概念可能并不总是与人类(或模型)看待世界的方式一致,并且可能需要一些努力来解释它们,但是在没有监督的情况下发现概念是一个显著的优势。

受这些工作的启发,我们提出了瓶颈概念学习器(BotCL),用于同时发现概念和学习分类器。BotCL为给定的目标图像分类任务优化概念,而不需要对概念进行监督。图像仅由概念的存在来表示,并使用它们进行分类。我们采用了一种基于槽注意的机制来识别每个概念所在的区域。这为解释决策提供了一个额外的信号,因为人们可以很容易地看到每个学习到的概念代表什么,通过集体显示训练图像与检测到的概念。图1显示了来自ImageNet的示例。BotCL在数据集中发现了预定义数量的概念,这些概念通过几个带有注意图的图像来举例说明。大白鲨的图像由嘴的右侧(图1)和鳍(图3)代表。BotCL使用单个全连接(FC)层作为分类器,这很简单,但足以对每个概念和每个类的共存进行编码。

Learning Bottleneck Concepts in Image Classification_micorsoft_BotCL concept learning

贡献 为了更好地发现概念,我们建议对概念使用自监督,灵感来自最近表征学习的成功。我们的消融研究表明,通过对比损失进行自我监督是关键。我们还尝试了对概念本身的一些约束,即个体一致性,使概念更具选择性和相互独特性,以便更好地覆盖各种视觉元素。这些额外的约束规范了训练过程,并帮助模型学习更高质量的概念。

2. 相关工作

2.1. 可解释的人工智能

XAI专注于揭示黑盒深度神经网络。一个主要的方法是生成一个关联图,为模型的决策指明重要的区域。已经为特定的架构设计了各种方法,例如,用于卷积神经网络的CAM和GradCAM;然而,相关图的解释可能并不总是显而易见的,这就催生了不同的方法,包括基于上下文的方法。

2.2. 基于概念的可解释性框架

为目标任务定义一组概念的直接方法是利用人类知识,这些概念可以量化它们对决策的重要性。大量的概念语料库有利于深入研究dnn中的隐藏语义。这些方法属于post-hoc XAI范式,但手工制作的一组概念也可以用作具有概念瓶颈结构的模型的额外监督。

手工制作一组概念可以提供更好的解释性,因为它们符合人类的感知;然而,注释成本是不可忽略的。此外,这种手工制作的概念可能并不总是对dnn有用。这些问题激发了自动概念发现。超像素是查找低级语义的方便单位,概念是通过聚类来定义的。另一个有趣的方法是设计一组概念作为原始DNN特征的充分统计。这些方法纯粹是为解释而设计的,概念发现是在目标任务的训练之外进行的。

概念瓶颈结构允许为目标任务优化一组概念,ProtoPNet采用这种结构,根据特征与概念之间的距离来识别概念,SENN使用重构损失的自我监督进行概念发现。SENN启发我们使用自我监督,但我们采用的不是重建损失,而是量身定制的对比损失。对于自然图像分类任务,这种对比损失对于概念发现至关重要。

3.模型

给定一个数据集D = {(xi, yi)|i = 1,2,…N},其中xi为图像,yi为与xi相关的集合Ω中的目标类标签。BotCL在学习原始分类任务的同时学习一组k个概念。图2a显示了BotCL的训练方案概述,包括概念提取器、正则器和分类器,以及自我监督(对比和重建损失)。

BotCL concept learning_micorsoft_Learning Bottleneck Concepts in Image Classification

对于新图像x,我们使用骨干卷积神经网络Φ提取特征映射F = Φ(x)∈Rd×h×w。然后将F输入到概念提取器gC中,其中C是一个矩阵,每个矩阵的κ-列向量cκ是一个待学习的概念原型。概念提取器产生概念瓶颈激活t∈k,表示每个概念的存在,以及每个概念存在的区域的概念特征V∈Rd×k。t中的概念激活用作分类器的输入,以计算分数s∈|Ω|。我们使用自我监督和正则化器进行训练,以t和V作为输入来约束概念原型。

3.1. 概念提取器

概念提取器使用基于slot attention的机制来发现d中的视觉概念。我们首先在feature map F中加入位置嵌入P来保留空间信息,即F ' = F + P。F '的空间维度是平坦的,因此其形状为l × d,其中l = hw。slot-attention从cκ和F '中计算概念κ在空间维度上的注意力。设Q(cκ)∈Rd, K(F ')∈Rd×l分别表示cκ和F '的非线性变换,以具有三个FC层和一个ReLU非线性的多层感知器给出。注意,akk∈l使用归一化函数φ(参考供应材料)为

这种注意表明了概念κ在图1中出现的位置。如果概念κ不存在,则对应的akk项都接近于0。我们将每个概念的存在归结为概念激活tκ,将akk的空间维数降为tκ = tanh(Σm aκm),其中aκm是akk的第m个元素。

3.2. 特征聚合

对于训练,我们也将F中对应概念κ的特征聚合成概念特征vκ by

它给出了图像特征在以注意力为权重的空间维度上的平均值。

3.3. 分类器

我们使用没有偏置项的单个FC层作为分类器,并且概念激活t = (t1,…。, tk)为唯一输入,作为概念瓶颈。形式上,设W为可学习矩阵,预测y∈R|Ω|由式给出

这个分类器可以大致理解为学习类和概念之间的相关性。设wω为类ω∈Ω对应的W的原始向量,wωκ为其第κ-th元素。ωκ的正值意味着概念κ与数据集中的类ω共出现,因此它在新图像中的存在积极支持类ω。同时,负值意味着概念很少同时出现。

4. 训练

4.1. 概念发现的自监督

概念标签的缺失促使我们将自监督融入到概念发现中。我们对不同类型的目标任务使用两种损失。

重建损失 SENN使用类似自编码器的结构来学习更好的表示。我们假设这种结构在视觉元素与位置紧密联系的情况下工作得很好,因为即使是离散的概念也应该有足够的信息来重建原始图像。基于这一假设,我们设计了一个自监督的重建损失。如图2b所示,解码器D只将t作为输入,对原始图像进行重构。我们将重建损失定义为、

对比损失 自然图像的构成具有很大的随意性,因此t中的信息不足以重建原始图像。因此,我们设计了一个简单的损失作为替代方案whatsapp网页版,借用了最近成功的自监督对比学习的想法。

我们利用目标分类任务的图像级标签,设t = 2t−1k,其中1k为所有元素为1的k维向量。如果一对(t, t ')的概念激活属于同一类(即y和y '对应于t和t '),它们应该彼此相似,因为对应的图像中应该有一组相似的概念,否则不相似。类的数量|Ω|可以小于一个小批处理中图像的数量|B|,这样一个小批处理可以有多个相同类的图像。因此,我们使用sigmoid代替softmax,导致

其中α是减轻类不平衡问题的权重(参见补充材料)和

4.2 正则化概念

我们还使用概念正则化器来促进训练,它们通过{vκ}约束概念原型{cκ}

个体的一致性 为了更好的可解释性,每个学过的概念不应该有很大的变化。即当tκ接近于1时,不同图像的概念特征vκ和v ' κ应该是相似的。设Hκ为一个minibatch中不同图像的所有概念特征的集合,其激活值大于经验阈值ξ,动态计算为一个mini-batch中tκ的均值。使用余弦相似度sim(·,·),我们定义一致性损失为:

其中第二次求和是对概念特征vκ和v ' κ的所有组合进行计算。这种损失会损害vκ和v ' κ之间较小的相似性。

共同的特殊性 为了捕捉图像的不同方面,不同的概念应该涵盖不同的视觉元素。这意味着在一个mini-batch中,由¯vκ = P vκ∈Hκ vκ给出的概念κ的平均图像特征应该不同于任何其他vκ '。我们可以把它编码成损失项

对所有概念的组合进行求和,注意,如果小批图像中没有概念κ,则概念κ被排除在此损失之外。

4.3. 量化损失

概念激活t可以用二值充分表示,但我们使用连续值进行训练。我们设计了一个量化损失保证值接近于0或1,由

式中,abs(·)给出单元绝对值,∥·∥给出欧几里得范数。

4.4. 全部损失

我们使用softmax交叉熵来处理目标分类任务的损失,该损失由lcl提供。BotCL的总损失由上述损失组合定义为

其中lR是lrec或lret,取决于目标域,λqua, λcon, λdis和λR是平衡每一项的权重。

5. 结果

5.1. 实验设置

我们在MNIST、CUB200和ImageNet上评估了BotCL。为了评估发现的概念,我们重新生成了一个合成形状数据集(synthetic)。

对于MNIST,我们对骨干网和概念解码器应用了与相同的网络。对于CUB200(与相同的数据分割)和ImageNet,我们使用预训练的ResNet作为主干,使用1 × 1的卷积层将通道数(ResNet-18为512,ResNet-101为2048)减少到128。我们为MNIST选择了k = 20的概念数,为其他自然图像数据集选择了k = 50的概念数。为了生成Synthetic,我们遵循的设置,其中生成18,000张图像用于训练,2,000张用于评估。我们使用k = 15和ResNet-18骨干网。

图像被调整为256 × 256,裁剪为224×224(合成中的图像直接调整为224×224)。在训练过程中whatsapp网页版,只使用随机水平翻转作为数据增强。每个损失的权重默认为λqua = 0.1, λcon = 0.01, λdis = 0.05, λR = 0.1。

5.2. 分类性能

我们将BotCL的性能与相应的基线(LeNet用于MNIST, ResNet-18用于其他具有线性分类器的基线)、我们重新实现的k-means和PCA以及最先进的基于概念的模型进行了比较。表1总结了结果,具有对比损失的BotCL (BotCLCont)在CUB200、ImageNet和Synthetic上达到了最好的准确率,优于基线线性分类器。它也可以与MNIST和Synthetic上的最先进技术相媲美。具有重建损失的BotCL (BotCLRec)的性能比CUB200、ImageNet和Synthetic有所下降,但在MNIST上优于BotCLCont。这种行为支持了我们的假设,即只有当概念与其空间位置紧密相关时,重建损失才有用。否则,t不足以重建原始图像,BotCL失败,对比自我监督是促进概念发现的关键。

Learning Bottleneck Concepts in Image Classification_BotCL concept learning_micorsoft

我们还探讨了类的数量和BotCL在CUB200和ImageNet上的准确率之间的关系,我们使用小型和大型ResNet变体作为主干。我们提取了由前n个类和类id组成的数据集的子集。图3显示,当类的数量少于200时,BotCL具有竞争力的性能。我们得出结论whatsapp官网,BotCL几乎不会降低小型或中型数据集的分类性能。然而,对于n > 200的情况就不是这样了(对于较大的n和不同的k,请参考参考资料)。

Learning Bottleneck Concepts in Image Classification_BotCL concept learning_micorsoft

5.3. 可解释性

5.3.1对发现的概念进行定性验证

图4a显示了在MNIST上的κ,在图像中显示了概念κ。我们从训练集中最频繁激活(即tκ > 0.5)的20个概念中选择了5个概念。以数字0和9为例,我们可以看到它们共享Cpts.3-5,唯一的区别是位于9垂直笔画的下缘的Cpt.2。这个笔划是针对数字9的。我们使用了BotCLRec,因此我们可以在重建之前删除Cpt.2,这将生成一个类似于0的图像(参见第5.3.3节)。有些概念与人类的直觉不相容;然而,我们可以解释这样的概念(例如,Cpt.1可能关注完成一个圆的缺失笔画)。

BotCL concept learning_micorsoft_Learning Bottleneck Concepts in Image Classification

对于CUB200,我们用n = 50和k = 20来训练BotCLConst。图5a为黄头黑鸟图像的注意图。我们可以观察到Cpts.1-5的注意覆盖了不同的身体部位,包括头,翅膀,背,脚,这证明BotCL也可以从自然图像中学习有效的概念。补充材料例证了从MNIST和CUB200中发现的所有概念。

Learning Bottleneck Concepts in Image Classification_BotCL concept learning_micorsoft

5.3.2各概念的一致性和独特性

BotCL的目的是发现单独一致和相互独特的概念,我们通过在图4b中显示每个概念及其前5个激活图像5和注意图来定性地验证这一点。对于MNIST,不同的概念涵盖不同的模式,每个概念涵盖不同样本(甚至不同类的样本)中的相同模式。图5b显示了BotCL在CUB200数据集上呈现了类似的行为;也就是说,前5个概念负责不同的模式,并且每个概念都是一致的。

5.3.3每个概念在推理中的贡献

我们可以定性地看到每个概念的贡献,通过去除概念,看到相应的自我监督任务输出的变化。如图4c所示,当我们将Cpt.2(负责数字9的垂直笔画)的激活设置为0时,重建的图像看起来像数字0。当Cpt.1(代表数字7的圆不存在)去激活(即t1设为0)时,重构图像的上部出现一个圆。生成的图像看起来更像数字9。

对于图5c所示的CUB200,我们在数据集中显示了与图5a中输入图像最相似的图像,以tut - tut '为标准,并对每个概念进行了消融。当Cpt.1(负责黄头)被停用时,更多的黑头鸟图像出现在前8张图像中。Cpt.5覆盖了鸟类的脚,在大多数鸟类中都很常见。停用这个概念不会改变前8个图像。这些观察结果表明,尽管一些概念对分类性能没有贡献,但概念组合可以成功地表示图像。

5.4. 合成物定量评价

基于概念的方法的一个问题是缺乏对概念的既定定量评价,因为概念的选择可能是任意的,并且可以用不同的概念集实现相同水平的可表征性。单个预定义的概念集不足以评价所发现概念的好坏。文献对概念进行了定性评估(如第5.3节)或通过用户研究(如第5.5节)。

我们决定使用Synthetic对概念进行定量评估。这个任务是一个涉及15个形状的多标签分类。5个形状的组合(如图6a, S.1至S.5所示)形成15个类,其他10个形状为噪声6。当形状的面积和概念κ的面积(BotCL中akk > γ的面积,其中γ = 0.9是预定义阈值)重叠时,我们认为形状被概念κ覆盖,设hsκ = 1表示形状s与概念κ重叠,否则设hsκ = 0。概念κ对s的覆盖由下式给出

其中,对概念κ激活的测试集中的图像计算期望。概念和5个形状作为组合优化问题相关联,以便coveragesk / s的总和最大化。

我们使用k = 15来训练BotCL,图6a显示了与每个形状相关的概念。对于具有最高概念激活tκ的6幅图像,一个概念由akk定位。这些概念涵盖了相对较小区域的相关形状,但一个概念通常涵盖多个形状。这在显示Coveragesκ的图6b中可以进一步证明。Cpt.8只涵盖了S.3,而Cpt.1和Cpt.13涵盖了多个形状。

BotCL concept learning_Learning Bottleneck Concepts in Image Classification_micorsoft

我们使用除准确性之外的三个指标来评估概念发现的性能8:(i)完整性衡量概念在数据集中覆盖其相关形状的程度。(ii)纯洁性表明有能力发现只涉及单一形状的概念。独特性根据覆盖范围对概念之间的差异进行量化。

对比损失的BotCL与ACE进行比较,并比较了两个基线PCA和k-means。我们在空间维度平坦化后,对数据集中所有图像的F应用k-means或PCA。聚类中心或主成分被视为概念。注意图可以通过欧氏距离或余弦相似度来计算,一旦获得了注意图,我们就按照BotCL的过程进行分类。

如表2所示,BotCL比比较方法具有更好的完整性、独特性和准确性得分。虽然k-means能够发现概念,但没有针对目标分类任务进行优化,性能较低。正如我们所讨论的,BotCL学习的概念往往涵盖多个目标形状,导致纯度相对较低。k-means的聚类中心以完整性为代价只能捕获一种形状。我们还可以观察到,所有方法都受到概念数k的影响,通常较大的k可以确保在所有指标上具有更好的性能。这个结果并不令人惊讶,但是我们证实了较大的k对于更好的可解释性是可取的。我们详细介绍了数据集的生成,PCA和k-means的实现,以及供应材料中度量标准的正式定义。

Learning Bottleneck Concepts in Image Classification_BotCL concept learning_micorsoft

5.5. 用户研究

我们的用户研究旨在用现实数据集评估BotCL,以应对人类理解的挑战。参与者被要求观察带有概念κ注意图(参见5.3.2节)的测试图像,并在预定义的词汇表中选择一些最能描述概念的短语(即被关注的区域)。如果他们找不到任何一致的视觉元素,他们也可以选择None。我们为MNIST的每个概念招募了20名参与者,为使用Amazon Mechanical Turk的CUB200招募了30名参与者。

我们定义了三个指标来总结参与者的反应。(i)概念发现率(CDR):不是None的回应与所有回应的比率。更高的CDR意味着参与者可以为许多概念找到一些一致的视觉元素。(ii)概念一致性(CC):在所有对参与者的回答中精确匹配的比率。高值意味着许多参与者使用相同的短语来描述一个概念。(iii)概念之间的相互信息(MIC):在所有可能的概念对上计算的响应分布的相似性。当包含多个概念时,此值很高相同的视觉元素;因此,越低越好。

为了进行比较,我们还对相同的图像评估了手动注释和随机涂鸦。表3显示了BotCL在两个数据集(接近手动注释)上的所有指标上都获得了很好的分数,表明学习到的概念对人类来说是可解释的(来自CDR)、一致的(来自CC)和相互不同的(来自MIC)。更多细节见补充材料。

Learning Bottleneck Concepts in Image Classification_micorsoft_BotCL concept learning

5.6. 消融实验

我们使用默认的超参数进行消融研究,除了待探查的超参数。由于对CUB200和ImageNet没有ground truth概念,因此只评估精度(图7a)。对于Synthetic,精确度和5.4节中的三个指标被采用(图7b)。

BotCL concept learning_Learning Bottleneck Concepts in Image Classification_micorsoft

k的影响 较小的k会降低准确性和其他指标,这意味着需要搜索最少数量的概念。此外,当k很大时,对所有数据集的训练都倾向于失败(详见补充材料)。概念的数量应该针对每个数据集进行调整,这种敏感性是BotCL的局限性之一。

λqua的影响 这个超参数控制t与二进制的接近程度,当λqua逐渐增加时,精度和其他指标变差。BotCL将一些信息编码到t中(比如一个概念占用的面积),在较大的λqua中丢失,极值也可能导致梯度消失。

λcon和λdis的影响 个体一致性和相互显著性损失几乎不会影响CUB200和ImageNet上的性能,尽管我们可以看到当CUB200的值为零时略有下降。对于Synthetic,性能指标根据其设计而变化。同时,精度对这些超参数相对不敏感。概念的选择可能是高度任意的、不同的概念集可能实现相似的分类性能,这种随意性可能允许为目标任务设计专用的概念正则化器。然而,当训练目标设定得很大时,训练失败就会发生,小值有益于训练。

λR的影响 由于重构损耗的性能较低,我们只研究了对比损耗的影响,对比损失几乎总能提高分类精度。在CUB200和Synthetic中,性能提升非常显著。由于ImageNet有更多的训练数据,这可能意味着在训练样本有限的情况下,自我监督对概念的学习有很大的帮助。这些结果证明了对比损耗的重要性。这很有趣,因为这种损失与分类损失使用相同的标签。

6. 结论

本文提出了学习瓶颈概念的BotCL,我们的定性和定量评估表明,BotCL能够在没有明确监督的情况下,通过目标分类任务的训练来学习概念,我们还证明了BotCL可以提供其决策和学习概念本身的可解释性的局限性。BotCL的一个限制是它需要为每个数据集调整k个概念的数量,估计k可能是一个有趣的研究方向,例如,基于给定分类任务中的类数,我们将调查这一现象以缓解这一问题。

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

分享:

扫一扫在手机阅读、分享本文

热门文章
  • 详细指南:WhatsApp国内使用方法全攻略-下载安装、注册登录及功能使用攻略

    详细指南:WhatsApp国内使用方法全攻略-下载安装、注册登录及功能使用攻略
    一、下载与安装WhatsApp WhatsApp是一款全球使用范围极广的即时通讯软件,不仅可以实现文本聊天,还能进行语音、视频通话WhatsApp中文版,发送文件等功能。由于众所周知的原因,国内用户想要下载和安装WhatsApp可能会遇到一些困难。不过,只要按照以下步骤操作,就能顺利完成WhatsApp的下载和安装。 首先,我们需要解决的是下载问题。由于WhatsApp在国内的应用商店无法直接下载,所以我们需要寻找其他的下载途径。Android用户可以选择到各大安卓市场搜索下...
  • 苹果IOS5.1.1机完美越狱

    苹果IOS5.1.1机完美越狱
    越狱工具下载:(需手动复制: http://bbs./read-htm-tid-4804612.html ) 详细的越狱教程: Absinthe 2.0.4的越狱方法与Absinthe 1.0的越狱方法完全一样,非常简单的“傻瓜一键式”。不过这里绿毒有说明,最好重新刷固件。支持越狱设备IOS5.1.1的固件下载地址请点击本站的IOS固件下载,看下图: 下载完固件之后,把设备连接iTunes,开始刷固件。你也可以选择不刷,但是在越狱的过程之中,新的系统在越狱时会比较的顺利,...
  • 电脑微信的聊天照片文件在哪里微信图片保存电脑哪个文件夹

    电脑微信的聊天照片文件在哪里微信图片保存电脑哪个文件夹
    1. 怎么找到微信聊天图片在哪个文件夹里 图片保存路径:/storage/emulated/tencent/MicroMsg/WeiXin/文件夹,这个是完整路径。而在文件夹中只需要找到/tencent/MicroMsg/WeiXinWhatsApp中文版,就可以了,前面两个文件夹是系统根目录。以下是保存及查找图片的方法步骤介绍。 第一步、找到桌面的微信APP,直接点击打开这个微信的APP。 2. 电脑微信图片保存在哪个文件夹 个人微信文件夹。 电脑版微信聊天的图片,都保存到...
  • Windows 11版WhatsApp将从UWP/Native切换回WebView2打包模式

    Windows 11版WhatsApp将从UWP/Native切换回WebView2打包模式
    Meta(最近更名为 Meta AI)悄然宣布,WhatsApp 将在 Windows 11 上放弃 UWP(WinUI)WhatsApp中文版,退回采用基于 Chromium 的容器。这意味着 WhatsApp 又回到了几年前的样子。由于 web.whatsapp.com 一直领先于 Windows 应用开发,它确实拥有一些新功能,但速度更慢,占用更多内存。 如果独立开发者因为无力维护所有平台的代码库而选择 Web 应用程序,那是一回事,但当像 Meta 这样价值万亿美元...
  • 小米下載WhatsApp的完整指南:安装与使用注意事项

    小米下載WhatsApp的完整指南:安装与使用注意事项
    综上所述,确保您的小米手机具备以上条件,将有助于您顺利下载和安装WhatsApp,享受便捷的通讯服务。在满足这些条件后,您就可以按照后续步骤进行WhatsApp的下载和安装。 2. 下载和安装WhatsApp的具体步骤 在小米手机上下载和安装WhatsApp的具体步骤相对简单,但需注意一些特殊情况。首先,确保你的手机系统已更新到最新版本,以保证最佳的兼容性。由于安卓手机商店内无法直接找到WhatsApp,你可以通过APKPure等第三方应用商店进行下载。打开APKPure应用...