《Large-Scale Long-Tailed Recognition in an OpenWorld》

Ziwei Liu1;2 Zhongqi Miao2 Xiaohang Zhan1 Jiayun Wang2 Boqing Gong2y Stella X. Yu2
0摘要:

真实世界的数据通常有一个长尾和开放式的分布。一个实际的认知系统必须对多样本类别和少样本类别进行分类,从少数已知的事例中归纳,对于从未见过的事例中识别为新事物。我们将开放长尾识别(OLTR)定义为从自然分布的数据中学习,并在包含:1)头、2)尾和 3)开放类的平衡测试集上优化分类精度。OLTR必须在一个集成的算法中处理不平衡的1)分类、2)少镜样本学习和3)开放集识别,而现有的分类方法只关注一个方面,在整个类谱中表现不佳。关键的挑战是如何在头类和尾类之间1)共享可视化知识,以及如何2)减少尾类和开放类之间的混淆。我们开发了一个集成的OLTR算法,它将图像映射到一个特征空间,这样视觉概念就可以很容易地基于一个学会的度量,尊重封闭世界的分类,同时承认开放世界的新颖性。我们所谓的动态元嵌入结合了一个直接图像特征和一个相关的记忆特征,特征范数表示对已知类的熟悉程度。在我们从以1)对象为中心的ImageNet、2)以场景为中心的Places和3)以面部为中心的MS1M数据中管理的三个大型OLTR数据集上,我们的方法始终优于最先进的技术。我们的代码、数据集和模型使未来的OLTR研究成为可能,并可通过https://liuziwei7.github.io/projects/LongTail.html.

1引言:

我们的视觉世界本质上是长尾开放的:我们日常生活中的视觉类别的频率分布是长尾[42],有一些常见的类和许多更少见的类,当我们在一个开放的世界中导航时,我们经常会遇到新的视觉概念。(长尾的典型是2-8分布,即20%的类占据80%的样本,如20%的人拥有80%的财富)

图1

自然的数据分布包含head、tail和open类(图1),而现有的分类方法大多集中在head[8,30]和tail[55, 27],通常在封闭的环境中[59,34]。传统的深度学习模型善于捕捉head classes的大数据[26,20];最近,针对尾类的小数据开发了少量射击学习方法[52,18]。我们正式研究了在自然数据设置中出现的开放长尾识别(OLTR)。一个实际的系统应该能够在几个常见的和许多罕见的类别中进行分类,从几个已知的实例中概括出一个单一类别的概念,并在一个从未见过的类别的实例中承认新颖性。我们将OLTR定义为从长尾和开放端分布数据中学习,并在连续频谱中通过包含头、尾和开放类的平衡测试集来评估分类精度(图1)。OLTR必须处理封闭世界中的不平衡分类和少样本学习,但也有一种集成算法的开放集识别(表1)。现有的分类方法往往侧重于一个方面,在整个类谱上表现不佳。(以往的重点是针对头类,也就是大样本的分类,最近少样本也有了一些方法,但开放集还较少,该文章试图用一个算法OLTR同时解决大样本、少样本、开放集识别问题)

OLTR的关键挑战是尾部识别的鲁棒性和开放集的灵敏度:当训练实例的数量从在头类中的数千个下降到在尾部类中的少数,识别精度应保持尽可能高;另一方面,当开放集的实例数下降到零时,识别精度依赖于区分未知开放类和已知尾部类的灵敏度。一个完整的OLTR算法应该解决连续类谱上的识别鲁棒性和识别灵敏度这两个看似矛盾的问题。为了提高识别的鲁棒性,必须在头尾类之间共享视觉知识;为了提高识别灵敏度,它必须减少tail和open类之间的混淆。我们开发了一种OLTR算法,该算法将图像映射到特征空间,这样视觉概念就可以很容易地基于一个学会的度量,尊重封闭世界的分类,同时承认开放世界的新颖性。(这个鲁棒性是指要能够将出现很少的样本分类出来#最好能够像多样本一样鲁棒#,尽量不要将他们分到未知类中#避免和未知类别混淆#,同时灵敏度又要将完全没出现过的样本识别出来#例如,提供拒绝选项#,尽量不要将他们分为少样本类,这为什么矛盾呢,因为要实现鲁棒性就很可能会将未知样本误分到少样本类中,而灵敏度很可能会将少样本分类到未知类中)

我们所谓的动态元嵌入通过结合两个部分来处理尾部识别的鲁棒性:1)从输入图像计算得到的直接特征和与2)视觉记忆相关的诱导特征。1)我们的直接特征是一个标准的嵌入,通过对分类损失的随机梯度下降对训练数据进行更新。直接特征对罕见的tail类缺乏足够的监督。(缺少少样本判别能力)2)我们的记忆特征灵感来自于记忆的元学习方法[55,12,2],从图像中增强直接特征。视觉记忆具有直接特征的区分中心。(加强少样本判别能力)我们学会了从直接特性中检索记忆激活的摘要,并将其结合到元嵌入中,该元嵌入特别针对tail类进行了丰富。我们的动态元嵌入通过根据视觉记忆动态校准元嵌入来处理开放识别敏感性嵌入与它到最近质心的距离成反比:离记忆越远,离原点越近,越有可能是开放集实例。(加强开放集识别能力)我们也采用modulated 注意力[56]来鼓励头类和尾类使用不同的空间特征集。由于元嵌入涉及头类和尾类,我们modulated 的注意力保持了它们之间的区别。

