用于语义分割的高分辨率表示

HRNetV2

应该是一系列论文,按时间顺序是:

0.前身:HRNetV1,用于人体姿态估计

Deep High-Resolution Representation Learning for Human Pose Estimation

https://zhuanlan.zhihu.com/p/57876066

通过在高分辨率特征图主网络逐渐并行加入低分辨率特征图子网络,不同网络实现多尺度融合与特征提取实现的。



1. 基准篇:High-Resolution Representations for Semantic Segmentation

又名:High-Resolution Representations for Labeling Pixels and Regions

https://arxiv.org/abs/1904.04514

2.谷歌改进版本:Panoptic-DeepLab (论文加参考文献就4页)

https://arxiv.org/pdf/1910.04751.pdf

3.作者在TPAMI上发表:Deep High-Resolution Representation Learning for Visual Recognition

https://arxiv.org/pdf/1908.07919.pdf

4.可以组装在一起的提升:OCR,SigFix,Hierarchical Multi-Scale Attention for Semantic Segmentation(Nvidia)

HRNet + OCR在:https://github.com/HRNet/HRNet-Semantic-Segmentation/tree/HRNet-OCR

以及https://github.com/openseg-group/openseg.pytorch

从基准篇开始吧

用于语义分割的高分辨率表示

高分辨率表示学习在许多视觉问题中起着至关重要的作用,例如姿态估计和语义分割。高分辨率网络(HRNet)[91](Deep high-resolution representation learning for human pose estimation,作者自己的另一篇论文)是最近为人体姿势估计而开发的,它通过并行地将高分辨率卷积连接到低分辨率卷积上,并且在并行卷积中重复多次地融合,以生成更强的高分辨率表示。

本文通过引入一种简单而有效的修正方法,对高分辨率表示进行了进一步的研究,并将其应用于广泛的视觉任务中。我们增强高分辨率表示,是通过聚合来自所有并行的卷积的(上采样过的)表示,而不是像[91]中那样,只聚合来自高分辨率卷积的表示。这样简单的修改导致更强的表示能力,实验证明性能更强。我们在Cityscapes,LIP,Pascal Context,以及在AFLW,COFW,300W和WFLW上的人脸关键点检测的实验上显示了最好的结果。另外,我们从高分辨率表示的基础上构造了一个多级的表示,并将其用在Faster RCNN目标检测框架及其扩展版本中。该方法在COCO目标检测取得了优于现有的单模型的效果。代码和模型在https://github.com/HRNet

1 引言

低分辨率表示主要用于视觉分类,而高分辨率表示则用于其它许多的视觉任务,例如语义分割、物体检测、人体姿态估计等。高分辨表示,也即本文所关注的,仍有许多未解决的问题,吸引了很多的关注。

计算高分辨表示的方法分为两大类:一类是从网络(例如ResNet)输出的低分辨率表示中恢复出高分辨率,有时也会用上中等分辨率表示,例如Hourglass[72],SegNet[2],DeconvNet[74],U-Net[83],encoder-decoder[77]。另一类是,保留高分辨率表示,并使用并行的低分辨率表示来增强高分辨率表示[91,30,132,86]。此外,扩张卷积被用来替代一些strided卷积,并在分类网络中和常规卷积结合起来使用,以计算中等分辨率表示[13,126]。

我们沿着保留高分辨表示的思路,进一步研究了最初是用于人体姿态估计[91]的高分辨率网络(HRNet),并将其扩展到广泛的视觉任务。

我们沿着保持高分辨率表示的研究思路,进一步研究了最初为人类姿势估计而开发的高分辨率网络(HRNet),用于广泛的视觉任务。HRNet通过并行连接高分辨率和低分辨率卷积,并在并行卷积上重复进行多尺度融合来保持高分辨率表示。由此产生的高分辨率表示不仅强大,而且在空间上也是精确的。

我们做了一个简单的修改,从所有高分辨率到低分辨率的并行卷积来挖掘表示(exploring representation),而不仅仅是原始HRNet中的从高分辨率表示[91]。这种修改只会增加少量的计算量,但是却导致更强的分辨率表示。修改后的网络称之为HRNetV2,实验证明它优于原始的HRNet。

