DeiT III: Revenge of the ViT中文翻译

2023-10-17 09:20

本文主要是介绍DeiT III: Revenge of the ViT中文翻译,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Abstract

视觉转换器(ViT)是一种简单的神经结构,适用于多个计算机视觉任务。它有有限的内置架构先验,而最近的架构则包含了关于输入数据或特定任务的先验。最近的研究表明,vit受益于自我监督的预训练,特别是像BeiT这样的bert式的预训练。
在本文中,我们回顾了ViTs的监督训练。我们的过程建立并简化了训练ResNet-50的配方。它包括一个新的简单的数据增强程序,只有3个增强,更接近在自我监督学习的实践。我们对图像分类(ImageNet-1k上是否对ImageNet-21k进行预训练)、迁移学习和语义分割的评估表明,我们的过程比之前的完全监督训练方法有很大的优势。它还揭示了我们经过监督训练的ViT的性能与最近的架构相当。我们的研究结果可以作为最近在ViT上展示的自我监督方法的更好的基线。
在这里插入图片描述

1 Introduction

在NLP取得巨大成功后,transformer模型[55]及其衍生产品在计算机视觉中越来越受欢迎。它们越来越多地应用于图像分类[13]、检测分割[3]、视频分析等领域。特别是,多索维斯基等人[13]的视觉变压器(ViT)是卷积体系结构的合理选择。这支持采用变压器作为一种通用架构,能够通过注意过程[5,8]来学习卷积和更长范围的操作。相反,卷积网络[20,27,29,41]隐式地提供了内置的翻译不变性。因此,他们的训练不必事先学习这一点。因此,包含卷积的混合架构比普通变压器[18]收敛得更快也就不足为奇了。
因为它们只将补丁中像素的共定位作为先验,所以变压器必须在优化模型时学习图像的结构,以便它处理输入,以解决给定的任务。这可以是在有监督的情况下复制标签,也可以是在自我监督方法的情况下复制其他代理任务。然而,尽管它们取得了巨大的成功,但在计算机视觉方面研究如何有效地训练视觉变压器的工作却很少,特别是在像ImageNet- 1k这样的中型数据集上。由于多索维斯基等人[13]的工作,培训程序大多是来自Touvron等人[48]和Steiner等人[42]的提议的变体。相比之下,多部作品都提出了替代架构,通过引入池化、更有效的关注,或混合架构,重新合并卷积和金字塔结构。这些新设计虽然对某些任务特别有效,但却不那么普遍。一个难以解决的问题是,改进的性能是由于特定的架构设计,还是因为它像所建议的那样便于优化,这是与ViTs [60]进行卷积的情况。
最近,受流行的BerT预训练启发的自我监督方法给计算机视觉中的BerT时刻带来了希望。在自然语言处理领域和计算机视觉领域之间有一些类比,从变压器架构本身开始。然而,这些领域并不是在各个方面都是相同的:被处理的模式是不同性质的(连续的和离散的)。计算机视觉提供了像ImageNet [40]这样的大型注释数据库,并且在ImageNet上的完全监督预训练可以有效地处理不同的下游任务,如迁移学习[37]或语义分割。
没有进一步的工作完全监督方法在ImageNet很难得出结论如果有趣的性能自我监督方法像BeiT[2]是由于训练,如数据增强,正则化、优化,或一个潜在的机制,能够学习更一般的隐式表示。在本文中,我们并没有假装回答这个困难的问题,但我们希望通过更新普通的ViT架构的训练程序来满足这一争论。我们希望有助于更好地理解如何充分利用变压器的潜力和类似bert的预培训的重要性。我们的工作建立在完全监督和自我监督方法的最新技术基础上,有了关于数据增强的新见解。我们提出了在ImageNet-1k和ImageNet-21k上的视觉变压器的新训练方案。其主要成分如下:
·我们建立在怀特曼等人为[57]介绍的ResNet50的工作的基础上。特别地,我们采用二元交叉熵损失的仅训练。我们采用了这种方法,加入了能够显著改善大型ViT [51]训练的成分,即随机深度[24]和层尺度[51]。
•3-Augment:是一个简单的数据增强,灵感来自于用于自我监督学习。令人惊讶的是,通过ViT,我们观察到它比通常的自动/学习数据增强训练随机增强[6]更好。
•Simple Random Cropping。当在像ImageNet-21k这样更大的集合上进行预训练时,简单的随机裁剪比随机调整大小裁剪更有效。
•A lower resolution:在训练时的分辨率较低。这种选择减少了训练测试差异[53],但ViT没有得到充分利用。我们观察到,通过防止过拟合对最大模型也有正则化效应。例如,对于目标分辨率为224×224,在分辨率为126×126(81个标记)下预训练的ViT-H在ImageNet-1k上比在分辨率为224×224(256个标记)下预训练时获得更好的性能。这在训练前的要求也较低,因为tokens减少了70%。从这个角度来看,它提供了与掩码-自动编码器[19]类似的缩放属性。
我们的“新”训练策略并没有达到最大的模型,这比Touvron等人[48]的数据高效图像转换器(DeiT)又迈出了一步。因此,我们在图像分类和分割方面获得了具有竞争力的性能,即使与最近流行的架构如SwinTransformers[31]或现代凸网架构如ConvNext [32]相比。下面我们将指出一些有趣的结果。
•即使是在中型数据集上,我们也会利用具有更大容量的模型。例如,当仅在ImageNet1k上训练ViT-H时,我们的前1准确率达到85.2%,与文献中报道的224×224的最佳ViT-H相比,+提高了5.1%。
•我们对ImageNet-1k的训练程序允许我们训练一个十亿参数的ViT-H(52层),而没有任何超参数自适应,只是使用与ViT-H相同的随机深度下降率。在224×224时,它达到84.9%,即+比在相同设置下训练的相应ViT-H高0.2%。
•在不牺牲性能的情况下,我们将所需的gpu数量和ViT-H的训练时间除以2以上,这使得在不减少资源数量的情况下有效地训练这些模型成为可能。这要归功于我们的低分辨率的预训练,这降低了峰值内存。
•对于ViT-B和Vit-L模型,我们的监督训练方法与类似bert的自我监督方法[2,19]的默认设置相同,当使用相同级别的注释和更少的时代时,在图像分类和语义分割的任务中。
•通过这种改进的训练程序,一个普通的ViT缩小了与最近最先进的架构的差距,通常提供更好的计算/性能权衡。我们的模型在附加的测试集上也比较更好ImageNet-V2 [39],这表明我们训练过的模型比之前的大多数工作都能更好地推广到另一个验证集。
•对迁移学习分类任务中作物比例影响的消融。我们观察到,它对性能有显著的影响,但最佳值在很大程度上取决于目标数据集/任务。

