Kubric:可扩展的数据生成器

Kubric: A scalable dataset generator

CVPR2022

https://arxiv.org/abs/2203.03570

Submitted 7 March, 2022; originally announced March 2022.

数据是机器学习的驱动力,训练数据的数量和质量对系统的性能往往比体系结构和训练细节更重要。但大规模收集、处理和注释真实数据是困难的、昂贵的,而且经常会引发额外的隐私、公平性和法律问题。合成数据是一个强大的工具,有可能解决这些缺点:1)成本低廉2)支持丰富的事实注释3)提供对数据的完全控制,4)可以规避或缓解偏见、隐私和许可方面的问题。不幸的是,用于有效数据生成的软件工具不如用于架构设计和训练的软件工具成熟,这导致生成工作支离破碎。为了解决这些问题,我们引入了Kubric,这是一个开源Python框架,它与Pybill和Blender接口,生成具有丰富注释的照片逼真场景,并无缝扩展到分布在数千台机器上的大型作业,并生成TBs数据。我们通过展示一系列13种不同生成的数据集来展示Kubric的有效性,这些数据集用于从研究3D NeRF模型到光流估计的任务。我们发布了Kubric、使用的资产、所有生成代码以及呈现的数据集,以供重用和修改。

1.引言

高质量的大规模数据对深度学习至关重要。可以说,它与许多体系结构和训练细节一样重要,甚至更重要。然而,即使对于许多简单的视觉任务,收集和管理足够数量的数据仍然是一项艰巨的挑战。一些关键障碍包括高质量、详细注释、数据多样性、对任务域复杂性的控制,以及对隐私、公平性和许可的担忧[4]。本文提倡使用合成数据来规避其中的许多问题,为此,我们引入了Kubric,这是一个开源管道,用于生成具有丰富的真值标签的真实图像和视频数据,用于无数视觉任务。

长期以来,合成数据一直被用于基准评估(例如光流[6,7]),因为它支持丰富的真值注释和对数据复杂性的细粒度控制。它还可以在违反模型假设(例如刚性)的情况下进行系统的模型评估。合成数据也被有效地用于训练。这包括RGBD[85]在3D人体姿势估计方面的开创性工作,以及最近在无数任务方面的开创性工作,包括面部关键点检测[103]、视频中的人体姿势[24]和语义分割[116]。照片真实感通常被认为是缩小泛化差距的关键,但即使没有完美的真实感,合成数据也可以非常有效(例如,飞椅[26]、MPI Sintel[13]和最近的AutoFlow[89])。

不幸的是,用于数据生成的有效软件工具不如用于架构设计和训练的成熟。因此,毫不奇怪,大多数生成工作虽然成本高昂,但都是一次性的,而且是针对特定任务的。尽管设计和开发具有挑战性,但我们需要的是一个用于照片真实感生成的通用框架,该框架支持大规模重用、复制和共享资产,支持同时在数千台机器上执行大型作业的工作流。Kubric使用一致的框架、简单的Python API和全套大规模生成工具解决了这些问题,集成了来自多个来源的资产,使用通用的导出数据格式将数据移植到训练管道中,并为无数的vision任务提供了丰富的注释。总之,我们的主要贡献是:

•    我们介绍了Kubric,这是一个为无数视觉任务生成照片真实感合成数据集的框架,具有对数据复杂性的细粒度控制和丰富的真值注释。

•    Kubric支持大规模生成,在数千台机器上无缝运行大型作业,以标准导出数据格式生成TB的数据。

•    Kubric的多功能性体现在为新的视觉挑战问题创建了13个数据集,包括3D NeRF模型到光流估计,以及基准测试结果。

2    相关工作

合成数据为许多图像任务提供了高质量的标签,如语义[16]和实例[102]分割、文本定位[37]、对象检测[40]和分类[32]。有许多大型合成数据集,例如用于特定任务的CLEVR[44]、ScanNet[21]、SceneNet RGB-D[65]、NYU v2[67]、SYNTHIA[80]、virtual KITTI[33]和flying things 3D[64]。然而,这些数据集很少包含所有图像任务的所有可能注释,缺少关键信号,如相机姿势、实例或语义分割遮罩,或光流。这对于多任务问题尤其具有挑战性,比如用语义分割联合训练神经场景模型[118]。此外,固定数据集可能会引入偏见[94,95],例如以对象为中心的偏见[71]和摄影师的偏见[5]。相比之下,Kubric会自动为每一帧生成图像提示( image cues),并轻松支持各种视角和照明条件。

专门的合成数据管道。

有许多手工制作的合成数据生成管道[37、49、66]是由Blender[9]和Unity3D[11]等渲染引擎构建的。虽然这些管道可以缓解视角和照明方面的偏差,但它们通常专门用于特定任务。这使得在不深入了解底层渲染引擎的情况下,调整它们以提供额外的注释具有挑战性。真实世界到sim卡管道通过3D扫描捕获真实世界的数据,然后将其转换为合成数据格式。[56]创建高质量的房间场景,但有许多手动步骤,包括姿势对齐和材质指定。[27]还利用3D扫描,并提供对广泛场景参数的控制,包括相机位置、视野和照明,以及许多每帧图像线索。虽然这些方法为特定捕获的场景生成高质量数据,但管道仍然依赖于整个场景的3D扫描,这给规模化带来了瓶颈。

通用数据集创建管道。通用合成数据管道(如Kubric)旨在通过支持3D资源集合中网格、纹理、预先存在的场景等的任意随机组合来解决这些问题。这减轻了现实世界到sim管道的一些扩展考虑,并且更容易支持来自不同数据集的资产组合。这些管道的尺寸各不相同(见表1)。一个重要的区别是使用渲染引擎,光线跟踪引擎支持全局照明和其他高级照明效果,这比光栅化引擎具有更高的逼真度,但计算量更大。大多数通用合成数据生成管道(如[53、83、84、93、106])都是建立在光栅化基础上的,这使得它们非常快速,通常可以在一台GPU机器上生成整个数据集。3DeWord(34)是一个很好的例子,这种引擎具有灵活的Python API,综合出口能力,以UnyD3D为基础的光栅化引擎,英伟达Flex(61)物理模拟器,甚至声音生成通过pyEngress(96)。范围最接近Kubric的框架是BlenderProc[23]:一种基于光线跟踪的管道,构建在Blender上,支持生成高质量的渲染和综合注释,以及刚体物理模拟。主要区别在于Kubric专注于将工作负载扩展到多个工作人员,以及与tensorflow数据集的集成。

3.基础设施

Kubric是一个高级python库,在渲染引擎、物理模拟器和数据导出基础设施之间起着粘合作用;参见图2。它的主要贡献是简化过程,减少希望生成和共享合成数据的研究人员面临的障碍和摩擦。

3.1. 设计原则

开放。

数据生成代码应该可以被学术界和工业界的研究人员免费使用。Kubric通过开放源代码和Apache2许可证来解决这个问题,并且只使用具有类似许可证的软件。再加上免费3D资源和纹理的使用,研究人员不仅可以共享数据,还可以让其他人复制和修改数据。

易于使用。

计算机图形格式、惯例和接口的碎片化是设置和重用数据生成代码的主要难点。Kubric通过提供一个简单的面向对象API接口,在后台使用PyBullet和Blender,将设置、数据传输的复杂性隐藏起来,并保持同步,从而最大限度地减少了这种摩擦。我们还提供来自各种数据源的预处理3D资产,这些资产可以以最小的工作量使用。

逼真

为了最大限度地发挥作用,数据生成器应该能够尽可能多地建模真实数据的结构和复杂性。Blender的Cycles raytracing engine支持高水平的真实感,可以模拟复杂的视觉现象,如反射、折射、间接照明、次表面散射、运动模糊、景深等。研究这些效果非常重要,它们也有助于缩小泛化差距。

可规模化性。

数据生成工作负载可以从简单的玩具数据原型到生成大量高分辨率视频数据。为了支持这一系列用例,Kubric被设计成无缝地从本地工作流扩展到在云中的数千台机器上运行大型作业。

便携且可复制。

为了促进数据生成代码的重用,重要的是管道易于设置并产生相同的结果——即使在不同的机器上执行时也是如此。这一点尤其重要,因为安装Blender Python模块非常困难[31],而且版本之间存在很大差异。通过分发Kubric Docker映像,我们确保了可移植性,并消除了大部分安装痛苦。

数据导出。

默认情况下,Kubric会导出一组丰富的真值注释,从分割、光流、曲面法线和深度图,到对象轨迹、碰撞事件和相机参数。我们还介绍了SunDs(见第3.4节),这是一个统一的多任务前端,用于基于场景的丰富注释数据。

3.2. 库布里克工人——图3

典型的Kubric工作流包括编写工作脚本,创建、模拟和渲染单个随机场景。然后,通过多次运行这个worker,然后收集生成的数据来生成完整的数据集。这种独立场景的划分反映了大多数数据集的i.i.d.结构,并支持将生成过程从本地原型扩展到大量并行作业;e、 g.使用谷歌云平台(GCP),我们为其提供方便的启动脚本。我们还计划支持Apache Beam管道,该管道将数据集的生成、收集和后处理结合到一个方便(但最终难以调试)的工作流中。

场景结构。

每个工作人员设置一个场景对象,该对象跟踪全局设置(例如,分辨率、要渲染的帧数、重力)、一个摄影机和所有对象,包括灯光、材质、动画等,我们统称为资源。它们是Kubric中用于控制场景内容的主要抽象,每个抽象都暴露了一组属性,例如位置、速度或颜色。将对象添加到场景中的每个实例时,会将对象添加到相应的场景中。目前,它包括PyBullet模拟器和Blender渲染器,但Kubric可以扩展以支持其他视图(例如,最近开源的MuJoCo)。此外,还会自动与所有连接到KU的属性的数据链接进行通信。这样,用户只需使用Kubric提供的抽象,而不必担心接口或约定的差异。

模拟器。

对于物理模拟,我们与在机器人技术中广泛使用的开源PyBullet物理引擎[18]接口(例如[43,46,107])。它可以在填充场景时使用,以确保对象不重叠,但主要用于运行(刚体)模拟,并将生成的轨迹转换为关键帧和碰撞事件列表。Bullet还可以处理被操纵的模型、软体模拟和库布里克尚不支持的各种约束。




渲染器。




Kubric使用bpy模块作为Blender的接口,Blender是一种功能强大的开源3D计算机图形渲染器,广泛用于游戏开发和视觉效果。Blender还提供了一个功能强大的UI,可用于以交互方式调试和调整场景,以及创建和导出新资源。对于渲染,我们依靠cycles——Blender的光线跟踪引擎——与光栅化渲染引擎不同,它支持全局照明,精确捕捉软阴影、反射、折射和次表面散射等效果。这些效果对于视觉真实感至关重要,再加上Blender的大量其他功能,它们使艺术家能够创建具有照片真实感的3D对象和场景。缺点是,周期可能比光栅化渲染引擎慢几个数量级,但对于Kubric来说,我们认为这种计算成本是一种值得权衡的权衡,以换取增加的真实感和系统研究复杂视觉效果的能力。




注释。




Blender的另一个重要功能是使用专门的渲染过程来计算辅助真值信息。我们利用此功能导出(除RGB图像外)1个深度图、2个实例分割、3个光流、4个曲面法线和5个对象坐标(见图1)。除了这些图像空间注释,Kubric还自动收集以对象为中心的元数据,例如2D/3D轨迹、2D/3D边界框、速度、质量、摩擦力、相机参数、碰撞事件以及自定义元数据。




3.3. 资产




创建合成场景的一个限制因素是高质量3D资源的可用性。存在多个资产集合,但它们的使用通常需要大量清理和转换,以使它们与给定管道兼容。Kubric在一个公共的谷歌云存储桶中提供了几个经过预处理的资产集合。使用这些资产就像用kb更改资产源的路径一样简单。资产来源(路径)。在核心级别,每个数据集源都与一个清单相关联。json文件存储高级聚合信息,无需遍历整个文件夹结构。清单中每个条目的“id”属性与包含资产数据的存档文件一一对应。每个档案都包含一个JSON文件,其中包含特定对象的详细元数据,包括用于渲染、碰撞检测的子资产路径,以及Pybill使用的统一机器人描述格式(URDF)中的物理属性定义。对于纹理模型,我们采用GLTF标准[79],并将纹理与几何体一起以二进制格式存储。