通过从输出的高分辨率表示中估计分割图或者人脸关键点热图,我们将所提出的网络应用于语义分割和人脸关键点检测。应用到语义分割上,该方法以相近的模型大小和更低的计算复杂度在PASCAL Context,Cityscapes和LIP数据集上达到最先进水平。应用到人脸关键点检测上,我们的方法在四个标准数据集上取得了最好的结果:AFLW、COFW、300W和WFLW。

另外,我们用高分辨率表示中构造了一个多层级的表示,并用在Fast RCNN目标检测框架及其扩展框架Mask RCNN和Cascade RCNN中。结果表明,我们的方法在检测性能上有了很大的提高,特别是对小目标的检测性能有了很大的提高。通过单尺度训练和测试,该方法获得了比现有单模型方法更好的COCO目标检测结果。

2 相关工作

强大的高分辨率表示在像素和区域标记任务中至关重要,例如语义分割、人体姿势估计、人脸关键点检测和目标检测。我们回顾了目前主要在语义分割、人脸关键点检测[92,50,69,104,123,94,119]和目标检测领域,从低分辨率表示学习、高分辨率表示恢复、到高分辨率表示保持。

学习低分辨率表示    全卷积网络FCN[67,87]通过去除分类网络中的全连接层来计算低分辨率表示,并从其粗分割中计算置信度图(map),并从其粗略的分段置信图中进行估计。结合由中间层的低层级中等分辨率表示估计的较精细的分割分数图[67],或者将这个过程迭代几次[50],可改善分割效果。类似的技术也用在边缘检测,例如整体边缘检测[106]

通过将几个(通常是两个)strided卷积和相关卷积替换为扩张卷积,将全卷积网络扩展到扩张版本,从而得到中等分辨率表示[126,13,115,12,57]。这些表示通过特征金字塔进一步扩展到多尺度上下文表示[126,13,15],用于在多个尺度上分割物体。

恢复高分辨率表示    一个上采样子网络,例如decoder,被用来逐步地从低分辨表示中恢复高分辨率表示,其中低分辨率表示是由下采样过程输出的。上采样子网络可以是下采样子网络的对称版本,通过跳连越过一些镜像的层,来传递(transform)池化索引(pooling indices),例如SegNet[2]和DeconvNet[74],或者通过复制元素来对特征图上采样,例如U-Net[83]和Hourglass[72,111,7,22,6],编码-解码[77],FPN[62]等等。全分辨率残差网络[78]引入了一个额外的全分辨率路径,该路径包含了图像全分辨率的信息,来取代跳连,并且下采样和上采样子网络中的每个单元从全分辨率路径接收信息并将信息发送到全分辨率路径。

不对称上采样过程也被广泛研究。RefineNet[60]改进了将上采样过的表示与从下采样过程复制来的、相同分辨率的表示的组合过程。其它工作包括:轻上采样过程[5];轻下采样和重上采样过程[97]、复合器网络[40];使用更多或更复杂的卷积单元改进跳连[76,125,42],以及将信息从低分辨率跳连发送到高分辨率跳连[133]或在它们之间交换信息[36];研究上采样过程的细节[100];结合多尺度金字塔表示[16,105];使用密集连接堆叠多个Deconvnet/UNets/Hourglass[31,101]。

保持高分辨率表示    高分辨率表示在整个过程中都是保持的,通常是通过连接多个分辨率(从高分辨率到低分辨率)的并行的卷积,以及通过并行卷积之间的重复地信息交换。代表作品包括GridNet[30]、卷积神经结构[86]、互连CNNs[132]和最近开发的高分辨率网络(HRNet)[91],这些是我们所关注的。

卷积神经结构[86]和互连CNNs[132]这两个早期的工作缺乏对何时启动低分辨率并行流以及如何和何时在并行流之间交换信息的精心设计,并且没有使用批处理归一化和残差连接,因此没有显示出令人满意的性能。

GridNet[30]就像多个U-Nets的组合,包括两个对称的信息交换阶段:第一阶段只传递高分辨率到低分辨率的信息,第二阶段只传递低分辨率到高分辨率的信息。这限制了它的分割质量。

3 学习高分辨率表示