我们做出了以下主要贡献。1)我们正式定义了OLTR任务,它从自然长尾和开放端分布数据中学习,并在一个平衡的测试集上优化整体准确率。它提供了在实际环境中对视觉识别算法的全面和无偏的评价。2)我们开发了一个动态元嵌入的OLTR算法。它通过将头尾嵌入的视觉概念关联起来来处理尾识别的鲁棒性,通过根据视觉记忆动态校准嵌入规范来处理开放识别的敏感性。3)我们根据现有代表性数据集的长尾分布来管理三个大型OLTR数据集:以对象为中心的ImageNet、以场景为中心的MIT Places和以面部为中心的MS1M数据集。我们设置了适当的OLTR性能评估基准。4)我们在这些OLTR数据集上的广泛实验表明,我们的方法始终优于最先进的。

表1

2相关工作

虽然OLTR在文献中没有被定义,但有三个紧密相关的任务经常被单独研究:不平衡分类、少镜头学习和开放集识别。表1总结了他们的差异。

不平衡的分类。它起源于自然数据的长尾分布,已被广泛研究[45,66,4,32,67,38,31,53,7]。经典的方法包括头类的欠采样、尾类的过采样和数据实例的重加权。我们请读者参阅[19]以获得详细的回顾。最近的一些方法包括度量学习[24,37]、 hard negative 挖掘[11,29]和元学习[17,59]。提升结构损失[37]在许多训练实例之间引入了边界。距离损失[64]使得同一类中的数据比较接近,而不同类中的数据比较遥远。focal loss[29]引入了hard negative 挖掘的在线版本。MetaModelNet[59]从头类中学习了一个元回归网,并用它为尾类构造分类器。我们的动态元嵌入结合了度量学习和元学习的优势。一方面,我们的直接特征被更新,以确保不同类别的中心彼此远离;另一方面,我们的记忆特征是以元学习的方式即时生成,以有效地将知识转移到尾部的类中。

Few-Shot学习。它通常被表述为元学习[50,6,41,46,14,61]。匹配网络[55]学习了一个可转移的特征匹配度量来超越给定的类。原型网络[52]维护一组可分离的类模板。特征hallucination [18]和增强[57]也是有效的。由于这些方法关注于新的类,因此对于head类来说,它们的性能通常会有一定程度的下降。也有一些例外。带遗忘的少样本学习的[15]和增量少样本学习[43]试图通过利用特征和分类器权重之间的对偶性来弥补这个问题[40,39]。然而,在所有这些方法中使用的训练集是平衡的。相比之下,我们的OLTR学习的是更自然的长尾训练集。然而,我们的工作与快速权重和联想记忆的元学习密切相关[22,49,55,12,2,36],以实现快速适应。与这些现有技术相比,我们的记忆特性有两个优点:1)通过学习概念选择器自适应地将知识传递给头类和尾类;2)完全融入网络,不需要经过片段式训练,特别适合大规模应用。

开集的识别。开放集识别[48,3]或分布外检测[10,28],旨在重新校准开放类存在时的样本置信度。其中一个典型的技术是OpenMax[3],它对分类器的输出对数拟合一个威布尔分布。但是,当open类和tail类同时存在时,分布拟合可能会将二者混淆。本方法信将置信度估计融入到特征学习中,并动态地将元嵌入w.r.t.重新缩放到学习后的视觉记忆中,而不是对输出日志进行校准。