库巴基。




对于简单的原型设计,我们提供了图4顶行所示的11个简单资产的小集合。




形核。v2。




该数据集是完整ShapeNet数据集[14]的一个子集,包含55个具有规范对齐和常见对象类别注释(均为手动验证)的51300个独特3D模型。进行了广泛的预处理,以简化Kubric内部这些资产的整合。这些转换脚本可在ShapeNet 2kubric子目录中找到;转换过程可以通过其中可用的Docker容器轻松复制。这个转换过程花了很多时间≈ 在80核虚拟机(Google Cloud VM n2-highcpu-80)上运行16个小时,并通过Python的多处理库执行线程并行化。一小部分模型未能转换(例如,它们缺少纹理、材质错误或只是使转换过程崩溃),并在转换代码中列出。

虽然数据集中的许多模型在通过OpenGL可视化时会产生令人满意的渲染效果,但使用照片级真实感渲染器(即混合器循环)时,渲染质量会显著提高。我们收集了社区(即ShapeNet和Blender官方论坛)关于如何调整模型以尽量减少视觉瑕疵发生的智慧。转换过程通过脚本化的混合器修改器实现自动化,包括删除双重、禁用自动平滑、分割锐边,以及沿基本体的局部法线无限小地置换多边形网格的面。对于碰撞几何体,我们首先使用ManifoldPlus[41]将资源转换为无懈可击的网格,然后使用PyBullet[19]中包装的VAHCD[62]实现来计算3D对象的凸分解,其质量和惯性张量最终由trimesh[22]估计。

谷歌扫描对象(GSO)[77]。

是一个常见家用物体的数据集,已被3D扫描,用于机器人模拟和合成感知研究。它是根据CC-BY 4.0许可证授权的,包含≈ 1k高品质纹理网格;见图4。我们以Kubric格式发布该数据集的预处理版本,其中再次包含生成的碰撞网格。

Polyhaven[115]。是一个公共(CC0许可)图书馆,我们从中收集和预处理HDRI图像,用作背景和照明,以及用于高质量材料的纹理。

3.4. 场景理解数据集(SUND)

为了便于将数据吸收到机器学习模型中,我们与Kubric一起引入了SunDs(场景理解数据集)数据集前端2。SunDs是访问公共场景理解数据集的API。字段名和结构、形状、数据类型在不同的数据集中是标准化的。这样就可以轻松地在数据集之间切换(例如,从合成数据切换到真实数据)。所有SunDs数据集由两个子数据集组成:

•场景数据集包含高级场景元数据(例如,场景边界、整个场景的网格等)。

•帧数据集包含场景中的单个示例(例如,RGB图像、边界框等)。

SunDs抽象出特定于数据集的文件格式(json、npz、文件夹结构等),并返回可由机器学习模型(TF、Jax、Torch)直接摄取的张量。在内部,SunDs是TFD的包装器,可以扩展到大型数据集(≈ TB),以提供与分布式云文件系统(如GCS、S3)的本机兼容性,并利用tf。数据管道功能(预取、多线程、自动缓存、转换等)。

为了进一步简化数据摄取,SunDs在TFD的基础上引入了任务的概念。每个SunDs数据集可以为不同的任务加载。任务控制:

•使用/解码数据集的哪些功能。事实上,场景理解数据集通常有很多领域(激光雷达、光流等),但只有一小部分用于任何给定任务。选择要使用的字段可以避免解码不必要特征的成本。

•将哪种转换应用于管道。例如,NeRF任务将从数据集中包含的相机内部/外部动态生成光线原点/方向。

4.库布里克数据集和挑战

为了展示Kubric的威力和多功能性,我们接下来将描述一系列新的挑战问题,每个问题都有Kubric生成的数据3(见表2)。它们涵盖不同规模的2D和3D任务,数据集大小从MBs到TBs不等。每种方法都依赖于不同的注释子集(流动、分割、深度、相机姿势或对象姿势),使用不同的特征子集(例如物理或装配动画),并需要控制不同的因素(背景、材质或照明)。任何一个数据集都可能是由一个更简单、专用的代码库生成的,但这将是非常低效的。相反,凭借Kubric的多功能性,可以直接创建、扩展和组合数据集,利用一个公共平台和共享的工程工作。

这些不同的挑战也突显了合成数据的不同用途。有些方法用作比较现有方法和未来方法的基准,而另一些方法则为实际应用程序(sim-to-real)提供额外的训练数据。有些是为了经验性地测试特定的假设(例如,在测试中),而有些则侧重于可以在没有隐私和法律问题的情况下共享的数据。

我们在下面的章节中描述了13个挑战;i、 e.4.6)存在非静态场景结构时的Nerf重建;4.7)显著目标检测任务的新颖多视角版本;4.8)聚焦非朗伯曲面的三维重建基准;4.9)从单个图像重建3D网格的SOFTRAS的规模化和泛化研究;4.10)研究基于视频的三维网格重建对网格变形和不准确流动的鲁棒性;4.11)长期密集二维点跟踪任务,包括一种新的对比跟踪算法;4.12)大规模多视点语义场景理解基准;4.13)具有挑战性的新场景新颖视图合成数据集。

4.1. 从视频中发现对象

对象发现方法旨在将场景分解为其组成部分,并在最少的监督下找到对象实例分割模板。虽然Idio[36]、MONet[12]、GENESIS[28]和Slot Attention[59]等最新模型成功地分解了纹理均匀的简单场景,但分解具有高视觉复杂度和复杂动力学的动态场景(即视频)仍然很困难。这项挑战引入了五个多对象视频(MOVi)数据集,即MOVi-A到-E(见图5),它们增加了视觉和动态复杂性,旨在测试现有对象发现方法的局限性,从而实现向更真实和多样化的视觉场景的进展。

