示例#1
0
    def __init__(self, opt):
        super(VideoTestDataset, self).__init__()
        self.opt = opt
        self.cache_data = opt['cache_data']
        self.half_N_frames = opt['N_frames'] // 2
        self.GT_root, self.LQ_root = opt['dataroot_GT'], opt['dataroot_LQ']
        self.data_type = self.opt['data_type']
        self.data_info = {
            'path_LQ': [],
            'path_GT': [],
            'folder': [],
            'idx': [],
            'border': []
        }
        if self.data_type == 'lmdb':
            raise ValueError('No need to use LMDB during validation/test.')
        #### Generate data info and cache data
        self.imgs_LQ, self.imgs_GT = {}, {}
        if opt['name'].lower() in ['vid4', 'reds4']:
            if opt['name'].lower() == 'vid4':
                subfolders_LQ = sorted(glob.glob(self.LQ_root))
                subfolders_GT = sorted(glob.glob(self.GT_root))
            else:
                subfolders_LQ = util.glob_file_list(self.LQ_root)
                subfolders_GT = util.glob_file_list(self.GT_root)
            for subfolder_LQ, subfolder_GT in zip(subfolders_LQ,
                                                  subfolders_GT):
                subfolder_name = osp.basename(subfolder_GT)
                if subfolder_name in ['blur4', 'truth']:
                    subfolder_name = osp.basename(osp.dirname(subfolder_GT))
                img_paths_LQ = util.glob_file_list(subfolder_LQ)
                img_paths_GT = util.glob_file_list(subfolder_GT)
                max_idx = len(img_paths_LQ)
                assert max_idx == len(
                    img_paths_GT
                ), 'Different number of images in LQ and GT folders'
                self.data_info['path_LQ'].extend(img_paths_LQ)
                self.data_info['path_GT'].extend(img_paths_GT)
                self.data_info['folder'].extend([subfolder_name] * max_idx)
                for i in range(max_idx):
                    self.data_info['idx'].append('{}/{}'.format(i, max_idx))
                border_l = [0] * max_idx
                for i in range(self.half_N_frames):
                    border_l[i] = 1
                    border_l[max_idx - i - 1] = 1
                self.data_info['border'].extend(border_l)

                if self.cache_data:
                    self.imgs_LQ[subfolder_name] = util.read_img_seq(
                        img_paths_LQ)
                    self.imgs_GT[subfolder_name] = util.read_img_seq(
                        img_paths_GT)
        elif opt['name'].lower() in ['vimeo90k-test']:
            pass  # TODO
        else:
            raise ValueError(
                'Not support video test dataset. Support Vid4, REDS4 and Vimeo90k-Test.'
            )
示例#2
0
    def __init__(self, opt):
        super(AI4KTestdataset, self).__init__()
        self.opt = opt
        self.cache_data = opt['cache_data']
        self.half_N_frames = opt['N_frames'] // 2
        self.GT_root, self.LQ_root = opt['dataroot_GT'], opt['dataroot_LQ']
        self.data_type = self.opt['data_type']
        self.data_info = {
            'path_LQ': [],
            'path_GT': [],
            'folder': [],
            'idx': []
        }

        if self.cache_data == False:
            raise ValueError('Currently only support cache_data=True.')

        if self.data_type == 'lmdb':
            raise ValueError(
                'Currently not support LMDB during validation/test.')

        # scene change index dictionary, key example: XXXXXXXX, value example: [0, 10, 51, 100]
        if opt['scene_index']:
            self.scene_dict = pickle.load(open(opt['scene_index'], 'rb'))
        else:
            raise ValueError(
                'Need to supply scene change index dictionary by running [cache_keys.py]'
            )

        #### Generate data info and cache data
        self.imgs_LQ, self.imgs_GT = {}, {}
        subfolders_LQ = util.glob_file_list(self.LQ_root)
        subfolders_GT = util.glob_file_list(self.GT_root)
        for subfolder_LQ, subfolder_GT in zip(subfolders_LQ, subfolders_GT):
            subfolder_name = osp.basename(
                subfolder_GT)  # subfolders_name: XXXXXXXX
            img_paths_LQ = util.glob_file_list(subfolder_LQ)
            img_paths_GT = util.glob_file_list(subfolder_GT)
            max_idx = len(img_paths_LQ)
            assert len(img_paths_LQ) == len(
                img_paths_GT
            ), 'Different number of images in LQ and GT folders'
            self.data_info['path_LQ'].extend(img_paths_LQ)
            self.data_info['path_GT'].extend(img_paths_GT)
            self.data_info['folder'].extend([subfolder_name] * max_idx)
            for i in range(max_idx):
                self.data_info['idx'].append('{}/{}'.format(i, max_idx))

            if self.cache_data:
                self.imgs_LQ[subfolder_name] = util.read_img_seq(img_paths_LQ)
                self.imgs_GT[subfolder_name] = util.read_img_seq(img_paths_GT)
