Spaces:
Running
on
Zero
Running
on
Zero
from .ReVOS_Dataset import VideoReVOSDataset | |
import json | |
import pickle | |
class VideoRefYoutubeVOSDataset(VideoReVOSDataset): | |
def json_file_preprocess(self, expression_file, mask_file): | |
# prepare expression annotation files | |
with open(expression_file, 'r') as f: | |
expression_datas = json.load(f)['videos'] | |
metas = [] | |
anno_count = 0 # serve as anno_id | |
vid2metaid = {} | |
for vid_name in expression_datas: | |
vid_express_data = expression_datas[vid_name] | |
vid_frames = sorted(vid_express_data['frames']) | |
vid_len = len(vid_frames) | |
exp_id_list = sorted(list(vid_express_data['expressions'].keys())) | |
for exp_id in exp_id_list: | |
exp_dict = vid_express_data['expressions'][exp_id] | |
meta = {} | |
meta['video'] = vid_name | |
meta['exp'] = exp_dict['exp'] # str | |
meta['mask_anno_id'] = [str(anno_count), ] | |
if 'obj_id' in exp_dict.keys(): | |
meta['obj_id'] = exp_dict['obj_id'] | |
else: | |
meta['obj_id'] = [0, ] # Ref-Youtube-VOS only has one object per expression | |
meta['anno_id'] = [str(anno_count), ] | |
anno_count += 1 | |
meta['frames'] = vid_frames | |
meta['exp_id'] = exp_id | |
meta['length'] = vid_len | |
metas.append(meta) | |
if vid_name not in vid2metaid.keys(): | |
vid2metaid[vid_name] = [] | |
vid2metaid[vid_name].append(len(metas) - 1) | |
# process mask annotation files | |
with open(mask_file, 'rb') as f: | |
mask_dict = pickle.load(f) | |
return vid2metaid, metas, mask_dict | |