OVIS数据集代码解析

OVIS数据集代码解析
OVIS数据集格式整体和COCO类似 , 但是是以video的形式存储的 , 对应的解析代码见: 。
由于OVIS仅train提供了标注 , 因此 , 这里均以train进行说明 。
1.init函数
创建一些字典 , 包括、anns、cats、vids以及、 。
其中是原始标注数据 , 由json文件读取得到 。
这里对其进行详细说明
包括5个key:
‘’: ‘OVIS’,
‘url’: ‘’,
‘’: ‘1.0’,
‘year’: 2021,
‘’: ‘youku’,
‘’: ‘2021-01-01’
: 该视频中所有标注实例的信息 。这里和coco存在一定差异 。由于OVIS是一个视频数据集 , 这里的实例是针对视频进行描述的 。例如一个视频假设有500帧 , 某一个人物在这个视频中出现了 , 那么该人物就是一个实例 , 其在该视频中500帧图片中的实例id都是一致的 。这里的标注就是采用以上设置给出的 。
每个实例标注由一个字典表示 。每个字典有11个基本属性:

OVIS数据集代码解析

文章插图
: 该实例的bbox标注信息 , 每一帧都会给出对应的标注 。这里的标注以四元组 (x, y, h, w) 形式给出 , 其中 (x,y) 是左上角坐标 。areas: 该实例对应的bbox的面积 , 每一帧都给出 。: 该实例的遮挡情况 , 分为三类no ,以及 , 具体说明可参考原论文 。
其余字典(anns、cats、vids以及、)则是通过进行填充 。
2.
该函数主要是用于填充在init中创建的一些属性字典 。
for ann in self.dataset['annotations']:vidToAnns[ann['video_id']].append(ann)anns[ann['id']] = ann
: key为视频的id , 而value则为一个列表 , 里面存储了视频id为key的所有实例信息 。
anns: key为实例的id , 而value即为该实例 。
for vid in self.dataset['videos']:vids[vid['id']] = vid
vids: key为视频id , 而value即为该视频信息 。
for cat in self.dataset['categories']:cats[cat['id']] = cat
cats: key为类别id , 而value即为该类别信息 。
for ann in self.dataset['annotations']:catToVids[ann['category_id']].append(ann['video_id'])
: key是类别id , 而value则为一个列表 , 里面存储了类别id为key的所有视频id 。
3. 一些常用函数的使用 3.1
def getAnnIds(self, vidIds=[], catIds=[], areaRng=[], iscrowd=None):"""Get ann ids that satisfy given filter conditions. default skips that filter:param vidIds(int array): get anns for given vidscatIds(int array): get anns for given catsareaRng (float array): get anns for given area range (e.g. [0 inf])iscrowd (boolean): get anns for given crowd label (False or True):return: ids (int array): integer array of ann ids"""
这个函数的作用在于在给定视频id列表、类别id列表、面积约束范围以及是否包括crowd实例的情况下 , 输出对应满足条件的ann id 。
【OVIS数据集代码解析】其大致逻辑是:
根据给定的视频id , 通过来获取所有的实例信息 。根据类别id、面积约束范围以及是否包含crowd实例来对得到的实例信息进行筛选 。最终返回所有实例对应的id 。3.2