《Few-shot Classifier GAN》一篇不一样的小样本学习方法

  • 本博客前言
    • 摘要
    • 引言
    • 相关工作
    • 方法
      • 假类编码
      • 小样本分类器GAN
      • 网络选择器(Network Switcher)
      • G和D的黑箱操作
      • 对抗训练
    • 实验结果与评测
      • 数据库调优
      • 参数及设置
      • 性能评估
    • 讨论
    • 结论

本博客前言

近年来深度学习中最火热的模型毫无疑问是生成对抗网络(Generative Adversarial Networks,GAN),尾随其后的有一系列的GAN变形,诸如CGAN、CGAN、SGAN、ACGAN等等,使得GAN在图像生成领域取得了前所未有的突破性进展。在GAN中有一个G(Generator)生成器和D(Discriminator)判别器,生成器对输入的噪音信息进行训练生成图片,判别器则是判别图片是生成的假图还是非生成的真图。

另一个近两年来研究火热的方向便是小样本学习,我个人的理解是利用少量的样本建立具有较强泛化性的模型。小样本学习之所以如此的火热得益于元学习(meta learning or learning to learn)思想的提出。其实我个人一直在思考将小样本学习与GAN相结合,通过GAN来生成样本解决小样本数据的问题,可是GAN自身却需要大量的数据进行训练,在此方向上便陷入了鸡和蛋的问题中。本文却提出了一种全新的方式,同时解决了小样本生成和分类两个问题,并且实现的是细粒度图像分类。

下面凭借着本人拙劣的理解能力,简单的了解一下GAN下对于小样本学习的理解和实现。
原文下载链接:https://www.researchgate.net/publication/328400302_Few-shot_Classifier_GAN

摘要

细粒度图像分类是一个具有高度挑战性的开放问题,是众多数据标记应用程序的核心。在本文中,我们提出了小样本分类生成对抗网络(Few-shot Classifier Generative Adversarial Network)作为小样本分类的方法。我们通过设计一个GAN来解决小样本分类的问题,在这个GAN中,鉴别器和生成器在任何情况下都要竞争输出带标记的数据。与以前的方法不同,我们的的方法生成的图像可以分为多个伪类或真类。我们的对抗式方法关键创新是允许使用带有半监督深度学习的多个伪类进行细粒度分类。本文的一个主要优势在于它的标签不可知特性,即系统在训练期间同时处理有标签和无标签的数据。我们通过改变训练集中标记数据与未标记数据的比值,对MNIST和SVHN数据集上的小样本分类进行了定量验证。我们实验分析表明,当使用多个伪类和大量未标记数据时,我们的方法能够产生更好的分类性能。

引言

