- refe.py代码阅读(对图片数据和文本数据的预处理)
- 文本字典
- 处理得到图片和标签的字典
- 处理得到文本的字典(如上图)
图片部分与目标检测相同,生成字典(instances.json文件),文本部分(refcoco.p)生成文本的字典
文本字典refer对于文本的处理得到的文本的字典 (对应refcoco(unc).p来理解)字典的可视化
处理得到图片和标签的字典# fetch info from instances
# 利用的是instances.json这个文件的信息 主要是处理的图片的相关信息
Anns, Imgs, Cats, imgToAnns = {}, {}, {}, {}
# annotations 是一个很大的列表 包括全部图片的标签的信息 每个框的信息都有对应的图片的id 具体的坐标 分割的像素点的信息 对应图片的id 类别信息等
for ann in self.data['annotations']:
Anns[ann['id']] = ann # 建立anno的字典 可以通过anno的id来得到anno的信息(每一个框是一个信息
# .get()返回字典中关键字对应的词 imgToAnns中有ann['image_id'] 则直接返回信息 ,不然返回[]
imgToAnns[ann['image_id']] = imgToAnns.get(ann['image_id'], []) + [ann] # 可以通过图片的id得到图片上所有标签的信息
for img in self.data['images']: # 建立图片的字典 可以通过图片的id得到图片的网络地址和图片的宽高信息
Imgs[img['id']] = img
for cat in self.data['categories']:
Cats[cat['id']] = cat['name'] # 建立类别名称和类别id的字典
处理得到文本的字典(如上图)
# fetch info from refs
# 利用ref(unc)的信息
Refs, imgToRefs, refToAnn, annToRef, catToRefs = {}, {}, {}, {}, {}
Sents, sentToRef, sentToTokens = {}, {}, {}
for ref in self.data['refs']:
# ids
ref_id = ref['ref_id'] # 定位目标的id
ann_id = ref['ann_id'] # 定位目标的标签信息:像素点的分割 框的信息 类别
category_id = ref['category_id'] # 定位目标的类别
image_id = ref['image_id'] # 定位目标的图片ID
# add mapping related to ref
Refs[ref_id] = ref # 得到这个目标的所有信息 以字典的形式保存
imgToRefs[image_id] = imgToRefs.get(image_id, []) + [ref] # image_ID到定位目标的一个映射
catToRefs[category_id] = catToRefs.get(category_id, []) + [ref] # 类别ID到定位目标的映射 人这个标签-->所有定位目标是人的所有的信息
refToAnn[ref_id] = Anns[ann_id] # 定位目标到标签信息的映射
annToRef[ann_id] = ref # 标签ID到定位目标的映射
# add mapping of sent
for sent in ref['sentences']:
Sents[sent['sent_id']] = sent # 句子的字典
sentToRef[sent['sent_id']] = ref # 句子到定位目标信息的映射
sentToTokens[sent['sent_id']] = sent['tokens'] # 句子到分词的映射



