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