Going deeper with convolutions

论文原文:Going deeper with convolutions
作  者:Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott E Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, Andrew Rabinovich

摘要

我们提出了一个深度卷积神经网络架构Inception,它在ImageNet的大规模视觉识别挑战赛2014(ILSVRC14)的分类和检测上取得了新的最好结果。该体系架构的主要特点是在网络中改进了计算资源的利用率。这是由于精心的设计而得以实现的。在增加网络深度和宽度的同时保持了计算预算不变。为了优化质量,架构的设计以Hebbian理论和多尺度处理为基础。我们在提交ILSVRC14时称该网络为GoogLeNet,一个22层的深度网络,其质量分别在分类和检测的背景下进行了评估。

1. 引言

在过去的三年里,由于深度学习的发展,更具体的说是由于卷积神经网络的发展[10],图像识别和目标检测的能力一直在以惊人的速度前进。一个令人鼓舞的消息是,大部分的进步不仅仅是因为更强大的硬件、更大的数据集和更大的模型,而主要是由于新想法、算法和网络架构的改进。没有新的数据源被使用,例如,在ILSVRC 2014的挑战赛中,最靠前的输入除了用于检测目的的分类数据集之外,没有使用新的数据资源。我们在ILSVRC 2014中提交的GoogLeNet模型实际使用的参数只有两年前Krizhevsky等人[9]获胜结构参数的1/12,而我们提交的GoogLeNet模型的结果明显更加准确。目标检测的最大收获不是来自于深层网络的简单应用,而是来自于深层架构和经典计算机视觉的协同作用,比如像Girshick等人[6]的R-CNN算法。

另一个显著因素是随着移动和嵌入式计算的不断发展,我们的算法的效率——尤其是它们的功耗和内存使用。值得注意的是,这篇论文中提出的深度架构设计正是包含了对于效率的考虑,而不是单纯的为了提高准确率。对于大多数实验,模型被设计为在一次推断中保持15亿乘加的计算预算,所以最终它们不是单纯的学术好奇心,而是能在现实世界中应用,即使是在大型数据集上,也在一个合理的计算成本内。

在本文中,我们将关注一个高效的计算机视觉深层神经网络架构,代号为Inception,它的名字来源于Lin等人[12]“Network in Network”论文与著名的“we need to go deeper”网络基因[1]的结合。在我们的案例中,“deep”这个单词有两种不同的含义:首先,我们引入了一个新的组织形式,以“Inception module”的方式,同时也更直接地增加了网络的深度。一般来说,可以把Inception模型看作论文[12]的逻辑顶点,同时从Arora等人[2]的理论工作中受到了启发和引导。这种体系架构的优点在ILSVRC 2014分类和检测挑战赛中得到了实验验证,它显著优于当前的技术状态。

2. 近期工作

从LeNet-5 [10]开始,卷积神经网络(CNN)通常有一个标准结构——层叠的卷积层(后面可以有选择的跟随归一化和最大池化)后面是一个或多个的全连接层。这个基本设计的变体在图像分类文献中普遍存在,并且在MNIST,CIFAR和更著名的ImageNet分类挑战赛中[9, 21]取得了迄今最好的结果。对于例如ImageNet这种大数据集来说,最近的趋势是增加层数[12]和层的大小[21, 14],同时使用dropout[7]来解决过拟合问题。

尽管担心最大池化层会导致精确空间信息的损失,但与[9]相同的卷积网络结构也已经成功的应用于定位[9, 14],目标检测[6, 14, 18, 5]和行人姿态估计[19]。从灵长类视觉皮层神经科学模型得到启发,Serre等人[15]使用了一系列不同大小的固定的Gabor滤波器来处理多重尺度 ,类似于Inception模型。然而,与[15]的固定的2层深度模型相反,Inception结构中学习了所有的滤波器。此外,Inception层重复了很多次,在GoogleNet模型中得到了一个22层的深度模型。

Network-in-Network是Lin等人[12]提出的一种方法。目的是为了增加神经网络的表征能力。在他们的模型中,网络中添加了额外的1×1卷积层,增加了网络的深度。我们的架构中大量的使用了这个方法。在我们的设置中,1×1卷积有两个目的:最关键的是,它们主要是用来作为降维模块来移除卷积瓶颈,否则将会限制我们网络的规格。其次采用1×1卷积不仅允许了深度的增加,而且允许我们网络的宽度增加,但没有明显的性能损失。