图像分类是一项具有挑战性的任务,需要大量的标记数据集训练得到具有最佳性能的精确模型。随着深度学习技术的出现,对获取大量带标签的数据集[21],[17]的需求很大。主要的限制是大量注释标签是一个劳动密集型任务[4]。数据增强是一种避开不可用的标记训练数据的替代策略。不幸的是,这样的模型仅仅基于合成数据进行训练,在很大程度上表现不佳。
在本文中,我们最主要的是进行小样本分类[3],因为当只能获得少量的标签样本时,也可以考虑不带标签的数据。同时,我们动机是实现协同生成和协同分类(co-generation and coclassification),即生成的图像会提升分类,而分类结果又会提升生成的效果。
我们的工作属于数据标记领域[29]的一般问题。特别是,细粒度分类[16]是实际应用中的一个重要问题。尽管最近取得了许多进展,但在缺乏标记数据的情况下推广分类和生成仍然是一个挑战。我们的关键分析结果是,在细粒度GAN模型的训练过程中,结合伪类进行训练扮演着重要的角色,并会提高整体性能。在这篇论文中,我们提出了一个步骤,以细粒度的少镜头分类与生成的敌对网络。与目前的技术水平相比,我们的GAN更加通用,在输入和输出方面的限制更少。
其核心思想是在GAN的连接中,通过切换器融合有监督和无监督学习。因此,GAN的输入可以是有标签的数据也可以是无标签的数据。我们提出的方法将真实样本分类为真实类,然后将虚假样本分离到各自未知的虚假类中。我们通过利用细粒度分类来解决这个问题,这要归功于两种机制:伪类嵌入和多个伪类。从AC-GAN[27]和SGAN[26]中汲取灵感,我们的关键思想是通过条件生成类嵌入,将类与新样本关联起来。与之前的工作相比,我们的方法试图将真实样本分类到预定义的类中,并进一步将虚假样本分离到它们各自的虚假类中,利用半监督学习的优势来提高分类器的精度。
本文的技术贡献是一种新颖的GAN体系结构,该结构采用多个伪类策略,将标记和标记的训练数据作为输入,执行细粒度分类。我们的方法旨在处理训练过程中使用未标记数据时的图像生成损失和无条件生成。据我们所知,我们的模型是唯一一个能够在图像生成过程中实现细粒度分类的模型。我们通过在公开可用的数据集上评估我们的解决方案来演示系统的有效性。我们的结果表明,在GAN模型中包含多个伪类可以提高整体性能,特别是在标记数据很少的情况下。

相关工作

数据标记可以自动完成。可以利用半监督、小样本、主动学习等学习方法支持全标记数据集的构建。特别是,半监督学习结合了带标签和无标签的数据。此外,数据增强是一种替代策略,通过转换原始样本来绕过没有标记的训练数据的这个问题。最后,只用合成数据训练模型的话,就会生成人造数据。自然,生成对抗网络(GANs)的零和博弈原则是一种很有吸引力的数据标记策略。
GAN被定义为可训练的生成对抗网络。鉴别器试图从预测和样本真实情况中估计损失,而生成器则估计数据分布的似然分布。表1概述了与我们的工作相关的各种GANs的属性。第一个Vanila-GAN引入Kullback-Leibler散度作为一种基于距离的分布相似性,以产生高度详细的图像。

GAN在图像处理方面有很多有针对性的应用,如图像数据增强、高分辨率图像生成图像重建、文本图像生成、自然图像生成。然而,GANs的变体也被提出用于分类、分类、半监督标记等领域。
但是,要指定一个分类的GAN网络是很枯燥的。Vanila GAN是一种无监督对抗模型,它允许输出一个样本是真/假。因此,VanilaGAN的鉴别器无法实现分类,因为这个模型仅接受无标签的数据作为输入。我们的方法的不同之处在于结合分类执行生成。但是,ConditionalGAN通过在discriminator和generator中嵌入标签生成基于类标签的数据。类似于CategoricalGAN [32] (CatGAN),我们的方法集成了一个分类损失函数,从未标记或部分标记的数据中学习分类器。
标签的条件作用通过强制识别器网络输出类标签,揭示了利用GANs神经网络进行半监督分类的可能性。在半监督的SGAN中,训练是通过将一个假类与已知类相结合来实现的。需要这个额外的伪类来对生成器中的示例进行分类。在我们的方法中,我们结合条件和嵌入来处理半监督GANs的众所周知的限制,即无法处理未标记的数据。辅助分类器GAN (AC-GAN)也依赖于类标签来生成视觉上可信的图像。我们的工作是与AC-GAN相似的,我们利用标签条件作用。但是,我们的分类器GAN并不限于为每个示例输出一个类标签。
与AC-GAN和CGAN只依赖于完全标记的数据集不同,我们的模型可以对未标记的数据执行标签条件设置,甚至对假图像也可以输出子类标签。我们的模型也是辅助的,因为我们输出一个数字值来决定图像是真还是假,以及多个假类。与表1中的所有GANs相比,到目前为止,我们的模型是唯一能够沿着图像生成执行细粒度分类的模型,即使没有提供预期的类用于培训。我们通过嵌入多个伪类来利用这个细粒度属性。此外,我们针对AC-GAN和SGAN的方法的关键区别在于,我们的分类并不局限于真实的类。我们的方法结合了监督和非监督学习来处理无标记和标记数据。

