transformer in cv

transformer是一种主要基于自注意力机制的深度神经网络,最初应用于自然语言处理领域。受到transformer强大的表示能力的启发,研究人员提议将transformer扩展到计算机视觉任务。与其他网络类型(例如卷积网络和循环网络)相比,基于transformer的模型在各种视觉基准上显示出竞争甚至更好的性能。在本文中,我们通过将这些视觉转换器模型分类为不同的任务,并分析了这些方法的优缺点,提供了文献综述。特别地,主要类别包括基本图像分类,高级视觉,低级视觉和视频处理。由于自注意力是transformer的基本组成部分,因此也简要回顾了计算机视觉中的自注意力。包括有效的transformer方法,可将transformer推入实际应用。最后,我们讨论了视觉transformer的进一步研究方向。

1.简介

深度神经网络已成为现代人工智能系统中的基本基础结构。已经提出了用于解决不同任务的各种网络类型。多层感知(MLP)或完全连接(FC)网络是经典的神经网络,它由多个线性层和非线性活动堆叠而成[104,105]。卷积神经网络(CNN)引入了卷积层和池化层,用于处理图像等不变数据[68,65]。递归神经网络(RNN)利用递归细胞来处理顺序数据或时间序列数据[106,49]。transformer是一种新近提出的神经网络,主要利用自我注意机制[5,90]提取内在特征[123]。在这些网络中,transformer是一种最近发明的神经网络,在广泛的人工智能应用中显示出巨大的潜力。

Transformer最初应用于自然语言处理(NLP)任务,并带来了显着的进步[123,29,10]。例如,Vaswani等。 [123]首先提出了仅基于机器翻译和英语选区解析任务的注意力机制的转换器。 Devlin等。 [29]引入了一种称为BERT的新语言表示模型,该模型通过共同在左,右上下文上进行条件预处理来训练来自未标记文本的转换器。 BERT在当时的11个NLP任务上获得了最新的结果。布朗等。 [10]在45TB压缩明文数据上预训练了基于巨型transformer的GPT-3模型,该模型具有1,750亿个参数,并且无需微调即可在不同类型的下游自然语言任务上实现出色的性能。这些基于Transformer的模型显示了强大的表示能力,并在NLP领域取得了突破。

受NLP中transformer功能的启发,最近的研究人员将transformer扩展到计算机视觉(CV)任务。 CNN曾经是视觉应用的基本组成部分[47,103],但变形金刚显示出了其作为CNN替代品的能力。 Chen等。 [18]训练序列转换器来自动回归预测像素,并在图像分类任务上与CNN取得竞争性结果。 ViT是Dosovitskiy等人最近提出的视觉转换器模型。文献[31]将纯transformer直接应用于图像补丁序列,并在多个图像识别基准上获得了最新的性能。除了基本的图像分类,转换器还用于解决更多的计算机视觉问题,例如目标检测[14,155],语义分割,图像处理和视频理解。由于出色的性能,提出了越来越多基于transformer的模型来改善各种视觉任务。

基于transformer的视觉模型如雨后春笋般冒起,这导致难以跟上新进展的速度。因此,对现有作品的调查是有益的,并且对社区有益。在本文中,我们专注于对视觉转换器的最新进展进行全面概述,并讨论进一步改进的潜在方向。为了更好地存档并方便研究人员研究不同的主题,我们按transformer模型的应用场景对它们进行了分类,如表1所示。特别是,主要主题包括基本图像分类,高级视觉,低级视觉和视频处理。高级视觉处理图像[121]中看到的内容的解释和使用,例如对象检测,分割和车道检测。已经有许多用于解决这些高级视觉任务的transformer模型,例如DETR [14],可变形DETR [155]用于物体检测,以及Max-DeepLab [126]用于分割。低级图像处理主要涉及从图像中提取描述(通常表示为图像本身)[35],其典型应用包括超分辨率,图像去噪和样式转换。在低视力视觉领域很少使用transformer[17,92],需要进行更多的研究。除了基于图像的任务之外,视频处理也是计算机视觉的重要组成部分。由于视频的顺序特性,transformer可以自然地应用于视频[154,144]。与传统的CNN或RNN相比,Transformer开始在这些任务上显示出具有竞争力的性能。在这里,我们对基于transformer的视觉模型的这些作品进行了调查,以跟上该领域的进展。视觉transformer的发展时间表如图1所示,我们相信越来越多的优秀作品将被刻在里程碑上。

本文的其余部分安排如下。第2节首先阐述了自注意力机制和标准transformer。我们将在第3节中介绍NLP中的transformer方法,因为研究经验可能有助于视觉任务。接下来,第四部分是本文的主要部分,其中我们总结了有关图像分类,高级视觉,低级视觉和视频任务的视觉转换器模型。我们还将简要回顾CV和高效transformer方法的自注意力机制,因为它们与我们的主要主题密切相关。最后,我们给出一个结论并讨论几个研究方向和挑战。

2.transformer的配方

transformer[123]首先应用于神经语言处理(NLP)的机器翻译任务。如图2所示,它包含一个编码器模块和一个解码器模块,以及几个具有相同架构的编码器/解码器。每个编码器由一个自我注意层和一个前馈神经网络组成,而每个解码器由一个自我注意层,一个编码器-解码器关注层和一个前馈神经网络组成。在使用转换器翻译句子之前,将句子中的每个单词嵌入到dmodel = 512维的向量中。

2.1。自我注意层

在自我注意层中,输入向量首先被转换为三个不同的向量,即查询向量q,键向量k和维数向量v,维数为dq = dk = dv = dmodel = 512。然后将不同的输入打包到三个不同的矩阵Q,K和V中。然后,通过以下步骤计算不同输入向量之间的注意力函数(如图3左所示):

•步骤1:计算不同输入向量之间的分数,S = Q·K⊤;

•步骤2:使用Sn = S /归一化梯度稳定性的分数

•步骤3:使用softmax函数P = softmax(Sn)将分数转换为概率;

•步骤4:获得Z = V·P的加权值矩阵。

该过程可以统一为一个功能:

等式背后的直觉。 1很简单。步骤1计算两个不同向量之间的分数,分数是确定在当前位置对单词进行编码时我们对其他单词的关注程度。步骤2将分数标准化以具有更稳定的梯度以进行更好的训练,而步骤3将分数转换为概率。最后,将每个值向量乘以总和概率,随后的几层将把更多概率集中在向量上。

