SyDog-Video: A Synthetic Dog Video Dataset for Temporal Pose Estimation
SyDog-Video:用于时间姿态估计的合成狗视频数据集
Moira Shooter, Charles Malleson, Adrian Hilton
摘要
我们的目标是使用时间深度学习模型从视频中估计狗的姿态,因为当出现临时遮挡或大幅度运动时,这可以得出更准确的姿态预测。一般来说,深度学习模型需要大量数据才能表现良好。据我们所知,目前不存在包含狗视频的公共姿态数据集。为了解决这个问题,并避免手动标记视频,这可能需要很多时间,我们使用Unity3D生成了一个包含500个视频的合成数据集,狗在其中执行不同的动作。通过随机化照明、背景、相机参数以及狗的外形和姿态等参数来实现多样性。我们通过评估模型对真实数据的泛化能力来评估我们合成数据集的质量。通常,训练在合成数据上的网络在评估真实数据时表现不佳,这是由于领域差距造成的。尽管在提高合成数据集的质量并引入多样性后仍然存在领域差距,我们通过应用两种不同的方法来弥合领域差距:微调和使用混合数据集训练网络。此外,我们将在合成数据上预训练的模型与在现实世界动物姿态数据集上预训练的模型进行比较。我们证明,使用合成数据集对于训练具有(小)现实世界数据集的模型是有益的。此外,我们展示了使用合成数据集预训练模型是解决狗视频姿态估计任务的首选,而不是预训练在现实世界数据集上。
关键词
动物姿态估计 · 合成数据 · 领域适应 · 时间 · 深度学习
1 引言
全球有33%的家庭拥有狗,这使得它成为人类最好的朋友。通常,狗主人希望他们的狗有良好的福利。他们希望确保他们的狗有合适的环境、饮食、与其他动物互动的能力、展示正常行为模式的能力以及免受疼痛、痛苦、伤害和疾病的保护。为了解决最后两个需求,量化犬类运动和步态对于诊断跛行等健康状况至关重要。传统上,使用基于标记的运动捕捉系统来评估犬类的步态,然而,由于多年来在人类和动物深度学习姿态估计方法中取得了显著的积极成果,现在可以以无标记的方式估计动物的姿态。这不仅为兽医学开辟了应用,还为生态学、机器人学和娱乐业开辟了应用。除了Liu等人和Russello等人的工作外,许多以前的动物姿态估计方法都是单独处理视频帧,而不是以端到端的方式处理帧序列。这些方法忽略了宝贵的时间上下文,这可能导致在大幅度帧间运动和临时遮挡的情况下姿态估计不准确。使用时间模型可以从野外动物的视频(例如奔跑和与环境及其他动物互动)中产生更准确的姿态估计。深度学习方法需要大量数据才能表现和泛化良好。虽然来自相机陷阱的动物数据总量正在迅速增加,但仍缺乏动物姿态数据集,据我们所知,没有包含带有注释姿态的狗视频的数据集。StanfordExtra是唯一大规模公开可用的包含狗的单独图像的数据集。通常,为了创建姿态数据集,需要人类手动标记许多视频帧上的解剖特征,例如骨架关节。这可能既费时又昂贵,并且容易出现错误;特别是当创建包含狗的数据集时,因为狗的品种之间有很多变化。因此,为了使模型能够估计不同品种的姿态,需要一个具有很多变化的大型数据集。为了解决对大型数据集的需求,一些先前的方法使用合成数据作为训练数据,因为它具有产生无限多样化数据和准确标签的优势。在本文中,我们使用时间模型估计野外狗视频中的姿态。由于缺乏狗视频姿态数据集,我们通过扩展SyDog的工作生成了一个合成数据集。我们生成了一个包含500个不同狗执行不同动作的合成数据集,标记有2D关键点坐标、边界框坐标和分割图。我们使用一个小型真实世界数据集评估了姿态估计模型,我们称之为Dogio-11,这是为了这项工作而制作的。深度学习模型训练在合成数据上通常在评估真实数据时表现不佳;这是由于领域差距。为了弥合差距,我们首先尝试提高合成数据的质量。然而,在真实数据上评估时,我们证明了领域差距仍然存在,因此我们应用了两种不同的迁移学习方法。贡献的总结是:(i) 生成了一个大规模合成数据集,包含500个狗执行不同动作的视频,标记有2D真实标注,包括边界框坐标、关键点坐标和分割图。(ii) 我们证明,预先训练模型对于能够训练小型视频数据集至关重要。此外,我们表明,在合成数据上预先训练的模型比在大型现实世界数据集上预先训练的模型表现更好。代码和数据集将在出版后提供。
2 相关工作
许多研究已经研究了使用合成数据作为训练数据的原因。在创建数据集时,需要意识到版权问题,当涉及到人类时,还有隐私问题。此外,手动创建数据集可能导致有偏见的数据集,并且可能耗时、昂贵,并且可能有更多不准确的注释。
2.1 合成数据
由于深度学习方法需要大量数据,因此对生成和使用合成数据作为训练数据的兴趣开始增长。合成数据已经被用于许多计算机视觉任务,如估计光流、目标检测、语义和实例分割、姿态估计等。使用不同的方法生成计算机视觉合成数据集,例如将3D资产粘贴到真实背景上,无论是以现实还是不现实的方式。其他方法重新使用了来自游戏的3D环境/资产,例如由3D艺术家制作的GTA V。这启发了其他工作使用游戏引擎如Unity 3D和Unreal Engine创建合成数据集。
2.2 使用合成数据训练
虽然生成合成数据有其好处,但将其作为训练数据使用可能会带来复杂性,特别是当涉及到高级计算机视觉任务时。通常,当模型在合成数据上训练并在真实数据上评估时,模型表现不佳,无法泛化到真实数据。这被称为领域差距,这是由于合成和真实数据分布不同造成的。以前的工作试图使用领域随机化来弥合差距,通过在模拟器中随机化参数,为模型引入足够的多样性,以便在评估时将领域外的数据集视为另一种变化。其他方法提出使用生成对抗网络(GANs)来改进合成数据的质量。然而,尽管这可能提高了数据的质量,但可能并没有提高模型的性能。因此,其他方法提出对网络的特征或网络本身应用领域适应。
3 数据和方法
在这一部分中,我们讨论了我们如何获取真实世界数据集(第3.1节),生成合成数据集(第3.2节),以及数据集是如何根据不同的评估进行分割的。
3.1 数据获取
我们的方法在真实世界数据上进行了评估,这些数据来自Pexels和Youtube-8M数据集。我们获得了14个视频,采样率为25-30fps,并修剪到5-6秒。视频包含不同类型的狗品种,背景在照明和相机视点上有所不同。视频被注释了与合成数据集中标记的相同33个身体部位的关键点。我们使用cocoannotator来注释我们的数据。我们尝试标记所有33个关键点。然而,当存在不确定性时,我们将关键点设置为不可见,并没有注释它。
3.2 数据生成
我们的工作是SyDog的扩展,然而我们修改了生成器以合成帧序列而不是单独的帧。此外,我们通过在3D模型上添加毛发并使用高动态范围图像(HDRIs)将模型集成到背景中来提高合成数据的质量。
3.2.1 渲染
我们使用游戏引擎Unity3D生成合成视频,并利用Unity Perception包。Perception包可以快速准确地生成标记数据,并轻松应用领域随机化。在装有2.60 GHz 6-Core Intel Corei7、NVIDIA GeForce RTX 2070(Max-Q Design)的Windows 10机器上,我们在大约45分钟内生成了17,500帧,标记有2D边界框、33个关键点标签和分割图。这个时间包括将数据写入磁盘的时间。Perception包使我们能够随机化相机等参数。相机被放置在狗周围的不同点,面向狗的身体。焦距和光圈被变化以模拟不同的相机和镜头。此外,相机的偏航角也被随机化。为了照亮场景,我们使用了一个定向光、2个点光源,并像Wood等人一样,利用基于图像的照明和HDRIs来照亮3D狗模型并为我们提供背景。我们通过随机化一天中的小时数、一年中的天数和光的纬度来随机化定向光的角度。此外,我们还随机化了光的强度和色温。我们建议读者查看表11以获取更多详细信息。对于每个视频,我们从503个HDRIs的集合中随机采样。我们将HDRIs分为训练和测试集。
3.2.2 狗的外观
我们使用了5种不同大小的3D狗模型(图1)。为了使模型能够与本工作中使用的AI4Animation项目正常工作,模型需要与原始项目中附带的默认狗具有相同的比例和形状。3D艺术家以逼真的方式手绘了狗的大部分纹理(图2)。在最终数据集中,每个3D模型有10种不同的纹理可供采样。除了手绘纹理外,我们还使用FluffyGroomingTool为模型添加了毛发。该工具内置了重力、风、物理和碰撞器。然而,为了使毛发工具与Perception包一起工作,我们必须将基于卡片的毛发转换为3D网格。不幸的是,这意味着我们不能利用重力、风、物理或碰撞器。最初,3D模型是使用AI4 Animation项目动画的,可以通过手动按键盘键(如WASD键)执行5种不同的动画——行走、奔跑、跳跃、坐下和躺下。我们实现了一个Perception Package Randomizer来自动执行动画。通过控制随机器的种子,可以使动画变得可重复。
3.2.3 场景背景
如第3.2.1节所述,我们使用HDRIs作为背景。最初,我们生成了一个背景清晰的数据集,但我们决定还生成4个带有不同干扰物/遮挡物(第5.6节)的合成数据集。我们使用的干扰物是来自PolyHaven的119个3D资产,包括道具、植物和工具。对于每个视频,这些3D资产在3D中被随机定位和旋转。此外,我们还从Adobe获取了3D人类资产,包括动画。这些人类资产被随机放置在场景的地面几何体上,围绕垂直轴旋转,并分配了随机动画,如行走、慢跑、打电话、呼吸、鼓掌或挥手。
3.2.4 领域随机化
我们依赖领域随机化,以使训练在合成数据上的估计模型泛化到真实数据。通过随机化毛发类型、光照条件和背景等参数,为合成数据增加了多样性。合成数据集中的所有参数都使用均匀分布。通常,对于单个图像的数据集,我们会在每一帧上随机化。但由于我们正在生成视频帧,模拟环境被设置为在每次迭代(视频)时而不是每一帧上随机化,因此我们在OnIterationStart()函数而不是OnUpdate()函数中实现了代码(图11)。
3.3 架构
我们使用了LSTM Pose Machine架构,最初是为人类姿态估计开发的,它基于卷积姿态机网络。作者将多阶段CNN转换为递归神经网络(RNN)。这允许在帧之间放置长短期记忆单元,从而使网络学习视频帧之间的时间依赖性,并及时捕捉关节的几何关系。
3.4 训练过程
我们使用PyTorch Lightning实现了我们的方法。我们扩展了Ma的代码。我们使用Nvidia GeForce RTX 2080 Ti GPU运行实验,并使用Tensorboard跟踪训练进度。对于所有实验,我们定义训练损失为均方误差损失(MSE)。我们希望找到在真实数据上训练模型的最佳模型,以便在训练合成数据和真实数据的模型之间进行公平比较。我们通过使用开源超参数优化框架Optuna搜索超参数空间来找到最佳模型。当使用合成数据集训练时,我们将模型的长度设置为5(即 T = 5),并将超参数设置为Luo等人中的参数,只是我们将批量大小设置为2而不是4。
4 实验和评估
4.1 实验
我们执行不同的实验来评估生成的合成数据的质量:
- 仅在真实数据上训练网络。
- 仅在合成数据上训练网络。
- 使用合成数据预训练网络,然后使用真实数据进行微调(微调)。
- 在合成数据和真实数据上训练网络(混合训练)。
此外,我们评估了使用合成数