2 Related work

Vision Transformers由多索维茨基等人[13]介绍。该架构源自Vaswani等人[55]的转换器,现在在许多任务中被用作convnets的替代方案:图像分类[13,48],检测[3,31],语义分割[2,31]视频分析[17,35],等等。这种更大的灵活性通常会带来缺点,即它们需要更大的数据集,或者当数据更少时,训练必须进行调整。通过引入更有效的注意[16,17,31]或池化层[21,31,56]的方法,已经引入了许多变体来降低注意成本。一些论文重新引入了混合架构[18,58,60]中特定于卷积的空间偏差。这些模型不如普通的Transformers那么通用,但通常在某些计算机视觉任务中表现良好,因为它们的架构先验减少了从头开始学习任务偏差的需要。这对于较小的模型尤其重要,在这些模型中,专门的模型不需要投入一些能力来重现已知的先验,比如平移不变性。这些模型在形式上不那么灵活,但它们不需要复杂的培训程序。

Training procedures:ViT论文[13]中提出的第一个程序对于在大数据集上训练的大模型最有效。特别是在ImageNet上从零开始训练时,ViT没有与 convnets竞争。Touvron等人的[48]表明,通过调整训练程序,有可能实现与仅使用图像集训练的 convnets相当的性能。在这个数据高效图像变压器程序(DeiT)之后,只有很少的适应被提出来改进训练视觉变压器。Steiner等人[42]发表了一项完整的研究,关于如何通过对不同的训练组件进行完全的消融,在不同的数据集上训练视觉转换器。他们在ImageNet [40]上的结果略低于DeiT,但他们报告在ImageNet-21k上的结果有所改进。自监督方法被称为掩蔽自动编码器(MAE)[19],为更大的ViT模型提出了一种改进的监督基线。