解码器模块中的编码器-解码器关注层与编码器模块中的自我关注层几乎相同,除了密钥矩阵K和值矩阵V是从编码器模块派生而查询矩阵Q是从前一个层。

注意,上述过程与每个单词的位置无关,因此,自我注意层缺乏捕获句子中单词的位置信息的能力。为了解决这个问题,将尺寸为dmodel的位置编码添加到原始输入嵌入中,以获取单词的最终输入向量。具体来说,该位置使用以下等式进行编码:

其中pos表示单词在句子中的位置,i表示位置编码的当前维度。

2.2。多头注意力

通过增加一种称为多头注意的机制,以提高香草自我注意层的性能,进一步改善了自我注意层。请注意,对于给定的参考词,我们在遍历句子时通常希望专注于其他几个词。因此,单头自我注意层限制了专注于特定位置(或几个特定位置)的能力,而不会影响同时对其他位置同样重要的注意力。这是通过为注意力层提供不同的表示子空间来实现的。具体来说,不同的查询,键和值矩阵用于不同的头,由于随机初始化,它们在训练后可以将输入向量投影到不同的表示子空间中。

详细地,给定输入向量和头数h,首先将输入向量变换成三个不同的向量组,即查询组,关键字组和值组。每组中有h个向量,维数dq'= dk'= dv'= dmodel / h =64。然后,将来自不同输入的向量打包到三个不同的矩阵组{Qi} hi = 1,{Ki}中hi = 1和{Vi} hi = 1。然后,多头关注的过程如下所示:

MultiHead(Q,K,V)= Concat(head1,···,headh)W,

其中headi = Attention(Qi,Ki,Vi),(4)

其中Q'是{Qi} hi = 1的串联(K'和V'也是),W o∈Rdmodel×dmodel是线性投影矩阵。

2.3。transformer中的其他零件

残留在编码器和解码器中。如图4所示,在编码器和解码器的每个子层中都添加了剩余连接,以增强信息流并获得更好的性能。随后进行层归一化[4]。上述操作的输出可以描述为:

LayerNorm(X + Attention(X))。 (5)

请注意,由于查询,键矩阵和值矩阵Q,K和V均从同一输入矩阵X派生,因此X用作此处的自注意力层。

前馈神经网络。在每个编码器和解码器中的自注意力层之后应用前馈NN。具体而言,前馈NN由两个线性变换层和其中的ReLU激活函数组成,可以将其表示为以下函数:

FFNN(X)=W2σ(W1X),(6)

其中W1和W2是两个线性变换层的两个参数矩阵,而σ表示ReLU激活函数。隐藏层的维数为dh = 2048。

解码器中的最后一层。解码器的最后一层旨在将向量堆栈变回一个单词。这是通过线性层,然后是softmax层来实现的。线性层将向量投影到具有dword维度的logits向量中,其中dword是词汇表中的单词数。然后,使用softmax层将logits向量转换为概率。

计算机视觉任务中使用的大多数transformer都使用原始transformer的编码器模块。简而言之,可以将其视为不同于卷积神经网络(CNN)和递归神经网络(RNN)的新特征选择器。与仅关注局部特征的CNN相比,transformer可以捕获远距离特征,这意味着可以轻松地通过transformer获取全局信息。与必须按顺序计算隐藏状态的RNN相比,transformer效率更高,因为可以并行计算并轻松加速自注意力层和完全连接层的输出。因此,有必要进一步研究transformer在自然语言处理领域以及计算机视觉领域的应用。

3.回顾NLPTransformer

在Transformer问世之前,受到更多关注的递归神经网络(例如GRU [26]和LSTM [50])为大多数最新的语言模型提供了支持。但是,在RNN中,信息流需要从先前的隐藏状态到下一个隐藏状态进行顺序处理,这排除了训练期间的加速和并行化,从而阻碍了RNN处理更长序列或建立更大模型的潜力。在2017年,Vaswani等人。 [123]提出了Transformer,这是一种新颖的编码器-解码器体系结构,仅基于多头自注意力机制和前馈神经网络构建,旨在通过获取全局相关性来解决逐序列自然语言任务(例如机器翻译) -放轻松。 Transformer的成功表明,仅利用注意力机制,就可以通过细心的RNN获得可比的性能。此外,Transformer的体系结构支持大规模并行计算,从而可以在较大的数据集上进行训练,从而导致用于自然语言处理的大型预训练模型(PTM)的爆发。

BERT [29]及其变体(例如SpanBERT [63],RoBERTa [82])是建立在多层Transformer编码器体系结构上的一系列PTM。在BERT的训练前阶段,对BookCorpus [156]和英语Wikipedia数据集执行了两项任务:1)掩盖语言建模(MLM),方法是首先随机掩盖输入中的某些标记,然后训练模型进行预测; 2)使用成对句子作为输入的下一句预测,并预测第二句是否是文档中的原始句。经过预训练后,可以通过在一系列下游任务上单独添加一个输出层来对BERT进行微调。更具体地,当执行序列级任务(例如,情感分析)时,BERT使用第一令牌的表示进行分类;而对于令牌级别的任务(例如,名称实体识别),所有令牌都馈入softmax层进行分类。在发布之时,BERT在11种自然语言处理任务上取得了最新的成果,为预训练的语言模型树立了里程碑。生成式预训练transformer系列(例如,GPT [99],GPT-2 [100])是另一种基于Transformer解码器架构的预训练模型,该模型使用屏蔽的自我关注机制。 GPT系列和BERT之间的主要区别在于预训练的方式。与BERT不同,GPT系列是一种由左至右(LTR)语言建模预先训练的单向语言模型。此外,句子分隔符([SEP])和分类器标记([CLS])仅参与GPT的微调阶段,而BERT在预训练期间学习了这些嵌入。由于GPT的单向预训练策略,它在许多自然语言生成任务中显示出优越性。最近,一个巨大的基于transformer的模型GPT-3被引入,其参数高达1750亿[10]。通过对45TB压缩后的明文数据进行预训练,GPT-3声称能够直接处理不同类型的下游自然语言任务而无需进行微调,从而在许多NLP数据集上均表现出色,包括自然语言理解和生成。除了上述基于transformer的PTM之外,自Transformer推出以来,还提出了许多其他模型。由于这不是我们调查的主要主题,因此我们在表2中仅列出了一些代表性模型供感兴趣的读者使用。

除了在大型语料库上接受过一般自然语言处理任务训练的PTM之外,基于转换器的模型已应用于许多其他NLP相关领域或多模式任务。 BioNLP域。基于Transformer的模型已经超越了许多传统的生物医学方法。 BioBERT [69]使用Transador架构进行生物医学文本挖掘任务; SciB-ERT [7]是通过对Transformer进行有关生物医学和计算机科学领域的114M篇科学文章的培训而开发的,旨在更精确地执行与科学领域相关的NLP任务;黄等。 [55]提出利用Transformer开发和评估临床笔记的连续表示形式的Clinical-BERT,并且作为副作用,ClinicalBERT的注意力图可用于解释预测,从而发现不同医学内容之间的高质量联系。多模式任务。由于Transformer跨基于文本的NLP任务取得了成功,因此许多研究致力于利用Transformer的潜力来处理多模式任务(例如,视频文本,图像文本和音频文本)。 VideoBERT [115]使用基于CNN的模块对视频进行预处理,以获取表示令牌,基于该模块,对Transformer编码器进行了训练,以学习下游任务(例如视频字幕)的视频文本表示。 VisualBERT [72]和VL-BERT [114]提出了单流统一transformer,以捕获视觉元素和图像-文本关系,以处理诸如视觉问答(VQA)和视觉常识推理(VCR)之类的下游任务。此外,SpeechBERT等[24]等研究还探讨了使用Transformer编码器对音频和文本对进行编码以处理自动文本任务(如语音问题解答(SQA))的可能性。

基于transformer的各种自然语言处理模型以及与NLP相关的任务的快速发展证明了其结构优势和多功能性。这使Transformer成为自然语言处理之外的许多其他AI领域的通用模块。本调查的以下部分将重点介绍Transformer在过去两年中出现的各种计算机视觉任务中的应用。

4.视觉变形金刚

在本节中,我们将对基于transformer的计算机视觉模型进行全面回顾,包括图像分类,高级视觉,低级视觉和视频处理中的应用。我们还简要总结了自注意力机制和模型压缩方法在高效transformer中的应用。

4.1。影像分类

受到transformer在自然语言处理方面的巨大成功的启发,一些研究人员试图检验相似的模型是否可以学习图像的有用表示。作为一种比文本更高维度,更嘈杂,更冗余的形式,人们认为图像难以生成模型。 iGPT [18]和ViT [31]是仅使用transformer进行图像分类的两个作品。

4.1.1 iGPT

自从最初的图像生成训练方法问世以来,已经有很长时间了,Chen等人。 [18]重新检查这类方法,并结合自我监督方法的最新进展。该方法包括一个预训练阶段,然后是一个微调阶段。在预训练中,会尝试使用自回归和BERT目标。此外,在NLP中采用了序列转换器架构来预测像素而不是语言标记。当与早期停止结合使用时,预训练可被视为有利的初始化或正则化。在微调期间,他们为模型添加了一个小的分类头,该分类头用于优化分类目标并适应所有权重。

给定一个未标注的数据集X,该数据集X由高维数据x =(x1,...,xn)组成。他们通过最小化数据的负对数似然来训练模型:

其中1􏰃i􏰃n采用单位置换πi= i,也称为栅格顺序。他们还考虑了BERT目标,该目标对子序列M⊂[1,n]进行采样,以使每个索引i在M中独立出现的概率为0.15。M称为BERT掩码,模型为通过最小化以“未屏蔽”元素x [1,n] \ M为条件的“屏蔽”元素xM的负对数似然来进行训练:

在预训练中,他们选择LAR或LBERT中的一种,并在预训练数据集上最大程度地减少损失。

他们使用transformer解码器模块的GPT-2 [100]公式表示。特别是,层规范先于注意力和多层感知器(MLP)操作,并且所有操作都严格位于剩余路径上。注意操作中唯一发生在序列元素之间的混合,并且为了确保在训练AR目标时进行适当的调节,他们将标准的上三角遮罩应用于注意逻辑的n×n矩阵。当使用BERT物镜时,不需要注意登录屏蔽:将内容嵌入应用于输入序列后,它们会将位置清零。

在最后一个转换器层之后,他们应用层范数并从输出中学习一个投影,以对参数进行参数化,以对每个序列元素处的条件分布进行参数化。训练BERT时,他们只是忽略未掩盖位置的logit。

在微调期间,它们平均将最终层范数nL的输出跨序列维合并以提取每个示例的特征的d维向量:

fL =⟨nLi⟩i(10)

他们学习了从fL到类logit的投影,该投影用于最小化交叉熵损失LCLF。在实践中,他们从经验上发现联合目标LGEN + LCLF的效果更好,其中LGEN∈{LAR,LBERT}。

4.1.2 ViT

最近,Dosovitskiy等人。 [31]提出了一种纯transformer,即视觉transformer(ViT),当直接应用于图像序列的序列时,它在图像分类任务上表现良好。它们遵循原始transformer的设计。图5显示了Vision Transformer的框架。

为了处理2D图像,将图像x∈RH×W×C整形为一系列平坦的2D斑块xp∈N×(P2·C),(H,W)是原始图像的分辨率,而(P ,P)是每个图像补丁的分辨率。那么N = HW / P2是该transformer的有效序列长度。由于transformer的所有层都使用恒定的宽度,因此可训练的线性投影将每个矢量化路径映射到模型尺寸D,它们的输出称为贴片嵌入。

与BERT的[class]令牌类似,可学习的嵌入被用于嵌入补丁序列,其在transformer编码器输出处的状态用作图像表示。在预训练和微调过程中,分类头的尺寸均相同。另外,将一维位置嵌入添加到补丁嵌入中以保留位置信息。他们试用了位置嵌入的2D感知的不同变体,这些变体没有比标准的1D位置嵌入获得明显的收益。关节嵌入作为编码器的输入。值得注意的是,视觉transformer仅使用标准transformer的编码器,而MLP磁头后面是transformer编码器的输出。