目前处于领先位置的目标检测方法是Girshick等人[6]提出的基于区域的卷积神经网络(R-CNN)方法。R-CNN将整个检测问题分解为两个子问题:首先利用低级线索,比如颜色,纹理,以绝对不可知的方式对潜在的对象提出建议(画出候选区域),然后用CNN分类器来识别那些位置上的对象类别。这两个阶段的方法利用了低层特征分割边界框的准确性,也利用了目前的CNN非常强大的分类能力。我们在我们的检测提交过程中采用了类似的方式,但在这两个阶段都进行了改进,例如对于更高的目标边界框的多框[5]预测,并融合了更好的边界框候选区域分类方法。

3.动机和更高层次的思考

提高深度神经网络性能最直接的方法就是增加它们的尺寸。这包括增加网络的深度(网络层次的数目),也包括增加网络的宽度(每一层的单元数目)。这是训练高质量模型的一种简单而安全的方法,特别是考虑到可获得大量标记的训练数据的情况下。但是这个简单的解决方案有两个主要的缺点。

更大的尺寸意味着更多的参数,这会使增大的网络更容易过拟合,特别是在训练集的标注样本有限的情况下。这可能成为一个主要的瓶颈,因为创建高质量的训练集可能很棘手。要获得高质量标注数据集费时费力且代价昂贵,经常需要专家评委在各种细粒度的视觉类别进行区分,例如图1中显示的ImageNet中的类别(甚至是1000类ILSVRC的子集)。

图1: ILSVRC 2014分类挑战赛的1000类中两个不同的类别

统一增加网络尺寸的另一个缺点是计算资源的使用的显著增加。例如,在一个深度视觉网络中,如果两个卷积层相连,它们的滤波器数目的任何均匀增加都会导致计算的平方式的增加。如果增加容量使用率低下(例如,如果大多数权重结束时接近于0),那么会浪费大量的计算能力。由于在实际中的计算预算总是有限的,因此,计算资源的有效分布更偏向于尺寸无差别的增加,即使在主要目标是提高结果的质量。

解决这两个问题的根本途径是引入稀疏性并将全连接层替换为稀疏的全连接层,甚至是卷积层。除了模仿生物系统之外,这也得益于Arora等人[2]的开创性工作带来更坚固的理论基础。其主要成果说明如果数据集的概率分布可以通过一个大型稀疏的深度神经网络表示,则最优的网络拓扑结构可以通过分析前一层激活的相关性统计和聚类高度相关的神经元来一层层的构建。尽管严格的数学证明需要非常强的条件,但这一说法与著名的Hebbian理论产生共鸣——神经元一起激发,一起连接——这一事实表明,即使条件不那么严格,基础概念仍然适用于实践。

缺点在于,对于非均匀稀疏数据结构的数值计算,现在的计算架构效率非常低下。即使算术运算的数量减少100倍,查询和缓存丢失上的开销仍占主导地位:切换到稀疏矩阵可能是不可行的。随着稳定提升和高度调整的数值库的应用,差距仍在进一步扩大,数值库要求极度快速密集的矩阵乘法,利用底层的CPU或GPU硬件[16, 9]。此外,非均匀的稀疏模型需要更复杂的工程和计算基础设施。目前大多数面向视觉的机器学习系统都是利用卷积的优点来利用空域的稀疏性。然而,卷积被实现为对上一层的密集连接的集合。为了打破对称性和提高学习能力,从论文[11]开始,ConvNets传统上在特征维度使用随机和稀疏的连接表,为了进一步优化并行计算,论文[9]中趋向于变回全连接。目前最新的计算机视觉架构有统一的结构。更多的滤波器和更大的batch允许使用高效的密集计算。

这就提出了一个问题:下一个中间步骤是否有希望:一个架构能利用滤波器水平的稀疏性,正如理论所建议的那样,但能通过利用密集矩阵计算来利用我们目前的硬件。稀疏矩阵乘法的大量文献(例如[3])认为对于稀疏矩阵乘法,将稀疏矩阵聚类为相对密集的子矩阵会有更佳的性能。在不久的将来会利用类似的方法用于非统一的深度学习架构的自动构建,这样的想法似乎并不牵强。