示例#3
0
    def __init__(self, opt):
        super(VideoSameSizeDataset, self).__init__()
        self.opt = opt
        self.cache_data = opt['cache_data']
        self.half_N_frames = opt['N_frames'] // 2
        self.GT_root, self.LQ_root = opt['dataroot_GT'], opt['dataroot_LQ']
        self.data_type = self.opt['data_type']
        self.data_info = {
            'path_LQ': [],
            'path_GT': [],
            'folder': [],
            'idx': [],
            'border': []
        }
        if self.data_type == 'lmdb':
            raise ValueError('No need to use LMDB during validation/test.')
        # Generate data info and cache data
        self.imgs_LQ, self.imgs_GT = {}, {}

        # read data:
        subfolders_LQ = util.glob_file_list(self.LQ_root)
        subfolders_GT = util.glob_file_list(self.GT_root)
        for subfolder_LQ, subfolder_GT in zip(subfolders_LQ, subfolders_GT):
            # for frames in each video:
            subfolder_name = osp.basename(subfolder_GT)
            img_paths_LQ = util.glob_file_list(subfolder_LQ)
            img_paths_GT = util.glob_file_list(subfolder_GT)
            max_idx = len(img_paths_LQ)
            assert max_idx == len(
                img_paths_GT
            ), 'Different number of images in LQ and GT folders'
            self.data_info['path_LQ'].extend(
                img_paths_LQ)  # list of path str of images
            self.data_info['path_GT'].extend(img_paths_GT)
            self.data_info['folder'].extend([subfolder_name] * max_idx)
            for i in range(max_idx):
                self.data_info['idx'].append('{}/{}'.format(i, max_idx))

            border_l = [0] * max_idx
            for i in range(self.half_N_frames):
                border_l[i] = 1
                border_l[max_idx - i - 1] = 1
            self.data_info['border'].extend(border_l)

            if self.cache_data:
                self.imgs_LQ[subfolder_name] = util.read_img_seq(img_paths_LQ)
                self.imgs_GT[subfolder_name] = util.read_img_seq(img_paths_GT)
示例#4
0
    def __init__(self, opt):
        super(MultiImgTestDataset, self).__init__()
        self.opt = opt
        self.cache_data = opt['cache_data']
        self.GT_root, self.LQ_root = opt['dataroot_GT'], opt['dataroot_LQ']
        self.data_info = {
            'path_LQ': [],
            'path_GT': [],
            'folder': [],
            'idx': []
        }

        #### Generate data info and cache data
        self.scale = opt['scale'][-1] if isinstance(opt['scale'],
                                                    (tuple,
                                                     list)) else opt['scale']
        self.imgs_LQ, self.imgs_GT = {}, {}
        if opt['name'].lower() in ['vid4', 'reds4']:
            subfolders_LQ = util.glob_file_list(self.LQ_root)
            subfolders_GT = util.glob_file_list(self.GT_root)
            for subfolder_LQ, subfolder_GT in zip(subfolders_LQ,
                                                  subfolders_GT):
                subfolder_name = osp.basename(subfolder_GT)
                img_paths_LQ = util.glob_file_list(subfolder_LQ)
                img_paths_GT = util.glob_file_list(subfolder_GT)
                max_idx = len(img_paths_LQ)
                assert max_idx == len(
                    img_paths_GT
                ), 'Different number of images in LQ and GT folders'
                self.data_info['path_LQ'].extend(img_paths_LQ)
                self.data_info['path_GT'].extend(img_paths_GT)
                self.data_info['folder'].extend([subfolder_name] * max_idx)
                for i in range(max_idx):
                    self.data_info['idx'].append('{}/{}'.format(i, max_idx))

                if self.cache_data:
                    self.imgs_LQ[subfolder_name] = util.read_img_seq(
                        img_paths_LQ)
                    self.imgs_GT[subfolder_name] = util.read_img_seq(
                        img_paths_GT)
        elif opt['name'].lower() in ['vimeo90k-test']:
            pass  # TODO
        else:
            raise ValueError(
                'Not support video test dataset. Support Vid4, REDS4 and Vimeo90k-Test.'
            )
示例#5
0
    def __init__(self, opt):
        super(ImageTestDataset, self).__init__()
        self.opt = opt
        self.cache_data = opt['cache_data']
        self.GT_root, self.LQ_root = opt['dataroot_GT'], opt['dataroot_LQ']
        self.data_type = self.opt['data_type']
        self.data_info = {'path_LQ': [], 'path_GT': []}
        if self.data_type == 'lmdb':
            raise ValueError('No need to use LMDB during validation/test.')
        #### Generate data info and cache data
        self.imgs_LQ, self.imgs_GT = {}, {}
        img_paths_LQ = util.glob_file_list(self.LQ_root)
        img_paths_GT = util.glob_file_list(self.GT_root)
        assert len(img_paths_LQ) == len(
            img_paths_GT), 'Different number of images in LQ and GT folders'
        self.data_info['path_LQ'].extend(img_paths_LQ)
        self.data_info['path_GT'].extend(img_paths_GT)

        if self.cache_data:
            self.imgs_LQ = util.read_img_seq(img_paths_LQ)
            self.imgs_GT = util.read_img_seq(img_paths_GT)