通常,首先在大型数据集上对ViT进行预训练,然后对较小的下游任务进行微调。为此,去除了训练有素的预测头,并附加了一个零初始化的D×K前馈层,其中K是下游类的数量。以比预训练更高的分辨率进行微调通常是有益的。喂入更高分辨率的图像时,色块大小保持不变,这会导致更大的有效序列长度。视觉变形器可以处理任意序列长度,但是,预训练的位置嵌入可能不再有意义。因此,作者根据预训练的位置嵌入在原始图像中的位置执行2D插值。请注意,只有将分辨率调整和色块提取手动插入有关图像2D结构的感应偏置时,才能将其手动注入到Vision Transformer中。

当在中等大小的数据集(如ImageNet)上训练时,此类模型产生适度的结果,其准确性比同等大小的ResNet低了几个百分点。transformer缺乏CNN固有的一些电感性偏差,例如翻译等方差和局部性,因此在训练不足的数据量时不能很好地概括。但是,如果在大型数据集上训练模型(14M-300M图像),则图片会发生变化。作者发现,大规模训练胜过归纳偏差。当进行足够规模的预培训并转移到数据点较少的任务时,transformer将获得出色的结果。在JFT-300M数据集上经过预训练的视觉transformer在多个图像识别基准上达到或超越了最新技术,在ImageNet上达到88.36%,在CIFAR-10上达到99.50%,在CIFAR-100上达到94.55%,以及在VTAB套件(包含19个任务)上占77.16%。表3列出了iGPT和ViT的详细结果。

总之,iGPT回顾了生成式预训练方法,并将其与自我监督方法相结合,结果并不十分令人满意。 ViT取得了更好的结果,特别是当它使用更大的数据集(JFT-300)时。但是,ViT的结构与NLP中的transformer基本相同,如何在片内和片间明确相关性仍然是一个难题。此外,在ViT中将相同大小的补丁视为相等。众所周知,每个补丁的复杂性是不同的,并且该特性目前尚未得到充分利用。

4.2。高层视野

最近,人们对采用transformer执行高级计算机视觉任务(例如对象检测[15、155、23],车道检测[81]和分段[129、126])的兴趣日益浓厚。在本节中,我们将对这些方法进行回顾。

4.2.1对象检测

根据采用transformer架构的模块,可以将基于transformer的对象检测方法粗略地分为基于颈部的方法,基于头部的方法和基于框架的方法。

多尺度特征融合模块(在现代检测框架中称为颈部),例如特征金字塔网络(FPN)[77],已广泛用于对象检测中,以实现更好的检测性能。张等。 [145]建议传统方法无法交互跨尺度特征,因此提出了特征金字塔transformer(FPT)来充分利用跨空间和尺度的特征相互作用。 FPT由三种类型的transformer组成,即自耦transformer,接地transformer和渲染transformer,它们分别对特征金字塔的自水平,自顶向下和自底向上路径的信息进行编码。 FPT基本上利用transformer中的自注意模块来增强特征金字塔网络的特征融合。

预测头对于物体检测器起着重要的作用。先前的检测方法通常利用单个视觉表示(例如边界框和角点)来预测最终结果。 Chi等。 [23]提出了桥接视觉表示(BVR),通过多头注意力模块将不同的异构表示组合成一个单一的表示。具体而言,将主表示形式视为查询输入,将辅助表示形式视为键输入。通过类似于transformer中的注意模块,可以获得用于主表示的增强功能,该功能将来自辅助表示的信息桥接起来并有利于最终检测性能。

与上述利用transformer的方法增强了现代检测器的特定模块不同,Carion [15]重新设计了物体检测框架,并提出了检测transformer(DETR),它是一种简单且完全端到端的物体检测器。 DETR将对象检测任务视为一个直观的集合预测问题,并摆脱了锚定生成和非最大抑制(NMS)后处理等传统的手工组件。如图6所示,DETR从CNN主干开始以从输入图像中提取特征。为了用位置信息补充图像特征,将固定的位置编码添加到平面特征中,然后再输入到编码解码器转换器中。转换器解码器将编码器的嵌入与N个学习的位置结束编码(对象查询)一起使用,并生成N个输出嵌入,其中N是预定义参数,通常大于图像中对象的数量。最终预测是通过简单前馈网络(FFN)计算的,其中包括边界框坐标和类别标签以指示对象的特定类别或没有对象。与原始转换器顺序生成预测的原始转换器不同,DETR同时解码N个对象。 DETR采用两部分匹配算法来分配预测对象和真实对象。如方程式所示。 (11),匈牙利损失被用来计算所有匹配对象对的损失函数。

其中y和yˆ是地面真相和物体的预测

σˆ是最优分配,ci和pˆσˆ(i)(ci)是目标类别标签和预测标签,bi和ˆbσˆ(i))分别是地面实况和预测边界框。 DETR在物体检测方面表现出令人印象深刻的性能,其精度和速度与在COCO基准上广受欢迎且公认的Faster R-CNN基线相当。

DETR是基于transformer的对象检测框架的新设计,为社区开发完整的端到端检测器提供了参考。但是,香草DETR也面临一些挑战,例如,训练时间较长,小物件的性能较差。 Zhu等人提出的可变形DETR。 [155]是解决上述问题的一种流行方法,并且大大提高了检测性能。代替通过transformer中的原始多头注意力在图像特征图上查看所有空间位置,建议使用可变形注意力模块关注参考点周围的一小组关键位置。这样,大大降低了计算复杂度,也有利于快速收敛。更重要的是,可变形注意力模块可以轻松应用于融合多尺度特征。与DETR相比,可变形DETR的性能更好,训练成本降低了10倍,推理速度提高了1.6倍。可变形DETR还应用了一些其他改进,包括有效的迭代边界框优化方法和两阶段方案,从而进一步提高了性能。

针对DETR的高计算复杂性问题,Zheng等人。 [153]提出了一种自适应聚类transformer(ACT)来减少预训练的DETR的计算成本,而无需任何训练过程。 ACT使用局部敏感度哈希方法自适应地对查询特征进行聚类,并将注意力输出广播到由选定原型表示的查询。通过在不进行任何重新训练的情况下用拟议的ACT替换预训练DETR模型的自我注意模块,可以显着降低计算成本,而准确性几乎不会降低。此外,可以通过使用多任务知识蒸馏(MTKD)方法进一步降低性能下降,该方法利用原始transformer以少量的调整时间来蒸馏ACT模块。

