这两个数据集都是一个韩国团队搞出来的,用于跟踪的 RGB-D 数据集。数据集的主页在这里。
这两个数据集很奇怪:没有任何说明文档,只带有一份mat例子。为了使用这个数据集,我们不得不自己写很多脚本。
我们的目标是,将这个数据集转换成VOC数据集的格式。
标签转换
这个数据集是做跟踪的用的,所以标签也是做跟踪的思路:每个人一个文件,只记录位置变化情况,即:时间、位置、时间、位置。然后我们可以通过插值,将这个人的移动轨迹标记出来。
我们拿到的文件,文件名都是绝对时间。我们拿到的标注,里面也都是绝对时间。那么,可以根据图片的时间,找到标注文件的对应的时间段,然后计算插值,将对应的框框标注出来。
由于VOC数据集使用xml格式的标注文件,我们还需要做一个数据转换。在这里,我直接写死了一些数据。
文件见这里
深度图的读取
作者提供的深度图也很奇怪:不是Kinect直接保存的oni文件,而是一个很奇怪的dat文件。
通过看matlab示例代码,发现它的格式其实很简单:几个标志位,几个大小说明,其他都是数据。
Python读的话,可以自定义数据结构dtype,然后使用nummpy来读取。读取之后,我们还需要做一些归一化操作,以及将一维图片转成三维等。
文件见这里。
有一个思考: png图片可以保存4个通道:RGB+A,那么为什么不直接将D通道存储到A通道里呢?反正一般来说A通道是用不到的。
RGB文件和Depth文件
通过观察文件名,我知道了这个机器保存文件的原理:
- 保存RGB文件,文件名是当前绝对时间
- 保存Depth文件,文件名是当前绝对时间
- 循环
所以!看出来了么?它不是“同一时刻”保存的RGB和Depth。文件时间有一个小小的差值。
So,我们需要想办法消除这个差值,以便我们切换RGB图和Depth图而不用改动已有的标注。
我使用一个简单粗暴的办法:将RGB的时间作为参考,Depth的时间离谁近就取谁。
代码在这里。
果不其然出现了预料到的问题:多个Depth文件映射到了同一个RGB文件上,出现频率在5%左右。只能说“还行吧”,需要手工处理的不是特别多。
所有代码
参考资料
A General Framework for Tracking Multiple People from a Moving Camera
发表回复