我们测试了两种最新的视频对象发现方法SAVi[50]和SIMONe[45],它们能够将视频分解为时间一致的对象分割模板(见表3)。SAVi在训练过程中使用光流,在仅分解运动对象的视频时表现更好,尤其是在视频的第一帧中接收到额外线索时。随着复杂度的增加,这两种方法的性能都会下降,但MOVi-D和-E中的静态对象除外,它们有时会被SIMONe部分捕获。这两种方法都不能可靠地分解所有五个数据集中的场景。

4.2. 光流

光流是指视频中从一帧像素到下一帧像素的二维运动。它是视频处理和分析的基础。与高级视觉任务不同,我们无法在普通现实世界视频上获得可靠的、基本真实的光流,即使有人类注释。光流实际上是计算机视觉中第一个依靠合成数据进行评估的子领域[7]。

最近的深部模型PWC net[90]、RAFT[92]和VCN[110]都依赖于合成数据进行预训练,比如FlyingChairs[26]。然而,FlyingChairs缺乏照片真实感,使用合成椅子作为唯一的前景对象,并且没有一般的3D运动。AutoFlow[89]学习渲染超参数以生成合成流数据集,与FlyingChairs[89]相比产生了巨大的性能增益。但AutoFlow采用简单的二维分层模型,在渲染时缺乏三维运动和真实感。我们的Kubric数据集解决了这些缺点,如图6所示。

我们使用相同的训练协议对不同数据集上的训练进行比较[88,89,92]。如表4所示,当使用手动选择的渲染超参数时,Kubric比FlyingChairs的结果要精确得多,这证明了使用3D渲染的好处。库布里奇在与AutoFlow的比赛中也表现出色。请注意,这不是一个苹果对苹果的比较,因为AutoFlow的超参数已被学习,以优化Sintel数据集的性能[89]。这些结果表明,学习Kubric的超参数可能会显著提高性能。

4.3. NeRF中的纹理结构

神经辐射场本质上是体积表示,但通常用于实体对象的表面建模。这些NeRF曲面模型是该模型试图满足多视图重建问题的结果:为了从多个视图一致地重建曲面细节,这些细节必须位于真实曲面周围的体积薄片中。请注意,并非所有曲面都会鼓励NeRF构建曲面模型。具有平坦颜色的表面仍可以重建为非实体体积。因此,根据NeRF方法在多大程度上根据纹理与实际表面保持一致,来对其进行基准测试,这是一个有趣的方面,至今尚未探索。

为了量化这一点,我们创建了包含平面的合成场景,这些平面的纹理是通过蓝色噪声程序生成的,具有不同的空间频率。我们用纹理的截止频率标注每个像素,并分析频率、深度方差和重建误差之间的相关性。然后我们用这些合成数据训练一个NeRF模型。如表5所示,我们发现频率的增加与较低的深度方差相关,这表明更好地逼近硬表面,同时也增加了重建误差,表明网络对复杂纹理的逼近能力较差。未来的体积多视图重建方法将如何处理这种模糊性并鼓励硬表面边界,这将是一个有趣的发现。

4.4. 姿态估计

基于姿势估计的交互体验(如Kinect)通常以人类姿势为特征,这些姿势在包含用户生成图片(如COCO[57])的大多数数据集中仍然没有得到充分的体现,因为适合图片的姿势呈现出明显的采样偏差。模拟数据可以用不太美观的姿势来补充真实数据,但这在现实生活中的人体运动中很常见。在这里,我们改进了MoveNet[98],这是一个基于CenterNet[119]的姿势推断CNN,通常在COCO[57]和Active[98]上进行训练(一个拥有更多不同姿势的专有数据集)。与Simpose[120]一样,训练批次将真实和合成数据与80/20%的混合物混合。与[120]不同,合成材料不提供额外的标签(例如,表面法线),但只提供更多不同的示例。如图8所示,样本中有41个装配好的渲染人员模型,放置在随机的室内场景中,背景元素和纹理来自BlenderKit和TextureHaven。人体姿势是从舞蹈和锻炼ActorCore动画中提取的。虽然非CC0资产的许可条款禁止发布数据,但数据集可以由相同网格和动画资产的任何所有者使用我们的开源软件重新生成。合成数据提高了关键点平均精度(见表6)、域内(在COCO和Active上)和域外(在瑜伽上,一组包含1000个示例的扭曲姿势测试集)。因此,合成数据现在在我们以人为中心的静止图像和视频训练程序中经常使用。

4.5. 预训练视觉表征

自从AlexNet[55]以来,计算机视觉的整个领域都从重新使用对大量数据进行预训练的“主干”中受益匪浅[25,52,54,76]。然而,最近的工作让人对继续使用由互联网上大量照片组成的数据集产生了怀疑[8112]。一种完全绕过基于web图像的数据缺点的潜在方法是使用渲染数据。最近,这显示了人脸识别的巨大成功[103],我们假设合成数据最终也可以取代网络图像,用于预训练一般计算机视觉主干。为了评估这种设置的前景,我们进行了一个小型试点实验。Kubric用于在透明背景上以各种随机姿势渲染ShapeNet对象。我们对ResNet-50进行预训练,从以各种方式将对象与随机背景图像组合的图像中预测对象的类别,如图9(上图)所示。然后,我们按照[52]中的协议,将这个预先训练好的模型转移到各种数据集。图9(下图)显示,这个简单的试点实验已经将ImageNet上随机预训练和预训练之间的差距缩小了一半,这表明这是一种很有前途的方法。

4.6. 健壮的NeRF

神经辐射场[66]或NeRF,通过最小化形式L(θ)=ErkI(r)的光度重建损失,通过体绘制训练静态3D场景的表示− Iθ(r)k22,其中r是与多摄像机系统的像素相对应的射线。这种损失的性质意味着,当场景在多个视图之间不是完全静态的时,恢复的表示被破坏;参见图11(中间)。这一挑战表明,要充分解决这一问题,还需要进一步的研究;见表7。在“传送”挑战中,虽然大部分场景保持僵硬,但我们在场景边界内随机添加了冒名顶替者非静态对象(即猴头),而在“抖动”挑战中,冒名顶替者位置围绕固定位置抖动。换句话说,这两个数据集评估了训练过程中非结构化(远程传输)与结构化(抖动)异常值的敏感性。图10展示了每个挑战的一些训练框架。如表7所示,非结构化异常值在一定程度上由NeRF-L1解决(−2.4 dB),结构化异常值更难克服。