方法

假类编码

“Real”所致的是训练集中所提供的的一部分标签或者图片,“fake”指的是生成的标签或者图片。真实标签的集合C={0,...,N−1}C=\{0,...,N-1\}C={0,...,N−1} ,NNN即训练集中的NNN个类(0~9的索引)。对于训练集中的每个类ccc,对应的假类标签 c+c^+c+自动加入到如下所述步骤。每个数字的索引都转化为one-hot编码向量。然后,我们通过适应更长的向量表示生成假类标签机和c+c^+c+ 。真类的one-hot编码以0向右移动。在one-hot表示中,通过填充实标签左边的零来生成相应的伪类。例如,如果真实标签0编码∣C∣|C|∣C∣为 1000000000,那么我们用 表示这个类10000000000000000000。那么,对应的假类标签0000000000100000000 。所有标签的结果集用表示 C∗=C∪C+C^*=C\cup C^+C∗=C∪C+.

小样本分类器GAN

本文的小样本分类器包括两个相互竞争的卷积神经网络:生成器G和鉴别器D,其中鉴别器试图对真实物体和由生成器合成的物体进行分类,而生成器则试图混淆鉴别器。这个模型是为了区分真类和假类。该优化问题需要通过求解整体函数得到最小-最大解.

D和G模拟了一个具有值函数Vfshot(D,G)V_{fshot}(D,G)Vfshot​(D,G)的极小极大博弈。然后,当两种模型都不能明显优于竞争对手时,得到最优解。
与经典的ACGAN类似,生成器G输入一个随机噪声向量 Z∈CdZ\in C^dZ∈Cd,d即噪声向量维度,c是对应标签可获得标记。在训练集中没有类标签的情况下,G只接受z作为输入。G被训练成一个图像生成器,目标是生成期望在训练数据分布范围内的图像。为了得到更好的样本,将分类器集成到D模型中。然后,训练D将G生成的图像与实际训练图像进行区分。
函数Vfshot(D,G)V_{fshot}(D,G)Vfshot​(D,G)定义为网络切换器的分段函数:

其中, C~∗\widetilde{C}^*C∗是当前批中有关的类标签集, Vgan(D,G)V_{gan}(D,G)Vgan​(D,G)是G和D的无条件概率分布期望值。另外, Vacgan(D,G)V_{acgan}(D,G)Vacgan​(D,G)是条件概率在D和G上的期望值,取决于分类的标签。网络交换器 VfshotV_{fshot}Vfshot​强制GAN模型在没有标签的情况下执行无条件判别( VganV_{gan}Vgan​),执行增加的鉴别 VacganV_{acgan}Vacgan​。

其中,先验分布用pzp_zpz​表示,z是均匀分布的先验噪声集合。该生成器仅对潜在表示变量z进行采样以生成图像。随后,当G和D在训练中被提供C∗C^*C∗类标签时, VacganV_{acgan}Vacgan​被激活。

Ls和Lc分别表示期望抽样和分类的对数似然估计。这两者定义如下:

鉴别器D(X)=(P(S∣X),P(C∣X))D(X)=(P(S|X),P(C|X))D(X)=(P(S∣X),P(C∣X))将真假样本进行分离,然后对真假样本进行分类。P(S∣X)P(S|X)P(S∣X)是样本的概率分布,P(C∣X)P(C|X)P(C∣X)是标签的概率分布。xfake=G(c,z)x_{fake}=G(c,z)xfake​=G(c,z) 是一批生成的图片,XrealX_{real}Xreal​是一批用来训练鉴别器的真实图片。在存在标签的情况下,条件C基于用于抽样的类标签,并使用已标记和未标记的数据。我们的GAN有两个集合的输出:一个标量,它决定图像是真还是假;一组离散值表示与真或假样本对应的标签。

