《ATSS:Adaptive Training Sample Selection》

  此论文一出感觉是在告诉像我们这样的小朋友根本没有深入理解目标检测。论文醍醐灌顶的指出了影响Anchor-based和Anchor-free效果的关键在于正负训练样本的定义。论文提出的自适应的训练样本选择方法能够缩小Anchor-based和Anchor-free效果的差异。而在每个位置铺设多个类型的anchor也只在传统的基于IoU选择样本的场景下有效,能够一定程度上改善正负样本的选择。

Key Words:ATSS、anchor-based、anchor-free

CVPR oral, 2020

作者:Shifeng Zhang, Cheng Chi, Yongqiang Yao.et al.

Code:https://github.com/sfzhang15/ATSS

Agile Pioneer  

摘要

  目标检测已经被anchor-based检测器统治多年。最近由于FPN和Focal loss的提出anchor-free检测器变得越来越普遍。本文指出了anchor-based和anchor-free最本质的差距实际上是如何的定义训练集的正负样本,这就导致了它们之间的效果的差异。如果它们在训练期间采用相同的正负样本的定义方式,那么两者之间的表现就不会有显著的差距了,无论是对一个框回归还是对一个点回归。这也就说明了如何选择正负训练样本对于当下的目标检测器来说是重要的。我们提出了一个自适应训练样本选择方法(ATSS)根据目标的统计特性来自动的选择正负样本。该方法显著地提高了两种类型检测器的效果,并缩小了它们之间的差距。最后,我们讨论了在图像的每个位置铺设多个anchors对于检测目标的必要性。在MS COCO数据集上的大量的实验证实了我们之前的分析和推论。通过我们新提出的ATSS方法,我们提高了目前最好的检测器在不引入任何开销的情况下大幅增加了AP值到50.7%。代码:https://github.com/sfzhang15/ATSS

介绍

  anchor-based目标检测器分为一阶段目标检测器和二阶段目标检测器,做法就是在图像上铺设很多的预定义的锚点框,然后对这些锚点框进行分类,对其坐标进行一次或几次的精调。所以二阶段更准确,一阶段更高效,目前在通用检测的基准上最好的模型还是anchor-based检测器。

  随着FPN和Focal loss的出现,学术研究的注意力偏向了anchor-free。anchor-free一个最明显的改变就是不在需要铺设锚点框了。anchor-free目标检测器分为keypiont-based方法和center-based方法。其中先定位几个预定义或自学习的关键点然后来包围对象的方法为keypiont-based方法(CornerNet|ExtremeNet)。使用中心点或对象区域来定义正样本并预测从正样本到目标边界的四个距离的方法为center-based方法(FCOS|FoveaBox)。不需要anchor相关的超参数能达到和anchor-based相似的效果,所以更具有泛化能力。

  keypoint-based方法不同于anchor-based检测方法而是遵循标准的关键点估计的流程。而center-based检测器和anchor-based检测方法很相似,只不过是把点作为预设的样本来代替锚点框了。

  拿一阶段的anchor-based检测器RetinaNet和center-based的anchor-free检测器FCOS作为例子来说,有三点不同:

  • (1)每个位置铺设的anchors数目不同。RetinaNet在每个位置都铺设几个锚点框,而FCOS每个位置只铺设一个anchor点(FCOS的一个点等于RetinaNet里面的锚点框的中心,因此我们称它为一个anchor点)。

  • (2)正负样本的定义不同。RetinaNet对正样本和负样本重新排序了IOU,而FCOS利用空间和尺度的限制来选择样本。

  • (3)回归目标的不同。RetinaNet从预设的锚点框回归目标框,而FCOS从anchor点来定位对象。

  文章公平严格的对anchor-based和anchor-free做了调查,发现影响两种检测器效果的终极原因在于如何选择正负训练样本。文章提出了自适应训练样本选择方法即基于目标的特性来自动的选择正负样本,缩小了anchor-based和anchor-freee的差距。此外,通过一系列实验证明了对于一个位置铺设多个anchors是不必要的。论文的主要工作可以被归结为:

  • 指明了anchor-based和anchor-free的本质差异实际上是如何定义正负训练样本。
  • 提出了ATSS方法来根据目标特性的统计进行自动的样本选择。
  • 证明了在图像上每个位置铺设多种anchor对检测目标来说是无用的操作。
  • 在没有引入任何额外计算开销的情况下再MS COCO数据集上达到了最好的效果。

相关工作