为了方便起见,我们将高分辨率网络[91]命名为HRNetV1,它通过并行连接高分辨率到低分辨率卷积来保持高分辨率表示,其中并行卷积中存在重复的多尺度融合。

图1
图2

架构    架构如图1所示。分为四个阶段,第2、3、4阶段由重复多次的模块化的多分辨率块组成。多分辨率块由一个多分辨率分组卷积和一个多分辨率卷积组成,如图2(a)和(b)所示。多分辨率分组卷积是分组卷积的一个简单扩展,是将输入通道分为几组,并且对每组通道分别在不同的空间分辨率上进行常规卷积。

多分辨率卷积如图2(b)所示。它类似于常规卷积的多分支全连接形式。常规卷积的多分支全连接形式如图2(c)所示。如[122]所述,输入通道被分成几个子集,输出通道也被分成几个子集。输入通道子集和输出通道子集以全连接的形式连起来,每个连接都是常规卷积。每个输出通道子集都是每个输入通道子集的卷积输出的求和。

区别在于两方面。(i)在多分辨率卷积中,每个通道子集的分辨率是不同的。(ii)输入通道和输出通道的连接需要处理两者分辨率不同的情况,当输入通道分辨率大于输出通道分辨率的时候,要如[91]中那样使用几个步幅为2的3×3卷积,当输入通道分辨率小于输出通道分辨率的时候,要使用双线性(最近邻)上采样。

图3

改进    在原始版本HRNetV1[91]中,仅输出来自高分辨卷积的表示(特征图),如图3(a)所示。这意味着只有来自高分辨率卷积的输出通道子集被使用,而来自低分辨率卷积的子集被丢失。

我们做了个简单而有效的修改,以使用来自低分辨率卷积输出的通道子集。好处是充分发挥多分辨率卷积的优势。这个修改只会增加很少的参数和计算量。

我们通过双线性上采样将低分辨率表示重新缩放到高分辨率,并将表示的子集拼接起来,如图3(b)所示,从而得到高分辨表示。我们采用该表示来估计分割图/人脸关键点热图。当应用到目标检测上,我们用平均池化将高分辨率下采样到多个不同尺度,以构造一个多级表示,如图3(c)所示。我们将这两个修改版本命名分别为HRNetV2和HRNetV2p,并在4.4节对它们实验对比。

实例化    我们用在HRNetV1[91]中类似的方式对网络实例化。网络首先是两个步幅为2的3×3卷积,将分辨率降到1/4。Stage1包含4个残差单元,每个残差单元是一个宽度为64的bottleneck,然后进行一个3×3的卷积,将特征图的宽度缩小到C。Stage2,Stage3,Stage4分别包含1、4、3个多分辨率块。四种分辨率的卷积宽度(通道数)分别为C、2C、4C和8C。多分辨率分组卷积的每个分支包含4个残差单元,每个单元在每个分辨率有两个3×3卷积。

在语义分割和人脸关键点检测的应用中,我们将所有四种分辨率的输出表示(图3(b))通过1×1卷积进行混合(mix),生成一个15C维的表示。然后,我们将每个位置的混合表示输入给一个线性分类器/回归器,用softmax/MSE损失来预测分割图/人脸关键点热图。对于语义分割,训练和测试的时候,将分割图上采样(4倍)到输入尺寸。

对于目标检测,在形成图3(c)中的特征金字塔之前,我们通过1×1卷积将高分辨率表示的维数降低到256,类似于FPN[62]。

4 实验

4.1 语义分割

我们报告了两个场景解析数据集PASCAL Context[71]和Cityscapes[19]和人类解析数据集LIP[34]的结果。评价指标是类别层级的平均交并比(mIoU)。

Cityscapes    Cityscapes数据集[19]包含5000幅高质量像素级精细标注场景图像。其中训练集、验证集、测试集分别是2975、500、1255张。共有30个类别,其中19个类别用于评估。除了mIoU,我们还报告了测试集上的另外3个指标:IoU category(cat.),iIoU(cla.),iIoU category(cat.)。

我们使用[126,127]同样的训练方案。数据增扩包括:随机裁剪(从1024×2048裁到512×1024),[0.5,2]范围内的随机缩放,随机翻转。使用SGD优化器,初始学习率为0.01,动量为0.9,权重衰减为0.0005。采用poly学习率衰减策略,幂为0.9。所有模型在4个gpu和syncBN上进行了120K次迭代训练,批量大小为12。