网络选择器(Network Switcher)

我们将网络切换器引入到我们的深层神经结构中,通过强制学习切换到所需的训练模式来管理多种学习策略。该解决方案避免了生成器和鉴别器的重复,优于在两个不同模型(即AC-GAN和GAN)之间的简单切换。特别是,这个二进制切换器在计算图中创建一个算法分支,以切换到有监督或无监督的训练。这个网络切换器表示为一个独占或操作符(XOR),以确保学习策略符合给定批处理的性质。如图1所示,切换器表示为 。

G和D的黑箱操作

本文提出的小样本分类器是一个可以产生更好视觉效果样本的深度卷积GAN。生成器和鉴别器都表示为具有一定层数的深卷积神经网络,具有leaky的Relu激活函数和超参数。我们调整超参数和层数,以适应所需的图像分辨率。图2描述了生成器和鉴别器的内部架构。
在生成器G中,我们使用一系列具有不同步长的转置卷积对图像进行向上采样,以获得所需的分辨率。生成器的前两层完全连接,没有中间批处理规范化。第二层的输出被重新塑造成一个有128个通道的7X7图像。第三层是一个步长为1转置卷积输出一个256通道的7X7图像。第四层是一个步长为2的转置卷积,输出128个通道的14X14的图片。最后,最后一层使用转置卷积输出一张单通道的28X28的图片。
鉴别器D是一种传统的CNN下采样图像批次,并将其表示为适合分类的特征向量。该鉴别器由四层卷积层组成,每层的步长为2。除了最后一层外,我们使用层间的批处理归一化来加速收敛。随后的层是两个并行的线性层:一个分类输出和一个GAN输出。分类层返回logits,而GAN层返回sigmoid激活的输出(假输出或真输出)。

对抗训练

所提供的伪代码(算法1)总结了训练过程。算法1中描述的过程作为输入数据和标签批次。每个批次都根据给定的标记数据与未标记数据的比例进行调整。训练过程是在监督和非监督的训练之间交替进行的,因为每个阶段的标记样本数量可能不同。
算法1中,迭代次数e=500。为了保证损失函数的稳定性,对有标记和无标记样品之间的内环进行了平衡。第一个循环(k步)仅通过在鉴别器和生成器上通过鉴别器执行随机梯度下降来迭代标记数据。这个循环计算采样和分类损失函数(第6行)。在内部循环的每次迭代结束时,将更新总体损失。类似地,第二个循环(j步骤)迭代未标记的数据,但是在更新总体损失之前只评估抽样损失。迭代k和j的数量与标记数据和未标记数据的比例成正比,从而产生基于重要性的抽样。但是,如果训练数据集是平衡的,那么k = j。

训练过程中,鉴别器D是为了最大化Ls+Lc之和,生成器G是为了将Ls和Lc之间的熵最小化。我们的生成器用G生成的图片和真实数据集的真实图片训练。我们通过最小化总损失函数来更新鉴别器D。我们通过最小化总损失函数来更新生成器G。

实验结果与评测

通过大量的实验分析,对多类伪类模型的精度进行了评价。本文所提出的GAN模型在实验训练过程中,无标签样本和有标签样本的比例是变化的。本实验在NVIDIA DGX-1的多块GPU的超级计算机上运行,并且使用TensorFlow框架。最后,根据各种训练配置的精度,给出了该模型的性能。

数据库调优