Sun等。 [117]研究了DETR模型的慢收敛问题,并揭示了transformer解码器中的交叉注意模块是其背后的主要原因。为此,提出了DETR的仅编码器版本,并且在检测精度和训练收敛性上实现了相当大的改进。此外,设计了一种新的二分匹配方案,以实现更稳定的训练和更快的收敛。提出了两种基于transformer的集合预测模型,以改进具有特征金字塔的纯编码器DETR,即TSP-FCOS和TSP-RCNN,它们的性能要优于原始DETR模型。

Dai等人受到自然语言处理中的预训练转换器方案的启发。 [28]提出了一种用于对象检测的无监督预训练DETR(UP-DETR)的方法。具体而言,提出了一种新的无监督借口任务,即随机查询补丁检测,以预训练DETR模型。通过这种方案,UP-DETR可以在较大的范围内提高相对较小数据集(即PASCAL VOC)的检测精度。在具有足够培训数据的COCO基准上,UP-DETR仍然优于DETR,这证明了无监督的预培训方案的有效性。

4.2.2细分

DETR [15]可以自然地扩展到全景分割任务,方法是在解码器上附加一个遮罩头,从而获得有竞争力的结果。 Wang等。 [126]提出了Max-DeepLab可以直接通过蒙版转换器预测全景分割结果,而无需替代诸如盒检测之类的子任务。与DETR类似,Max-DeepLab以端到端的方式简化了全景分割任务,并直接预测了一组不重叠的蒙版和相应的标签。使用全景质量(PQ)样式损失来训练模型。此外,与现有的将transformer堆叠在CNN主干网上方的方法不同,Max-DeepLab采用双路径框架将CNN与transformer更好地结合在一起。

Wang等。 [129]提出了一种基于transformer的视频实例分割(VisTR)模型,该模型将一系列图像作为输入并产生相应的实例预测结果。提出了实例序列匹配策略,为预测分配地面真理。为了获得每个实例的遮罩序列,VisTR利用实例序列分割模块从多个帧和分段中累积遮罩特征

3D CNN的遮罩序列。

还有一种尝试使用变换器进行细胞实例分割[95],该方法基于DETR全景分割模型。所提出的Cell-DETR还添加了跳过连接,以在分段头中从主干CNN和CNN解码器桥接功能,以获得更好的融合功能。 Cell-DETR显示了显微镜图像中细胞实例分割的最新性能。

赵等。 [150]设计了一种新颖的transformer架构(Point Transformer)来处理点云。建议的自我注意层对于点集的排列是不变的,因此适用于点集处理任务。 Point Transformer对于3D点云的语义分割任务显示出强大的性能。

4.2.3车道检测

Liu等基于PolyLaneNet [119]。 [81]提出通过学习transformer网络的全局上下文来提高曲线车道检测的性能。与Poly- LaneNet相似,所提出的方法(LSTR)将车道检测视为将车道与多项式拟合的任务,并使用神经网络预测多项式的参数。为了捕获用于车道和全局环境的细长结构,LSTR将transformer网络引入到体系结构中,以处理通过卷积神经网络提取的低级特征。此外,LSTR使用匈牙利损失来优化网络参数。如[81]所示,与仅使用0.2倍参数的PolyLaneNet相比,LSTR可以实现2.82%的更高精度和3.65倍FPS。transformer网络,卷积神经网络和匈牙利损失的结合实现了一个微小,快速而精确的车道检测框架。

4.3。低层视野

除了高级视觉任务外,很少有作品将transformer应用于低级视觉领域,例如图像超分辨率,生成等。与以标签或框为输出的分类,分割和检测相比,低级任务通常将图像作为输出(例如,高分辨率图像或去噪图像),这更具挑战性。

Parmar等。 [92]迈出第一步,推广transformer模型,以制定图像转换和生成任务,并提出图像transformer。图像转换器由两部分组成:用于提取图像表示的编码器和用于生成像素的解码器。对于每个值为0-255的像素,学习了256×d的维嵌入,用于将每个值编码为d维矢量,将其作为编码器的输入。编码器和解码器的架构与[123]中的相同。解码器中每一层的详细结构如图7所示。每个输出像素q'是通过计算输入像素q与先前生成的像素m1,m2 ...之间的自注意力而生成的,其中位置嵌入p1,p2,...。 ...对于图像条件化的生成,例如超分辨率和修复,使用了编码器-解码器体系结构,其中编码器的输入是低分辨率图像或损坏的图像。对于无条件和分类条件的产生(即图像噪声),仅解码器用于输入噪声向量。由于解码器的输入是先前生成的像素,当生成高分辨率图像时,这会带来较大的计算成本,因此提出了一种局部自注意方案,该方案仅使用最近生成的像素作为解码器的输入。结果,图像transformer可以在基于CNN的图像生成和翻译任务模型上获得竞争性能,这表明基于transformer的模型在低级视觉任务上的有效性。

与将每个像素用作transformer模型的输入相比,最近的工作使用补丁(像素集)作为输入。杨等。 [135]提出了用于图像超分辨率的纹理transformer网络(TTSR)。他们在基于参考的图像超分辨率问题中使用了转换器架构,该问题旨在将相关纹理从参考图像转移到低分辨率图像。以低分辨率图像和参考图像作为查询Q和关键字K,计算每个补丁qi inQ和ki inK之间的相关性ri,j,

然后,提出了一种高度关注的模块,以利用参考图像根据参考图像选择高分辨率特征V以匹配低分辨率图像。硬注意力图是通过

嗨= argmaxri,j(13)j

那么来自的最相关的参考补丁是ti = vhi,其中T中的ti是转移的特征。之后,使用软关注模块将V传输到低分辨率特征F。可以通过以下方式计算软注意力:

si = maxri,j。 (14)j

因此,将高分辨率纹理图像转换为低分辨率图像的公式可以表示为:

Fout = F + Conv(Concat(F,T))⊙S,(15)

其中Fout和F表示低分辨率图像的输出和输入特征,S是柔和注意力,T是从高分辨率纹理图像传递的特征。通过引入基于transformer的体系结构,TTSR可以成功地将纹理信息从高分辨率参考图像传输到低分辨率图像,以进行超分辨率任务。

