记录下 RelDN 数据集以及 输入、输出的一些键值对,方便之后查阅。
原文链接:Graphical Contrastive Losses for Scene Graph Parsing
代码:code
RelDN数据集
1 | RelDN |
其中,VG_100K存储的是VG数据集中的所有图片,detections_XXX.json存储的是图片的一些基本信息,rel_annotations_XXX.json存储的是每张图片中所有的relationship
detections_XXX.json
文件中包含3个key,分别是:
images
,annotations
,categories
images
为一个长为 num_images 的 list,输出data['images'][0]
的信息如下:1
{'file_name': '1.jpg', 'height': 600, 'width': 800, 'id': 1}
annotations
为一个长为 num_objs 的list,bbox的表示为[x1, y1, w, h],category_id
从1开始。输出data['annotations'][0]
的信息如下:1
{'area': 445043, 'bbox': [0, 0, 799, 557], 'category_id': 136, 'id': 1, 'image_id': 1, 'iscrowd': 0}
- area: bounding box 的面积
- bbox:bounding box 左上角的坐标和宽度及高度,[x1, y1, width, height]
- category_id:属于物体类别的id
- id:每个object都有id
- image_id:所在图片的id
categories
为物体类别,总共包含150类物体,输出data['categories'][0]
的信息如下:1
{'id': 1, 'name': 'airplane', 'supercategory': 'airplane'}
- supercategory: 中文直译应该是超类。因为该论文实验读取数据的接口是调用 COCO API的,所以把VG数据集存储成COCO数据集的格式。比如 category_id 为 apple,supercategory_id 应该为 fruit。但在该实验的数据集中,虽然设置了supercategory这个属性,但是 supercategory 和 category_name 都是一样的。
rel_annotations_XXX.json
文件存储的是每张图像的每个relationship(关系三元组),键值为每张图片的id。训练集总共包含 62723 张图片。bbox的表示为 [y1, y2, x1, x2],
category_id
从0开始。输出第一张的信息data['1.jpg']
的信息如下:1
[{'predicate': 48, 'subject': {'category': 77, 'bbox': [246, 507, 236, 295]}, 'object': {'category': 119, 'bbox': [487, 513, 240, 292]}}, …… , {'predicate': 49, 'subject': {'category': 21, 'bbox': [0, 538, 0, 222]}, 'object': {'category': 144, 'bbox': [0, 147, 600, 798]}}]
1
[{'predicate': 'concubine', 'sbj': {'category': '花袭人', 'bbox': ['89', '259', '267', '476']}, 'obj': {'category': '贾 宝玉', 'bbox': ['877', '121', '1067', '361']}}, {'predicate': 'husband', 'sbj': {'category': '贾宝玉', 'bbox': ['877', '121', '1067', '361']}, 'obj': {'category': '花袭人', 'bbox': ['89', '259', '267', '476']}}, {'predicate': 'employer', 'sbj': {'category': '贾宝玉', 'bbox': ['877', '121', '1067', '361']}, 'obj': {'category': '麝月', 'bbox': ['435', '301', '594', '510']}}, {'predicate': 'servant_girl', 'sbj': {'category': '麝月', 'bbox': ['435', '301', '594', '510']}, 'obj': {'category': '贾宝玉', 'bbox': ['877', '121', '1067', '361']}}]
RelDN 的输入
该论文的代码中,输入数据存储在 roidb 中,len(roidb) = 62723 * 2
(乘2是因为训练过程中会把bounding box 翻转,与原先的数据集一起输入)
roidb中每一个entry包含以下属性:(每一个entry即对应每一张图片)
- file_name : 图片的名字,如 “1.jpg”
- height:图片的高度
- width:图片的宽度
- id:图片的id号,如 1
- dataset:JsonDatasetRel 对象
- image:图片的绝对路径
- flipped:图片是否翻转,True or False
- has_visible_keypoints:False (没看懂是什么)
- boxes:bbox 左上角和右下角的坐标,[x1, y1, x2, y2]
- segms:[] (一个空的list,也没看懂是什么)
- gt_classes:object_category_id
- seg_areas:每个 bbox 的面积
- gt_overlaps:num_objs * num_objs_classes,如果第1个物体的类别为4,则[0, 3]为1,第1行其余列均为0
- is_crowd:
- box_to_gt_ind_map:
entry['box_to_gt_ind_map'][ix] = ix
- dataset_name:
- sbj_gt_boxes:关系三元组中主语的 GT Box,长度为 num_relationships * 4。bbox的表示为 [x1, y1, x2, y2]
- sbj_gt_classes:关系三元组中主语的类别,长度为 num_relationships
- sbj_gt_overlaps:长度为 num_relationships * num_obj_classes,如果第一个关系中主语为 airplane,则在[0, 0] 标1
- obj_gt_boxes:与sbj类似
- obj_gt_classes:与sbj类似
- obj_gt_overlaps:与sbj类似
- prd_gt_classes:关系三元组中谓词的类别,长度为 num_relationships
- prd_gt_overlaps:长度为 num_relationships * num_prd_classes
- pair_to_gt_ind_map:
entry['pair_to_gt_ind_map'][ix] = ix
- max_classes:
entry['max_classes'][0]
标识图像第1个物体的 class id - max_overlaps:
entry['max_overlaps'][0]
-> 第一个物体为 preground(1)、background(0)还是is_crowd(-1) - bbox_targets: