论文链接:[2103.00020] Learning Transferable Visual Models From Natural Language Supervision (arxiv.org)

ICML2021(机器学习顶级会议)

摘要

最先进的计算机视觉系统被训练来预测一组固定的预定目标类别。这种受限制的监督形式限制了它们的通用性和可用性,因为需要额外的标记数据来指定任何其他可视化概念。直接从关于图像的原始文本中学习是一个很有前途的选择,它利用了更广泛的监督来源。我们证明了简单的预训练任务,预测哪个标题配合哪个图像是一个有效的和可扩展的方式学习索塔图像表示从零开始上的一个数据集4亿(图像,文本)对从互联网上收集。经过预训练,自然语言被用来参考学习的视觉概念(或描述新的概念) ,使模型的零镜头转移到下游任务。通过对30多个现有的计算机视觉数据集进行基准测试,包括 ocr、视频中的动作识别、地理定位和多种细粒度对象分类等任务,研究了该方法的性能。该模型转移到大多数任务,往往是有竞争力的完全监督的基线,而不需要任何数据集特定的训练。例如,我们在 imagenet zero-shot 上匹配原始 resnet-50的准确性,而不需要使用128万训练样本中的任何一个。我们发布我们的代码和预先训练的模型重量

源代码:https://github.com/OpenAI/CLIP.

1.介绍和工作目的

在过去的几年中,直接从原始文本中学习的预训练方法彻底改变了 NLP(Dai & Le,2015;Peters 等,2018;Howard & Ruder,2018;Rad-ford 等,2018;Devlin 等。 ,2018 年;Raffel 等人,2019 年)。

自回归和掩码语言建模等与任务无关的目标在计算、模型容量和数据方面已经扩展了许多数量级,并稳步提高了能力。 “文本到文本”作为标准化输入输出接口的发展(McCann 等人,2018 年;Radford 等人,2019 年;Raffel 等人,2019 年)使与任务无关的架构能够实现零样本传输 到下游数据集,无需专门的输出头或数据集特定的定制。 像 GPT-3 (Brown et al., 2020) 这样的旗舰系统现在在使用定制模型的许多任务中具有竞争力,同时几乎不需要特定于数据集的训练数据。

这些结果表明,网络规模的文本集合中现代预训练方法可访问的聚合监督超过了高质量的人群标记 NLP 数据集。 然而,在计算机视觉等其他领域,在 ImageNet (Deng et al., 2009) 等人群标记数据集上预训练模型仍然是标准做法。可以直接从网络文本中学习的可扩展预训练方法导致 计算机视觉方面的类似突破? 先前的工作令人鼓舞。

20 多年前,Mori 等人(1999 年)通过训练一个模型来预测与图像配对的文本文档中的名词和形容词,探索了改进基于内容的图像检索。Quattoni 等人(2007 年)证明了它是可以学习的通过在训练分类器的权重空间中的流形学习更有效的图像表示。Sri-vastava & Salakhutdinov (2012) 通过在低级之上训练多模态深度玻尔兹曼机探索了深度表示学习图像和文本标签特征。Joulin 等人(2016 年)对这一工作线进行了现代化改造,并证明了 CNN 训练来预测图像字幕中的单词,学习有用的图像表示。他们将 YFCC100M 数据集 (Thomee et al., 2016) 中图像的标题、描述和主题标签元数据转换为词袋多标签分类任务,并表明预训练 AlexNet (Krizhevsky et al., 2012 ) 来预测这些标签学习的表征,这些表征与基于 ImageNet 的传输任务预训练类似。 (2017) 然后将这种方法扩展到除了单个单词之外还可以预测短语 n-gram,并展示了他们的系统将零样本转移到其他图像的能力

图一。我们方法的总结。 标准图像模型联合训练图像特征提取器和线性分类器来预测某个标签,而 CLIP 联合训练图像编码器和文本编码器来预测一批(图像、文本)训练示例的正确配对。 在测试时,学习文本编码器通过嵌入目标数据集类的名称或描述来合成零样本线性分类器。

通过基于学习的视觉 n-gram 字典对目标类进行评分并预测得分最高的分类数据集。 VirTex (Desai & Johnson, 2020)、ICLMM (Bulent Sariyildiz et al., 2020) 和 Con-VIRT (Zhang et al., 2020) 最近采用更新的架构和预训练方法展示了 基于转换器的语言建模、掩码语言建模以及从文本中学习图像表示的对比目标。

虽然作为概念证明令人兴奋,但使用自然语言监督进行图像表示学习仍然很少见。这可能是因为在常见基准测试中的表现远低于替代方法。例如,Li et al.(2017) 在零样本设置中在 ImageNet 上仅达到 11.5% 的准确率。这远低于当前最先进技术的 88.4% 准确率(Xie 等人,2020)。它甚至低于经典计算机视觉方法的 50% 准确率(Deng 等,2012)。相反,范围更窄但目标明确的弱监督使用提高了性能。Mahajan 等人(2018 年)表明,在 Instagram 图像上预测与 ImageNet 相关的主题标签是一项有效的预训练任务。当微调到 ImageNet 时,这些预训练模型将准确率提高了 5% 以上,并改善了当时的整体状态。 Kolesnikov 等人(2019 年)和 Dosovitskiy 等人(2020 年)也证明了在通过预训练模型进行更广泛的传输基准测试,以预测带有噪声标记的 JFT-300M 数据集的类别。

这一系列工作代表了当前在从有限数量的监督“黄金标签”中学习和从几乎无限量的原始文本中学习之间的务实中间立场。 然而,它并非没有妥协。 两部作品都经过精心设计,并在过程中将监督分别限制在1000和18291个班级。自然语言能够通过其普遍性来表达并监督更广泛的视觉概念。 这两种方法都使用静态 softmax 分类器来执行预测,并且缺乏动态输出的机制。 这严重削弱了他们的灵活性并限制了他们的“零射击”能力。

这些弱监督模型与最近直接从自然语言学习图像表示的探索之间的一个重要区别是规模。 Mahajan 等人(2018 年)和 Kolesnikov 等人(2019 年)在数百万到数十亿张图像上对他们的加速器年模型进行了训练,而 VirTex、ICMLM 和 ConVIRT 则在 1 到 20 万张图像上对加速器日进行了训练。在这项工作中,我们缩小了这一差距,并大规模研究了经过自然语言监督训练的图像分类器的行为。借助互联网上这种形式的大量公开数据,我们创建了一个包含 4 亿个(图像、文本)对的新数据集,并演示了从头开始训练的 ConVIRT 的简化版本,我们称之为 CLIP,用于Contrastive Language-Image Pre-training,是一种从自然语言监督中学习的有效方法。我们通过训练跨越近 2 个数量级的计算的一系列八个模型来研究 CLIP 的可扩展性,并观察到传输性能是计算的平滑可预测函数(Hestness 等人,2017 年;Kaplan 等人,2020 年) .我们发现 CLIP 类似于 GPT 系列,在预训练期间学习执行一系列广泛的任务,包括 OCR、地理定位、动作识别等。我们通过在 30 多个现有数据集上对 CLIP 的零样本传输性能进行基准测试来衡量这一点,并发现

图2.CLIP 在零镜头传输方面比我们的图像标题基线高效得多。尽管具有很强的表现力,但我们发现基于转换器的语言模型在零镜头 ImageNet 分类方面相对较弱。 在这里,我们看到它的学习速度比预测文本的词袋 (BoW) 编码的基线慢 3 倍(Joulin 等人,2016 年)。 将预测目标替换为 CLIP 的对比目标进一步将效率提高了 4 倍。

它可以与先前的特定于任务的监督模型竞争。 我们还通过线性探针表示学习分析证实了这些发现,并表明 CLIP 的性能优于公开可用的最佳 ImageNet 模型,同时计算效率也更高。 我们还发现零样本 CLIP 模型比同等精度的监督 ImageNet 模型稳健得多,这表明任务不可知模型的零样本评估更能代表模型的能力。 这些结果具有重要的政策和道德影响,我们在第 7 节中考虑。

2.方法

2.1自然语言监督

我们方法的核心是从自然语言中包含的监督中学习感知的想法。 正如引言中所讨论的,这根本不是一个新想法,但是用于描述该领域工作的术语是多种多样的,甚至看似矛盾,并且陈述的动机也多种多样。 张等人(2020),戈麦斯等人 .(2017 年)、Joulin 等人(2016 年)和 Desai & Johnson(2020 年)都介绍了从与图像配对的文本中学习视觉表示的方法,但将它们的方法描述为无监督、自我监督、弱监督和 分别监督。

我们强调,这一系列工作的共同点不是所使用的特定方法的任何细节,而是将自然语言作为训练信号的欣赏。 所有这些方法都是从自然语言超视觉中学习的。 尽管早期的工作在使用主题模型和 n-gram 表示时与自然语言的复杂性作斗争,但深度上下文表示学习的改进表明我们现在拥有有效利用这种丰富监督来源的工具(McCann 等,2017。

与其他训练方法相比,从自然语言中学习有几个潜在的优势。 与用于图像分类的标准众包标签相比,扩展自然语言监督要容易得多,因为它不需要注释采用经典的“机器学习兼容格式”,例如规范的 1-of-N 多数投票“黄金标签” . 相反,适用于自然语言的方法可以从互联网上大量文本中包含的监督中被动学习。 与大多数无监督或自监督学习方法相比,从自然语言中学习也有一个重要的优势,因为它不仅“只是”学习一种表示,而且还将该表示与语言联系起来,从而实现灵活的零样本迁移。 在以下小节中,我们详细介绍了我们确定的具体方法。

2.2创建一个有效的大数据集

现有工作主要使用了三个数据集,MS-COCO(Lin 等人,2014)、Visual Genome(Krishna 等人,2017 年)和 YFCC100M(Thomee 等人,2016 年)。 虽然 MS-COCO 和 Visual Genome 是高质量的人群标记数据集,但按照现代标准,它们都很小,每个都有大约 100,000 张训练照片。 相比之下,其他计算机视觉系统接受了多达 35 亿张 Instagram 照片的训练(Mahajan 等,2018)。 YFCC100M 拥有 1 亿张照片,是一种可能的替代方案,但每张图像的元数据稀疏且质量参差不齐。 许多图像使用自动生成的文件名,如 20160716113957.JPG 作为“标题”或包含相机曝光设置的“描述”。 在过滤以仅保留带有自然语言标题和/或英文描述的图像后,数据集缩小了 6 倍,只有 1500 万张照片。 这与 ImageNet 的大小大致相同。

自然语言监督的一个主要动机是互联网上公开的大量这种形式的数据。 由于现有数据集并不能充分反映这种可能性,因此仅考虑它们的结果将低估这一研究领域的潜力。 为了解决这个问题,我们构建了一个新的数据集,其中包含从 Internet 上的各种公开可用资源收集的 4 亿(图像、文本)对。 为了尝试涵盖尽可能广泛的一组视觉概念,我们搜索(图像、文本)对作为构建过程的一部分,其文本包括一组 500,000 个查询中的一个。1我们通过包括多达 每个查询 20,000 个(图像、文本)对。 结果数据集的总字数与用于训练 GPT-2 的 WebText 数据集相似。 我们将此数据集称为 WebImageText 的 WIT。

2.3选择一个有效的预训练方法

最先进的计算机视觉系统使用非常大量的计算。Mahajan 等人(2018 年)需要 19 个 GPU 年来训练他们的 ResNeXt101-32x48d,而 Xie 等人(2020 年)需要 33 个 TPUv3 核心年来训练他们的 嘈杂的学生 EfficientNet-L2。 考虑到这两个系统都被训练为仅预测 1000 个 ImageNet 类,从自然语言中学习一组开放的视觉概念的任务似乎令人生畏。 在我们努力的过程中,我们发现训练效率是成功扩展自然语言监督的关键,我们根据这个指标选择了我们最终的预训练方法。

我们最初的方法类似于 VirTex,从头开始联合训练图像 CNN 和文本转换器来预测图像的标题。 然而,我们在有效地扩展这种方法时遇到了困难。 在图 2 中,我们展示了一个 6300 万参数的转换器语言模型,它的计算量已经是其 ResNet-50 图像编码器的两倍,它学习识别 ImageNet 类的速度比预测词袋编码的更简单的基线慢三倍 相同的文字。

这两种方法都有一个关键的相似之处。他们试图预测每张图像附带的文本的确切词。由于与图像同时出现的描述、评论和相关文本多种多样,因此这是一项艰巨的任务。最近在图像对比表示学习方面的工作发现,对比目标可以比等效的预测目标学习更好的表示(Tian 等,2019)。其他工作发现,虽然图像的生成模型可以学习高质量的图像表示,但它们需要比具有相同性能的对比模型多一个数量级的计算(Chen 等人,2020a)。注意到这些发现,我们探索了训练一个系统来解决可能更容易的代理任务,即仅预测哪个文本作为一个整体与哪个图像配对,而不是该文本的确切单词。从相同的词袋编码基线开始,我们将图 2 中的预测目标替换为对比目标,并观察到零样本传输到 ImageNet 的效率进一步提高了 4 倍。

给定一批 N(图像,文本)对,CLIP 被训练来预测一批中实际发生的 N×N 个可能(图像,文本)对中的哪一个。 为此,CLIP 通过联合训练图像编码器和文本编码器来学习多模态嵌入空间,以最大化批次中 Nreal 对的图像和文本嵌入的余弦相似度,同时最小化 N2 嵌入的余弦相似度 -不正确的配对。 我们针对这些相似性分数优化了对称交叉熵损失。 在图 3 中,我们包含了 CLIP 实现的核心的伪代码。 据我们所知,这种批量构建技术和目标首先作为多类 N 对损失 Sohn(2016 年)引入深度度量学习领域,Oord 等人(2018 年)作为 InfoNCE 推广用于对比表示学习 损失,最近被 Zhang 等人(2020 年)改编用于医学成像领域的对比(文本、图像)表示学习。

由于我们的预训练数据集很大,过拟合不是主要问题,与Zhang et al. (2020) 的实现相比,训练 CLIP 的细节得到了简化。我们从头开始训练 CLIP,没有用 ImageNet 权重初始化图像编码器或用预训练权重初始化文本编码器。我们不使用表示和对比嵌入空间之间的非线性投影,这是由 Bach-man 等人(2019)引入并由 Chen 等人(2020b)推广的变化。相反,我们仅使用线性投影将每个编码器的表示映射到多模态嵌入空间。我们没有注意到两个版本之间的训练效率差异,并推测非线性投影可能与细节共同适应当前图像仅在自监督表示学习方法中。我们还从 Zhang 等人中删除了文本转换函数 tu。 (2020)从文本中统一采样单个句子,因为 CLIP 预训练数据集中的许多(图像、文本)对只是一个句子。我们还简化了图像变换函数tv。来自调整大小的图像的随机方形裁剪是训练期间使用的唯一数据增强。最后,控制 softmax 中 logits 范围的温度参数,τ,在训练期间直接优化为对数参数化的乘法标量,以避免变成超参数。

2.4选择和刻度一个模型

我们考虑图像编码器的两种不同架构。 首先,我们使用 ResNet-50 (He et al.,2016a) 作为图像编码器的基础架构,因为它被广泛采用且性能得到验证。 我们使用 He et al.(2019) 的 ResNet-D 改进和Zhang(2019) 的抗锯齿 rect-2 模糊池对原始版本进行了一些修改。 我们还用注意力池机制替换了全局平均池化层。 注意力池被实现为“转换器式”多头 QKV 注意力的单层,其中查询以全局平均池化为条件

图像的表示。 对于第二种架构,我们试验了最近推出的 Vision Transformer (ViT)(Dosovitskiy 等人,2020 年)。 我们密切关注他们的实现,只是在变换器之前向组合的补丁和位置嵌入添加了一个额外的层归一化,并使用了稍微不同的初始化方案。

文本编码器是一个 Transformer (V aswani et al., 2017),其架构修改见 Radford et al. (2019)。 作为基本大小,我们使用 63M 参数的 12 层 512 宽模型和 8 个注意力头。 转换器对文本的小写字节对编码 (BPE) 表示进行操作,词汇大小为 49,152 (Sen-nrich et al., 2015)。 为了计算效率,最大序列长度上限为 76。文本序列用 [SOS] 和 [EOS] 标记括起来,并且在 [EOS] 标记处的转换器最高层的激活被视为特征 层归一化然后线性投影到多模态嵌入空间中的文本表示。 在文本编码器中使用了掩码自注意力,以保留使用预训练语言模型进行初始化或添加语言建模作为辅助目标的能力,尽管对此的探索留待未来工作。

虽然之前的计算机视觉研究通常通过单独增加宽度(Mahajan 等人,2018)或深度(He 等人,2016a)来缩放模型,但对于 ResNet 图像编码器,我们采用了 Tan & Le(2019) 的方法,其中 发现在所有宽度、深度和分辨率上分配额外的计算优于仅将其分配到模型的一个维度。 虽然Tan & Le (2019) 为他们的 EfficientNet 架构调整了分配给每个维度的计算比率,但我们使用了一个简单的基线,即平均分配额外的计算来增加模型的宽度、深度和分辨率。 对于文本编码器,我们只缩放模型的宽度,使其与计算出的 ResNet 宽度的增加成正比,根本不缩放深度,因为我们发现 CLIP 的性能对文本编码器的容量不太敏感 。

2.5训练

我们训练了一系列 5 个 ResNets 和 3 个 Vision Transformers。对于 ResNets,我们训练了一个 ResNet-50、一个 ResNet-101,然后还有 3 个遵循 EfficientNet 风格的模型缩放并使用大约 4 倍、16 倍和 64 倍的计算ResNet-50。它们分别表示为 RN50x4、RN50x16 和 RN50x64。对于 Vision Transformers,我们训练了 ViT-B/32、ViT-B/16 和 ViT-L/14。我们训练所有模型 32 个时期。我们使用 Adam 优化器 (Kingma & Ba, 2014) 和解耦权重衰减正则化 (Loshchilov & Hutter, 2017) 应用于所有非增益或偏差的权重,并使用余弦表 (Loshchilov & Hutter, 2016) 衰减学习率)。当训练 1 个 epoch 时,在基线 ResNet-50 模型上使用网格搜索、随机搜索和手动调整的组合来设置初始超参数。由于计算约束,超参数随后被启发式地调整为更大的模型。可学习的温度参数 τ 被初始化为 (Wu et al., 2018) 中的 0.07,并被剪裁以防止将 logits 缩放超过 100,我们认为这是防止训练不稳定所必需的。我们使用非常大的 minibatch 大小 32,768。混合精度(Micikevicius 等人,2017)用于加速训练和节省内存。为了节省额外的内存,使用了梯度检查点 (Griewank & Walther,2000;Chen et al.,2016)、半精度 Adam 统计 (Dhariwalet al.,2020) 和半精度随机舍入文本编码器权重。嵌入相似度的计算也与单独的 GPU 分片,仅计算其本地批量嵌入所需的成对相似度的子集。最大的 ResNet 模型 RN50x64 在 592 V100 GPU 上训练需要 18 天,而最大的 Vision Transformer 在 256 V100 上训练需要 12 天
GPU。对于 ViT-L/14,我们还以更高的 336 像素分辨率预训练一个额外的 epoch,以提高类似于 FixRes 的性能(Touvron 等人,2019)。我们将此模型表示为 ViT-L/14@336px。除非另有说明,本文中报告为“CLIP”的所有结果均使用我们发现性能最佳的模型。

3. Experiments

3.1. Zero-Shot Transfer

3.1.2 USING CLIP FOR ZERO-SHOT TRANSFER

神经网络将图片转换为一个向量表示,向量表示会经过一个线性映射,转换为我们想要的类别数的维度,这个向量表示就变为3维,经过softmax后,转换为概率分布。 W,可以看成是,每个类别对应的向量表示。 线性映射,可以看成是,类别的向量表示与图像的向量表示做一个相似度计算。
        将CLIP用在零样本的分类任务中,就是将这里的W,不再让W是可变的参数,而是将对应的列替换成我们需要的类别它对应的文本的向量表示。

CLIP本身就具有比较图像和文本相似度的能力,所以再计算图像的embedding和对应类别文本描述的embedding,它们相似度的时候,自然就把那张图片,对应到与它描述最相似的文本上去。

输入:一张图片 + 所有类别转换的文本(100个类别就是100个文本描述)。
计算图像的特征嵌入和由它们各自的编码器对可能的文本集的特征嵌入。
计算这些嵌入的cosine similarity,用温度参数τ进行缩放,并通过softmax归一化为概率分布。
注意:该预测层是一个多项式logistic回归分类器,具有L2归一化输入、L2归一化权值、no bias和temperature scaling。

Experiment

  • 迁移应用于ImageNet的分类任务的,可以看到,不仅达到ResNet101的效果,且泛化能力远远强于有标签监督学习:

CLIP更擅长于'general'和'fine-grained'的分类任务,对于一些专用的任务效果可能比较差,such as satellite image classifification (EuroSAT and RESISC45), lymph node tumor detection (PatchCamelyon), counting objects in synthetic scenes (CLEVRCounts), self-driving related tasks such as German traffific sign recognition (GTSRB), recognizing distance to the nearest car (KITTI Distance)。

6、结论

我们研究了是否有可能将 NLP 中与任务无关的网络规模预训练的成功转移到另一个领域。 我们发现采用这个公式会导致计算机视觉领域出现类似的行为,并讨论这一研究领域的社会影响。 为了优化他们的训练目标,CLIP 模型在预训练期间学习执行各种各样的任务。 然后可以通过自然语言提示利用此任务学习,以实现对许多现有数据集的零样本迁移。 在足够的规模下,这种方法的性能可以与特定任务的监督模型相媲美,尽管仍有很大的改进空间。

CLIP Learning Transferable Visual Models From Natural Language Supervision (文本和图像的对比学习)--文献翻译和笔记相关推荐

  1. CLIP: Learning Transferable Visual Models From Natural Language Supervision

    目录 Introduction Approach CLIP Prompt Engineering and Ensembling Experiments Analysis of Zero-shot CL ...

  2. CLIP Learning Transferable Visual Models From Natural Language Supervision

    目录 1.引言 2.架构 3.Bag of Words和对比型目标函数来加速训练 4.伪代码 5.prompt engineering and ensembling 6.Linear Probe 7. ...

  3. 【论文视频】Clip:Learning Transferable Visual Models From Natural Language Supervision【多模态,对比学习,迁移学习】

    CLIP:Contrast Language Image Pre-training 文章目录 1. 四个问题 2. 论文介绍 研究动机:zero-shot Clip的预训练 Clip伪代码 Clip的 ...

  4. 重读经典(CLIP下):《Learning Transferable Visual Models From Natural Language Supervision》

    上文链接:重读经典(CLIP上):<Learning Transferable Visual Models From Natural Language Supervision> 5. 实验 ...

  5. CLIP学习笔记:Learning Transferable Visual Models From Natural Language Supervision

    多模态预训练模型CLIP:Learning Transferable Visual Models From Natural Language Supervision 从自然语言监督中学习可迁移的视觉模 ...

  6. CLIP 论文学习笔记《Learning Transferable Visual Models From Natural Language Supervision》

    ​论文标题:Learning Transferable Visual Models From Natural Language Supervision 论文地址:https://arxiv.org/a ...

  7. CLIP论文笔记--《Learning Transferable Visual Models From Natural Language Supervision》

    CLIP论文笔记--<Learning Transferable Visual Models From Natural Language Supervision> 1.Introducti ...

  8. 【论文简介】CLIP:图像与自然语言配对预训练可迁移模型:Learning Transferable Visual Models From Natural Language Supervision

    论文链接: 2103.Learning Transferable Visual Models From Natural Language Supervision 项目官网: CLIP: Contras ...

  9. CLIP论文翻译、Learning Transferable Visual Models From Natural Language Supervision翻译

    CLIP论文翻译.Learning Transferable Visual Models From Natural Language Supervision翻译 文章目录 CLIP论文翻译.Learn ...