BerT预训练:在缺乏强大的完全监督训练程序的情况下,类似BerT[10]的方法用自我监督的代理目标训练ViT,然后对目标数据集进行完全微调,似乎是充分利用视觉转换器潜力的最佳范例。事实上,BeiT [2]或MAE [19]明显优于完全监督的方法,特别是对于最大的模型。然而,到目前为止,这些方法大多显示出了它们对中型数据集的兴趣。例如,MAE [19]在ImageNet-1k上进行预训练并对ImageNet-1k进行全面微调时,报告了其最令人印象深刻的结果。当在ImageNet-21k上进行预训练和在-1k上进行微调,BeiT[2]需要在ImageNet-21k上进行完整的90个时代的微调,然后在ImageNet-1k上进行全面微调以达到最佳性能,这表明需要一个大的标记数据集来实现其最佳潜力。最近的一项研究表明,这种自动编码器在数据匮乏的上下文[15]中最有趣,但这质疑了它们在实际上有更多标记数据可用的情况下的优势。

Data-augmentation:对于监督培训,社区通常采用由自动设计程序提供的数据增强,如随机增强[6]或自动增强[7]。这些数据增强似乎对训练视觉转换器[48]至关重要。然而,像三元组增强[34]和统一增强[30]这样的论文已经表明,在简化这些方法时,有可能达到有趣的性能水平。然而,这些方法最初是针对convnets进行了优化的。在我们的工作中,我们建议在这个方向上更进一步,并极大地限制和简化数据增强:我们引入了一个数据增强策略,它只使用3种以均匀概率随机抽取的不同变换。就是这样。

3 Revisit training & pre-training for Vision Transformers

在本节中,我们将介绍我们的 vision transformers的训练程序,并将其与现有的方法进行比较。我们在表1中详细说明了不同的成分。在怀特曼等人[57]和Touvron等人[48]的基础上,我们介绍了几个对最终模型精度有显著影响的变化。

3.1 Regularization & loss

Stochastic depth:随机深度是一种正则化方法,对深度网络的训练特别有用。我们在所有层中使用统一的下降率,并根据模型大小[51]进行调整。表13 (A)给出了每个模型的随机深度下降率。

LayerScale.我们使用分层比例尺[51]。引入该方法是为了便于 deep transformers的收敛。在我们的训练过程中,我们没有收敛的问题,但是我们观察到,层尺度允许我们的模型对最大的模型获得更高的精度。在原论文[51]中,根据深度调整了版面尺度的初始化。为了简化方法,我们对所有的模型使用相同的初始化(10−4)。

Binary Cross entropy.Wigthman等人的[57]采用了二元交叉熵(BCE)损失,而不是更常见的交叉熵(CE)来训练ResNet-50。他们得出结论,与CE损失相比,收益是有限的,但当使用Mixup [64]和CutMix [63]时,这种选择更方便。对于更大的vit和我们在ImageNet-1k上的训练程序,BCE损失为我们提供了一个显著的性能改善,见表4中的消融。我们在Imagenet21k的探索阶段,并没有取得引人注目的结果,因此在对该数据集进行预训练以及随后的微调时保持CE.

在这里插入图片描述
优化器是LAMB[61],AdamW[33]的衍生物。它在Apex的[1]实现中默认包含了梯度剪切。

3.2 Data-augmentation

自从AlexNet出现以来,对用于训练神经网络的数据增强程序进行了重大的修改。有趣的是,同样的数据增强,如随机增强[6],被广泛用于ViT,而他们的策略最初是针对convnets学习的。考虑到这些架构中的架构先验和偏差有很大的不同,增强策略可能不会被调整,并且考虑到它们的选择中涉及的大量选择,可能会过度拟合。因此,我们将重新审视这个之前的选择。

