Имеет ли значение порядок преобразований, применяемых для увеличения данных, в преобразованиях Torchvision?Python

Программы на Python
Ответить
Anonymous
 Имеет ли значение порядок преобразований, применяемых для увеличения данных, в преобразованиях Torchvision?

Сообщение Anonymous »

У меня есть следующий класс пользовательского набора данных для задачи сегментации изображений.

Код: Выделить всё

class LoadDataset(Dataset):

def __init__(self, img_dir, mask_dir, apply_transforms = None):
self.img_dir = img_dir
self.mask_dir = mask_dir
self.transforms = apply_transforms
self.img_paths, self.mask_paths = self.__get_all_paths()
self.__pil_to_tensor = transforms.PILToTensor()
self.__float_tensor = transforms.ToDtype(torch.float32, scale = True)
self.__grayscale = transforms.Grayscale()

def __get_all_paths(self):
img_paths = [os.path.join(self.img_dir, img_name.name) for img_name in os.scandir(self.img_dir) if os.path.isfile(img_name)]
mask_paths = [os.path.join(self.mask_dir, mask_name.name) for mask_name in os.scandir(self.mask_dir) if os.path.isfile(mask_name)]
img_paths = sorted(img_paths)
mask_paths = sorted(mask_paths)
return img_paths, mask_paths

def __len__(self):
return len(self.img_paths)

def __getitem__(self, index):
img_path, mask_path = self.img_paths[index], self.mask_paths[index]
img_PIL = Image.open(img_path)
mask_PIL = Image.open(mask_path)
img_tensor = self.__pil_to_tensor(img_PIL)
img_tensor = self.__float_tensor(img_tensor)
mask_tensor = self.__pil_to_tensor(mask_PIL)
mask_tensor = self.__float_tensor(mask_tensor)
mask_tensor = self.__grayscale(mask_tensor)
if self.transforms:
img_tensor, mask_tensor = self.transforms(img_tensor, mask_tensor)
return img_tensor, mask_tensor

Когда я применяю следующее преобразование

Код: Выделить всё

transforms.RandomHorizontalFlip()
переворачивается либо изображение, либо маска. Но если изменить порядок преобразований в __getitem__ на следующий, все будет работать нормально.

Код: Выделить всё

    def __getitem__(self, index):
img_path, mask_path = self.img_paths[index], self.mask_paths[index]
img_PIL = Image.open(img_path)
mask_PIL = Image.open(mask_path)
if self.transforms:
img_PIL, mask_PIL = self.transforms(img_PIL, mask_PIL)
img_tensor = self.__pil_to_tensor(img_PIL)
mask_tensor = self.__pil_to_tensor(mask_PIL)
img_tensor = self.__float_tensor(img_tensor)
mask_tensor = self.__float_tensor(mask_tensor)
mask_tensor = self.__grayscale(mask_tensor)
return img_tensor, mask_tensor
Имеет ли какое-то значение преобразование порядка? Я использую torchvision.transforms.v2 для всех преобразований.

Подробнее здесь: https://stackoverflow.com/questions/793 ... vision-tra
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»