最新文章

  1. selenium之窗口操作
  2. python中split的用法取第二个分片_python中split()函数的用法
  3. JVM结构与OOM问题分析
  4. 股市心态决定成败:不贪不惧不急不赌
  5. macosx 不允许无名信号量_个人对S12X的协处理器XGATE的信号量semaphore的理解
  6. esp32树莓派_用树莓派 DIY 宠物自动喂食机,再也不用担心家里的萌宠了
  7. Go 字典(Map)
  8. 【Android开发艺术探索】RemoteViews
  9. 《线性代数及其应用》笔记-第三章
  10. python萤火虫算法_测试运行 - 萤火虫算法优化 | Microsoft Docs
  11. 【数据采集】-目前比较流行的几种数据采集方式
  12. 【云计算学习教程】云计算的优势和劣势(优点和缺点)分析
  13. 高考数学试题等差数列及其前n项和解题思维|附习题
  14. 华为手机误删照片,除了相册恢复,还有这招能救命
  15. 吉他C大调和弦高把位图
  16. java 必须try catch的异常_【java基础之异常】死了都要try,不淋漓尽致地catch我不痛快!...
  17. 公众号推广裂变引流?微信公众号裂变引流有哪些方式?
  18. 性能诊断定位之CPU问题排查(一):win10环境1
  19. 视频直播流媒体服务器的http-flv是如何直播的?
  20. HDU 2838 Cow Sorting(双树状数组+求逆序数)

热门文章

  1. html怎样写出x的平方,x的平方怎么打出来
  2. 滑动窗口大杀器,牛逼
  3. 苹果电脑macos Ventura 13.2(22D49)dmg原版引导版镜像下载
  4. HTTP 头部字段 Access-Control-Allow-Origin
  5. 一、区块链项目的基础架构
  6. 分布式系统之道:Lamport 逻辑时钟
  7. 查看已安装Tomcat的版本号
  8. 个推透传消息设置通知栏展示 ios_企微功能十问 | 企业微信如何开启聊天侧边栏功能,有什么用?...
  9. ElasticSearch 从零到入门
  10. QT210 自制bootloader 移植kernel3.4.2 制作ramdisk busybox1.20.2