Расширение данных базовый python

#python #function #variables #albumentations

Вопрос:

Я новичок в программировании на python и учился кодировать проект с YouTube, когда застрял на следующем коде.

Полный код находится здесь: https://github.com/nikhilroxtomar/Retina-Blood-Vessel-Segmentation-using-UNET-in-TensorFlow/blob/main/data.py и на YouTube, где он появляется, в 24:30 — https://youtu.be/tpbWZVY2dng?t=1470 )

 from albumentations import HorizontalFlip
def augment_data(images, masks, save_path, augment=True):

  for idx, (x, y) in tqdm(enumerate(zip(images, masks)), total=len(images)):
      """ Extracting names """
      name = x.split("/")[-1].split(".")[0]

      """ Reading image and mask """
      x = cv2.imread(x, cv2.IMREAD_COLOR)
      y = imageio.mimread(y)[0]

      if augment == True:
          aug = HorizontalFlip(p=1.0)
          augmented = aug(image=x, mask=y)
          x1 = augmented["image"]
          y1 = augmented["mask"]
 

Эта часть — то, чего я не понимаю

 if augment == True:
      aug = HorizontalFlip(p=1.0)
      augmented = aug(image=x, mask=y)
      x1 = augmented["image"]
      y1 = augmented["mask"]
 

Как aug используется для получения входных параметров изображения? Используется ли дополненный в качестве словаря? Не могли бы вы, пожалуйста, объяснить, как?

Ответ №1:

aug является ли экземпляр albumentations.augmentations.transforms.HorizontalFlip класса

Затем, если вы посмотрите на исходный код, вы увидите, что он наследуется от albumentations.core.transforms_interface.DualTransform класса, который, глядя на исходный код, наследует от BasicTransform класса.

Посмотрев на BasicTransform класс, вы можете увидеть, что он реализует __call__() метод. Он принимает переменное количество аргументов ключевых **kwargs слов и после некоторой обработки возвращает kwargs (т. е. при вызове aug() ). kwargs это диктат с аргументами, которые вы передаете. В вашем случае ключи image -это mask и.

В качестве примечания, вместо if augment == True: этого следует просто if augment:

Ответ №2:

aug это переменная, которая присваивается объекту функции

Квадратные скобки означают, что объект __getitem__() использует магический метод Python. Это может быть диктат, но в этом нет необходимости

Комментарии:

1. Я напечатал тип дополненного , и это был словарь. Буран хорошо объяснил это, и поскольку класс имеет метод _call_, экземпляр aug ведет себя как функция и тоже может быть вызван как функция