表1在Cityscapes验证集上比较了几种方法的参数量、计算复杂度和mIoU。(i)HRNetV2-W40(40表示高分辨率卷积的宽度),模型大小与DeepLabv3+相似,计算复杂度低得多,性能更好:比UNet++提高4.7个点,比DeepLabv3+提高1.7个点,比PSPNet,DeepLabv3+提高约0.5个点。(ii)HRNetV2-W48的模型大小与PSPNet相似,计算复杂度大大降低,比UNet++提高了5.6点,比DeepLabv3提高了2.6点,比PSPNet、DeepLabv3+提高了约1.4点。在下面的比较中,我们采用了在ImageNet上预训练过的HRNetV2-W48,其模型大小与大多数基于扩张版ResNet-101的方法相似。

表1

表2提供了我们的方法与Cityscapes测试集的最先进方法的比较。所有的结果都有六个尺度和翻转。对两种不使用粗标注数据的情况进行了评价:一种是在训练集上训练的,另一种是在训练集+验证集上训练的模型。在这两种情况下,HRNetV2-W48都达到了最好的性能,并且比之前的最先进技术高出1个百分点。

表2

PASCAL context    PASCAL context数据集[71]包括4998个场景图像用于训练,5105个图像用于测试,59个语义标签和1个背景标签。

数据增扩和学习率策略与Cityscapes相同。根据广泛使用的训练策略[117,23],我们将图像调整为480×480,并将初始学习率设置为0.004,权重衰减为0.0001。批量大小为16,迭代次数为60K。

我们遵循标准测试程序[117,23]。图像被缩放到480×480,然后输入到我们的网络中。然后将生成的480×480标签调整为原始图像大小。我们使用六个尺度和翻转来评估我们的方法和其他方法的性能。

表3提供了我们的方法与最先进方法的比较。有两种评估方案:mIoU超过59个班和60个班(59个班+背景)。在这两种情况下,HRNetV2-W48的性能优于先前的技术水平。

表3

LIP    LIP数据集[34]包含50462张精细标注的人体图像,这些图像分为30462张训练图像和10000张验证图像。对20个类别(19个人体部位标签和1个背景标签)进行了评估。按照标准的训练和测试设置[66],将图像大小调整为473×473,并根据原始图像和翻转图像的分割图的平均值来评估性能。

数据增扩和学习率策略与Cityscapes相同。训练策略遵循最近的设置[66]。我们将初始学习率设置为0.007,动量设置为0.9,权重衰减为0.0005。批量大小为40,迭代次数为110K。

表4提供了我们的方法与最先进方法的比较。HRNetV2-W48的总体性能最好,参数较少,计算量最少。我们还想指出,我们的网络不使用额外的信息,如姿势或边缘。

表4

4.4 COCO目标检测

我们将多层表示(HRNetV2p)4应用于更快的R-CNN[82]和Mask R-CNN[38]框架中,如图3(c)所示。我们对MS-COCO 2017检测数据集进行评估,其中包含∼118k图像用于培训,5k用于验证(val)和∼20k测试,无需提供注释(测试开发)。采用标准COCO风格评价。

我们在公共mmdetection平台[11]上使用提供的培训设置为我们的HRNetV2p和ResNet训练模型,但我们使用了[37]中建议的2××学习率计划。数据通过标准的水平翻转进行扩充。输入图像被重新调整大小,使得较短的边缘为800像素[62]。推理是在单个图像尺度上进行的。

表5总结了参数和GFLOP。表6和表7报告了可可价值的检测结果。有几个观察结果。(i) HRNetV2p-W18(HRNetV2p-W32)的模型尺寸和计算复杂度均小于ResNet-50-FPN(ResNet-101-FPN)。(ii)使用1×,HRNetV2p-W32的性能优于ResNet-101-FPN。HRNetV2p-W18的性能比ResNet-50-FPN差,这可能是由于优化迭代不足。(iii)在2×,HRNetV2p-W18和HRNetV2pW32的性能分别优于ResNet-50-FPN和ResNet-101-FPN。

表5
表6
表7