4.7. 多视图对象抠图

显著目标检测(SOD)的目的是从背景中分割出图像中最显著的目标。

经典方法涉及活动轮廓[47,69]或graphcut[20,104]技术,但也存在人在回路[72,81,100]的技术,以及最近的深度学习变体[30,73,74,105,117]。有了人的反馈,交互方法通常是健壮的,但也很昂贵。自动分割,无论是传统方法还是深度网络,性能都较差。在这里,我们提出了一种新的SOD操作模式,这是一项非常困难的任务(参见图12),但有足够的信息供人类解决问题而不产生歧义。我们在这个数据集上比较了几种单视图最先进的SOD算法,并提出了两个复杂度更高的数据集。我们假设可以访问同一突出物体的多张图像(从不同角度拍摄),而不是一张图像。对于同一对象的多个视图,我们的理论是,自动SOD将更加健壮,因为多个图像隐含的3D结构提供了有助于消除目标对象边界歧义的信息。对于简单的挑战,场景中只包含一个显著的对象,而在困难的挑战中,我们额外插入杂波。所有目标对象都是从POLYHAVEN HDRIs[115]的ShapeNet Core V2背景中随机选择的。在困难挑战的情况下,杂波对象也会从ShapeNet Core V2中随机采样。我们为每个场景渲染10幅图像,并使用Kubric导出图像和分割遮罩。训练/测试集包含1000/100个场景,分别适用于简单场景和困难场景。

据我们所知,多视图SOD基线并不存在。因此,我们将最近的SOTA单视图SOD模型作为基线进行评估。我们首先在easy数据集上评估预训练模型,如表8所示。一些经过训练的模型(如U 2-Net)表现良好。接下来,我们在easy数据集上微调性能最好的预训练模型(U 2-Net和CPD)。尽管U 2-Net和CPD的性能很好,但支持多视图的SOD模型应该更强大,因为单视图SOD模型的失败案例(如图12)表明,缺乏3D理解往往是罪魁祸首。最后但并非最不重要的是,我们从头开始在easy数据集上训练U 2-Net和CPD,以获得额外的基线结果;见表8。我们在硬数据集上重复实验。在杂乱无章的情况下,任务变得更加困难。杂波通常被误认为是突出的物体,尤其是当物体距离很近时。同样,缺乏3D理解是模型性能相对较差的一个重要因素。我们假设,使用多个视图的模型将显著改善基线。

4.8. 复杂BRDF

考虑从很少的观测重建三维场景的核心视觉问题[ 68, 86, 87,114 ]。当前的数据集[48114]主要以朗伯场景为特征,即主要由漫反射曲面组成的场景,几乎没有镜面反射高光。在这种情况下,唯一相关的场景参数是3D几何体以及漫反射曲面颜色。当场景曲面高度反射时,精确的新视图合成所需的场景属性数量会显著增加。模型需要处理3D几何体、每个表面点的BRDF,以及入射到场景中的光的完整特征,而不仅仅是3D形状和外观。为此,我们呈现了一个高度镜面反射的ShapeNet数据集版本,作为对少数几种新颖视图合成算法的挑战。我们遵循Kato等人[48]的方法,从相同的24个视图中渲染13个类的对象。对于每个对象,我们随机分配一种RGB颜色。我们在上半球的随机位置放置三个光源。在本次挑战中,我们将每个对象的材质属性固定为镜面反射CLEVR的属性[44],并使用12次光线反弹对每个场景进行光线跟踪。我们在这个数据集上测试了最近提出的两个模型:光场网络[86],它通过360度光场参数化场景,以及PixelNeRF[114],一种条件三维结构化神经场景表示。为了使这些模型能够在测试时成功地训练和执行,它们需要正确地建模与视图相关的前向模型,并正确地推断光源的位置。我们发现,与朗伯形状相比,表9和镜面反射模型的性能都要差得多。在图13中,我们展示了现有方法如何努力在形状中表示固有的镜面反射。

4.9. 单视图重建

由于问题的不适定性,仅从二维图像监控重建对象(例如多边形网格)的显式三维表示具有挑战性。给定输入的2D图像及其关联的3D视点参数(即,包括观察对象的相机的方位角、距离和仰角),当前的方法(例如SOFTRAS[58])结合编码器首先从图像中提取潜在特征,然后结合解码器从编码的特征向量中提取3D顶点和面部连接性。接下来,可微分渲染器可以根据视点投影3D面,同时考虑与视图相关的遮挡约束。为了训练这种基于光栅化的可微渲染模型,可以根据该投影(即渲染)输出和对象轮廓图像与真值视点之间的差异来制定损失函数。一个常见的损失函数是基于投影图像和真值图像之间的软IoU损失。值得注意的是,整个优化不再依赖于对显式3D对象参数化的任何直接3D监控,只需要视点标签,并且这些标签可以通过负责生成2D监控图像的源摄像头轻松确定。

我们在整个SHAPENET CoreV2数据集上训练SOFTRAS[58]模型,而不是SHAPENET的常用子集,该子集只有13个类别,这是该领域已发表作品的典型特征[48,58,109]。完整的ShapeNet CoreV2由55个类别组成,共有约51300个对象模型。我们利用Kubric的能力自动处理这些对象模型,并将每个对象模型投影到24个随机视点,同时保持一致的元信息(相机姿势和对象类别),使我们能够高效地训练软件。我们在两个实验装置上对SoftRas进行了训练:“分布中”,为此我们遵循[58]的训练方案,对每个类别的80%进行训练,并对每个类别剩余的20%进行测试和报告性能,以及“分布外”,在“分布外”中,我们对所有类别进行训练,但不包括4个需要测试的类别。它们是火车、水塔、洗衣机和容器。图14和图15总结了我们关于“分布中”的结果,说明我们在枕头和碗上的表现最好(IoU 0.75和0.72),在麦克风和耳机上的表现最差(IoU 0.34)。对于“分布外”,测试类的结果与图14中报告的结果接近,这表明SoftRas可以推广到新类,但其局限性在于从耳机等复杂形状的类重建图像。我们观察到,这个经过处理的数据集使我们能够训练一个软件,该软件能够重建比Liu等人的原始工作范围更广的对象。[58]但某些类的性能很差,这有望激发对更强大的2D到3D重建方法的进一步研究。4.10. 基于视频的重建