3OLTR 模型

我们建议将一个图像映射到一个特征空间,这样视觉概念可以很容易地相互关联,基于一个学习的度量,尊重封闭世界的分类,同时承认开放世界的新颖性。我们的模型有两个主要模块(图2):动态元嵌入和modulated注意力。前者在头类和尾类之间联系和传递知识,后者在头类和尾类之间保持区分。

3.1动态元嵌入

我们的动态元嵌入结合了一个直接的图像特征和一个相关的记忆特征,特征规范表示对已知类的熟悉程度。

考虑一个带有softmax输出层用于分类的卷积神经网络(CNN),第二到最后一层可以看作特征,最后一层是线性分类器。特征和分类器以端到端方式从大数据中联合训练。让v^direct表示从输入图像中提取的直接特征。最终的分类精度很大程度上取决于该直接特征的质量。虽然前馈CNN分类器可以很好地处理大的训练数据[8,26],但是在我们的尾部类中,它缺乏对小数据进行足够的监督更新。我们建议用一个记忆特征v^memory来丰富直接特性v^direct,它与记忆模块中的可视概念相关。这种机制与元学习中流行的记忆机制相似[46,36]。我们将得到的特征元嵌入表示为v^meta,并将其送入最后一层进行分类。我们的记忆特征v^memory和元嵌入v^meta都依赖于直接特性v^direct

与直接特征不同的是,记忆特征从训练类别中获取视觉概念,从一个较浅的模型中检索。

学习视觉记忆M 在类结构分析上遵循[23],以判别中心为基本构件。设M表示所有训练数据的视觉记忆,,其中K为训练类个数。与其他方法相比[60,52],这种记忆对我们的OLTR任务很有吸引力:它几乎毫不费力,与直接特征一起共同学习,而且它考虑了类内紧凑性和类间差别.

我们分两步计算质心。1)邻域抽样:在训练过程中,我们对类内和类间样本进行抽样,组成一个小批量。这些示例根据它们的类标签进行分组,每个组的质心c_i通过这个小批的直接特征进行更新。2)传播:交替更新直接特征v^direct和质心,使每个直接特征与其群质心的距离最小,与其他质心的距离最大。

组合记忆功能v^memory 对于一个输入图像,v^memory需要在训练数据不足(如tail类)的情况下增强它的直接特征来更好地学习它。记忆体特征将记忆体中的质心联系起来,将知识传递给尾部类。

其中为直接特征产生的系数。我们使用一种轻量神经网络从直接特征得到系数,

获取动态元嵌入v^meta v^meta结合了直接特征和内存特征,送入分类器进行最终的类预测(图3)。

其中表示逐元素的点乘法。对于封闭世界的分类任务来说,似乎是一个多余的标量。然而,在OLTR设置中,它在区分训练类别示例和开放集示例方面起着重要作用。测量输入直接特征v^direct到记忆M的可达性[47]——直接特征与判别中心之间的最小距离

当为小时,输入很可能属于一个从其中导出质心的训练类,并给得到的元嵌入vmeta赋一个较大的可达权值1=。否则,嵌入被缩小到一个几乎全零向量在极端。这样的属性对于编码开放类很有用。

我们现在在Eq.(2)中描述概念选择器e。直接特征对于数据丰富的头类来说已经足够好了,而记忆特征对于数据贫乏的尾类来说就更重要了。为了以一种软的方式自适应地选择它们,我们学习了带激活函数的一种轻量级网络

3.2Modulated注意力

动态元嵌入促进了头类和尾类之间的特征共享,同时区分头类和尾类也至关重要。直接特性v…^direct,例如ResNet[20]中倒数第二层的激活,可以在一定程度上满足这一需求。但是,我们发现空间注意力有助于进一步增强它,因为头类和尾类的判别线索似乎分布在图像的不同位置。

特别地,我们提出Modulated注意力鼓励不同类的样本使用不同的上下文。首先,我们利用自相关[56]算法从输入的特征图中计算出一个自注意图SA(f)。它用作上下文信息,并(通过跳跃连接)添加回原始的特征图中。然后将Modulated注意力MA(f)设计成条件空间注意力应用于自我注意力图MA(f)SA(f),让例子选择不同的空间背景(图4)。最终的注意力特征图变成