3-Augment:我们提出了一个简单的数据增强,灵感来自于自监督学习(SSL)。我们将考虑以下转换:
•Grayscale灰度:这有利于颜色不变性,并更多地关注形状。
•Solarization曝光:这增加了颜色上强烈的噪音,以更加增强颜色强度的变化,因此更多地关注形状。
•Gaussian Blur高斯模糊:为了稍微改变图像中的细节。
在这里插入图片描述
在这里插入图片描述
对于每张图像,我们只选择3种不同的均匀概率的数据增强。除了这3个一致的选择,我们还包括常见的颜色抖动和水平翻转。图2说明了在我们的3-增强方法中使用的不同的增强功能。在表2中,我们提供了对不同数据增强组件的消融。

3.3 Cropping

Random Resized Crop (RRC)在谷歌网的[43]论文中介绍了随机重组作物(RRC)。它作为一种正则化方法来限制模型的过拟合,同时支持模型所做的决定对某一类转换是不变的。这种数据增强在Imagenet1k上被认为是重要的,以防止过拟合,而过拟合在现代大型模型中迅速发生。
在这里插入图片描述
然而,这种裁剪策略在训练图像和测试图像在高宽比和物体的表观大小[53]方面引入了一些差异。由于ImageNet-21k包含了明显更多的图像,因此它不太容易发生过拟合。因此,我们质疑强RRC正则化训练时RRC正则化的好处是否弥补了它的缺点。

Simple Random Crop (SRC)简单随机裁剪(SRC)是一种更简单的提取作物的方法。它类似于在AlexNet [27]中提出的原始裁剪选择:我们调整图像的大小,使最小的一面匹配训练分辨率。然后我们在各个边应用4个像素的反射填充,最后我们沿着图像的x轴随机选择一个训练大小的平方裁剪。

图3可视化了为RRC和SRC取样的裁剪盒。RRC为作物提供了许多多样性和非常不同的大小。相比之下,SRC覆盖了整个图像中所占的更大的比例,并保持了高宽比,但提供了较少的多样性:作物的重叠显著。因此,当在ImageNet- 1k上进行训练时,常用的RRC的性能更好。例如,如果我们不使用RRC,ViT-S将其前1精度降低0.9%。

然而,在ImageNet-21k(×10比ImageNet-1k大)的情况下,过拟合的风险更小,增加RRC提供的正则化和多样性也不那么重要。在这种情况下,SRC提供了减少表观尺寸和高宽比的差异的优势。更重要的是,它给了一个更高的机会,实际标签的图像匹配的作物: RRC是相对激进的裁剪,在许多情况下,标记对象甚至不出现在裁剪中,如图4所示的一些裁剪不包含标记对象。例如,在RRC中,在左边的例子中没有斑马,或者在中间的例子中的三种作物中没有火车。这在SRC上更不可能发生在SRC上,它覆盖了更大比例的图像像素。在表5中,我们提供了对ImageNet-21k上随机调整大小的作物的消融,我们看到这些观察结果转化为性能的显著提高。
在这里插入图片描述

4 Experiments

本节包括在图像分类方面的多个实验,特别强调了图像集1k[9,39,40]。我们还报告了在细粒度分类和分割中的下游任务的结果。我们包括了大量的消融,以更好地分析不同的效果,如训练解决方案的重要性和更长的训练时间表。我们在附录中提供了其他的结果。

4.1 Baselines and default settings

我们在本文中考虑的评估我们的训练过程的主要任务是图像分类。我们在Imagenet1k训练上进行训练,并在Imagenet1k-val上进行评估,在ImageNet-V2上进行结果,以控制过拟合。我们还考虑了我们可以在ImageNet-21k上进行预训练的情况,最后,我们报告了在6个不同的数据集/基准上的迁移学习结果。

默认设置。当只在ImageNet-1k上进行训练时,默认情况下,我们在400个批处理大小为2048的时代期间进行训练,遵循之前的工作[51,60]。除非另有说明,培训和评估都是在决议224×224上进行的(即使我们建议在推理时间的目标是224×224时,以较低的分辨率进行训练)。
在ImageNet-21k上进行预训练时,我们默认在分辨率224×224的90个阶段进行预训练,然后在ImageNet-1k上对50个时代进行微调。在这种情况下,我们考虑两个微调分辨率: 224×224和384×384。