本实验采用两个最先进的数据集,图片规格是32X32,即MNIST和SVHN数据集。我们之所以选择这些真实的数据集,是因为它们非常适合用于培训和测试,并且只需要在预处理和格式化方面进行最少的工作。未标记的数据通过忽略提供的标签从数据集派生。
MNIST数据集是由一个训练集(60000张图像)和一个测试集(10000张图像)组成的大型数据库,其中大小标准化、居中、固定大小和单通道图像表示手写数字。每个数字都有对应的标签。本次实验中,将训练集和验证集融合在一起,创建一个新的训练集来评估GAN。使用这个数据集,从考虑训练集中所有的标签开始,我们的实验基于改变未标记样本的数量。然后,每运行一次,标记样本的数量减少10k,直到达到50k未标记和10k标记样本的下界。
Street View House Numbers(SVNH)数据集难度更大,更具挑战性。SVHN是一个真实世界的数据集(73k的训练集和26k的测试集),由谷歌街获得的三通道的房号噪声图像组成。每个类在训练集中的类分布在5k到13k之间。使用该数据集,我们的实验从73k个全标记样本开始,只对测试集中随机选取的10k个样本进行测试。每次通过时,从列车集合中选取10k个样本,对未标记样本进行富集,直到达到60k个未标记样本的下界。

参数及设置

我们已经使用TensorFlow实现了我们的方法。我们使用了1000万个可训练(标记)参数和3000万个可训练(未标记)参数。在为标记到未标记的实验设计训练数据集时,我们通过从每个类收集相同数量的未标记样本来绕过不平衡数据问题。即使标记样本集的大小减小,值得注意的是,训练集的大小在实验过程中保持不变。然而,该训练集被扩展为假类,用于多个假类实验。在测试阶段,从实际测试样本中选取10k个样本对所学习的分类器进行评估。
批处理大小为32用于所有数据集和所有实验。我们在训练前对所有的输入进行标准化。我们使用经典的Adam优化器进行梯度下降优化,学习率为0.001。同时,我们考虑了来自均匀分布的一个100维的先验向量。由于网格搜索对于这些超参数的计算开销很大,所以我们使用随机搜索。

性能评估

我们评估了使用多个伪类的学习分类器得到的输出与仅使用一个伪类的学习分类器得到的输出的准确性。我们用来衡量训练分类器准确度的评价指标定义为正确分类的测试样本总数除以测试样本总数。
我们在表2和表3中报告了在训练过程中,通过改变类标签的数量,对10k以上的测试样本进行的实验,其准确性的定量结果。整个训练结束后采集样本图像。我们用图5中50k和60k的未标记数据分别描述了MNIST和SVHN上训练生成的图像。我们的小样本的CGAN总结如图4。

我们对所报道的精度进行配对t检验分析,进一步检验了数值结果。作为假设,我们采用零假设,即两个模态(单个伪类和多个伪类)是不可分辨的。两个输出的均值相似,置信值为5%。MNIST数据集的p值为0.5841,SVHN的p值为0.2097。由于这些p值大于0.05,我们不拒绝零假设。

进一步的实验是通过改变伪类的数量从0到N(N是真实类的总数)来检查伪类如何影响图像的生成。在本实验中,利用偏置采样对GAN进行了重新训练。图3显示了当伪类的数量增加时,对图像生成质量的影响。训练结束后采集样本。

讨论

我们观察到,对于两个开放的SVHN和MNIST数据集而言,当训练中标记样本的数量减少时,准确度下降。在使用SVHN数据集进行实验时,由于该特定数据集具有挑战性的特性,可以观察到更大的裕度。对于这两个数据集,我们的小样本GAN在多个伪类模式下,在存在完全标记的数据的情况下,优于分类过程。此外,在70%的数据未标记的情况下,我们的小样本GAN在多个伪类模式下的性能优于在单个伪类模式下的性能。当60k个未标记的样本被输入GAN时,我们的技术在因子10下表现得明显更好。

不幸的是,当我们的GAN在SVHN数据集上测试时以多重伪类模式使用时,生成的示例显示了可视化工件。视觉定性结果表明,当训练过程中考虑多个伪类时,视觉构件的数量成比例增长。此外,我们注意到,当未标记的样本数量超过标记样本数且占据主导地位时,当GAN对分类损失的依赖程度降低时,artifact会出现。当用不是太好或者太差的样本训练生成器的时候,还可以观察到更好的性能。最后,我们观察到偏置采样并没有显著提高生成样本的质量。我们建议设计一个更深层次的架构或在更多的时代进行训练来解决这个问题。