正如第9.4节所讨论的,单镜头重建的性质非常具有挑战性。为了更好地监督曲面重建,视频数据的广泛可用性为图像提供了一个有吸引力的替代方案。视频序列的多帧一致性施加了额外的约束。然而,由于大多数三维场景不是静态的,许多有趣的现实世界对象也不是刚性的,因此基于视频的曲面重建方法对变形的鲁棒性提出了新的挑战。LASR[111]提出了一种管道,该管道可以从单目视频中联合恢复物体表面网格、关节和相机参数,而无需使用特定类别的形状模板。该方法首先使用现成的网络生成主要对象的遮罩(轮廓)和每个帧的光流。然后,通过利用SOFTRAS[58],

LASR通过最小化每个帧的输入和重新渲染的彩色图像、轮廓和光流之间的差异,联合优化对象的静止形状、关节、蒙皮权重和相机参数。

在本次挑战中,我们首先利用Kubric生成刚性(ShapeNet资产)和非刚性4对象的视频,以评估LASR的总体性能。如图16所示,LASR可以很好地将网格与输入视图相匹配,但无法外推到看不见的视图。由于光流损耗已被证明是至关重要的,而且地面真值流永远无法从实际数据中获得,我们还评估了LASR在多大程度上依赖于流量估计的准确性。我们分别使用Kubric提供的估计光流或地面真值来训练LASR,并比较重建结果;见表10。正如预期的那样,使用真值光流进行训练可以提高性能,尽管这种改进是微不足道的。与许多其他基于网格的可微渲染器一样,LASR的另一个基本限制是,它假设一个固定的网格拓扑,因此无法处理拓扑变化。在图16中,我们展示了一个LASR无法重建非零属形状(即圆环)的示例,强调了需要进行更多研究,以获得更稳健的方法。

4.11. 点跟踪

光流的概念可以很容易地扩展到长期跟踪,遵循跟踪任意点的方法[3]。也就是说,给定场景中曲面上的视频和目标点(在2D中指定),目标是输出该点在其他视频帧中出现的2D位置。这种运动推理有很多应用,从三维曲面重建到对重心和弹性等物理特性的推理,再到交互式代理的长片段对象记忆。光流在许多这样的领域是不够的,因为它不能处理遮挡,帧对上的小误差可能会导致漂移,随着时间的推移会导致大误差。通过识别3D对象上的一个点,然后在整个场景中投影该点,可以直接从Kubric获得长期轨迹。这个问题的大规模训练数据集对于人类来说很难注释,因此合成数据可以在实现良好性能方面发挥关键作用。

给定一个视频,注释由一组轨迹组成,即一组2D点

韵律学。

我们使用三个建议的指标来跟踪任何点[3]。第一种方法忽略输出位置,通过简单的分类精度单独评估遮挡估计,该分类精度为每帧上的每个点赋予相等的权重。第二个指标仅评估跟踪精度。在真值中被标记为遮挡的帧将被忽略。对于其余部分,我们报告了几个不同阈值的PCK风格[2]精度。也就是说,对于给定的阈值α,它是像素的距离,我们考虑一个点是否正确。

我们的最终指标结合了分类准确度和检测准确度,并受到了目标跟踪文献[60]中Jaccard风格指标的启发。

设T pα为真正的集合:即,所有可见的地面真点(Xi,t,yI,t),其中(席席,t,y i,t)被预测为未遮挡,空间预测在α的距离内。设Fnα为假阴性:预测将被遮挡的可见地面真值点,或预测的空间位置距离地面真值α更远。设F pα为假阳性:预测为可见的点(席,t,y,i,t),其中地面实况远大于距离α或地面损坏被遮挡的地方。Jaccard度量则为| tpα|/(| tpα|+| fnα|+| fpα|)。在实践中,我们在5个不同的阈值上计算这些度量,其形式为α=δx像素,对于x∈ {0,1,2,3,4}和δ=2。我们通过计算阈值的平均值来得到一个总体指标

基线。

接下来,我们定义一种基线方法,可以开始解决点跟踪问题。文献中最接近的问题之一是使用DAVIS[70]等数据集进行分段跟踪。因此,我们的基线是受VFS[108]的启发,VFS[108]是戴维斯的最先进方法。VFS有两个关键组成部分:第一,自我监督训练阶段,目标是学习图像中点之间的良好相似性度量;第二,基于早期工作[101]的测试时间跟踪算法,该算法可以将未标记帧中的点与标记帧中的点相关联。然而,我们的模型经过修改,以处理点而不是段,并利用我们现有的标记训练数据。对于预训练,我们采用对比法[39]。我们使用标准的ResNet-50[38]作为主干,直到最后的卷积,最后两个块的跨距为1,这为我们提供了跨距为8的每一帧的特征网格Fi(在通道轴上是L2归一化的)。给定一个查询点∗ , Y∗ , T∗ ) (注意:当我们考虑一个点时,我们将I指数降到清晰程度),我们首先提取特征F。∗ 对于该点,通过位置(x)处的双线性插值∗/8,y∗/8) 从帧t的特征网格∗ . 然后,我们计算以下对比损失函数:其中,F的时空维度上的j和k指数。温度超参数τ设置为0.1。γj是监督的来源:如果fj与f一致,则其值较高∗ , 如果不是,则为0。注意,如果有另外一个点被认为与f“对应”∗ , 那么k上的和只有一个项,剩下一个标准的对比损失。然而,在我们的例子中,我们有多个潜在的对应关系,这种损失促使所有这些对应关系都有大致相同的高点积。

我们通过双线性插值计算γj。说