Anchor-based检测器

   两阶段方法 Faster R-CNN的出现奠定了两阶段anchor-based检测器的统治地位。它由区域建议网络(RPN)和一个逐区域预测的网络(R-CNN)组成。此后很多算法以此为基础进行优化的算法被提出,它们优化的方向如下(对Faster RCNN的优化方法有哪些?):

  • 对结构的重新设计和改良 如:R-FCN、Cascade R-CNN等;
  • 加入上下文和注意力机制 如:Thundernet等;
  • 多尺度的训练和测试 如:Autofocus等;
  • 训练策略和损失函数 如:OHEM等;
  • 特征的融合和增强 如:FPN等;
  • 更好的建议和平衡 如:Libra R-CNN等;

   一阶段方法 SSD的出现,让具有高运算效率的一阶段anchor-based引起了注意。SSD是值得一看的论文,它把anchor用到了极致,用一个主干网络对多个特征层进行多尺度预测,直接预测对象的类别和锚点框的偏移量。同样的大量的优化方法出现来提高一阶段anchor-based模型的效果,目前一阶段在一个更快的推理速度上,效果能够非常接近两阶段的方法了,具体改进如下:

  • 融合来自不同层的上下文信息 如:DSSD等;
  • 从杂乱开始训练 如:DSOD等;
  • 新的损失函数 如:Focal loss、ap-loss等;
  • 特征的改进和对齐 如:Receptive field block等;

Anchor-free检测器

   Keypoint-based 方法 这种anchor-free方法先定位几个预定义的或自学习的关键点,然后生成目标检测的包围框,具有代表性的方法如下:

  • CornerNet 检测一个对象包围框的左上角点和右下角点作为一对关键点。
  • Grid R-CNN(两阶段)的第二个阶段通过利用全卷积对位置敏感的优势来预测格子点然后通过格子来决定包围框。
  • ExtremeNet 检测四个极端点(最上,最左,最下,最右)和一个中心点来生成目标检测框。
  • Objects as points 使用关键点估计来找到目标的中心点并回归出目标的全部其他属性,尺寸、3D位置方向和姿势。
  • CenterNet 扩展了CornetNet通过三个关键点来代替一对关键点提高了CornetNet的精确率和召回率。
  • RepPoints 把目标作为一个样本点的集合,并学习通过一种方式来排列它们来包围对象的空间位置,并表明局部区域语义的重要性。

   基于中心点的方法 这种anchor-free的方法是把目标的中心作为前景来定义正样本,然后预测到中心的距离来得到目标框的四条边,具有代表性的方法如下:

  • YOLO 把图像分为S * S个格子,包含目标中心的格子负责预测检测这个目标。
  • DenseBox 使用一个位于目标中心的填充圆来定义正样本并且预测从正样本到目标框的四个距离,用于定位。
  • GA-RPN 定义目标中心区域的像素为正样本来预测位置,用于Faster R-CNN的目标建议的宽和高。
  • FSAF 对RetinaNet附上了一个用于在线特征选择的anchor-free模块。新加的分支定义了目标的中心区域作为正样本通过预测到边界的四个距离来定位。
  • FCOS 把所有的目标框内的像素作为正样本,通过四个距离和一个新颖的中心得分来检测样本。
  • CSP 只把目标框的中心点定义为正样本来通过固定宽高比来检测行人。
  • FoveaBox 把目标的中间部分作为正样本通过四个距离来执行检测。

Anchor-based和Anchor-free差异分析

  为了不失一般性,我们选择了具有代表性的RetinaNet和FCOS两个模型来详细分析它们间的差异。先分析正负样本选择和对什么回归的不同造成的差异,对于anchor的铺设产生的差异后面讨论,所以这里先对RetinaNet的anchor数目设置为1.

实验设置

   数据集 所有的实验都是在MS COCO数据上,该数据集包含80个目标类别。

   训练细节 使用ImageNet预训练的带有特征金字塔结构的ResNet-50作为主干网络。新加入的层初始化方式和Focal Loss论文里面的一样。对于RetinaNet在5个水平特征金字塔的每一层都只预设一个8S尺度的正方形锚点框,其中S是总的下采样的尺寸。训练期间,对输入图像保持其短边为800并且他们的长边小于等于1333。整个网络使用动量为0.9,权重衰减率为0.0001的随机梯度下降法迭代9万次,batchsize为16。我们设置初始的学习率为0.01并且在6万和8万次迭代的时候用0.1衰减。如不额外声明,上面体积的训练细节会被用在实验中。

   推理细节 在推理阶段,我们用和训练阶段相同的resize方式,通过网络前向运算输出一个目标框和预测类别。之后,我们使用预设的分值0.05来过滤掉大量的背景框,并且每层特征金字塔输出前1000个检测结果。 最终使用IOU阈值为0.6的NMS来对每张图片的每个类别产生置信度前100的检测结果。

