PR2 数据集和 UM 数据集的使用

这两个数据集都是一个韩国团队搞出来的,用于跟踪的 RGB-D 数据集。数据集的主页在这里

这两个数据集很奇怪:没有任何说明文档,只带有一份 mat 例子。为了使用这个数据集,我们不得不自己写很多脚本。

我们的目标是,将这个数据集转换成 VOC 数据集的格式。

标签转换

这个数据集是做跟踪的用的,所以标签也是做跟踪的思路:每个人一个文件,只记录位置变化情况,即:时间、位置、时间、位置。然后我们可以通过插值,将这个人的移动轨迹标记出来。

我们拿到的文件,文件名都是绝对时间。我们拿到的标注,里面也都是绝对时间。那么,可以根据图片的时间,找到标注文件的对应的时间段,然后计算插值,将对应的框框标注出来。

由于 VOC 数据集使用 xml 格式的标注文件,我们还需要做一个数据转换。在这里,我直接写死了一些数据。

文件见这里

深度图的读取

作者提供的深度图也很奇怪:不是 Kinect 直接保存的 oni 文件,而是一个很奇怪的 dat 文件。

通过看 matlab 示例代码,发现它的格式其实很简单:几个标志位,几个大小说明,其他都是数据。

Python 读的话,可以自定义数据结构 dtype,然后使用 nummpy 来读取。读取之后,我们还需要做一些归一化操作,以及将一维图片转成三维等。

文件见这里

有一个思考: png 图片可以保存 4 个通道:RGB+A,那么为什么不直接将 D 通道存储到 A 通道里呢?反正一般来说 A 通道是用不到的。

RGB 文件和 Depth 文件

通过观察文件名,我知道了这个机器保存文件的原理:

  1. 保存 RGB 文件,文件名是当前绝对时间
  2. 保存 Depth 文件,文件名是当前绝对时间
  3. 循环

所以!看出来了么?它不是 “同一时刻” 保存的 RGB 和 Depth。文件时间有一个小小的差值。

So,我们需要想办法消除这个差值,以便我们切换 RGB 图和 Depth 图而不用改动已有的标注。

我使用一个简单粗暴的办法:将 RGB 的时间作为参考,Depth 的时间离谁近就取谁。

代码在这里

果不其然出现了预料到的问题:多个 Depth 文件映射到了同一个 RGB 文件上,出现频率在 5% 左右。只能说 “还行吧”,需要手工处理的不是特别多。

所有代码

参考资料

A General Framework for Tracking Multiple People from a Moving Camera

发表评论

电子邮件地址不会被公开。 必填项已用*标注