Inception架构开始是作为案例研究,用来评估复杂的网络拓扑结构算法的假设输出,该算法试图近似[2]中所示的视觉网络的稀疏结构,并通过密集的、容易获得的组件来覆盖假设结果。尽管这是一项高度投机的任务,但在对拓扑的精确选择进行了两次迭代之后,我们已经可以看到基于[12]的参考体系结构的适度收益。在进一步调优学习速率、超参数和改进的训练方法之后,我们确定产生的Inception架构在定位和对象检测作为[6]和[5]的基础网络的环境中特别有用。有趣的是,虽然大多数最初的架构选择已被质疑并分离开进行全面测试,但结果证明它们是局部最优的。

尽管提出的架构已经在计算机视觉上取得成功,但它的质量是否可以归因于构建其架构的指导原则仍是有疑问的。确保这一点需要更深入的分析和验证。例如,如果基于以下原则描述会发现类似的但更好的拓扑结构。最令人信服的证明是,如果一个自动化系统能够创建一个网络拓扑,在其他领域使用相同的算法不同的全局体系结构但可获得类似的收益。至少,Inception架构的最初的成功为这个方向未来工作提供了坚实的动力。

4. 架构细节

Inception架构的主要思想是考虑怎样发现一个卷积视觉网络中一个最优的局部稀疏结构是怎样被用容易获得的密集组件进行覆盖的。注意假设转换不变性,这意味着我们的网络将以卷积构建块为基础。我们所需要做的是找到最优的局部构造,并在空间上重复它。Arora等人[2]提出了层次结构,其中应该分析最后一层的相关统计数据,并将它们聚集成具有高相关性的单元组。这些聚类形成了下一层的单元并与前一层的单元连接。我们假设前面的每个单元都对应输入层的某些区域,并且这些单元被分到滤波器组中。在较低的层(接近输入的层)相关单元集中在局部区域。因此,如[12]所示,我们最终会有许多聚类集中在单个区域,它们可以通过下一层的1×1卷积层覆盖。然而也可以预期,在更大的斑块上,会有更小的空间分布的簇,其可以被更大块上的卷积覆盖,在越来越大的区域上块的数量将会下降。为了避免块校正的问题,目前Inception架构形式的滤波器的尺寸仅限于1×1、3×3、5×5,这个决定更多的是基于便易性而不是必要性。这也意味着提出的架构是所有这些层的组合,其输出滤波器组连接成单个输出向量形成了下一阶段的输入。另外,由于池化操作对于目前卷积网络的成功至关重要,因此建议在每个这样的阶段添加一个替代的并行池化路径应该也应该具有额外的有益效果(看图2(a))。

图2

正如这些“Inception modules”在彼此的顶部堆叠,它的输出相关统计必然有变化:高层次的较为抽象的特征被较高层捕捉,他们的空间集中会比预计中的少,这表明随着我们移动到更高的层,3×3和5×5卷积的比例应该会增加。

上述模块的一个大问题是,至少在一种形式中是这样的,即使是少量5×5卷积也可能是非常昂贵的,一旦池化单元添加到网络中,这个问题会变得更明显:输出滤波器的数量等于前一阶段滤波器的数量。池化层输出和卷积层输出的合并会导致这一阶段到下一阶段输出数量不可避免的增加。即使这种架构可能会覆盖最优的稀疏结构,但也会非常低效,导致在几个阶段内出现计算爆炸。

这导致了Inception架构的第二个想法:在计算需求增加太多的情况,明智地应用维度缩减和预测。这是基于嵌入的成功:即使是低维度的嵌入也可能包含大量关于相对较大图像补丁块的信息。然而,嵌入表示信息在以稠密压缩形式表示信息并且压缩信息更难处理。我们希望在大多数地方保持稀疏(根据[2]中条件的要求)并且仅在它们必须汇总时才压缩信号。也就是说在昂贵的3×3和5×5卷积之前,添加1×1卷积用来降低维度。除了用来降维之外,它们也包括使用线性修正单元使它们有双重用途。最终的结果如图2(b)所示。