f是CNN的特征图,SA(f)是自注意力函数,MA(f)是带softmax正则化的条件注意力函数。第4.1节的经验表明,我们的注意设计比通常将空间注意应用于输入特征图的做法取得了更好的效果。这种Modulated注意力(图4b)可以插入CNN的任何特征层。在这里,我们只修改最后一个特征图。

3.3学习

余弦分类器 我们采用余弦分类器[39,15]来产生最终的分类结果。具体来说,我们规范元嵌入{v^meta_n},n代表第n个输入以及分类器的权值向量

元嵌入的归一化策略是一种非线性压缩函数[44],它可以保证小量值的向量被压缩到几乎为零,而大量值的向量被归一化到略小于1的长度。这个函数有助于放大可达性的效果(参见Eq.(2))。

损失函数 

由于我们所有的模块都是可微的,我们的模型可以通过交替更新中心和动态元嵌入v^meta_n来进行端到端训练。最终损失函数L是交叉熵分类损失L_CE和嵌入件与质心之间的大边缘损失L_LM的组合.

在我们的实验中,通过观察验证集上的准确性曲线,将设置为0.01。

4实验

数据集:我们策划了三个开放的长尾基准,分别是ImageNet-LT(以目标为中心)、Places-LT(以场景为中心)和MS1M-LT(以面部为中心)。

网络架构:scratch ResNet-10[20]作为ImageNet-LT的主干网络。为了与[59]进行比较,我们使用预先训练好的ResNet-152[20]作为place - lt的主干网络。对于MS1M-LT,流行的预训练ResNet-50[20]是主干网络。

评价指标:top-1分类准确率,大样本分类准确率(每类训练样本100+),中等样本分类准确率(每类训练样本20-100),少样本分类准确率(每类训练样本20-)。F-score(开放集)

比较方法: 

(1) metric learning: Lifted Loss [37],

(2) hard negative mining: Focal Loss [29],
(3) feature regularization: Range Loss [64],

(4) few-shot learning: FSLwF [15],

(5) long-tailed modeling: Meta-ModelNet [59], and

(6) open-set detection: Open Max [3].

4.1Ablation Study

首先研究了框架中每个模块的优点。在ImageNet-LT上,性能报告具有开集top- 1分类精度。

动态元嵌入的有效性。回想一下,动态元嵌入由三个主要组件组成:记忆特征、概念选择器和置信度校正器。从图5 (b)中,我们观察到记忆特征和概念选择器的结合导致了所有三个场景的巨大改进。这是因为获得的记忆特征在类之间传递了有用的视觉概念。另一个观察结果是,置信度校正器在很少样本场景的类中是最有效的。置信度校准器内的可达性估计有助于区分尾类和开放类。

Modulated注意力的有效性。我们从图5 (a)中观察到,与中样本场景级别相比,Modulated注意力有助于区分多样本场景级别和少样本场景级别。图5 (c)进一步验证了Modulated注意力比直接在特征图上应用空间注意力更有效。这意味着自适应上下文选择比传统的特征选择更容易学习。

可达性校准的有效性。为了进一步证明可达性校准用于开放世界设置的优点,我们根据[21,28](CIFAR100 + TinyImageNet(resize))中的标准设置进行了额外的实验。结果列在表2中,其中我们的方法比标准的开集方法表现出更好的性能[21,28]。

4.2结果比较 

我们在基准测试中广泛地评估了各种代表性方法的性能。

ImageNet-LT. 表3 (a)给出了不同方法的性能比较。我们有以下几点看法。首先,提升损失[37]和焦点损失[29]通过加强特征正则化,极大地提高了少样本分类的性能。但是,它们也牺牲了在多样本分类上的性能,因为它们没有内建的机制来自适应地处理不同场景的样本。其次,OpenMax[3]提高了开放设置下的结果。但是,在开放集条件下,同时考虑了查全率和查准率的f-measure,计算结果的准确性会下降。当开放类与尾部类复合时,执行[3]要求的分布拟合就变得具有挑战性。最后,虽然包含forgetting的少样本学习方法[15]保留了多样本分类的准确性,但它难以处理当前少样本范式中缺乏的不平衡基类。如图6所示,我们的方法对所有多/中/少样本类以及开放类进行了全面的处理,在各方面都取得了实质性的改进。