上述方法在单个任务上使用transformer模型,而Chen等人。 [17]提出了图像处理transformer(IPT),通过使用大规模的预训练来充分利用transformer的优势,并在包括超分辨率,降噪和除水在内的多种图像处理任务中实现最先进的性能。如图8所示,IPT由多头,编码器,解码器和多尾组成。介绍了针对不同图像处理任务的多头多尾结构和任务嵌入。将功能分为补丁以放入编码器-解码器体系结构,然后将输出重塑为具有相同大小的功能。由于transformer模型在大规模预训练中显示出优势,因此IPT使用ImageNet数据集进行预训练。具体来说,通过手动添加噪声,雨滴或下采样,可以将ImageNet数据集中的图像降级为生成的损坏图像。然后将降级的图像作为IPT的输入,将干净的图像作为输出的优化目标。还引入了一种自我监督的方法来增强IPT模型的泛化能力。然后使用相应的头部,尾部和任务嵌入对每个任务微调训练后的模型。 IPT极大地提高了图像处理任务的性能(例如,图像降噪任务中为2dB),这证明了基于transformer的模型在低视场中的巨大潜力。

4.4。视频处理

transformer在基于序列的任务(特别是在NLP任务)上表现出奇的出色。在计算机视觉中,视频任务中青睐时空维度信息。因此,transformer被应用于许多视频任务,例如帧合成[83],动作识别[41]和视频检索[80]。

4.4.1高级视频处理

人体动作识别。视频人类行为任务是指识别和定位视频中的人类行为。上下文的内容在识别人类行为中起着至关重要的作用。 Rohit等。提出了一种行动变换器[41]来对感兴趣的人和周围事物之间的潜在关系进行建模。具体而言,I3D用作提取高级特征图的主干。通过ROIPooling从中间要素地图中提取的要素被视为查询(Q)。键(K),值(V)是根据中间特征计算得出的。自我注意机制在三个组成部分上进行,并输出分类和回归预测。 Lohit等。 [84]提出了一个可解释的微分模块,称为时间互感器网络,以减少类内方差并增加类间方差。 Fayyaz和Gall建议了一个临时transformer,以在弱监督的环境下执行动作识别任务。

面部对齐。基于视频的面部对齐任务旨在定位面部标志。时间依赖性和空间信息对于最终性能很重要。但是,前一种方法无法同时捕获连续帧上的时间信息和静止帧上的互补空间信息。因此,刘等。 [80]使用两流transformer网络分别学习时间和空间特征。以端到端的方式共同优化两个流,并对特征进行加权以获得最终预测。

视频检索。基于内容的视频检索的关键是找到视频之间的相似性。为了克服缺点,仅利用视频级功能的图像级,Shao等人。 [110]建议使用转换器来建模长范围语义依赖性。此外,引入了有监督的对比学习策略来执行硬否定挖掘。基准数据集上的结果证明了性能和速度优势。 Gabeur等。 [39]提出了一种多模态transformer,以学习不同的跨模态线索,以表示视频。

活动识别。活动识别是指识别一组人的活动。解决此问题的前一种方法基于各个演员的位置。 Gavrilyuk等。提出了一个actor-transformer [40]体系结构来学习表示。角色转换器将2D和3D网络生成的静态和动态表示作为输入。transformer的输出是预测活动。视频对象检测。要从视频中检测对象,需要全局和本地信息。 Chen等。引入了内存增强的全局局部聚合(MEGA)[19]以捕获更多内容。具有代表性的功能可提高整体性能,并解决无效和不足的问题。 Yin等。 [138]提出了一种时空transformer来聚合时空信息。与另一个空间特征编码组件一起,这两个组件在3D视频对象检测任务上表现良好。

多任务学习。未修剪的视频通常包含许多与目标任务无关的帧。因此,挖掘相关信息并删除冗余信息至关重要。为了应对未修剪视频上的多任务学习,Seong等人(2002年)采用视频多任务转换器网络[109]提取信息。对于CoVieW数据集,任务是场景识别,动作识别和重要性分数预测。 ImageNet和Places365上的两个经过预先训练的网络提取了场景特征和对象特征。堆叠多任务transformer以借助类转换矩阵(CCM)融合功能。

4.4.2低级视频处理

帧/视频合成。帧合成任务是指在两个连续帧之间或帧序列之后合成帧。视频合成任务旨在合成视频。刘等。提出了ConvTransformer [83],它包含五个组件:特征嵌入,位置编码,编码器,查询解码器和综合前馈网络。与基于LSTM的作品相比,ConvTransformer通过更可并行化的体系结构实现了卓越的效果。 Schatz等。 [108]使用循环transformer网络从新颖的观点综合人类的行动。

视频修复。视频修补任务旨在完成帧中的缺失区域。这项艰巨的任务需要沿空间和时间维度合并信息。 Zeng等。为此任务提出了一个时空transformer网络[144]。所有输入帧均作为输入,并被并行填充。时空对抗损失用于优化transformer网络。

4.4.3多模式

视频字幕/摘要。视频字幕任务的目标是为未修剪的视频生成文本。事件检测和描述模块是两个主要部分。周等。 [154]提出了一种端到端的优化transformer来解决密集的视频字幕任务。编码器将视频转换为表示形式。提议解码器从编码中生成事件提议。字幕解码器用建议掩盖编码并输出描述。 Bilkhu等。 [9]使用C3D和I3D网络提取特征,并使用transformer生成预测。该算法在单个摘要任务和密集摘要任务上均表现良好。 Li等。 [71]利用基于纠缠注意力(ETA)模块的transformer来解决图像字幕任务。 Sun等。 [29]提出了一种视觉语言框架来学习表示而无需监督。该模型可以应用于许多任务,包括视频字幕,动作分类等。

4.5。自我关注的计算机视觉

在以上各节中,我们回顾了使用transformer体系结构进行视觉任务的方法。自我注意是transformer的关键部分。在本节中,我们将深入研究基于自我注意的方法,以解决计算机视觉中的挑战性任务,例如语义分割,实例分割,对象检测,关键点检测和深度估计。我们在第4.5.1节中制定自注意力算法开始,并在第4.5.2节中总结使用针对计算机视觉的自注意力的现有应用程序。

4.5.1自我注意的一般表述

用于机器翻译的自注意模块[123]通过关注所有位置并在嵌入空间中对它们进行加权求和,从而对序列中某个位置的响应进行计算,这可以看作是非本地过滤操作的一种形式[128] ,11]适用于计算机视觉。我们遵循惯例[128]来制定自我注意模块。给定输入信号(例如,图像,序列,视频和特征)X∈Rn×c,其中n = h×w表示特征中的像素数,而c是通道数,则生成输出信号如:

yi = C(xi)f(xi,xj)g(xj),(16)

其中xi∈R1×c和yi∈R1×c分别表示输入信号X和输出信号Y的第i个位置(例如,时空,时空)。下标j是枚举所有位置的索引。成对函数f(·)计算表示关系,例如i与所有j之间的亲和力。函数g(·)计算位置j处输入信号的表示形式。响应通过因子C(xi)归一化。

请注意,成对函数f(·)有很多选择,例如,可以使用高斯函数的简单扩展来计算嵌入空间中的相似度,因此函数f(·)可以表示为:

其中wθ,i∈Rc×1是权重矩阵Wθ的第i行。

对于给定的索引i,1 f(x,x)成为沿维度j输出的softmax C(xi)i j,因此公式可以进一步重写为:

Y = softmax(QKT)V = Attention(Q,K,V),(20)

其中为机器翻译提议的自我注意模块[?]与上述为计算机视觉提出的非本地过滤操作完全相同。

通常,用于计算机视觉的自注意力模块的最终输出信号将包装为:

Z = Y WZ + X(21)

Y是通过E.q. 19.如果WZ初始化为零,则可以将此自注意模块插入任何现有模型,而不会破坏其初始行为。

4.5.2视觉任务上的应用

自我注意模块被认为是卷积神经网络体系结构的构建块,该卷积神经网络体系结构在涉及大接收域方面具有较低的缩放特性。始终在网络顶部使用该构造块来捕获计算机视觉任务的远程交互。在下文中,我们将对基于图像的任务(例如图像分类,语义分割和对象检测)提出的基于自我注意的方法进行回顾。

图像分类。可训练的分类注意力包括两个主要方面:关于图像区域使用的辛勤注意[3,87,134]和产生非刚性特征图的软注意[125,60,43,102]。 Ba等。 [3]首先提出了图像分类任务的视觉注意力术语,并利用注意力来选择输入图像内的相关区域和位置,这也可以降低所提出模型的计算复杂度。输入图像的大小。 AG-CNN [42]提出通过关注热图从全局图像中裁剪一个子区域,以进行医学图像分类。 SENet [54]并没有用力地关注和重新校准特征图的裁剪,而是提出了一种软性的自我注意,以重新加权卷积特征的通道方向响应。 Jetley等。 [60]使用相应估计器生成的注意力图来加权深度神经网络中的中间特征。 Han等。 [43]利用属性感知的注意力来增强CNN的表示。

语义分割。 PSANet [151],OCNet [139],DANet [38]和CFNet [147]是将自我注意模块引入语义分割任务的第一批作品,它们考虑并增强了关系和相似性[146、74、46, 89、130]。 DANet [38]同时在空间和渠道维度上利用了自我注意模块。 A2Net [20]建议将像素分组为一组区域,然后通过将区域表示与生成的注意力权重相加来增强像素表示。为了减轻通过计算自注意模块中的像素相似度带来的大量参数,提出了几项工作[140、59、58、75、66],以提高自注意模块进行语义分割的效率。例如,CGNL [140]应用RBF核函数的泰勒级数来近似像素相似度。 CCNet [59]通过两个连续的纵横交错的关注来近似原始的自我关注方案。 ISSA [58]提出将稠密的亲和矩阵分解为两个稀疏亲和矩阵的乘积。还有其他使用基于注意力的图形推理模块[76、21、75]来增强局部和全局表示的相关工作。

对象检测。 Ramachandran等。 [102]提出了一个基于注意的层来构建完全注意的模型,该模型在COCO [79]基准上优于卷积RetinaNet [78]。 GCNet [13]发现,对于图片中的不同查询位置,通过非本地操作建模的全局上下文几乎相同,并建议将简化的表述和SENet [54]统一为用于全局上下文建模的通用框架[73, 52,34,93]。 Vo等。 [124]设计了一种双向操作来收集信息并将其从查询位置分发到所有可能的位置。 Hu等。 [53]提出了一种基于自我注意的关系模块,通过它们的外观特征之间的交互来同时处理一组对象。程等。提出了带有基于注意力的解码器模块的RelationNet ++ [23],该模块将其他表示形式桥接到基于单个表示形式格式的典型对象检测器中。

其他视觉任务。张等。 [148]提出了一种分辨率方面的注意模块,以学习增强的分辨率方面的特征图,以进行精确的姿态估计。黄等。 [57]提出了一种基于transformer的网络[56],用于3D手-物体姿势估计。 Chang等。文献[16]在基于注意力机制的特征融合模块的帮助下,提高了精度并加快了关键点检测模型的收敛速度。

4.6。高效transformer

尽管Transformer模型在各种任务中都取得了成功,但是仍然需要高内存和计算资源,这阻碍了在资源受限的设备(例如,移动电话)上的实现。在本节中,我们回顾了有关为有效实施而压缩和加速transformer模型的研究,包括网络修剪,低秩分解,知识蒸馏,网络量化,压缩架构设计。表4列出了一些用于压缩基于transformer的模型的代表性作品。

4.6.1修剪和分解

在基于transformer的预训练模型(例如BERT)中,并行进行多个注意操作以独立地建模不同令牌之间的关系[123、29],而对于特定任务则不需要所有的负责人。 Michel等。 [85]从经验上观察到,在测试时可以去除很大一部分注意力,而不会显着影响性能。所需的磁头数量在不同的层上有所不同,甚至对于某些层来说,一个磁头就足够了。考虑到注意头上的冗余,在[85]中定义了重要性分数以估计每个头对最终输出的影响,并且可以删除不重要的头以进行有效部署。 Dalvi等。 [96]进一步从两个角度分析了预训练transformer模型中的冗余,即一般冗余和特定于任务的冗余。按照彩票假说等。 [36],Prasanna等。 [96]分析了BERT中的彩票,并表明在基于Transformer的模型中也存在良好的子网。在[96]中减少了FFN层和注意头,以实现高压缩率。

除了transformer模型的宽度外,还可以减小深度(即层数)以加快推理过程[32]。与可以并行计算transformer模型中的不同关注点不同,由于下一层的输入取决于前一层的输出,因此必须顺序计算不同的层。范等。 [32]提出了一种逐层丢弃的策略来规范模型的训练,然后在测试阶段将整个层次一起删除。考虑到不同设备中的可用资源可能会有所不同,Hou等人。 [51]提出自适应地减小预定义transformer模型的宽度和深度,并同时获得具有不同尺寸的多个模型。重要的注意头和神经元通过重新布线机制在不同的子网之间共享。