矛盾排除

   我们把每个位置只用一个方形锚点框的RetinalNet记为RetinaNet(#A=1)。FCOS的结果比RetinaNet(#A=1)的AP好很多,37.1% vs 32.5%。我们进一步对FCOS进行优化包括把centerness移到回归分支上,通用的优化方式如下:

  • GroupNorm : 对batchsize较小是BN错误率较高的改进方法
  • GIoU Loss : 解决 - 两个边界框不发生重叠时,IoU对损失的贡献度为0
  • In GT Box :
  • Centerness : FCOS
  • Scalar : FCOS

  FCOS经过优化后的AP达到了(37.8%),这些优化方法也可以用在RetinaNet上,把这些方法放在RetinaNet上后AP达到了(37.0%),和FCOS相比AP上仍旧有0.8%的差异。所以移除这些无关的差距,我们能够以一种相当公正的方式来探索anchor-based和anchor-free本质的差距。

本质的差距

  在使用这些通用的优化方法后,RetinaNet(#A=1)和anchor free的FCOS仍旧有两个差异存在,一个是分类子任务的正负样本的定义。另一个是关于回归子任务的回归的目标。

   分类 如果图1(a)所示,RetinaNet利用IoU把不同金字塔层产生的锚点框分为正样本和负样本。它先对每个目标的锚点框和真实目标框的IoU大于阈值作为正样本,IoU小于阈值的作为负样本。剩余的锚点框在训练过程被忽略。如图1(b)所示,FCOS使用空间和缩放限制对来自不同金字塔水平的锚点进行划分。1、先考虑锚点在真实目标框中的作为候选的正样本,2、从候选的正样本中基于金字塔每层的尺度范围来选择最终的正样本。如果所预测的目标的大小恰好在该层的尺度范围内,那么就定义为最终的正样本,剩余的皆为负样本。

  如图1所示,FCOS先使用空间限制在空间维度找到正样本候选样本,然后使用尺度限制来选择最终的正样本。相反,RetinaNet直接利用IoU通过空间和尺度同时地选择最终样本。这两种不同的样本选择策略产生了不同的正负样本。如表2所示,RetinaNet(#A=1)也使用空间和尺度限制策略来代替IoU策略把AP从37.0%提高到了37.8%。至于FCOS,如果使用IoU的策略来选择样本的话,那么AP就从37.8%下降到36.9%。这些结果证明了正负样本的定义是anchor-based和anchor-free间一个至关重要的差异。

   回归 当正负样本被选定后,目标的位置会从正样本开始回归,如图2(a)所示。RetinaNet从anchor box来对目标框进行回归4个偏移量如图2(b)所示,而FCOS从锚点向目标框的四个边角的距离进行回归,如图2©所示。当RetinaNet和FCOS都采用相同的样本选择策略得到一致的正负样本时,最终的效果没有显著的差异,无论是对框回归还是对点回归。

   结论 根据这些实验结论,我们发现一阶段anchor-based检测器和center-based检测器的本质区别实际上是如何定义正负训练样本,这对当下的目标检测来说是重要的,也是值得进一步研究的。

自适应训练样本选择

  在训练一个目标检测器的时候,我们首先需要定义正负样本进行分类,然后对正样本进行回归。根据之前的分析,前者是至关重要的,也是对比传统IoU策略来说效果提升的关键。受此启发,我们在目标检测领域探究这个最基础的问题:如何定义训练的正负样本,并提出了自适应训练样本选择-ATSS。和这些传统的策略相比,我们的方法几乎没有超参数,并且在不同的设置下是鲁棒的。

方法描述

  前面介绍的样本选择策略有一些敏感的超参数,比如在anchor-based检测器中IoU的阈值和anchor-free检测器中尺寸的范围。这些超参数被设置后,所有的真实目标框只能依据固定的规则来选择它们的正样本,可能会适用于大多数的目标,但是一些外部的目标就会被忽略。因此,不同的超参数设置将会有不同的结果。

  为此,我们提出了ATSS方法根据目标特性的统计来自动的选择样本,没有任何的超参数。上图算法1描述了ATSS方法对一个输入图像的工作流程。**对于图像上的每个真实目标框ggg,我们先找到候选正样本。如果上图3到6行,在特征金字塔的每层,我们都选择中心点L2距离最接近真实目标框ggg的kkk个锚点框作为候选正样本。假设有LLL层特征金字塔,真实的目标框ggg将会有k×Lk \times Lk×L个候选正样本。我们对所有的候选正样本和真实目标框之间计算IoU,之后求其均值和标准差。IoU的阈值就变为了tg=mg+vgt_g = m_g + v_gtg​=mg​+vg​最终,我们选择这些IoU值大于等于阈值tgt_gtg​的样本为最终正样本。**值得注意的是,我们也限制了正样本的中心需要在真实目标框中第12行。此外,如果一个锚点框被指定预测多个目标的真实框,那么就选择具有最高IoU的锚点框。剩余的都是负样本。

   基于锚点框和目标的中心距离来选择候选样本 对于RetinaNet来说,当锚点框的中心点距离目标中心点更近的时候,IoU是更大的。对于FCOS来说距离目标中心更近的锚点将会产生更高质量的检测结果。因此距离目标中心点更近是更好的候选样本。

方法要点

   使用均值和标准差的和作为IoU阈值 IoU的均值mgm_gmg​度量了这个对象预设的锚点框的合理性。如图3(a)一个高的mgm_gmg​表示高质量的候选正样本,所以IoU的阈值就会相应的高。一个低的mgm_gmg​如图3(b)所示,表示大多数的候选样本都是低质量的并且IoU阈值应该低。此外,**IoU的标准差vgv_gvg​用于刻画哪个层适合来检测这个目标。**如图3(a)所示,意味着有一个金字塔层非常适合这个目标,所以对vgv_gvg​和mgm_gmg​相加来获取一个更高的阈值,只在特顶层来选择正样本。一个低的vgv_gvg​值如图3(b)所示意味着有几个金字塔层是适用于这个目标的,对vgv_gvg​和mgm_gmg​相加来获取一个低的阈值来在这些层里面选择合适的正样本。使用mgm_gmg​和vgv_gvg​相加得到IoU的阈值tgt_gtg​能够自适应的对每个目标从合适的金字塔层来选择足够的正样本依据目标的统计特性。

   限制正样本的中心在目标内 如果一个锚点框的中心在目标之外,那说明是一个不好的候选正样本并且用于预测的特征在目标之外,对训练无意义,应该被排除。

   不同的目标间保持公平的样本选择 根据3西格玛原则的统计理论,理论上大约有16%的样本在置信度区间 [mg+vg,1][m_g + v_g, 1][mg​+vg​,1] 。尽管候选样本的IoU不是一个标准的正态分布,但是统计结果显示对每个目标都有 0.2∗kL0.2*kL0.2∗kL 个正样本,不管它的尺寸,长宽比和位置。相反,RetinaNet和FOCS对于更大的目标趋向于有更多的正样本产生,对不不同目标间是不公平的。

   几乎无超参 ATSS只有一个参数kkk,即选取距离目标中心最近的kkk个锚点框。后续的实验证明了这个超参对于不同的kkk值非常不敏感。

方法验证

   Anchor-based RetinaNet 用ATSS来代替RetinaNet(#A=1)之前的样本选择策略,结果如表3所示,RetinaNet(#A=1)的效果提升比较明显。

   Anchor-free FCOS 论文提出的方法用在FCOS上有两个不同的版本:简洁版和完全版。对于简洁版,我们只使用ATSS中的部分方法到FCOS中。FCOS把在目标框内的锚点作为候选样本,导致产生了大量的低质量正样本。相反,我们的方法在每层特征金字塔对每个真实框选择前 k=9k=9k=9 个候选框。

  对于完全版本,我们让FCOS的锚点通过8S的尺度变为锚点框来定义正负样本,回归的方式不变,还是对锚点进行回归,只是引入了ATSS中利用IoU的统计信息。表3可以看出效果有明显的变好。值得注意的是这两个版本在空间上有相同的候选样本,差别只是来自于最终正样本的通过尺寸维度的选择方式。完全版本的ATSS比简洁版本的表现好很多。说明我们方法中自适应的方式比FCOS原有的固定的方式要好很多。

对比

   超参 k 表4对比了不同的k的取值得到的结果,可以发现,过大的k值,效果不是很多好,因为产生了过多的低质量框,而过小的k值效果更差,以为候选样本过少。总的来说k值是一个非常鲁棒的值对于ATSS方法来说,接近于无超参。

   Anchor Size ATSS 凭借着锚点框来定义正样本的,所以论文也研究了锚点框尺寸的影响。先对正方形的大小做了实验,结果如表5所示,说明不同尺度的正方形产生的结果是相当稳定的。此外,还对不同的宽高比做了实验,结果如表6所示,对效果的影响也是不敏感的。这些结果说明ATSS对于不同的anchor设置是鲁棒的。

对比

  表8展示了我们最终的模型在MS COCO的test-dev的数据集的测试结果和其他sota目标检测方法做对比。我们的方法利用ResNet-101上达到了43.6%的AP,而且没有任何花里胡哨的优化技巧,比其他有同样主干网络的方法更好,包括Cascade R-CNN,C-Mask RCNN,RetinaNet和RefineDet。我也能够通过使用更大的主干网络来获取更高的精度,比如使用ResNeXt-32x8d-101和ResNeXt-64x4d-101。45.6%的AP超过了除了SNIP以外的所有的anchor-free和anchor-based方法。比SNIP低0.1%,SNIP介绍了一种多尺度训练和测试的策略。我们的方法是关于定义正负样本的,它能够和现有的计数兼容并起辅助作用。我们进一步在ResNet和ResNeXt上使用可变性卷积作为检测的最后一层。可变性卷积对各种主干网络的结果都有提高。其中ResNeXt-32x8d-101、ResNeXt-64x4d-101达到了47.7%。达到了单个模型和单个尺度预测的最好的结果。大幅超过了之前所有的检测器。最终,使用多尺度测试策略,我们的模型达到了50.7%AP。

多个anchor真的有用吗?

  之前的实验中我们使用的RetinaNet每个位置都是只定义了一个锚点框。而锚点框的数量仍旧是anchor-based和anchor-free的一个区别,这里通过实验来探究下这个问题。实际上原始的RetinaNet在每个位置铺设9个锚点框(3种尺度 ×\times× 3种宽高比)。表7列出了实验的结果。其中Imprs表示通用的目标检测优化方法。可以发现在不使用ATSS的时候,RetinaNet使用9种anchor框加通用优化的AP可以达到38.4%比1中anchor框的37.0%效果好很多。说明了在传统的基于anchor的样本选择策略下,每个位置铺设更多的锚点框是有效的。

  然而,在使用了我们提出的方法之后,就得出了相反的结论。在使用了ATSS之后,RetinaNet(#A=1)效果和RetinaNet(#A=9)是相似的,甚至还略好于后者。此外,当我们改变anchor的尺寸和长宽比等,结果几乎和没变一样。换句话说,只要正样本被合理的选择了,不管在每个位置铺设多少个anchor,结果都是一样的。所以在ATSS使用之后,就不需要铺设多个anchor了,而传统的基于IoU的方法,铺设多个anchor可能会有助于其选择样本。

结论

  我们指出了one-stage anchor-based和center-based anchor-free检测器的本质区别在于正负样本的定义。我们对目标检测在训练阶段如何选择正负样本的基础问题进行了深入挖掘,然后提出了ATSS方法来自动的选择正负样本根据目标的统计特征,因此缩小了anchor-based和anchor-free检测器之间的差距。我们也讨论了不同场景下,每个位置铺设多个锚点框的必要性。在使用ATSS就不必要在每个位置铺设多个锚点框了。在MS COCO上进行的大量实验阐明了我们提出的方法在不引入任何开销的情况下能够达到sota的效果。

附录

  1. anchor-free有两种 center-based方法,keypoint-based方法

  2. 目标检测改进的通用办法,从简单到复杂:
    2.1 融合上下文特征,加入attention机制;
    2.2 尝试不同网络结构;
    2.3 尝试不同训练策略 ;
    2.4 在损失函数上做手脚;

  3. achor-free的起源YOLO和DenseBox

  4. 通过anchor-free来优化anchor-based模型,作为RPN也好,作为第二阶段的R-CNN也好。

  5. FCOS先使用空间限制在空间维度找到正样本候选样本,然后使用尺度限制来选择最终的正样本。相反,RetinaNet直接利用IoU通过空间和尺度同时地选择最终样本

  6. 统计三西格玛原则:
    6.1 sigma原则:数值分布在(μ-σ,μ+σ)中的概率为0.6526;
    6.2 2sigma原则:数值分布在(μ-2σ,μ+2σ)中的概率为0.9544;
    6.3 3sigma原则:数值分布在(μ-3σ,μ+3σ)中的概率为0.9974;

孤读Paper——《ATSS:Adaptive Training Sample Selection》相关推荐

  1. 孤读Paper——《Deep Snake for Real-Time Instance Segmentation》

    <Deep Snake for Real-Time Instance Segmentation>   论文借鉴了snake算法,将snake算法做成了轮廓结构化特征学习的方法.DeepSn ...

  2. 孤读Paper——《FCOS: Fully Convolutional One-Stage Object Detection》

    <FCOS: Fully Convolutional One-Stage Object Detection>   简单.鲁棒的Anchor free目标检测算法,核心思想 是利用FCNs- ...

  3. 孤读Paper——《CenterNet:Objects as Points》

    点即是目标   建模对象为单个的点--即目标框的中心点.我们的检测器使用关键点估计来找到中心点并且回归出全部其他的目标属性,比如大小,3D位置,方向甚至姿势.我们基于中心点的方法称为CenterNet ...

  4. 视频实例分割paper(一)《Video Instance Segmentation》

    [主要贡献] 1.视频实例分割第一次被正式定义和探索 2.创建了第一个大规模视频实例分割数据集 2.9k视频 40个目标类别 3.提出一种新的视频实例分割算法MaskTrack R-CNN,在Mask ...

  5. 【论文泛读】 Deep Learning 论文合集

    [论文泛读] Deep Learning 论文合集 文章目录 [论文泛读] Deep Learning 论文合集 Batch Normalization: Accelerating Deep Netw ...

  6. 【Deep Snake】DeepSnakeforReal-TimeInstanceSegmentation

    浙江大学 CVPR 2020 oral paper code 文章目录 overview Related work Detail Result 从论文题目就可以看出论文要做的事情:实时的实例分割.方法 ...

  7. 实时实例分割的Deep Snake:CVPR2020论文点评

    实时实例分割的Deep Snake:CVPR2020论文点评 Deep Snake for Real-Time Instance Segmentation 论文链接:https://arxiv.org ...

  8. 【论文阅读/翻译笔记】Deep Snake for Real-Time Instance Segmentation

    原论文标题:Deep Snake for Real-Time Instance Segmentation 原论文链接:https://arxiv.org/abs/2001.01629 翻译:张欢荣 用 ...

  9. 读Applying Deep Learning To Airbnb Search有感

    读Applying Deep Learning To Airbnb Search有感 介绍 Airbnb的房屋预订系统对于房主和租客来说是一个双向的平台,房主想出租他们的空间,租客想预订房间.airb ...

最新文章

  1. 职称计算机和职称英语期限,专业技术职称考试,职称英语和职称计算机有效期多长时间,每年什么时候报名啊?上海的...
  2. python中的reduce、lambda函数
  3. golang goroutine 协程同步 sync.WaitGroup 简介
  4. 以太坊服务器是什么_搭建以太坊节点服务器https API
  5. 查看移动平均价的历史记录
  6. 前端如何正确使用中间件?
  7. thinkphp如何部署到宝塔面板nginx服务器
  8. dataframe iloc_如何使用iloc和loc 对Pandas Dataframe进行索引和切片
  9. C语言课后习题(2)
  10. 【Keil】使用Keil5时出现的错误(持续更新)
  11. php外边框样式,CSS中的边框样式
  12. 开源天生就不是为了赚钱!
  13. 【机器学习】吴恩达作业7.1,python实现PCA主成分分析
  14. csdner: china_jeffery, C++默认构造函数; csdner: thief thief, 什么情况下C++编译器会生成默认的构造函数
  15. 不锈钢水处理过滤器在食品领域中的运用
  16. 电脑版微信提示音mp3_短的微信提示音什么好?40首好听的微信提示音试听下载...
  17. QGuiApplication底层鼠标处理(二)QSocketNotifier在事件循环中触发activated信号
  18. 怎么打印加密的PDF文件?
  19. 声网如何处理直播 SEI 相关问题?
  20. 三种方法Python读取文件指定行,来看看你用过没?

热门文章

  1. java网页统计访客量_Java中的访客设计模式
  2. Linux中的/ dev / null
  3. testng数据驱动_TestNG数据提供者
  4. 熊猫Pivot_table()– DataFrame数据分析
  5. 如何在Java中将集合转换为列表
  6. 标准IO库--unix环境高级编程读书笔记
  7. Springsecurity之UserDetails
  8. jenkins插件之Publish Over SSH
  9. MyEclipse破解文件+破解说明
  10. HDOJ/HDU 2555 人人都能参加第30届校田径运动会了(判断加排序~)