Download training/dataset/lrl_dataset.py from DeepfakeGenome/DeepfakeGenome_Codebase: direct link, hf CLI and curl.
- Browser
- Download file 4.58 kB
-
https://huggingface.co/DeepfakeGenome/DeepfakeGenome_Codebase/resolve/main/training/dataset/lrl_dataset.py
- Command line
-
hf download hf://DeepfakeGenome/DeepfakeGenome_Codebase/training/dataset/lrl_dataset.py
-
curl -L -o lrl_dataset.py https://huggingface.co/DeepfakeGenome/DeepfakeGenome_Codebase/resolve/main/training/dataset/lrl_dataset.py
4.58 kB
| import os | |
| import sys | |
| current_file_path = os.path.abspath(__file__) | |
| parent_dir = os.path.dirname(os.path.dirname(current_file_path)) | |
| project_root_dir = os.path.dirname(parent_dir) | |
| sys.path.append(parent_dir) | |
| sys.path.append(project_root_dir) | |
| import cv2 | |
| import random | |
| import yaml | |
| import torch | |
| import numpy as np | |
| from copy import deepcopy | |
| import albumentations as A | |
| from .abstract_dataset import DeepfakeAbstractBaseDataset | |
| from PIL import Image | |
| c=0 | |
| class LRLDataset(DeepfakeAbstractBaseDataset): | |
| def __init__(self, config=None, mode='train'): | |
| super().__init__(config, mode) | |
| global c | |
| c=config | |
| def multi_pass_filter(self, img, r1=0.33, r2=0.66): | |
| rows, cols = img.shape | |
| k = cols / rows | |
| mask = np.zeros((rows, cols), np.uint8) | |
| x, y = np.ogrid[:rows, :cols] | |
| mask_area = (k * x + y < r1 * cols) | |
| mask[mask_area] = 1 | |
| low_mask = mask | |
| mask = np.ones((rows, cols), np.uint8) | |
| x, y = np.ogrid[:rows, :cols] | |
| mask_area = (k * x + y < r2 * cols) | |
| mask[mask_area] = 0 | |
| high_mask = mask | |
| mask1 = np.zeros((rows, cols), np.uint8) | |
| mask1[low_mask == 0] = 1 | |
| mask2 = np.zeros((rows, cols), np.uint8) | |
| mask2[high_mask == 0] = 1 | |
| mid_mask = mask1 * mask2 | |
| return low_mask, mid_mask, high_mask | |
| def image2dct(self,img): | |
| img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) | |
| img_gray = np.float32(img_gray) | |
| img_dct = cv2.dct(img_gray) | |
| # img_dct = np.log(np.abs(img_dct)+1e-6) | |
| low_mask, mid_mask, high_mask = self.multi_pass_filter(img_dct, r1=0.33, r2=0.33) | |
| img_dct_filterd = high_mask * img_dct | |
| img_idct = cv2.idct(img_dct_filterd) | |
| return img_idct | |
| def __getitem__(self, index): | |
| image_trans, label, landmark_tensors, mask_trans = super().__getitem__(index, no_norm=True) | |
| img_idct = self.image2dct(image_trans) | |
| # normalize idct | |
| img_idct = (img_idct / 255 - 0.5) / 0.5 | |
| # img_idct = img_idct[np.newaxis, ...] | |
| # To tensor and normalize for fake and real images | |
| image_trans = self.normalize(self.to_tensor(image_trans)) | |
| img_idct_trans = self.to_tensor(img_idct) | |
| mask_trans = torch.from_numpy(mask_trans) | |
| mask_trans = mask_trans.squeeze(2).permute(2, 0, 1) | |
| mask_trans = torch.mean(mask_trans, dim=0, keepdim=True) | |
| return image_trans, label, img_idct_trans, mask_trans | |
| def __len__(self): | |
| return len(self.image_list) | |
| def collate_fn(batch): | |
| """ | |
| Collate a batch of data points. | |
| Args: | |
| batch (list): A list of tuples containing the image tensor and label tensor. | |
| Returns: | |
| A tuple containing the image tensor, the label tensor, the landmark tensor, | |
| and the mask tensor. | |
| """ | |
| global c | |
| images, labels, img_idct_trans, masks = zip(*batch) | |
| # Stack the image, label, landmark, and mask tensors | |
| images = torch.stack(images, dim=0) | |
| labels = torch.LongTensor(labels) | |
| masks = torch.stack(masks, dim=0) | |
| img_idct_trans = torch.stack(img_idct_trans, dim=0) | |
| data_dict = { | |
| 'image': images, | |
| 'label': labels, | |
| 'landmark': None, | |
| 'idct': img_idct_trans, | |
| 'mask': masks, | |
| } | |
| return data_dict | |
| if __name__ == '__main__': | |
| with open(r'H:\code\DeepfakeBench\training\config\detector\lrl_effnb4.yaml', 'r') as f: | |
| config = yaml.safe_load(f) | |
| with open(r'H:\code\DeepfakeBench\training\config\train_config.yaml', 'r') as f: | |
| config2 = yaml.safe_load(f) | |
| random.seed(config['manualSeed']) | |
| torch.manual_seed(config['manualSeed']) | |
| if config['cuda']: | |
| torch.cuda.manual_seed_all(config['manualSeed']) | |
| config2['data_manner'] = 'lmdb' | |
| config['dataset_json_folder'] = 'preprocessing/dataset_json_v3' | |
| config.update(config2) | |
| train_set = LRLDataset(config=config, mode='train') | |
| train_data_loader = \ | |
| torch.utils.data.DataLoader( | |
| dataset=train_set, | |
| batch_size=4, | |
| shuffle=True, | |
| num_workers=0, | |
| collate_fn=train_set.collate_fn, | |
| ) | |
| from tqdm import tqdm | |
| for iteration, batch in enumerate(tqdm(train_data_loader)): | |
| print(iteration) | |
| if iteration > 10: | |
| break |