示例#6
0
    def __init__(self, opt, **kwargs):
        super(Demo, self).__init__()
        self.scale = kwargs['scale']
        self.kernel_size = kwargs['kernel_size']
        self.model_name = kwargs['model_name']
        idx = kwargs['idx'] if 'idx' in kwargs else None
        self.opt = opt
        self.cache_data = opt['cache_data']
        self.half_N_frames = opt['N_frames'] // 2
        if idx is None:
            self.name = opt['name']
            self.root = opt['dataroot']
        else:
            self.name = opt['name'].split('+')[idx]
            self.root = opt['dataroot'].split('+')[idx]

        self.data_type = self.opt['data_type']
        self.data_info = {'path': [], 'folder': [], 'idx': [], 'border': []}
        if self.data_type == 'lmdb':
            raise ValueError('No need to use LMDB during validation/test.')
        #### Generate data info and cache data
        self.imgs = {}

        subfolder_name = osp.basename(self.root)

        self.data_info['path'] = util.glob_file_list(self.root)
        max_idx = len(self.data_info['path'])
        self.data_info['folder'] = [subfolder_name] * max_idx

        for i in range(max_idx):
            self.data_info['idx'].append('{}/{}'.format(i, max_idx))
        border_l = [0] * max_idx
        for i in range(self.half_N_frames):
            border_l[i] = 1
            border_l[max_idx - i - 1] = 1
        self.data_info['border'].extend(border_l)
        self.imgs[subfolder_name] = util.read_img_seq(self.data_info['path'], 'img')
示例#7
0
    def __init__(self, opt, **kwargs):
        super(VideoTestDataset, self).__init__()
        self.scale = kwargs['scale']
        idx = kwargs['idx'] if 'idx' in kwargs else None
        self.opt = opt
        self.cache_data = opt['cache_data']
        self.half_N_frames = opt['N_frames'] // 2
        if idx is None:
            self.name = opt['name']
            self.GT_root, self.LQ_root = opt['dataroot_GT'], opt['dataroot_LQ']
        else:
            self.name = opt['name'].split('+')[idx]
            self.GT_root, self.LQ_root = opt['dataroot_GT'].split(
                '+')[idx], opt['dataroot_LQ'].split('+')[idx]

        self.data_type = self.opt['data_type']
        self.data_info = {
            'path_LQ': [],
            'path_GT': [],
            'folder': [],
            'idx': [],
            'border': []
        }
        if self.data_type == 'lmdb':
            raise ValueError('No need to use LMDB during validation/test.')
        #### Generate data info and cache data
        self.imgs_LQ, self.imgs_GT = {}, {}
        if self.name.lower() in ['vid4', 'reds', 'mm522']:
            if self.name.lower() == 'vid4':
                img_type = 'img'
                subfolders_LQ = util.glob_file_list(
                    osp.join(self.LQ_root, 'X{}'.format(self.scale)))
                subfolders_GT = util.glob_file_list(self.GT_root)
            elif self.name.lower() == 'reds':
                img_type = 'img'
                list_hr_seq = util.glob_file_list(self.GT_root)
                list_lr_seq = util.glob_file_list(
                    osp.join(self.LQ_root, 'X{}'.format(self.scale)))
                subfolders_GT = [
                    k for k in list_hr_seq
                    if k.find('000') >= 0 or k.find('011') >= 0
                    or k.find('015') >= 0 or k.find('020') >= 0
                ]
                subfolders_LQ = [
                    k for k in list_lr_seq
                    if k.find('000') >= 0 or k.find('011') >= 0
                    or k.find('015') >= 0 or k.find('020') >= 0
                ]
            else:
                img_type = 'img'
                subfolders_LQ = util.glob_file_list(
                    osp.join(self.LQ_root, 'X{}'.format(self.scale)))
                subfolders_GT = util.glob_file_list(self.GT_root)

            for subfolder_LQ, subfolder_GT in zip(subfolders_LQ,
                                                  subfolders_GT):
                subfolder_name = osp.basename(subfolder_GT)
                img_paths_LQ = util.glob_file_list(subfolder_LQ)
                img_paths_GT = util.glob_file_list(subfolder_GT)
                max_idx = len(img_paths_LQ)

                assert max_idx == len(
                    img_paths_GT
                ), 'Different number of images in LQ and GT folders'
                self.data_info['path_LQ'].extend(img_paths_LQ)
                self.data_info['path_GT'].extend(img_paths_GT)
                self.data_info['folder'].extend([subfolder_name] * max_idx)
                for i in range(max_idx):
                    self.data_info['idx'].append('{}/{}'.format(i, max_idx))
                border_l = [0] * max_idx
                for i in range(self.half_N_frames):
                    border_l[i] = 1
                    border_l[max_idx - i - 1] = 1
                self.data_info['border'].extend(border_l)

                if self.cache_data:
                    self.imgs_LQ[subfolder_name] = util.read_img_seq(
                        img_paths_LQ, img_type)
                    self.imgs_GT[subfolder_name] = util.read_img_seq(
                        img_paths_GT, img_type)
        elif opt['name'].lower() in ['vimeo90k-test']:
            pass  # TODO
        else:
            raise ValueError(
                'Not support video test dataset. Support Vid4, REDS4 and Vimeo90k-Test.'
            )