表8报告了我们的网络与COCO测试设备上最先进的单模型目标探测器的比较,没有使用[65,79,56,90,89,75]中所做的多尺度训练和多尺度测试。在更快的R-CNN框架中,我们的网络在参数和计算复杂度相似的情况下比ResNet表现得更好:HRNetV2p-W32与ResNet-101-FPN,HRNetV2p-W40与ResNet-152-FPN,HRNetV2p-W48与X-101-64×4d FPN。在Cascade R-CNN框架中,我们的HRNetV2p-W32性能更好。

表8

4.3 人脸关键点检测

面部路标检测也称为面部对齐是从人脸图像中检测关键点的问题。我们对四个标准数据集进行评估:WFLW[101]、AFLW[49]、COFW[8]和300W[85]。我们主要使用归一化平均误差(NME)进行评估。我们使用视距作为WFLW、COFW和300W的标准化,而脸部边界框作为AFLW的标准化。我们还报告曲线下面积分数(AUC)和失败率。

我们遵循标准的培训计划[101]。所有的面都被提供的框根据中心位置进行裁剪并调整为256×256。我们增加了数据±30度的平面内旋转,0.75 5 1.25缩放,和随机翻转。基本学习率为0.0001,在第30和50个时期分别下降到0.00001和0.000001。这些模型在一个GPU上训练了60个时期,批量大小为16个。与语义分割不同,热图没有从1/4向上采样到输入大小,并且在1/4映射上优化了损失函数。

在测试时,每个关键点的位置都是通过从1/4到原始图像空间的最高热值位置形成,并在从最高响应到第二高响应的方向上进行四分之一偏移调整来预测每个关键点位置[17]。

我们采用HRNetV2-W18进行人脸地标检测,其参数和计算成本与广泛使用的主干网ResNet-50和Hourglass[72]相似或更小。HRNetV2-W18:#参数=9.3M,GFLOPs=4.3G;ResNet-50:#参数=25.0M,GFLOPs=3.8G;沙漏:#参数=25.1M,GFLOPs=19.1G。数字在256×256的输入尺寸上获得。值得注意的是,采用ResNet-50和Hour glass为骨干的面部标志点检测方法会带来额外的参数和计算开销。

WFLW    WFLW数据集[101]是最近建立的基于更宽面[112]的数据集。有7500个训练图像和2500个测试图像,其中有98个手动标注的地标。我们报告了测试集和几个子集的结果:大姿态(326张图像)、表情(314张图像)、照明(698张图像)、化妆(206张图像)、遮挡(736张图像)和模糊(773张图像)。

表9提供了我们的方法与最先进方法的比较。我们的方法在测试集和所有子集上明显优于其他方法,包括利用额外边界信息的LAB和使用更强数据扩充的PDB方法[28]。

表9

AFLW    AFLW[49]数据集是一个广泛使用的基准数据集,其中每个图像有19个面部标志点。根据[134,101],我们在20000个训练图像上训练我们的模型,并在AFLW全套(4386个测试图像)和AFLW前沿集(从4386个测试图像中选择1314个测试图像)上报告结果。

表10提供了我们的方法与最先进方法的比较。我们的方法在不需要额外信息和更强的数据扩充的情况下达到了最好的性能,甚至在有额外的三维信息时优于DCFE。我们的方法比使用额外边界信息的LAB和使用更强数据扩充的PDB[28]的性能稍差。

表10

COFW    COFW数据集[8]由1345个训练脸和507个有遮挡的测试脸组成,其中每个图像有29个面部标志。

表11

表11提供了我们的方法与最先进方法的比较。HRNetV2在很大程度上优于其他方法。特别是,它比具有额外边界信息的LAB和具有更强数据扩充能力的PDB具有更好的性能。300W。数据集[85]是海伦[53]的组合,

LFPW[4]、AFW[136]、XM2VTS和IBUG数据集,其中每个面都有68个地标。在[81]之后,我们使用了3148个训练图像,其中包含海伦和LFPW的训练子集和全套AFW。我们使用完整集和测试集两种协议来评估性能。全套包含689张图片,并进一步分为海伦和LFPW的共有子集(554张图片)和IBUG的挑战子集(135张图片)。用于比赛的官方测试集包含600张图像(300张室内图像和300张室外图像)。