4.2 Ablations(消融实验)

4.2.1 Impact of training duration(训练时间的影响)

在图5中,我们提供了对周期数的消融,这表明当我们增加基线的时代数量超过采用的400个epoch时,ViT模型不会像DeiT训练程序[48]那样迅速饱和。
对于ImageNet-21k的预训练,我们使用90个epoch来进行预训练,就像在一些工作[31,49]中一样。我们在ImageNet-1k [49]上对50个时期进行了微调,并略微适应了随机深度参数。我们指出,这种选择主要是为了不同模型之间的一致性:我们观察到,训练30个epoch也提供了类似的结果。

4.2.2 Data-Augmentation(数据增强)

在表3中,我们将手工制作的数据增强3与现有的学习增强方法进行了比较。使用ViT体系结构,我们的数据增强是最有效的,同时比其他方法更简单。由于以前的增强是在convnets上引入的,我们也提供了ResNet-50的结果。在这种情况下,以前的增强策略在验证集上具有类似的结果(随机增强、琐碎增强)或更好的结果(自动增强)。

在这里插入图片描述
当在独立集V2上进行评估时,情况已不再如此,因为自动增强的更好的精度并不显著。

4.2.3 Impact of training resolution

在表6中,我们报告了根据训练分辨率的性能演变。我们观察到,我们受益于FixRes [53]效应。通过分辨率192×192(或160×160)的训练,经过轻微的微调,我们在224获得了比在224×224从头训练更好的性能。
我们观察到该分辨率具有正则化效应。虽然我们知道在训练时间[53]时最好使用较小的分辨率,但我们也在训练曲线中观察到,这个显示减少了较大模型的过拟合。我们的结果表6对ViT-H和ViT-L的结果也说明了这一点。这在较长时间的训练中尤为重要,因为模型过度拟合而没有更强的正则化。这个更小的分辨率意味着需要处理的补丁更少,因此,它降低了培训成本,提高了绩效。在这方面,它的效应与MAE [19]的效应相当。我们还报告了ViT-H 52层和ViT-H 26层与1B参数并行[50]模型的结果。由于训练的分辨率较低,因此更容易训练这些模型。

4.2.4 Comparison with previous training recipes for ViT

在图1中,我们比较了用于在ImageNet-1k和AmageNet-21k上预训练ViT架构的训练过程。我们的程序大大优于现有的方法。例如,通过ImageNet-21k预训练,与最佳方法相比,ViT-L的+提高了3.0%。类似地,在ImageNet-1k上从头训练时,与之前的最佳方法相比,ViT-H的准确率提高了+2.1%,不使用EMA的最佳方法的+提高了4.3%。详细的结果请见我们的附录。

在这里插入图片描述

4.3 Image Classification

ImageNet-1k.在表7中,我们比较了在ImageNet-1k上使用训练方案训练的ViT架构与其他架构。我们与最近的SwinTransformers[31]和ConvNeXts [32]进行了比较。
Overfitting evaluation.过拟合评估。Imagenet-val和-v2之间的比较是一种量化过拟合[54]的方法,或者至少是在没有任何微调的附近设置中更好的泛化能力1。在图7中,我们绘制了ImageNet-val前1的准确性与ImageNet-v2前1的准确性,以评估模型在验证时从未见过的测试集上进行评估时的表现。我们的模型比所有其他考虑的模型都明显过拟合,特别是在ImageNet-21k上。这是一个很好的行为,它验证了我们配方中对超参数和变体的有限选择不会导致(过拟合)过拟合。
ImageNet-21k.在表8中,我们比较了在ImageNet- 21k上预先训练的ViT架构与然后在ImageNet-1k上微调的我们的训练方法。我们可以观察到,这些发现与我们仅在ImageNet-1k上得到的结果相似。
Comparison with BerT-like pre-training.与像bert一样的训练前进行比较。在表9中,我们比较了用我们的训练配方训练的ViT模型和用不同的类bert方法训练的ViT模型。我们观察到,对于同等数量的时代,我们的方法在ImageNet-1k上表现出相当的性能,在ImageNet-v2和Ade上的分割上表现得更好。对于像BerT这样的预训练,我们将我们的方法与MAE [19]和BeiT [2]进行了比较,因为它们仍然是相对简单的方法,具有非常好的性能。由于我们的方法不使用蒸馏或多种剪裁,所以我们没有与使用辅助模型作为心理视觉损失的PeCo [12]和iBoT [66]使用模型的指数移动平均值等方法进行比较。