特征fj位于卷积特征网格内x、y位置的t帧上,地面真值位置位于(xt/8、yt/8)(在特征网格的坐标框架内)。如果(xt/8,yt/8)位于其中一个角位于x〜j,y〜j的网格单元内,那么我们设置γj=(1)− |xk− xt/8 |)∗ (1 − |yk− yt/8 |)。否则为0。如果在测试时,给定一个查询点(x),则对于帧t,地面真值被标记为闭塞,则γj也被设置为0∗ , Y∗ , T∗ ), 我们首先计算每一帧的对应关系。对于时间t的单个帧,这是通过f和f之间的点积完成的∗ (再次通过双线性插值提取)和帧t中的每个特征,然后是空间上的softmax S,这为我们提供了可能位置的热图,即Sxy是x,y对应于(x)的概率∗ , Y∗ , T∗ ). 然后,我们通过找到S的argmax并将距离它超过40像素(5个网格单位)的任何网格单元归零来计算S,以抑制潜在的多模对应。然后我们计算潜在位置的加权平均值[ˆx,yˆ]=px,y[x,y]∗ S~xy/px,y S~xy。为了区分该点是否被遮挡,我们使用循环一致性[99101]。也就是说,我们从第t帧中的点[ˆx,yˆ]提取一个新的特征ˆf,并反转该过程,在第t帧中的位置上计算softmax∗ 并将其转换为点对应。如果估计点大于其起始位置的48个像素,我们认为它被遮挡。

我们以256×256的分辨率在MOVi-E上评估了这个过程。对于每个评估视频,我们在所有帧中随机采样256个查询点。我们尝试从每个对象以及背景中采样相同数量的点,但将每个对象的采样数量限制为可见像素的最大0.2%。我们使用标准的数据增强,包括图像的随机裁剪,小到图像面积的30%,纵横比在2:1和1:2之间,以及用于光流实验的相同颜色增强和像素噪声。

结果如表11所示。

为了进行比较,我们还提供了一个naıve基线,它假设没有运动和遮挡,这是在不参考像素的情况下可以实现的最好方法。我们发现,对比方法在粗跟踪方面相当出色,将最大阈值上的错误率从25.2%降至5.8%,比原始基线减少了6倍多。然而,对于更精确的跟踪,误差的减少并没有那么大。另一方面,这种方法检测遮挡的准确性很差;对于我们用于循环一致性的阈值(48),准确度实际上比偶然性差。然而,循环一致性检查失败的点实际上不太可能在任何距离阈值内;因此,我们发现从输出中删除这些点可以提高平均Jaccard度量。由于网络是根据来自同一分布的数据进行训练和评估的,因此该算法有可能会记住训练数据的某些方面,例如对象跟随的公共轨迹。为了评估分布外传输,我们还将我们的算法应用于垂直翻转的视频,结果如表12所示。这对性能的影响约为4%,表明网络在较小程度上记住了轨迹。最后,图17显示了kubric验证视频上我们的点跟踪算法的定性示例。我们看到,对于运动相对较小的简单点,如蓝星或青色圆,即使纹理相对较少,算法也相当准确。跟踪也适用于具有合理独特纹理的点,如绿色正方形。遮挡有时也会被正确检测到:对于红色X,该算法正确地确定了第11帧上的遮挡,尽管它过早地在第15帧上再次找到该点。然而,也有明显的失败:例如,算法丢失了洋红+,可能是因为对象旋转太多,以至于外观发生了实质性的变化。这表明,使用关于物体方向的全局推理,而不是仅仅依靠外观,可能是有用的。当点被遮挡时,我们还看到第7帧上的菱形有很大的误差;该算法将点放在遮挡器对象之间,可能是因为特征描述符过于依赖上下文。这一结果表明,同时捕获全局对象运动,同时保持对遮挡的鲁棒性,将是该数据集向前发展的一个重大挑战。

4.12. 场景语义分割

作为另一个用例,我们考虑了比较2D和3D语义分割模型的任务。由于这些方法在根本不同的基质上运行,因此很难量化一种方法与另一种方法的有效性。为此,我们构建了三个二维图像和三维点云直接对应的合成数据集:KLEVR、ToyBox5和ToyBox13。每个ToyBox数据集由525个场景组成。每个场景在平面上包含4-12个直立的ShapeNet对象,其中有382个随机选择的HDRI背景。这些数据集只在所使用的ShapeNet对象集上有所不同。在ToyBox5中,我们使用前5个最常见的对象类别;在ToyBox13中,13个最常见的对象类别。对于每个场景,我们选择300个相机姿势,每个姿势渲染3个图像:RGB图、分割图和深度图。有了相机参数的知识,我们就能够构造一个相机光线r(t)=o+td,对应于数据集中的每个像素。当结合深度和分割图时,我们得到一个标记的3D点云,其中每个3D点对应一个相机像素。我们将场景的点云定义为由所有摄影机姿势构造的所有3D点的并集。KLEVR数据集的构造与ToyBox数据集相同,只是有一个固定的中性灰色背景和5个柏拉图式的对象形状。

实验。

我们展示了二维图像和三维点云分割的两个代表性基线:DeepLab[15]和SparseConvNet[35]。此外,我们将这些方法与NeSF[97]进行了比较,NeSF[97]是一种从摆姿势的RGB图像中进行密集2D和3D场景分割的方法。我们对所有方法进行语义监控训练,从500个场景中的每个场景中提取9个摄像头,并从剩余的25个场景中拿出4个摄像头进行评估。在2D中,我们看到NeSF和DeepLab的表现类似,DeepLab的表现优于NeSF 0.3%至6.6%(表13)。在定性结果中,我们发现DeepLab的预测更紧密地勾勒出了对象,而牺牲了多视图的一致性。在3D中,随着数据集复杂性的增加,SparseConvNet比NeSF在联合上实现的平均交集高出1.9%到23.1%,且具有更大的边距。我们将此归因于SparseConvNet以密集点云的形式访问真值3D几何体和监督。这将导致3D几何图形的高度密集和精确表示。另一方面,NeSF必须仅从摆姿势的2D图像推断3D几何和语义。[97]中给出了进一步的结果以及与NeSF的比较。

4.13. 条件新视点合成