表12提供了关于全集合及其两个子集的结果:普通和挑战。表13提供了测试集的结果。与Chen等人相比。[17] 以参数大、计算复杂度高的沙漏为骨架,除AUC0.08外,其他指标均优于其他指标。我们的HRNetV2在没有额外信息和更强的数据扩充的方法中获得了最佳的性能,甚至比具有额外边界信息的LAB和探索额外3D信息的DCFE[97]要好。

表12
表13

4.4 实验分析

我们将改进后的网络HRNetV2和HRNetV2p与原网络[91](简称HRNetV1)在语义分割和COCO目标检测方面进行了比较。图4(a)和图4(b)给出的分割和目标检测结果表明,HRNetV2的性能明显优于HRNetV1,除了在Cityscapes语义分割中大模型的情况下,增益较小。我们还测试了一个变体(用HRNetV1h表示),它是通过增加1×1卷积来增加输出高分辨率表示的维数而构建的。图4(a)和图4(b)中的结果表明,该变体实现了对HRNetV1的轻微改进,这意味着在我们的HRNetV2中聚合来自低分辨率并行卷积的表示对于提高性能至关重要。

5 结论

本文通过引入一个简单的修正,对高分辨率表示网络在广泛的视觉应用中进行了实证研究。实验结果表明,改进后的网络学习的强高分辨率表示和多层次表示在语义分割、人脸关建点检测和目标检测方面都是有效的。代码在https://jingdongwang2017.github.io/Projects/HRNet/

附录:网络预训练我们在ImageNet上对我们的网络进行预训练,该网络由图5所示的分类头进行扩充[84]。分类头描述如下。首先,将四个分辨率的特征映射送入瓶颈,输出通道从C、2C、4C和8C分别增加到128、256、512和1024。然后,我们通过输出256个信道的2阶3×3卷积对高分辨率表示进行降采样,并将其添加到第二个高分辨率表示中。这个过程重复两次,以获得1024个小分辨率的特征通道。最后,我们通过1×1卷积将1024个信道转换为2048个信道,然后进行全局平均池操作。输出2048维表示被送入分类器。

我们对训练图像采用了与[39]中相同的数据扩充方案,并训练了100个时期的模型,批量大小为256个。初始学习率设置为0.1,在第30、60和90个时期降低10倍。我们使用的SGD的重量衰减为0.0001,Nesterov动量为0.9。我们采用标准的单次裁剪测试,从每张图像中裁剪出224×224个像素。验证集中会报告top-1和top-5错误。

表14显示了我们的ImageNet分类结果。作为比较,我们也报告了resnet的结果。我们考虑两种类型的剩余单元:一种是由瓶颈形成的,另一种是由两个3×3卷积形成的。我们遵循ResNets的PyTorch实现,用两个2步3×3卷积代替输入干中的7×7卷积,将分辨率降低到我们网络中的1/4。当残差单元由两个3×3卷积形成时,使用额外的瓶颈将输出特征映射的维数从512增加到2048。我们可以看到,在相似的参数和GFLOPs下,我们的结果与resnet相当,并且略优于resnet。

表14

此外,我们还研究了两种方案的结果:(i)每个分辨率上的特征映射分别经过全局池,然后连接在一起,输出一个15C维表示向量,命名为HRNet Wx Ci;(ii)每个分辨率上的特征映射被输入几个2阶残差单元(瓶颈,将每个维度增加到double)以将维度增加到512,并将它们连接并平均化,以达到2048维表示向量,命名为HRNet Wx Cii,该向量在[91]中使用。表15显示了这种消融研究。可以看出,所提出的方法优于这两种方法。

表15

笔者的思考:使用轻量级的HRNet-W18,如果我使用迭代半监督已确保其很难过拟合的情况下,我如何改动,几乎不提升其计算量,又能显著提高其拟合能力?(改动不会造成部署的麻烦)

1.减小weight decay 参数

2.改动网络中的常规卷积,参照Xception对Inception的改动,将常规卷积改成深度可分离卷积,并且增加每一层宽度使参数量基本不变https://blog.csdn.net/u014380165/article/details/75142710

3.参照ResNeSt改动常规卷积

如果你有其他的想法,欢迎在评论区补充

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