示例#8
0
    def __init__(self, opt):
        super(VideoTestDataset, self).__init__()
        self.opt = opt
        self.cache_data = opt['cache_data']
        self.half_N_frames = opt['N_frames'] // 2
        self.GT_root, self.LQ_root = opt['dataroot_GT'], opt['dataroot_LQ']
        self.data_type = self.opt['data_type']
        self.data_info = {'path_LQ': [], 'path_GT': [], 'folder': [], 'idx': [], 'border': []}
        if self.data_type == 'lmdb':
            raise ValueError('No need to use LMDB during validation/test.')
        #### Generate data info and cache data
        self.imgs_LQ, self.imgs_GT = {}, {}
        if opt['name'].lower() in ['vid4', 'reds4']:
            subfolders_LQ = util.glob_file_list(self.LQ_root)
            subfolders_GT = util.glob_file_list(self.GT_root)

            # add test
            if opt['use_all_folders'] == False:
                subfolders_LQ = subfolders_LQ[1:2]
                subfolders_GT = subfolders_GT[1:2]

            for subfolder_LQ, subfolder_GT in zip(subfolders_LQ, subfolders_GT):
                subfolder_name = osp.basename(subfolder_GT)
                img_paths_LQ = util.glob_file_list(subfolder_LQ)
                img_paths_GT = util.glob_file_list(subfolder_GT)
                max_idx = len(img_paths_LQ)
                assert max_idx == len(img_paths_GT), 'Different number of images in LQ and GT folders'
                self.data_info['path_LQ'].extend(img_paths_LQ)
                self.data_info['path_GT'].extend(img_paths_GT)
                self.data_info['folder'].extend([subfolder_name] * max_idx)
                for i in range(max_idx):
                    self.data_info['idx'].append('{}/{}'.format(i, max_idx))
                border_l = [0] * max_idx
                for i in range(self.half_N_frames):
                    border_l[i] = 1
                    border_l[max_idx - i - 1] = 1
                self.data_info['border'].extend(border_l)


                if self.cache_data:
                    print('\nCaching Folder {} Validation Frames, Please wait\n'.format(subfolder_name))
                    self.imgs_LQ[subfolder_name] = util.read_img_seq_display(img_paths_LQ, '{}_LQ'.format(subfolder_name), color=opt['color'])
                    self.imgs_GT[subfolder_name] = util.read_img_seq_display(img_paths_GT, '{}_GT'.format(subfolder_name), color=opt['color'])
                    # self.imgs_LQ[subfolder_name] = util.read_img_seq(img_paths_LQ)
                    # self.imgs_GT[subfolder_name] = util.read_img_seq(img_paths_GT)
                else:
                    self.imgs_LQ[subfolder_name] = img_paths_LQ
                    self.imgs_GT[subfolder_name] = img_paths_GT


            # load screen notation
            # /DATA7_DB7/data/4khdr/data/Dataset/4khdr_frame_notation.json
            # with open(opt['frame_notation']) as f:
            #     self.frame_notation = json.load(f)

            print("\nVal Dataset Initialized\n")

        elif opt['name'].lower() in ['vimeo90k-test']:
            pass  # TODO
        else:
            raise ValueError(
                'Not support video test dataset. Support Vid4, REDS4 and Vimeo90k-Test.')
    def __init__(self, opt):
        super(VideoTestDataset, self).__init__()
        self.opt = opt
        self.cache_data = opt['cache_data']
        self.half_N_frames = opt['N_frames'] // 2
        self.GT_root, self.LQ_root = opt['dataroot_GT'], opt['dataroot_LQ']
        self.data_type = self.opt['data_type']
        self.data_info = {
            'path_LQ': [],
            'path_GT': [],
            'folder': [],
            'idx': [],
            'border': []
        }

        if self.data_type == 'lmdb':
            raise ValueError('No need to use LMDB during validation/test.')
        #### Generate data info and cache data
        self.imgs_LQ, self.imgs_GT = {}, {}
        if opt['name'].lower() in ['vid4', 'reds4']:
            subfolders_LQ = util.glob_file_list(self.LQ_root)
            subfolders_GT = util.glob_file_list(self.GT_root)
            for subfolder_LQ, subfolder_GT in zip(subfolders_LQ,
                                                  subfolders_GT):
                subfolder_name = osp.basename(subfolder_GT)
                img_paths_LQ = util.glob_file_list(subfolder_LQ)
                img_paths_GT = util.glob_file_list(subfolder_GT)
                max_idx = len(img_paths_LQ)
                assert max_idx == len(
                    img_paths_GT
                ), 'Different number of images in LQ and GT folders'

                if opt['pred_interval'] == 0:
                    self.data_info['path_LQ'].extend(img_paths_LQ)
                    self.data_info['path_GT'].extend(img_paths_GT)
                    self.data_info['folder'].extend([subfolder_name] * max_idx)
                    for i in range(max_idx):
                        self.data_info['idx'].append('{}/{}'.format(
                            i, max_idx))
                elif opt['pred_interval'] < 0:
                    LQs = []
                    GTs = []
                    LQs.append(img_paths_LQ)
                    GTs.append(img_paths_GT)
                    self.data_info['path_LQ'].extend(LQs)
                    self.data_info['path_GT'].extend(GTs)
                    self.data_info['folder'].extend([subfolder_name])
                    self.data_info['idx'].append('{}/{}'.format(1, 1))
                else:
                    self.pred_interval = opt['pred_interval']
                    LQs = []
                    GTs = []
                    if max_idx % self.pred_interval == 1 or max_idx % self.pred_interval == 0:
                        num_clip = max_idx // self.pred_interval
                    else:
                        num_clip = max_idx // self.pred_interval + 1

                    for i in range(num_clip):
                        if i != max_idx // self.pred_interval:
                            LQs.append(
                                img_paths_LQ[i * self.pred_interval:(i + 1) *
                                             self.pred_interval + 1])
                            GTs.append(
                                img_paths_GT[i * self.pred_interval:(i + 1) *
                                             self.pred_interval + 1])
                        else:
                            LQs.append(img_paths_LQ[i * self.pred_interval:])
                            GTs.append(img_paths_GT[i * self.pred_interval:])

                    self.data_info['path_LQ'].extend(LQs)
                    self.data_info['path_GT'].extend(GTs)
                    self.data_info['folder'].extend([subfolder_name] *
                                                    num_clip)
                    for i in range(max_idx // self.pred_interval + 1):
                        self.data_info['idx'].append('{}/{}'.format(
                            i, num_clip))

                if self.cache_data:
                    self.imgs_LQ[subfolder_name] = util.read_img_seq(
                        img_paths_LQ)
                    self.imgs_GT[subfolder_name] = util.read_img_seq(
                        img_paths_GT)
        elif opt['name'].lower() in ['vimeo90k-test']:
            pass  # TODO
        else:
            raise ValueError(
                'Not support video test dataset. Support Vid4, REDS4 and Vimeo90k-Test.'
            )
    def __init__(self, opt, **kwargs):
        super(VideoTestDataset, self).__init__()
        self.scale = kwargs['scale']
        self.kernel_size = kwargs['kernel_size']
        self.model_name = kwargs['model_name']
        idx = kwargs['idx'] if 'idx' in kwargs else None
        self.opt = opt
        self.cache_data = opt['cache_data']
        self.half_N_frames = opt['N_frames'] // 2
        if idx is None:
            self.name = opt['name']
            self.GT_root, self.LQ_root = opt['dataroot_GT'], opt['dataroot_LQ']
            degradation_type = opt['degradation_type']
            opt_sigma_x = opt['sigma_x']
            opt_sigma_y = opt['sigma_y']
            opt_theta = opt['theta']
        else:
            self.name = opt['name'].split('+')[idx]
            self.GT_root, self.LQ_root = opt['dataroot_GT'].split(
                '+')[idx], opt['dataroot_LQ'].split('+')[idx]
            if '+' in opt['degradation_type']:
                degradation_type = opt['degradation_type'].split('+')[idx]
                if '+' in str(opt['sigma_x']):
                    opt_sigma_x = float(opt['sigma_x'].split('+')[idx])
                    opt_sigma_y = float(opt['sigma_y'].split('+')[idx])
                    opt_theta = float(opt['theta'].split('+')[idx])

                else:
                    opt_sigma_x = opt['sigma_x']
                    opt_sigma_y = opt['sigma_y']
                    opt_theta = opt['theta']

            else:
                degradation_type = opt['degradation_type']
                opt_sigma_x = opt['sigma_x']
                opt_sigma_y = opt['sigma_y']
                opt_theta = opt['theta']

        self.data_type = self.opt['data_type']
        self.data_info = {
            'path_SLQ': [],
            'path_LQ': [],
            'path_GT': [],
            'folder': [],
            'idx': [],
            'border': []
        }
        if self.data_type == 'lmdb':
            raise ValueError('No need to use LMDB during validation/test.')
        #### Generate data info and cache data
        self.imgs_SLQ, self.imgs_LQ, self.imgs_GT = {}, {}, {}

        if opt['degradation_mode'] == 'preset':
            self.LQ_root = self.LQ_root + '_preset'
        else:
            if isinstance(opt_sigma_x, list):
                assert len(opt_sigma_x) == len(opt_sigma_y)
                assert len(opt_sigma_x) == len(opt_theta)

                LQ_root_list = []
                for i, (sigma_x, sigma_y, theta) in enumerate(
                        zip(opt_sigma_x, opt_sigma_y, opt_theta)):
                    LQ_root_list.append(self.LQ_root + '_' + degradation_type + '_' + str('{:.1f}'.format(opt_sigma_x[i]))\
                           + '_' + str('{:.1f}'.format(opt_sigma_y[i])) + '_' + str('{:.1f}'.format(opt_theta[i])))
                self.LQ_root = LQ_root_list

            else:
                self.LQ_root = self.LQ_root + '_' + degradation_type + '_' + str('{:.1f}'.format(opt_sigma_x))\
                           + '_' + str('{:.1f}'.format(opt_sigma_y)) + '_' + str('{:.1f}'.format(opt_theta))

        slr_name = '' if opt['slr_mode'] is None else '_{}'.format(
            opt['slr_mode'])

        print(self.LQ_root)

        if self.name.lower() in ['vid4', 'reds', 'mm522']:
            if self.name.lower() == 'vid4':
                img_type = 'img'
                subfolders_GT = util.glob_file_list(self.GT_root)
                if isinstance(self.LQ_root, list):
                    num_settings = len(self.LQ_root)
                    subfolders_LQ_list = [
                        util.glob_file_list(
                            osp.join(LQ_root, 'X{}'.format(self.scale)))
                        for LQ_root in self.LQ_root
                    ]
                    subfolders_SLQ_list = [
                        util.glob_file_list(
                            osp.join(
                                LQ_root,
                                'X{}{}'.format(self.scale * self.scale,
                                               slr_name)))
                        for LQ_root in self.LQ_root
                    ]

                    subfolders_LQ = []
                    subfolders_SLQ = []
                    for i in range(len(subfolders_LQ_list[0])):
                        subfolders_LQ.append([
                            subfolders_LQ_list[j][i]
                            for j in range(len(subfolders_LQ_list))
                        ])
                        subfolders_SLQ.append([
                            subfolders_SLQ_list[j][i]
                            for j in range(len(subfolders_SLQ_list))
                        ])

                else:
                    subfolders_LQ = util.glob_file_list(
                        osp.join(self.LQ_root, 'X{}'.format(self.scale)))
                    subfolders_SLQ = util.glob_file_list(
                        osp.join(
                            self.LQ_root,
                            'X{}{}'.format(self.scale * self.scale, slr_name)))

            elif self.name.lower() == 'reds':
                img_type = 'img'
                list_hr_seq = util.glob_file_list(self.GT_root)
                subfolders_GT = [
                    k for k in list_hr_seq
                    if k.find('000') >= 0 or k.find('011') >= 0
                    or k.find('015') >= 0 or k.find('020') >= 0
                ]
                if isinstance(self.LQ_root, list):
                    num_settings = len(self.LQ_root)
                    subfolders_LQ_list = []
                    subfolders_SLQ_list = []

                    for i in range(num_settings):
                        list_lr_seq = util.glob_file_list(
                            osp.join(self.LQ_root[i],
                                     'X{}'.format(self.scale)))
                        list_slr_seq = util.glob_file_list(
                            osp.join(
                                self.LQ_root[i],
                                'X{}{}'.format(self.scale * self.scale,
                                               slr_name)))
                        subfolder_LQ = [
                            k for k in list_lr_seq
                            if k.find('000') >= 0 or k.find('011') >= 0
                            or k.find('015') >= 0 or k.find('020') >= 0
                        ]
                        subfolder_SLQ = [
                            k for k in list_slr_seq
                            if k.find('000') >= 0 or k.find('011') >= 0
                            or k.find('015') >= 0 or k.find('020') >= 0
                        ]
                        subfolders_LQ_list.append(subfolder_LQ)
                        subfolders_SLQ_list.append(subfolder_SLQ)
                    subfolders_LQ = []
                    subfolders_SLQ = []
                    for i in range(len(subfolders_LQ_list[0])):
                        subfolders_LQ.append([
                            subfolders_LQ_list[j][i]
                            for j in range(len(subfolders_LQ_list))
                        ])
                        subfolders_SLQ.append([
                            subfolders_SLQ_list[j][i]
                            for j in range(len(subfolders_SLQ_list))
                        ])

                else:
                    list_lr_seq = util.glob_file_list(
                        osp.join(self.LQ_root, 'X{}'.format(self.scale)))
                    list_slr_seq = util.glob_file_list(
                        osp.join(
                            self.LQ_root,
                            'X{}{}'.format(self.scale * self.scale, slr_name)))
                    #subfolders_GT = [k for k in list_hr_seq if
                    #                   k.find('000') >= 0 or k.find('011') >= 0 or k.find('015') >= 0 or k.find('020') >= 0]
                    subfolders_LQ = [
                        k for k in list_lr_seq
                        if k.find('000') >= 0 or k.find('011') >= 0
                        or k.find('015') >= 0 or k.find('020') >= 0
                    ]
                    subfolders_SLQ = [
                        k for k in list_slr_seq
                        if k.find('000') >= 0 or k.find('011') >= 0
                        or k.find('015') >= 0 or k.find('020') >= 0
                    ]

            else:
                img_type = 'img'
                list_hr_seq = util.glob_file_list(self.GT_root)
                list_lr_seq = util.glob_file_list(
                    osp.join(self.LQ_root, 'X{}'.format(self.scale)))
                list_slr_seq = util.glob_file_list(
                    osp.join(self.LQ_root,
                             'X{}'.format(self.scale * self.scale)))
                subfolders_GT = [
                    k for k in list_hr_seq
                    if k.find('001') >= 0 or k.find('005') >= 0
                    or k.find('008') >= 0 or k.find('009') >= 0
                ]
                subfolders_LQ = [
                    k for k in list_lr_seq
                    if k.find('001') >= 0 or k.find('005') >= 0
                    or k.find('008') >= 0 or k.find('009') >= 0
                ]
                subfolders_SLQ = [
                    k for k in list_slr_seq
                    if k.find('001') >= 0 or k.find('005') >= 0
                    or k.find('008') >= 0 or k.find('009') >= 0
                ]

            print(subfolders_GT[0], '\n', subfolders_LQ[0], '\n',
                  subfolders_SLQ[0])

            for subfolder_SLQ, subfolder_LQ, subfolder_GT in zip(
                    subfolders_SLQ, subfolders_LQ, subfolders_GT):
                subfolder_name = osp.basename(subfolder_GT)
                img_paths_GT = util.glob_file_list(subfolder_GT)
                if isinstance(subfolder_LQ, list):
                    img_paths_LQ_list = [
                        util.glob_file_list(subf_LQ)
                        for subf_LQ in subfolder_LQ
                    ]
                    img_paths_SLQ_list = [
                        util.glob_file_list(subf_SLQ)
                        for subf_SLQ in subfolder_SLQ
                    ]
                    img_paths_LQ = []
                    img_paths_SLQ = []
                    for i in range(len(img_paths_GT)):
                        img_paths_LQ.append(img_paths_LQ_list[i %
                                                              num_settings][i])
                        img_paths_SLQ.append(
                            img_paths_SLQ_list[i % num_settings][i])
                else:
                    img_paths_LQ = util.glob_file_list(subfolder_LQ)
                    img_paths_SLQ = util.glob_file_list(subfolder_SLQ)

                max_idx = len(img_paths_GT)
                self.data_info['path_SLQ'].extend(img_paths_SLQ)
                self.data_info['path_LQ'].extend(img_paths_LQ)
                self.data_info['path_GT'].extend(img_paths_GT)
                self.data_info['folder'].extend([subfolder_name] * max_idx)
                for i in range(max_idx):
                    self.data_info['idx'].append('{}/{}'.format(i, max_idx))
                border_l = [0] * max_idx
                for i in range(self.half_N_frames):
                    border_l[i] = 1
                    border_l[max_idx - i - 1] = 1
                self.data_info['border'].extend(border_l)
                self.imgs_GT[subfolder_name] = util.read_img_seq(
                    img_paths_GT, img_type)
                if opt['degradation_mode'] == 'preset':
                    self.imgs_LQ[subfolder_name] = torch.stack([
                        util.read_img_seq(util.glob_file_list(paths_LQ),
                                          img_type)
                        for paths_LQ in img_paths_LQ
                    ],
                                                               dim=0)
                    self.imgs_SLQ[subfolder_name] = torch.stack([
                        util.read_img_seq(util.glob_file_list(paths_SLQ),
                                          img_type)
                        for paths_SLQ in img_paths_SLQ
                    ],
                                                                dim=0)
                else:
                    self.imgs_LQ[subfolder_name] = util.read_img_seq(
                        img_paths_LQ, img_type)
                    self.imgs_SLQ[subfolder_name] = util.read_img_seq(
                        img_paths_SLQ, img_type)
                h, w = self.imgs_SLQ[subfolder_name].shape[-2:]
                if h % 4 != 0 or w % 4 != 0:
                    self.imgs_SLQ[subfolder_name] = self.imgs_SLQ[
                        subfolder_name][..., :h - (h % 4), :w - (w % 4)]
                    self.imgs_LQ[subfolder_name] = self.imgs_LQ[
                        subfolder_name][..., :self.scale *
                                        (h - (h % 4)), :self.scale * (w -
                                                                      (w % 4))]
                    self.imgs_GT[subfolder_name] = self.imgs_GT[
                        subfolder_name][..., :self.scale * self.scale *
                                        (h - (h % 4)), :self.scale *
                                        self.scale * (w - (w % 4))]

        else:
            raise ValueError(
                'Not support video test dataset. Support Vid4, REDS4 and Vimeo90k-Test.'
            )
        '''
        if opt['degradation_mode'] == 'set':
            sigma_x = float(opt['sigma_x'])
            sigma_y = float(opt['sigma_y'])
            theta = float(opt['theta'])
            gen_kwargs = preprocessing.set_kernel_params(sigma_x=sigma_x, sigma_y=sigma_y, theta=theta)
            self.kernel_gen = rkg.Degradation(self.kernel_size, self.scale, **gen_kwargs)
            self.gen_kwargs_l = [gen_kwargs['sigma'][0], gen_kwargs['sigma'][1], gen_kwargs['theta']]
        '''
        if opt['degradation_mode'] == 'preset':
            self.kernel_gen = rkg.Degradation(self.kernel_size, self.scale)
            if self.name.lower() == 'vid4':
                self.kernel_dict = np.load(
                    '../pretrained_models/Mixed/Vid4.npy')
            elif self.name.lower() == 'reds':
                self.kernel_dict = np.load(
                    '../pretrained_models/Mixed/REDS.npy')
            else:
                raise NotImplementedError()
示例#11
0
    def __init__(self, opt):
        super(VideoTestDataset, self).__init__()
        self.opt = opt
        self.cache_data = opt['cache_data']
        self.half_N_frames = opt['N_frames'] // 2
        self.GT_root, self.LQ_root = opt['dataroot_GT'], opt['dataroot_LQ']
        self.data_type = self.opt['data_type']
        self.data_info = {
            'path_LQ': [],
            'path_GT': [],
            'folder': [],
            'idx': [],
            'border': []
        }
        #### Generate data info and cache data
        self.imgs_LQ, self.imgs_GT = {}, {}
        if opt['name'].lower() in ['vid4', 'reds4']:
            if self.data_type == 'lmdb':
                self.lmdb_paths_GT, _ = util.get_image_paths(
                    self.data_type, self.GT_root)
                self.lmdb_paths_LQ, _ = util.get_image_paths(
                    self.data_type, self.LQ_root)
                self.GT_env, self.LQ_env = None, None
                previous_name_a = None
                previous_name_b = None
                for lmdb_path_GT, lmdb_path_LQ in zip(self.lmdb_paths_GT,
                                                      self.lmdb_paths_LQ):
                    GT_name_a, GT_name_b = lmdb_path_GT.split('_')
                    assert lmdb_path_GT == lmdb_path_LQ, 'GT path and LQ path in lmdb is not matched'
                    if previous_name_a != GT_name_a and previous_name_a is not None:
                        max_idx = int(previous_name_b) + 1
                        for i in range(max_idx):
                            self.data_info['idx'].append('{}/{}'.format(
                                i, max_idx))
                        border_l = [0] * max_idx
                        for i in range(self.half_N_frames):
                            border_l[i] = 1
                            border_l[max_idx - i - 1] = 1
                        self.data_info['border'].extend(border_l)
                    self.data_info['folder'].append(GT_name_a)
                    previous_name_a = GT_name_a
                    previous_name_b = GT_name_b
                max_idx = int(previous_name_b) + 1
                for i in range(max_idx):
                    self.data_info['idx'].append('{}/{}'.format(i, max_idx))
                border_l = [0] * max_idx
                for i in range(self.half_N_frames):
                    border_l[i] = 1
                    border_l[max_idx - i - 1] = 1
                self.data_info['border'].extend(border_l)
            else:
                subfolders_LQ = util.glob_file_list(self.LQ_root)
                subfolders_GT = util.glob_file_list(self.GT_root)
                for subfolder_LQ, subfolder_GT in zip(subfolders_LQ,
                                                      subfolders_GT):
                    subfolder_name = osp.basename(subfolder_GT)
                    img_paths_LQ = util.glob_file_list(subfolder_LQ)
                    img_paths_GT = util.glob_file_list(subfolder_GT)
                    max_idx = len(img_paths_LQ)
                    assert max_idx == len(
                        img_paths_GT
                    ), 'Different number of images in LQ and GT folders'
                    self.data_info['path_LQ'].extend(img_paths_LQ)
                    self.data_info['path_GT'].extend(img_paths_GT)
                    self.data_info['folder'].extend([subfolder_name] * max_idx)
                    for i in range(max_idx):
                        self.data_info['idx'].append('{}/{}'.format(
                            i, max_idx))
                    border_l = [0] * max_idx
                    for i in range(self.half_N_frames):
                        border_l[i] = 1
                        border_l[max_idx - i - 1] = 1
                    self.data_info['border'].extend(border_l)

                    if self.cache_data:
                        self.imgs_LQ[subfolder_name] = util.read_img_seq(
                            img_paths_LQ)
                        self.imgs_GT[subfolder_name] = util.read_img_seq(
                            img_paths_GT)
                    else:
                        self.imgs_LQ[subfolder_name] = img_paths_LQ
                        self.imgs_GT[subfolder_name] = img_paths_GT
        elif opt['name'].lower() in ['vimeo90k-test']:
            pass  # TODO
        else:
            raise ValueError(
                'Not support video test dataset. Support Vid4, REDS4 and Vimeo90k-Test.'
            )