Places-LT. 如表3 (b)所示,在Places- LT基准上也可以得到类似的观察结果。由于基线更强(即预先培训的ResNet-152),我们的方法仍然始终优于其他替代方法,无论是在闭集还是开集设置。在f-measure下,这种优势更为深远。

MS1M-LT. 我们对MS1M-LT数据集进行训练,并报告MegaFace识别跟踪的结果,这是人脸识别领域的一个标准基准。由于训练集和测试集中的人脸身份不相交,我们采用间接的方法将测试集划分为不同场景的子集。我们通过至少计算一个阈值(特征相似度大于0.7)来近似每个测试样本的伪镜头。除了多样本,少样本、一样本,我们也获得zero-shot子集,我们找不到任何足够相似的样本训练集,它可以观察到,我们的方法有最优势的一次性身份(3.0%收益)和zero-shot身份(1.8%收益)如表4所示(左)。

SUN-LT. 为了与[58]和[59]直接比较,我们还测试了他们提供的SUN-LT基准。最终结果列在表4(右)中。该方法不需要学习一系列的分类器转换,而是在特征之间传递视觉知识,比之前的最佳算法提高了1.4%。注意,由于元模型网[59]需要递归的训练过程,我们的方法也带来了更少的计算成本。

Indication for Fairness.这里我们报告了MS1M-LT上的敏感属性性能。表4的最后两列表明,我们的方法在男性和女性子群体上都取得了全面的改善,这对有效的公平学习具有启示意义。

4.3进一步分析

最后,我们对框架中一些影响因素以及典型故障案例进行了可视化和分析。

注入了什么样的记忆特征。 在这里,我们通过可视化其顶部激活神经元来检查记忆特征注入的视觉概念,如图7所示。具体来说,对于每个输入图像,我们识别出其记忆特征中的前3个转移神经元。每个神经元在整个训练集中,通过一组最高激活的patch来显示[62] 。 例如,在对左上方属于尾类公鸡的图像进行分类时,我们的方法已经学会了转换分别代表鸟头、圆形和点状纹理的视觉概念。特征注入后,动态元嵌入的信息量和鉴别性增强。

数据集长尾性的影响。数据集的长尾性(例如类分布的不平衡程度)会对模型性能产生影响。为了更快地调查,在这里骨干网络的权值在训练期间被冻结。从图8 (a)中,我们观察到随着数据集变得更加不平衡(即power value下降),我们的方法只经历了适度的性能下降。动态元嵌入使得数据丰富类和数据稀缺类之间能够有效地进行知识转移。

开集问题的影响。阈值。开放集概率阈值的性能变化如图8 (b)所示。与普通模型[20]和距离损失[64]相比,我们的方法的性能随着开放集阈值的增大而稳定变化。我们框架中的可达性估计器帮助校准样本的置信度,从而增强了开放类的健壮性。

开放类的数量影响。最后研究了开放类的数量对性能的影响。图8 (c)表明,我们的方法对开放类的contamination具有很强的鲁棒性。

失败案例。由于我们的方法鼓励在类之间注入特性,因此它略微牺牲了细粒度的区分,以促进代表性不足的类。我们的方法的一个典型的失败案例是混淆了多样本类和中样本类。例如,图7中右下角的图像被误分类为飞机,因为注入了鼻型、眼型等交叉类别特征。我们计划探索[5]的特性分离,以减轻这种权衡问题。

总结

介绍OLTR任务可以从自然长尾开放式分布式数据和优化整体精度平衡测试集。我们提出一个综合OLTR算法,动态meta-embedding,为了分享视觉的知识之间的头和尾类和减少尾和开放类之间的混淆。我们在三个大型OLTR基准测试(ImageNet-LT、Places-LT和MS1M-LT)上验证了我们的方法。我们公开的代码和数据将使未来的研究能够直接应用到实际应用中。