一般来说,Inception网络是由上述类型的模块互相堆叠组成的网络,偶尔会有步长为2的最大池化层将网格的分辨率减半。由于技术原因(训练期间的内存效率),在开始使用Inception网络先在高层次使用而在低层次仍保持传统的卷积形式似乎是有益的。这不是绝对必要的,只是反映了我们当前实现中的一些基础结构效率低下。

这种架构的主要优势之一是它可以显着增加每个阶段的单元数量,而不会在计算复杂性方面造成无法控制的爆炸。尺寸缩减的普遍使用允许将最后一个阶段的大量输入滤波器屏蔽到下一个层,首先减小它们的尺寸,然后以大的patch尺寸卷积它们。 这种设计的另一个实际有用的方面是它符合直觉,即视觉信息应该以各种尺度进行处理,然后进行聚合,以便下一阶段可以同时从不同尺度提取特征。
计算资源的改进使用允许增加每个阶段的宽度和阶段的数量,而不会陷入计算困境。另一种使用Inception体系结构的方法是创建稍差的但计算较便宜的版本。我们发现所有可用的控制允许控制平衡的计算资源,导致网络比没有Inception结构的类似执行网络快2—3倍,但是在这一点上需要仔细的手动设计。

5. GoogLeNet

我们选择GoogLeNet作为在ILSVRC 2014竞赛中的名称。这个名字是对Yann LeCuns开创性的网络LeNet 5网络的致敬【10】。我们还使用GoogLeNet来指代我们在竞赛中使用的初始架构的特定化身。 我们还使用了更深入,更广泛的Inception网络,其质量稍差,但将其添加到合奏中似乎稍微改善了结果。 我们省略了该网络的细节,因为我们的实验已经表明,确切的架构参数的影响相对较小。这里,为了示范目的,在表1中描述了最成功的特定实例(名为GoogLeNet)。在我们的集合中,7个模型中的6个使用了完全相同的拓扑(用不同的采样方法训练)。

网络参数

所有卷积,包括Inception模块中的卷积,都使用修正性线性激活。在我们的网络中,感受野的大小是224×224,RGB色彩通道使用均值减法。 “#3×3reduce”和“#5×5reduce”表示在3×3和5×5卷积之前,使用的降维层中的1×1滤波器的数量。 可以在pool proj列中的内置最大池之后看到投影层中1×1滤波器的数量。所有这些降维/投影层也都使用线性修正激活。

该网络的设计考虑了计算效率和实用性,因此可以在单个设备上运行推理,包括那些计算资源有限的设备,特别是内存占用较少的设备。当仅计算带有参数的层时,网络是22层(如果我们还计算池化层的话,则是27层)。用于构建网络的层数(独立构建块)大约为100个。然而,这个数字取决于机器学习基础设施系统的使用。在分类器之前使用平均池化是基于[12],尽管我们的实现不同,我们使用了一个额外的线性层。这使得我们可以很容易地调整我们的网络,它主要是提供了方便调整网络,我们并不期望它会有很大的影响。研究发现,从全连接层到平均池层,提高了大约top-1 %0.6的准确率,然而即使在移除了全连接层之后,丢失的使用还是必不可少的。

考虑到网络的深度,通过有效的方式将梯度传播回所有层的能力是一个值得关注的问题。一个有趣的见解是,相对较浅的网络在这个任务上的强大性能表明,通过将辅助分类器添加到这些中间层,可以期望较低阶段分类器的判别力。这被认为是在提供正则化的同时克服梯度消失问题。这些分类器以较小的卷积网络的形式放置在Inception (4a)和Inception (4b)模块的输出之上。在训练过程中,它们的损失以折扣权重(辅助分类器损失的权重是0.3)加到网络的整个损失上。在推断时,这些辅助网络被丢弃。后面的控制实验表明辅助网络的影响相对较小(约0.5),只需要其中一个就能取得同样的效果。

包括辅助分类器在内的附加网络的具体结构如下:
具有5×5滤波器大小和步长3的平均池化层,(4a)输出4×4×512
(4d)输出4×4×528阶段。
带有128个滤波器的1×1卷积用于降维和修正线性激活。
一个全连接层,具有1024个单元和修正线性激活。
一个dropout层,丢弃70%的输出
使用带有softmax损失的线性层作为分类器(作为主分类器预测同样的1000类,但在推断时移除)
最终的网络模型图如图3所示。

