首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我在tensorflow数据管道上使用错误

我在tensorflow数据管道上使用错误
EN

Stack Overflow用户
提问于 2022-05-26 13:32:17
回答 1查看 401关注 0票数 1

我在深度学习和tensorflow方面很新,然后当我尝试使用tensorflow数据管道上的分叉时,就会发生这个错误(我使用google ):

代码语言:javascript
复制
error: OpenCV(4.1.2) /io/opencv/modules/core/src/matrix.cpp:757: error: (-215:Assertion failed) dims <= 2 && step[0] > 0 in function 'locateROI'

这是我的代码:

  • 首先,我使用keras.utils.image_dataset_from_directory加载数据集并进行一些规范化
代码语言:javascript
复制
images= keras.utils.image_dataset_from_directory(
    directory= IMAGE_DIR, 
    batch_size= BATCH_SIZE,
    image_size= RESIZED_IMAGE_SIZE,
    shuffle= True,
    labels='inferred',
    class_names= CLASS_LABELS
)

def normalize(image, label):
    return image/255, label

images= images.map(normalize)
  • 然后我试着用这个函数来画图。
代码语言:javascript
复制
def view_image(ds, class_labels):
    image, label = next(iter(ds))
    image = image.numpy()
    label = label.numpy()
    
    fig = plt.figure(figsize=(22, 22))
    for i in range(5):
        try:
            ax = fig.add_subplot(1, 5, i+1, xticks=[], yticks=[])
            ax.imshow(image[i])
            ax.set_title(f"{class_labels[label[i]]}")
        except:
            pass

view_image(images, CLASS_LABELS)

这是

有点搞砸了,但至少我知道数据加载是正确的

  • 接下来,我从流花实例复制了一个用于增强的映射函数
代码语言:javascript
复制
from albumentations.core.composition import OneOf
transforms = A.Compose([
            # A.RandomResizedCrop(height= RESIZED_IMAGE_SIZE[0], width= RESIZED_IMAGE_SIZE[1], scale= (0.75, 1), p=0.8),
            # A.Rotate(limit=50, p=1),
            # A.ColorJitter(brightness=0.75, contrast=0.4, saturation=0.5, hue= 0, p=1),
            A.GaussianBlur(p=1),
            # A.Flip(p=0.25),
            # A.OneOf([
            #     A.GridDistortion(p=0.5),
            #     A.OpticalDistortion(p=0.5)
            # ], p=1),
        ])

def aug_fn(image, img_size):
    data = {"image":image}
    aug_data = transforms(**data)
    aug_img = aug_data["image"]
    aug_img = tf.cast(aug_img, tf.float32)
    
    return aug_img

def process_data(image, label, img_size):
    aug_img = tf.numpy_function(func=aug_fn, inp=[image, img_size], Tout=tf.float32)
    return aug_img, label

aug_images= images.map(partial(process_data, img_size=[416, 312]), num_parallel_calls=AUTOTUNE).prefetch(AUTOTUNE)
  • 然后,当我调用view_image()函数或简单地调用next(iter(aug_images))时,它会引发我前面指定的错误。下面是完整的错误消息:
代码语言:javascript
复制
UnknownError: error: OpenCV(4.1.2) /io/opencv/modules/core/src/matrix.cpp:757: error: (-215:Assertion failed) dims <= 2 && step[0] > 0 in function 'locateROI'

Traceback (most recent call last):

  File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/ops/script_ops.py", line 271, in __call__
    ret = func(*args)

  File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/autograph/impl/api.py", line 642, in wrapper
    return func(*args, **kwargs)

  File "<ipython-input-49-d101fe365707>", line 3, in aug_fn
    aug_data = transforms(**data)

  File "/usr/local/lib/python3.7/dist-packages/albumentations/core/composition.py", line 210, in __call__
    data = t(force_apply=force_apply, **data)

  File "/usr/local/lib/python3.7/dist-packages/albumentations/core/transforms_interface.py", line 97, in __call__
    return self.apply_with_params(params, **kwargs)

  File "/usr/local/lib/python3.7/dist-packages/albumentations/core/transforms_interface.py", line 112, in apply_with_params
    res[key] = target_function(arg, **dict(params, **target_dependencies))

  File "/usr/local/lib/python3.7/dist-packages/albumentations/augmentations/transforms.py", line 1963, in apply
    return F.gaussian_blur(image, ksize, sigma=sigma)

  File "/usr/local/lib/python3.7/dist-packages/albumentations/augmentations/functional.py", line 54, in wrapped_function
    result = func(img, *args, **kwargs)

  File "/usr/local/lib/python3.7/dist-packages/albumentations/augmentations/functional.py", line 615, in gaussian_blur
    return blur_fn(img)

  File "/usr/local/lib/python3.7/dist-packages/albumentations/augmentations/functional.py", line 189, in __process_fn
    img = process_fn(img, **kwargs)

cv2.error: OpenCV(4.1.2) /io/opencv/modules/core/src/matrix.cpp:757: error: (-215:Assertion failed) dims <= 2 && step[0] > 0 in function 'locateROI'



     [[{{node PyFunc}}]] [Op:IteratorGetNext]

我做了什么,

我试着重新读了几遍tensorflow代码示例,我没有认为我做错了什么(我可能做错了),然后我决定创建下面的映射函数,它仍然不起作用。

代码语言:javascript
复制
def augmentate_image(image, label):
    aug_img = transforms(image=image)['image']
    aug_img = tf.cast(aug_img, tf.float32)
    return aug_img, label

如果有人能回答我的问题,我将非常感激:

EN

回答 1

Stack Overflow用户

发布于 2022-06-27 11:48:35

在使用tensorflow docs的所有实现中,它都指出数据集在应用tf.numpy_function后失去了形状。您需要重置数据的形状。你可以试试这段代码。

代码语言:javascript
复制
def set_shapes(img, label, img_shape=<you desired shape in 3d>):
    img.set_shape(img_shape)
    label.set_shape([])
    return img, label

然后将其映射到aug_images;aug_images = aug_images.map(set_shapes,num_parallel_calls=AUTOTUNE).prefetch(AUTOTUNE)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72392660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档