4.4 Downstream tasks and other architectures(下游任务和其他结构)

4.4.1 Transfer Learning(迁移学习)

为了评估通过我们的训练过程学习到的ViT模型的质量,我们用迁移学习任务来评估它们。在表14所示的6个数据集上,在400个时期,在ImageNet-1k上只有224×224的预训练的ViT模型的性能。我们的结果如表10所示。在图6中,我们测量了推理时的作物比率对迁移学习结果的影响。我们观察到,在自然学上,这个参数对性能有显著影响。正如在论文[50]中所推荐的,我们只调整了花的迁移学习实验的注意层,这提高了0.2%的性能。
在这里插入图片描述

4.4.2 Semantic segmentation(语义分割)

我们在ADE20k数据集[65]上通过语义分割实验评估我们的ViT基线模型(ImageNet-1k模型400个时时间表,ImageNet-21k模型90个时时间表)。该数据集由20k训练图像和5k验证图像组成,标签超过150个类别。对于训练,我们采用与Swin中相同的时间表:使用UperNet [59]的160k迭代。在测试时,我们用单一尺度和多尺度进行评估。我们的UperNet实现是基于XCiT [16]存储库的。默认情况下,UperNet头部使用的嵌入维度为512。为了节省计算量,对于小的和小的模型,我们将其设置为其工作尺寸,即小的为384,小的为192。我们默认保留512,就像它在XCiT中对其他模型所做的那样。我们的结果报告在表11中。我们观察到,用我们的训练配方训练,与XCiT或Swin等最近的架构相比,vanilla ViTs的训练有更好的流程-精度权衡。

4.4.3 Training with others architectures(与其他架构之间的训练)

在表12中,我们仅在ImageNet-1k上使用分辨率为224×224的训练程序,测量了在v2和v2上的前1个精度。我们可以观察到,对于一些架构,如PiT或CaiT,我们的训练方法将提高性能。对于像TNT这样的其他方法,我们的方法是中立的,而对于像Swin这样的架构,它会降低性能。这与Wightman等人[57]的发现一致,并说明需要改进训练程序以获得稳健的结论。实际上,在保持训练过程固定的同时调整这些架构可能与保持架构固定和调整训练过程具有相同的效果。这意味着有了一个固定的训练过程,我们可以对一个给定的训练过程的架构进行过拟合。为了考虑到过拟合,我们对ImageNet val和ImageNet-v2进行了测量,以量化过拟合的数量。
在这里插入图片描述

5 Conclusion

本文做出了一个简单的贡献:它提出了以监督方式训练的视觉变形器的改进基线,可以作为(1)作为新架构的比较基础;(2)或其他训练方法,如基于自我监督学习的训练方法。我们希望这一更有力的基线将服务于社区在学习可完成许多任务的基础模型方面取得进展。我们的实验还收集了一些关于如何在减少资源的情况下训练更大的模型的见解,允许我们训练一个包含8个gpu的4个节点的10亿个参数模型。
在这里插入图片描述

这篇关于DeiT III: Revenge of the ViT中文翻译的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/224441

相关文章

HDU 2064 汉诺塔III(水题)

题目: http://acm.hdu.edu.cn/showproblem.php?pid=2064 题目大意: 有三根杆,求把n个圆盘从左边移到右边,最少需要移动圆盘的次数。移动规则为大盘不能放在小盘上,比原始的汉诺塔题改变的地方是,只能通过中间的杆往左右两边的杆移动。 心得: 此题心得在题外,不在题内,初看此题,尼玛吓了一跳,好像很难的样子,手贱百度了一下,只注意到俩字“水题”,赶紧

使用 VisionTransformer(VIT) FineTune 训练驾驶员行为状态识别模型