图3含有的所有结构的GoogLeNet网络

6. 训练方法

我们的网络使用DistBelief [4]分布式机器学习系统进行训练,使用适量的模型和数据并行性。虽然我们只使用基于CPU的实现方式,但粗略估计表明,GoogLeNet网络可以在一周内使用少量高端GPU训练到收敛,主要限制是内存使用量。我们的训练使用异步随机梯度下降,动量参数为0.9[17],固定的学习率计划(每8次遍历下降学习率4%)。使用Polyak求平均值[13]来创建用于推断时间的最终模型。

图像采样方法在过去的几个月里发生了重大变化主导了比赛。并且已经收敛的模型在其他选项上进行了训练,有时结合改变超参数的改变比如,dropout和学习速率,所以很难给出一个明确的指导,最有效的单一的方式来训练这些网络。使问题更加复杂的是,受到[8]的启发,一些模型主要是针对较小的裁剪图像进行训练,另一些则是针对相对较大的裁剪图像进行训练。然而,一个经过验证的方案在竞赛后工作地很好,包括各种尺寸的图像块的采样,它的尺寸均匀分布在图像区域的8%——100%之间,方向角限制为[34,43][34,43]之间。另外,我们发现Andrew Howard[8]的光度扭曲对于克服训练数据成像条件的过拟合是有用的。此外,我们开始使用随机插值方法(双线性,面积,最近的邻居和立方体,具有相等的概率),用于相对较晚的调整大小,以及与其他超参数变化相结合,所以我们不能确定最终的结果是否被他们的使用所影响。

7. ILSVRC 2014分类挑战赛设置和结果

ILSVRC 2014分类挑战涉及将图像分类到Imagenet层次结构中1000个叶节点类别之一的任务。大约有120万张训练图片,50,000张图片用于验证,100,000张图片用于测试。每个图像都与一个实际类别相关联,并且性能是根据分类器预测最高得分来测量的。通常会报告两个数字:top-1准确率,比较实际类别和第一个预测类别,top-5错误率,比较实际类别与前5个预测类别:如果图像实际类别在top-5中,则认为图像分类正确,不管它在top-5中的排名。挑战赛使用top-5错误率来进行排名。

我们参加竞赛时没有用外部数据来训练。 除了本文提到的训练技术之外,我们在测试过程中采用了一系列技术来获得更高的性能,我们将在下面进行详细介绍。

1.我们独立训练了同一个GoogLeNet模型的7个版本(包括一个更广泛的版本),并对它们进行了整体预测。这些模型经过相同的初始化(即使具有相同的初始权重,主要是因为监督)和学习率策略进行了培训,并且它们仅在采样方法和输入图像的随机顺序上有所不同。

2.在测试过程中,我们采取了比Krizhevsky等人更加积极的裁剪方法[9]。 具体而言,我们将图像调整为4个缩放比例,其中较短的尺寸(高度或宽度)分别为256,288,320和352,取这些归一化图像的左侧,中间和右侧方块(在人像图像中, 顶部,中间和底部方块)。对于每个方块,我们将采用4个角以及中心224×224裁剪图像以及方块尺寸归一化为224×224,以及它们的镜像版本。这导致每张图像4×3×6×2 = 144的裁剪图像。 Andrew Howard[8]在前一年使用了类似的方法,我们通过实证验证其执行情况略低于提议的方案。我们注意到,实际应用中可能不需要这种裁剪,因为存在合理数量的裁剪图像后,更多裁剪图像的好处会变得很微小(我们将在后面展示)。

3.softmax概率是对多个裁剪图像和所有单个分类器进行平均以获得最终预测结果。在我们的实验中,我们分析了验证数据的其他替代方法,例如裁剪图像上的最大池化和分类器上的平均值,但是它们比简单平均的性能略逊。

image.png

image.png

在本文的其余部分,我们分析了有助于最终提交的整体性能表现的多个因素。

我们在挑战中提交的最终提交数据在验证和测试数据上获得了top-5 6.67%的错误率,在其他参与者中排名第一。与2012年SuperVision方法相比相对减少了56.5%,与前一年的最佳方法(Clarifai)相比相对减少了约40%,两者均使用了外部数据来训练分类器。表2显示了一些高性能方法的统计数据。