OLTR Large-Scale Long-Tailed Recognition in an OpenWorld相关推荐

  1. 【食品图像识别】Large Scale Visual Food Recognition

    1 引言 视觉智能部与中科院计算所于2020-2021年度展开了<细粒度菜品图像识别和检索>科研课题合作,本文系双方联合在IEEE T-PAMI2023发布论文<Large Scal ...

  2. 【翻译】Rosetta Large Scale System for Text Detection and Recognition in Images

    Rosetta: Large Scale System for Text Detection and Recognition in Images(大规模图像文本提取和识别系统) 摘要 ​ 在本文中,我 ...

  3. 【SFace】《SFace: An Efficient Network for Face Detection in Large Scale Variations》

    arXiv-2018 文章目录 1 Background and Motivation 2 Advantages / Contributions 3 Method 3.1 Feature Pyrami ...

  4. Paper之BigGAN:《Large Scale Gan Training For High Fidelity Natural Image Synthesis》翻译与解读

    Paper之BigGAN:<Large Scale Gan Training For High Fidelity Natural Image Synthesis>翻译与解读 目录 效果 1 ...

  5. 【多标签文本分类】Large Scale Multi-label Text Classification with Semantic Word Vectors

    ·阅读摘要:   本文提出了利用词向量+CNN/词向量+GRU来解决大规模数据下的多标签文本分类问题.   [1] Large Scale Multi-label Text Classificatio ...

  6. Machine Learning week 10 quiz: Large Scale Machine Learning

    Large Scale Machine Learning 5 试题 1. Suppose you are training a logistic regression classifier using ...

  7. Paper之BigGAN:ICLR 2019最新论文《LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS》(未完待续)

    Paper之BigGAN:ICLR 2019最新论文<LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS> ...

  8. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 17—Large Scale Machine Learning 大规模机器学习...

    Lecture17 Large Scale Machine Learning大规模机器学习 17.1 大型数据集的学习 Learning With Large Datasets 如果有一个低方差的模型 ...

  9. Introducing DataFrames in Apache Spark for Large Scale Data Science(中英双语)

    文章标题 Introducing DataFrames in Apache Spark for Large Scale Data Science 一个用于大规模数据科学的API--DataFrame ...

  10. Large scale GAN training for high fidelity natural image synthesis解读

    <Large scale GANtraining for high fidelity natural image synthesis>这篇文章对训练大规模生成对抗网络进行了实验和理论分析, ...

最新文章

  1. 开发者关心的十个数据库技术问题
  2. 135编辑器 html,135编辑器,微信图文编辑器,微信图文美化编辑器,格式多方便的图文编辑-...
  3. 201771010101 白玛次仁 《2018面向对象程序设计(Java)课程学习进度条》
  4. 【Android 插件化】VirtualApp 源码分析 ( 添加应用源码分析 | LaunchpadAdapter 适配器 | 适配器添加元素 | PackageAppData 元素 )
  5. KPCR:CPU控制区(Processor Control Region)
  6. c 5.6 mysql 配置文件_Windows系统中MySQL 5.6的配置文件(my.ini)修改方法_MySQL
  7. Windows批处理命令学习三
  8. PHP对URL进行字符串编码
  9. vue --- 使用vue在html上显示当前时间
  10. asp.net core 自定义基于 HttpContext 的 Serilog Enricher
  11. hantomjs能解析出html源码吗,网页源码是js js跳转后才是源码 怎么用易语言写 不使用超文本 有延时...
  12. three.js使用OrbitControls.js控制几何体旋转、平移、缩放
  13. js中typeof与instanceof用法小记
  14. 【2018.9.26】K-D Tree详解
  15. 贝叶斯分析好坏_贝叶斯分析基础——可信度、模型和参数
  16. python登陆pc微信_GitHub - ccboby/WechatPCAPI: 微信PC版的API接口,可通过Python调用微信获取好友、群、公众号列表,并收发消息等功能。...
  17. [转]24个英文电子书免费下载网站
  18. CA认证完整实现步骤
  19. 大数据-Flume(二)
  20. 记录一下从Windows到Mac的迁移

热门文章

  1. 村中老年教师的计算机能力现状,师生信息素养现状与提升策略论文
  2. 解决flask开发smtplib.SMTPSenderRefused: (503, b‘Error: need EHLO and AUTH first !‘, ‘******@qq.com‘)问题
  3. 计算机外观屏幕怎么设计,设计师修图的显示器体验如何?感受下
  4. 6款常见的无人机仿真开发平台(附超详细特点功能对比)
  5. 2022保育员(初级)操作证考试题库及在线模拟考试
  6. 基于DDR3的串口传图帧缓存系统设计实现
  7. myeclipse解压版安装
  8. 服装PLM解决方案能带给企业什么?
  9. 033-使用UIManager设置组件外观界面,适应不同操作系统
  10. SEAM IN ACTION 第一章