一、VisionTransformer(VIT) 介绍 大模型已经成为人工智能领域的热门话题。在这股热潮中,大模型的核心结构 Transformer 也再次脱颖而出证明了其强大的能力和广泛的应用前景。Transformer 自 2017年由Google提出以来,便在NLP领域掀起了一场革命。相较于传统的循环神经网络(RNN)和长短时记忆网络(LSTM), Transformer 凭借自注意力机制

【HDU】5021 Revenge of kNN II 树状数组

传送门:【HDU】5021 Revenge of kNN II 题目分析:【HDU】4995 Revenge of kNN的升级版,这次取消的K<=10的限制。 但是依旧可以做! 首先我们将点按照横坐标从小到大排序,然后对于每次查询,我们先二分距离mid,然后再二分查找在X-mid,X+mid里面有多少数,如果小于K则抬升下界,如果大于K+1则降低上界,如果等于K则直接更新,还有就是正

【HDU】5020 Revenge of Collinearity 极角排序

传送门:【HDU】5020 Revenge of Collinearity 题目分析:水计算几何,极角排序,第一关键字y轴,第二关键字x轴。 话说不用long long 竟然比用了慢,果然我不懂计算机的心。 代码如下: #include <cmath>#include <cstdio>#include <cstring>#include <algori

推荐适合中秋的SVG模版(第III期)

宝藏模版 往期推荐(点击阅读): 趣味效果|高大上|可爱风|年终总结I|年终总结II|循环特效|情人节I|情人节II|妇女节|儿童节I|儿童节II|儿童节III|618I|618II|父亲节|丝滑动画|端午节I|端午节II|滑动妙用|图片轮播I|图片轮播II|又红又专|中秋节I|中秋节II|双十一I|双十一II|世界杯|圣诞节|新年|兔年春节|元宵节|愚人节|杂志范儿|520/521I|520

Vision Transformer (ViT) + 代码【详解】

文章目录 1、Vision Transformer (ViT) 介绍2、patch embedding3、代码3.1 class embedding + Positional Embedding3.2 Transformer Encoder3.3 classifier3.4 ViT总代码 1、Vision Transformer (ViT) 介绍 VIT论文的摘要如下,谷歌

苹果App Store审核指南中文翻译

(注:<苹果应用商店审核指南>中文翻译最近一次更新为2013-03-04,文中红色部分是相对于2013-03-04版本的新增内容,绿色部分代表更改的内容,蓝色表示苹果相关官方文档的链接。) 前言 感谢您付出宝贵的才华与时间来开发iOS应用程程序。从职业与报酬的角度而言,这对于成千上万的开发员来说一直都是一项值得投入的事业,我们希望帮助您加入这个成功的组织。我们发布了《App

day-47 最大连续1的个数 III

思路 滑动窗口:如果用left和right表示连续1的左右边界,那么意味着可以把0修改为1的次数为k次 解题过程 用一个变量num记录left和right之间0的个数,当num<=k时,right++,num>k时,将left向右移动,直到不再满足num>k Code class Solution {public int longestOnes(int[] nums, int k) {in

[M滑动窗口] lc1004. 最大连续1的个数 III(滑动窗口+模板题)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接:1004. 最大连续1的个数 III 题单: 滑动窗口(定长/不定长/多指针) 二、不定长滑动窗口 §2.1 求最长/最大 2. 题目解析 思路: 比较直接的滑动窗口哈,好像也没什么需要注意的点。 前缀和+二分 也不是不能做。官解也提到了这个点。但对于本题来讲,看到就是滑窗,没毛病吧。 时间复

Fine-Grained Egocentric Hand-Object(中文翻译)

精细化自我中心手-物体分割: 数据集、模型(model)与应用 灵芝张1, 盛昊周1, 西蒙·斯滕特 $ {}^{2} $, 和健博·石 $ {}^{1} $ 摘要。 自我中心视频提供了高保真度建模人类行为的细粒度信息。手和交互对象是理解观众行为和意图的一个关键方面。我们提供了一个标注数据集,包含11,243个自我中心图像,并具有在各种日常活动中与手和对象互动的逐像素分割标签。我们的数据集是