我们还通过在表中预测图像时通过改变模型的数量和使用的裁剪图像数量来分析和报告多种测试选择的性能。当我们使用一个模型时,我们选择了验证数据中具有最低top-1错误率的模型。所有数据都在验证数据集上报告,以避免过度使用测试数据统计数据。

8. ILSVRC 2014检测挑战赛设置和结果

ILSVRC检测任务是在200个可能的类中生成图像中目标的边界框。如果检测到的对象与实际类别相匹配,并且它们的边界框重叠至少50%(使用Jaccard索引),则检测到的对象记为正确。无关的检测被视为误报,并受到惩罚。与分类任务相反,每个图像可能包含很多对象或不包含任何对象,并且它们的尺度可能是变化的。报告的结果使用平均精确度(mAP)报告。

image.png

GoogLeNet采用的方法与[6]中的R-CNN类似,但是将Inception模型作为区域分类器进行了增强。此外,通过将选择性搜索[20]方法与多框[5]预测相结合,可以提高区域生成步骤,以实现更高的对象边界框召回率。为了减少误报数量,超分辨率像素尺寸增加了2倍。这将选择搜索算法的区域生成减少了一半。我们添加了来自多框[5]的200个区域提案,大约60%的区域生成用于[6],同时将覆盖率从92%提高到93%。减少区域生成的数量,增加覆盖率的影响是对于单个模型的平均精确度提高1%。最后,在对每个区域进行分类时,我们使用6个ConvNets组合,从而将结果从40%提高到43.9%的准确度。请注意,与R-CNN相反,由于缺少时间,我们没有使用边界框回归。

我们首先报告检测结果并显示检测任务第一版以来的进展情况。与2013年的结果相比,准确率几乎翻了一番。表现最佳的团队都使用了卷积网络。我们在表4中报告了官方分数以及每个团队的常用策略:使用外部数据,集成模型或上下文模型。外部数据通常是ILSVRC12分类数据,用于预先训练一个模型,该模型稍后将在检测数据上完善。一些团队还提到了定位数据的使用。由于定位任务边界框的很大一部分不包含在检测数据集中,因此可以用这种数据预训练一般边界框回归器,这与使用分类用于预训练的方式相同。GoogLeNet条目没有使用本地化数据进行预训练。

image.png

在表5中,我们仅比较了使用单个模型的结果。 表现最佳的模型由Deep Insight提供,令人惊讶的是只有3个模型的集合仅仅提高了0.3个点,而GoogLeNet获得了更强的集合效果。

9. 总结

我们的研究结果似乎有了一个坚实的证据,即通过容易获得的密集构建块来近似预期的最优稀疏结构是改进用于计算机视觉的神经网络的可行方法。这种方法的主要优点是与较浅和较宽的网络相比,在计算要求的适度增加中显著提高了质量。另外请注意,尽管我们的检测工作既没有利用上下文,也没有执行边界框10回归,但我们的检测工作仍然具有竞争力,这一事实进一步证明了Inception体系结构的优势。对于分类和检测,预期通过更昂贵的类似深度和宽度的非Inception类型网络可以实现类似质量的结果,但我们的方法提供了可靠证据,表明向更稀疏的架构转变是可行和有用的想法。 这表明在[2]的基础上,以自动化的方式创建稀疏和更精细的结构是有前途的工作。

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

推荐阅读更多精彩内容

  • 从刚来这个城市的陌生到熟悉,从问路到指路。你在这个城市有了工作,每天回家的那班车走的每一条路你都知道,每一...
    向日葵223344阅读 296评论 2 1
  • 不是因为不爱 因为太爱 因为责任 我们没法在一起 没法走到结婚 心有多痛 大概也只有彼此知道 下辈子 我们一定要在...
    懒懒爱吃贝贝阅读 311评论 1 1
  • 从大一到大二,我把时光交给了你,你却把时光交给了无尽的空虚; 从大一到大二,我把精力交给了你,你却把精力交给了复杂...
    庄德坤阅读 129评论 0 0
  • 拖着疲惫的身躯,回来了! 终于结束了学习之旅, 这段时间的学习时间,让自己比在读书时还专心! 因为不想让自己去...
    蘇蘇13阅读 185评论 0 0