| import torch |
| import torch.nn as nn |
| from torch.utils import data |
| import os |
| from PIL import Image |
| from torchvision.transforms import Compose, Resize, CenterCrop, ToTensor, Normalize |
| try: |
| from torchvision.transforms import InterpolationMode |
| BICUBIC = InterpolationMode.BICUBIC |
| except ImportError: |
| BICUBIC = Image.BICUBIC |
| import glob |
|
|
| def image_transform(n_px): |
| return Compose([ |
| Resize(n_px, interpolation=BICUBIC), |
| CenterCrop(n_px), |
| ToTensor(), |
| Normalize((0.48145466, 0.4578275, 0.40821073), |
| (0.26862954, 0.26130258, 0.27577711)), |
| ]) |
|
|
| class Image_dataset(data.Dataset): |
| def __init__(self,dataset_folder="/data1/haolin/datasets",categories=['03001627'],n_px=224): |
| self.dataset_folder=dataset_folder |
| self.image_folder=os.path.join(self.dataset_folder,'other_data') |
| self.preprocess=image_transform(n_px) |
| self.image_path=[] |
| for cat in categories: |
| subpath=os.path.join(self.image_folder,cat,"6_images") |
| model_list=os.listdir(subpath) |
| for folder in model_list: |
| model_folder=os.path.join(subpath,folder) |
| image_list=os.listdir(model_folder) |
| for image_filename in image_list: |
| image_filepath=os.path.join(model_folder,image_filename) |
| self.image_path.append(image_filepath) |
| def __len__(self): |
| return len(self.image_path) |
|
|
| def __getitem__(self,index): |
| path=self.image_path[index] |
| basename=os.path.basename(path)[:-4] |
| model_id=path.split(os.sep)[-2] |
| category=path.split(os.sep)[-4] |
| image=Image.open(path) |
| image_tensor=self.preprocess(image) |
|
|
| return {"images":image_tensor,"image_name":basename,"model_id":model_id,"category":category} |
|
|
| class Image_InTheWild_dataset(data.Dataset): |
| def __init__(self,dataset_dir="/data1/haolin/data/real_scene_process_data",scene_id="letian-310",n_px=224): |
| self.dataset_dir=dataset_dir |
| self.preprocess = image_transform(n_px) |
| self.image_path = [] |
| if scene_id=="all": |
| scene_list=os.listdir(self.dataset_dir) |
| for id in scene_list: |
| image_folder=os.path.join(self.dataset_dir,id,"6_images") |
| self.image_path+=glob.glob(image_folder+"/*/*jpg") |
| else: |
| image_folder = os.path.join(self.dataset_dir, scene_id, "6_images") |
| self.image_path += glob.glob(image_folder + "/*/*jpg") |
| def __len__(self): |
| return len(self.image_path) |
|
|
| def __getitem__(self,index): |
| path=self.image_path[index] |
| basename=os.path.basename(path)[:-4] |
| model_id=path.split(os.sep)[-2] |
| scene_id=path.split(os.sep)[-4] |
| image=Image.open(path) |
| image_tensor=self.preprocess(image) |
|
|
| return {"images":image_tensor,"image_name":basename,"model_id":model_id,"scene_id":scene_id} |
|
|
|
|