def _populate_patches_and_labels(self, xkeys, xys, mode='train'): np.random.seed(self.seed) # estimate the size and create h5py dataset total_frames = self._get_total_frames(xys) patches_cache, labels_cache = self._create_patch_and_label_dataset( total_frames) assert 'dis_y' in xkeys assert 'dis_u' in xkeys assert 'dis_v' in xkeys yss = xys['dis_y'] # yss: Y * frames * videos uss = xys['dis_u'] vss = xys['dis_v'] if mode == 'train': assert 'label' in xys labels = xys['label'] elif mode == 'test': labels = [None for _ in range(len(yss))] else: assert False assert len(yss) == len(uss) == len(vss) == len(labels) patch_idx = 0 for ys, us, vs, label in zip(yss, uss, vss, labels): # iterate videos assert len(ys) == len(us) == len(vs) for y, u, v in zip(ys, us, vs): # iterate frames yuvimg = dstack_y_u_v(y, u, v) img = create_hp_yuv_4channel(yuvimg) h, w, c = img.shape adj_h = h - self.patch_height adj_w = w - self.patch_width iv, jv = np.meshgrid(np.arange(adj_h), np.arange(adj_w), sparse=False, indexing='ij') iv = iv.reshape(-1) jv = jv.reshape(-1) idx = np.random.permutation(adj_h * adj_w) iv = iv[idx] jv = jv[idx] patches_found = 0 for (y, x) in zip(iv, jv): patches_cache[patch_idx] = img[y:y + self.patch_height, x:x + self.patch_width] if mode == 'train': labels_cache[patch_idx] = label patches_found += 1 patch_idx += 1 if patches_found >= self.patches_per_frame: break return patches_cache, labels_cache
def _populate_patches_and_labels(self, xkeys, xys, mode='train'): np.random.seed(self.seed) # estimate the size and create h5py dataset total_frames = self._get_total_frames(xys) patches_cache, labels_cache = self._create_patch_and_label_dataset( total_frames) assert 'dis_y' in xkeys assert 'dis_u' in xkeys assert 'dis_v' in xkeys yss = xys['dis_y'] # yss: Y * frames * videos uss = xys['dis_u'] vss = xys['dis_v'] if mode == 'train': assert 'label' in xys labels = xys['label'] elif mode == 'test': labels = [None for _ in range(len(yss))] else: assert False assert len(yss) == len(uss) == len(vss) == len(labels) patch_idx = 0 for ys, us, vs, label in zip(yss, uss, vss, labels): # iterate videos assert len(ys) == len(us) == len(vs) for y, u, v in zip(ys, us, vs): # iterate frames yuvimg = dstack_y_u_v(y, u, v) img = create_hp_yuv_4channel(yuvimg) h, w, c = img.shape adj_h = h - self.patch_height adj_w = w - self.patch_width iv, jv = np.meshgrid(np.arange(adj_h), np.arange(adj_w), sparse=False, indexing='ij') iv = iv.reshape(-1) jv = jv.reshape(-1) idx = np.random.permutation(adj_h * adj_w) iv = iv[idx] jv = jv[idx] patches_found = 0 for (y, x) in zip(iv, jv): patches_cache[patch_idx] = img[y: y + self.patch_height, x: x + self.patch_width] if mode == 'train': labels_cache[patch_idx] = label patches_found += 1 patch_idx += 1 if patches_found >= self.patches_per_frame: break return patches_cache, labels_cache