结论

微调标签目前是手工完成的。在小样本环境下,我们缺少有标签的训练数据,因此图像分类以及标记数据仍然是一个难题。本文中,我们重点设计了一种包含潜在标签嵌入、网络切换器和多个伪类的新型对抗体系结构,以解决小样本分类问题。我们的方法最大的吸引力之一是它的标签无关性。此外,我们的GAN支持广泛的策略,从完全监督、半监督到弱监督学习,这是以前任何替代GAN都不可能实现的。与其他细粒度分类技术相比,我们的方法不用考虑无论输入是什么,利用生成器欺骗鉴别器对生成的数据及其标签进行分类。我们利用这一特性,利用已知标记空间的连续体。一个主要的区别是,我们不学习如何表示真实的标记数据,而是如何从未标记的数据中学习强大的表示。最重要的是,我们的小样本分类器GAN可以对于没有训练样本的实例输出未知子类(即伪类)。
因此,我们提出的GAN是一个有用的工具,它可以在极少数有标签样本和大量无标签样本混合的情况下,学习一个稳定的分类。由于网络切换器(NetworkSwitcher)该方法的一个重要优点是可以在全监督学习和半监督学习之间进行切换。虽然我们的评估证实,当数据集缺乏标记样本时,可被识别的样本可以提高整体的准确性。在大多数情况下,我们的工作表明,在有足够数量标签的情况下,所提出的方法与传统GAN的性能相似,并且在培训阶段没有标签样本的情况下提供了更好的结果。我们方法的主要缺陷在于如果使用多个伪类的话,生成的样本的质量会有所下降。
综上所述,我们认为这一工作证明了在GAN中生成训练数据的可行性,并且使用更少的标签训练数据就可以达到预期的效果。我们相信,我们的方法为细粒度分类问题提供了有价值的见解,并为用更少的数据执行深度学习开辟了新的视野。最后,需要更复杂的损失函数设计来支持以更高的视觉可信性生成图像。一组新的针对人类视觉感知优化的伪丢失函数,朝着这一方向的一个重要进展。

文章引用:
[1] ALI-GOMBE, A., ELYAN, E., SAVOYE, Y. and JAYNE, C. 2018. Few-shot classifier GAN. In Proceedings of the International joint conference on neural networks 2018 (IJCNN 2018), 8-13 July 2018, Rio de Janeiro, Brazil. Piscataway: IEEE [online], article ID 8489387. Available from: https://doi.org/10.1109/IJCNN.2018.8489387

