1

我是 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获取图像的输入参数?增强被用作字典吗?你能解释一下怎么做吗?

4

2 回答 2

1

aug是分配给函数对象的变量

方括号表示该对象已实现__getitem__()Python 魔术方法。它可以是一个字典,但不需要是

于 2021-06-20T17:23:11.870 回答
1

augalbumentations.augmentations.transforms.HorizontalFlip类的实例

然后,如果您查看源代码,您将看到它继承自 albumentations.core.transforms_interface.DualTransform类,而查看源代码则继承自BasicTransform类。

查看BasicTransform该类,您可以看到它实现了__call__()方法。它需要可变数量的关键字参数**kwargs并经过一些处理返回kwargs(即当您调用时aug())。kwargs是一个带有您传递的参数的字典。在您的情况下,键是imageand mask

作为旁注,而不是 if augment == True:应该只是 if augment:

于 2021-06-20T17:36:04.517 回答