除了直接在transformer模型中丢弃零件模块的修剪方法之外,矩阵分解的目的是根据低秩假设近似大型矩阵与多个小型矩阵。例如,Wang等。 [131]分解transformer模型中的标准矩阵乘法,并实现更有效的推理。

4.6.2知识蒸馏

知识蒸馏的目的是通过从巨大的教师网络中转移知识来训练学生网络[48、12、2]。与教师网络相比,学生网络通常具有较薄和较浅的体系结构,更易于在资源受限的资源上部署。神经网络的输出和中间特征都可以用于将有效信息从教师传递给学生。 Mukherjee等人着重于变换模型。 [88]使用经过预训练的BERT [29]作为老师,借助大量未标记的数据来指导小型模型的训练。Wang等。 [127]训练学生网络以模仿预训练教师模型中的自我注意层的输出。价值观之间的点积被引入作为指导学生的一种新的知识形式。在[127]中也引入了一个助教[86],它可以减小大型预训练的Transformer模型与紧凑的学生网络之间的差距,从而使模仿变得更加容易。考虑到transformer模型中的各种类型的层(即,自我注意层,嵌入层,预测层),Jiao等人。 [62]设计不同的目标功能,以将知识从教师传授给学生。例如,学生模型的嵌入层的输出将通过MSE损失来模仿教师的输出。还施加了可学习的线性变换,以将不同的特征映射到同一空间。对于预测层的输出,采用KL散度来度量不同模型之间的差异。

4.6.3量化

量化的目的是减少表示网络权重或中间特征的位数[122,137]。通用神经网络的量化方法已得到充分讨论,其性能可与原始网络相比[91、37、6]。最近,如何特别量化transformer模型已引起了广泛关注[8,33]。 Shridhar等。 [112]建议将输入嵌入到二进制高维向量中,然后使用二进制输入表示来训练二进制神经网络。 Cheong等。 [22]通过低位(例如4位)表示来表示transformer模型中的权重。赵等。 [152]对各种量化方法进行了实证研究,结果表明k均值量化具有巨大的发展潜力。针对机器翻译任务,Prato等人。 [97]提出了一种完全量化的转换器,这是第一个8位质量模型,而没有论文中要求的翻译质量损失。

4.6.4紧凑架构设计

除了将预定义的transformer模型压缩为小型transformer模型外,一些作品还尝试直接设计紧凑型模型[132,61]。江等。 [61]通过提出一个名为基于跨度的动态卷积的新模块,简化了自动注意力的计算,该模块将全连接层和卷积层进行了组合,如图9所示。计算了来自不同标记的表示之间的局部依赖性通过卷积运算,这比标准transformer中密集的全连接层有效得多。深度卷积还用于进一步降低计算成本。在[1]中提出了有趣的汉堡包层,它们使用矩阵分解来代替原始的自我注意层。矩阵分解可以比标准的自我注意操作更有效地计算,同时很好地反映了不同标记之间的依赖性。

Transformer模型中的自注意操作会计算给定序列(图像识别任务[31]中的补丁)中来自不同输入令牌的表示形式之间的点积,其复杂度为O(N),其中N是序列的长度。最近,大量方法致力于将复杂度降低到O(N),以使transformer模型可扩展到长序列。例如,Katharopoulos等。 [64]将自我注意近似为内核特征图的线性点积,并通过递归神经网络揭示标记之间的关系。 Zaheer等。 [143]将每个令牌视为图形中的一个顶点,两个令牌之间的内积计算称为边。启发图理论[113,25],将各种稀疏图组合在一起,以近似transformer模型中的稠密图,这也实现了O(N)的复杂性。从理论上讲,Yun等。 [141]证明了具有O(N)复杂度的稀疏变换器足以反映令牌之间的任何类型的关系并且可以进行通用逼近,这为进一步研究具有O(N)复杂度的变换器提供了理论保证。

5.结论与未来展望

与卷积神经网络相比,由于其具有竞争力的性能和巨大的潜力,transformer正成为计算机视觉领域的热门话题。正如调查总结的那样,为了发现和利用transformer的功率,近年来提出了许多解决方案。这些方法在各种视觉任务(包括基本图像分类,高级视觉,低级视觉和视频处理)上均表现出出色的性能。然而,transformer在计算机视觉中的潜力尚未得到充分的探索,还有一些挑战有待解决。

尽管研究人员提出了许多基于transformer的模型来解决计算机视觉任务,但这些工作是开创性的解决方案,还有很大的改进空间。例如,ViT [31]中的transformer架构遵循NLP [123]的标准transformer。专门针对CV的改进版本仍有待探索。此外,还需要将transformer用于除上述任务之外的更多任务。

此外,大多数现有的视觉transformer模型都设计用于处理单个任务。许多NLP模型(例如GPT-3 [10])已显示出transformer可以在一个模型中处理多个任务的能力。 CV领域的IPT [17]也能够处理多种低级视觉任务,例如超分辨率,图像降噪和排水。我们相信,只有一种模型可以涉及更多任务。

最后但并非最不重要的一点是,为CV开发有效的transformer模型也是一个未解决的问题。transformer模型通常很大且计算量很大,例如,基本的ViT模型[31]需要18B FLOP来处理图像。相比之下,轻巧的CNN模型GhostNet [44、45]仅用大约600M FLOP就能达到类似的性能。尽管已经提出了几种压缩transformer的方法,但是它们的复杂性仍然很大。这些最初为NLP设计的方法可能不适用于CV。因此,高效的transformer模型是在资源受限的设备上部署可视transformer的代理。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • Seq2Seq(Sequence To Sequence) Seq2seq 由Google首次引入机器翻译。在此之...
    leon_kbl阅读 1,945评论 0 1
  • 夜莺2517阅读 127,712评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 6,878评论 1 6
  • 我是一名过去式的高三狗,很可悲,在这三年里我没有恋爱,看着同龄的小伙伴们一对儿一对儿的,我的心不好受。怎么说呢,高...
    小娘纸阅读 3,375评论 4 7
  • 那一年,我选择了独立远行,火车带着我在前进的轨道上爬行了超过23个小时; 那一年,我走过泥泞的柏油路,在那个远离故...
    木芽阅读 1,629评论 4 5