《Few-shot Classifier GAN》一篇不一样的小样本学习方法相关推荐

  1. ACGAN(Auxiliary Classifier GAN)详解与实现(tensorflow2.x实现)

    ACGAN(Auxiliary Classifier GAN)详解与实现(tensorflow2.x实现) ACGAN原理 ACGAN实现 模块导入 生成器 鉴别器 模型构建 模型训练 虚假图像生成及 ...

  2. 深入浅出 GAN·原理篇文字版(完整)

    深入浅出 GAN·原理篇文字版(完整)|干货 机翼技术 百家号 05-29 02:02 导语 这次的内容主要是想梳理 GAN 从 NIPS 2014 被提出,到 2017年5月,都有哪些重要的从原理和 ...

  3. 深入浅出 GAN·原理篇文字版(完整)|干货

    这是一篇非常好的干货文章,深入浅出,所以我把它转载过来,分享给大家.也方便自己日后查看. 转载声明:本文转载自「程序媛的日常」,搜索「girlswhocode」即可关注. 导语 这次的内容主要是想梳理 ...

  4. 深入浅出 GAN·原理篇文字版(完整)| 干货

    首先来看看 GAN 现在能做到哪些惊艳的事呢? GAN 可以被用来学习生成各种各样的字体--也就是说,以后字迹辨认这种侦查手段很可能就不靠谱啦!这个工作还有很多动图,在 GitHub 上搜 zi2zi ...

  5. Style Transfer for Anime Sketches with Enhanced Residual U-net and Auxiliary Classifier GAN

    网络结构 本文的GAN网络结构为: 生成网络的输入为需要风格转换的图像即input,以及风格特征.采用VGG16/19的fc1层,提取风格图像的特征,风格特征为4096维的向量. 生成网络结构和目标函 ...

  6. 恭喜你,20级考研生!你将在考研前看到这篇最靠谱的学习方法!

    考研不光考验你的学习能力与应试能力,很多时候更是一场信息战. 有不少20级考研的同学,各种焦虑不安-- 为择校而纠结,为是否跨考而迷茫,为不知道如何复习而焦躁. 是鸭!一旦踏入考研征程,我们需要考研名 ...

  7. 一篇非常好的c++学习方法,转自贴吧

    原帖地址:点击打开链接http://tieba.baidu.com/p/1113064961 Javascript是世界上最受误解的语言,其实C++何尝不是.坊间流传的错误的C++学习方法一抓就是一大 ...

  8. 【图像上色小综述】生成对抗网络的GAN法

    点击上方"机器学习与生成对抗网络",关注"星标" 获取有趣.好玩的前沿干货! 超100篇!CVPR 2020最全GAN论文梳理汇总! 0,图像上色及其分类 图像 ...

  9. 一文看尽深度学习中的生成对抗(GAN)网络

    参考:<CVHub带你看一看GANs架构发展的8年> 导读 生成对抗网络 (Generative Adversarial Networks, GANs) 在过去几年中被广泛地研究,其在图像 ...

最新文章

  1. SQL语句优化技术分析
  2. 递归循环子组件_算法一看就懂之「 递归 」
  3. MySql 删除重复数据
  4. 粤港澳大湾区菜篮子-农业大健康·林裕豪:从玉谋定功能产业
  5. 互联网API开放平台安全设计-基于OAuth2.0协议方式
  6. c cuda 指定gpu_《CUDA C编程权威指南》——1.3 用GPU输出Hello World-阿里云开发者社区...
  7. SRS(simple-rtmp-server)流媒体服务器源码分析--启动
  8. 用udp协议通讯时怎样得知目标机是否获得了数据包?_和相亲对象聊天,你属于UDP还是CDP?...
  9. python赋值浅拷贝和深拷贝的区别_浅拷贝、深拷贝和普通赋值操作有什么区别?...
  10. MFC sendmessage实现进程间通信
  11. IDEA ---- 插件
  12. 人脸检测(十九)--人脸检测综述(2018.2)
  13. 2006年上半年开发心得
  14. 工作说明书(SOW)
  15. SecureCRT 中如何配置颜色
  16. IceSword V1.22 Final 冰刃
  17. 测绘行业如何?从业十年对测绘行业的薄见
  18. Java画图板界面上的添加
  19. libusb系列-007-Qt下使用libusb1.0.26源码
  20. 大学计算机基础2014,2014《大学计算机基础》课程学习手册(学生).pdf

热门文章

  1. C#畅谈“网络电视”
  2. apex英雄机器人探路者怎么玩_apex英雄探路者机器人玩法攻略详解
  3. TypeError: module() takes at most 2 arguments (3 given)
  4. win10系统打开.hlp帮助文件的方法(简单实用)
  5. 最强的视频会议软件编码库:ffmpeg
  6. C#,T检验(T -Test)的算法与源代码
  7. win2008 R2下开启显卡硬件加速
  8. redis三主三从部署集群以及动态添加节点和删除节点
  9. 华为畅享20plus和荣耀x10max的区别哪个好
  10. Python如何批量修改照片像素大小