像[66]这样的神经场景表示已经在现实世界数据集上的新视图合成任务中产生了最先进的结果[63],然而,必须在每个新场景上训练一个新模型,这不允许模型在数据集上学习先验知识。之前的工作通常使用ShapeNet数据集[14]来评估一种方法在多大程度上可以推广到新场景[86114]。然而,ShapeNet由标准化的面向对象组成,对于某些类别(例如飞机),它们有数千个相同的类示例,并使用平面着色进行渲染。我们引入了一个新的大规模数据集,使用Kubric生成具有ShapeNet对象组的照片逼真场景。100万个场景中的每一个都使用382张随机选择的背景地图中的一张。我们为每个场景渲染十个128×128随机视图,并使用五个作为条件视图,另外五个作为目标视图。任务是在给定条件化视图的情况下重建目标视图。我们比较了以下最新的方法:PixelNeRF[114],它将点投影到条件视图中以插值编码的图像特征;LFN[86],它将场景压缩为单个潜在代码,并使用超网络将其解码为隐式场景表示,产生场景特定MLP的权重;以及SRT[82],它通过transformer编码器-解码器架构学习可规模化的潜在场景集表示。图19将这些方法与我们的新挑战进行了比较。尽管上述所有方法都能在ShapeNet上产生相当高质量的结果(参见[82]),但它们的规模化比例与我们的照片级真实感复杂数据集大不相同:虽然PixelNeRF在处理远离条件化视图的视图时有明显的困难,但LFN根本无法规模化到这种复杂性,SRT的重建也会变得模糊。[82]中提供了有关这一挑战和数据集发布的更多详细信息。

5.结论

我们将介绍Kubric,这是一个通用Python框架,包括用于大规模生成的工具、集成来自多个源的资产、丰富的注释和用于将数据直接移植到训练管道的通用导出数据格式(SunDS)。Kubric能够生成高质量的合成数据,解决自然图像数据管理中固有的许多问题,并避免构建特定任务的一次性管道的费用。我们在11个案例研究中展示了我们的框架的有效性,其中生成的数据集对于一系列不同的视觉任务具有不同的复杂性。在每种情况下,Kubric都大大减少了生成所需数据的工程工作,并促进了重用和协作。我们希望它将通过降低生成高质量合成数据的障碍、减少碎片化、促进管道和数据集的共享来帮助社区。

局限性和未来的工作。

虽然Kubric已经非常有用,但它仍在开发中,还不支持Blender和Pybillet的许多功能。值得注意的例子包括雾或火等体积效果、柔体和布料模拟,以及景深和运动模糊等高级相机效果。我们还计划对更多来源的资产进行预处理和统一,包括ABC数据集[51]或亚马逊伯克利对象[17]。目前,Kubric需要大量的计算资源,因为它依赖于路径跟踪渲染器而不是光栅化渲染器。我们希望添加对光栅化后端的支持,允许用户在速度和渲染质量之间进行权衡。我们在补充材料的第6节中讨论了围绕我们的系统应用的潜在社会影响和道德影响。

6.社会影响和道德考虑

多样性的应用,可以利用我们的系统值得一个广泛的讨论其潜在的社会影响和伦理考虑时,应考虑应用它。作为一种通用工具,而不是针对应用程序的解决方案,Kubric有可能带来多种好处,也有因疏忽甚至恶意滥用而造成损害的风险。

社会影响。

合成数据集构建为系统工程师提供了在野外和与真人一起部署之前检测和纠正潜在危险故障模式的机会,尤其是对于那些涉及人机交互的应用,例如自动驾驶汽车和机器人。然而,这并不排除开发可能对人类造成严重伤害的系统的可能性;相反,它提出了考虑这种结果可能性的重要性。因此,我们敦促Kubric用户工作的系统部署在实验室外,采取积极措施,以减轻这种风险,并认为他们在设计过程的最前沿。尽管如此,利用合成数据集构建作为一种工具来帮助预防有害后果的潜在价值仍有待进一步探索。

道德考虑。

虽然Kubric的数据集生成依赖于人为驱动的设计自动化,但它回避了对人工衍生数据的迫切需求。这有助于避免研究中的道德问题和法律障碍,也可以成为研究和缓解不良社会偏见的有力工具。尽管如此,任何人在回路半自动化流程都容易受到设计师偏见的影响。虽然更明确控制的数据集设计方法允许工程师推迟因处理从现实世界捕获的数据而引起的(重要)隐私问题的复杂性,但有人可以合理地认为,这样的好处被数据集合成过程中引入的偏见抵消了——至少部分抵消了。事实上,任何明确构建的合成数据集都很容易继承构建过程中使用的偏差——但我们认为,它在设计过程的早期阶段和更大程度的可控性上促进了讨论和(希望)偏差的缓解。然后,合成数据和真实数据之间的分布差异的潜在下游影响将成为一个重要的额外问题,需要进行明确的评估和潜在的缓解/处理,以防止真实世界的偏见。

我们还注意到,虽然Kubric一方面提供了一种创建新数据集的有效方法,有助于避免被现有数据卡住或过度拟合,但另一方面,它也可能会使数据集的激增,以突出所选方法的优势。虽然所有数据集的创建都是如此,但希望通过实验和复制,就像模型体系结构一样,该领域将自行选择有用的数据集,对共同感兴趣的任务的不同模型进行公平、平衡的评估。

环境方面的考虑。

可控合成数据集的构建有助于促进基于控制的科学方法论:例如,可以明确地隔离和测试混杂因素,并允许在扩展到更大的问题之前构建更小的问题(即,只测试那些试图验证的行为),更一般的设置。这种策略有助于减少在大型数据集上重复训练大型模型的需要,从而降低研究项目的整体环境影响。然而,生成大型可控合成数据集的能力并非没有成本;例如,我们的光流数据集需要大约3年的CPU计算时间。因此,我们敦促研究人员注意训练和生成数据集的成本,并避免生成不必要的大型数据集。因此,设计能够以更节能的方式增加合成数据集的替代合成模型(例如,使用潜在空间动力学模型)是未来研究的一个重要方向。

提要

合成数据提供了研究人员和工程师考虑和面对偏见对他们的系统的影响,围绕危险故障模式的设计,以及所有在隐私保护设置的机会。这当然不排除任何最终系统中存在此类问题,因为利用这些机会的方式和程度应要求在设计和综合数据集的元评估期间承担额外的责任。

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

推荐阅读更多精彩内容