问题描述

        详细错误如下:

Traceback (most recent call last):
  File "embed.py", line 159, in <module>
    main()
  File "embed.py", line 138, in main
    (x_wm, y_wm), defense = defense_config.embed(defense=defense,
  File "/home/visionx/anaconda3/envs/watermark/lib/python3.8/site-packages/mlconfig/config.py", line 20, in __call__
    return self.instantiate(*args, **kwargs)
  File "/home/visionx/anaconda3/envs/watermark/lib/python3.8/site-packages/mlconfig/config.py", line 65, in instantiate
    return func_or_cls(*args, **kwargs)
  File "/home/visionx/project/Watermark-Robustness-Toolbox/wrt/defenses/watermark/adi.py", line 188, in wm_adi_embed
    return defense.embed(**kwargs), defense
  File "/home/visionx/project/Watermark-Robustness-Toolbox/wrt/defenses/watermark/adi.py", line 110, in embed
    x_wm, y_wm = self.keygen(wm_loader, num_classes=self.num_classes, keylength=keylength)
  File "/home/visionx/project/Watermark-Robustness-Toolbox/wrt/defenses/watermark/adi.py", line 67, in keygen
    x_wm = collect_n_samples(n=keylength, data_loader=wm_loader, has_labels=False)
  File "/home/visionx/project/Watermark-Robustness-Toolbox/wrt/training/datasets/utils.py", line 53, in collect_n_samples
    for x in data_loader:
  File "/home/visionx/anaconda3/envs/watermark/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 630, in __next__
    data = self._next_data()
  File "/home/visionx/anaconda3/envs/watermark/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 1345, in _next_data
    return self._process_data(data)
  File "/home/visionx/anaconda3/envs/watermark/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 1371, in _process_data
    data.reraise()
  File "/home/visionx/anaconda3/envs/watermark/lib/python3.8/site-packages/torch/_utils.py", line 694, in reraise
    raise exception
PIL.UnidentifiedImageError: Caught UnidentifiedImageError in DataLoader worker process 0.
Original Traceback (most recent call last):
  File "/home/visionx/anaconda3/envs/watermark/lib/python3.8/site-packages/torch/utils/data/_utils/worker.py", line 308, in _worker_loop
    data = fetcher.fetch(index)
  File "/home/visionx/anaconda3/envs/watermark/lib/python3.8/site-packages/torch/utils/data/_utils/fetch.py", line 51, in fetch
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "/home/visionx/anaconda3/envs/watermark/lib/python3.8/site-packages/torch/utils/data/_utils/fetch.py", line 51, in <listcomp>
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "/home/visionx/project/Watermark-Robustness-Toolbox/wrt/training/datasets/trigger_datasets.py", line 26, in __getitem__
    image = Image.open(os.path.join(self.root, img_name)).convert('RGB')
  File "/home/visionx/anaconda3/envs/watermark/lib/python3.8/site-packages/PIL/Image.py", line 3280, in open
    raise UnidentifiedImageError(msg)
PIL.UnidentifiedImageError: cannot identify image file '/home/visionx/.wrt/data/adi/data_batch_4'

        这个问题是因为解决ValueError: zero-size array to reduction operation minimum which has no identity这个问题遇到的,简单来说就是一个踩坑之路,这篇文章也是详细介绍一下踩坑之路,具体解决办法,请直接跳转我的上一篇博客【已解决】ValueError: zero-size array to reduction operation minimum which has no identityicon-default.png?t=N7T8https://blog.csdn.net/BetrayFree/article/details/134151000?spm=1001.2014.3001.5502        想看我都踩了什么坑,请持续读下去

原因分析及解决

        首先解释一下题目上的这个问题原因:

这个错误通常是由于试图打开或识别一个不支持的图像文件类型引起的。根据错误消息中提供的信息,它似乎尝试打开一个名为 "data_batch_5" 的文件,但该文件不是一个图像文件,因此无法识别。

要解决这个问题,你可以采取以下步骤:

  1. 确认文件路径:首先,确保你提供的文件路径是正确的,并且指向一个有效的图像文件。检查文件的路径和名称,确保没有拼写错误。

  2. 文件类型:检查文件的实际类型。确认该文件是否真的是一个图像文件。有时,文件可能会被错误地命名为图像文件,但实际上不是图像。

  3. 文件损坏:如果文件本身受损,也可能导致此错误。确保文件没有损坏,并尝试使用其他图像查看器打开它,以验证其完整性。

  4. 异常处理:如果你的代码中存在多个文件,你可以使用异常处理来捕获无法识别的图像文件,以避免它们导致整个程序崩溃。你可以在代码中使用 try...except 块,以处理这些异常情况。

        然后看我怎么解决:直接把他删掉,对,就不报这个错误了,但肯定的嘛,会报其他错误,至于原因就不用详细说了吧,因为人家需要图片,你给的这是什么乱七八糟的?

        当我把data_batch_5删了之后就开始报错

PIL.UnidentifiedImageError: cannot identify image file '/home/visionx/.wrt/data/adi/data_batch_4'

        当我把data_batch_4删了之后就开始报错

PIL.UnidentifiedImageError: cannot identify image file '/home/visionx/.wrt/data/adi/data_batch_2'

         当我把data_batch_2删了之后就开始报错

PIL.UnidentifiedImageError: cannot identify image file '/home/visionx/.wrt/data/adi/data_batch_3'

         当我把data_batch_3删了之后就开始报错

PIL.UnidentifiedImageError: cannot identify image file '/home/visionx/.wrt/data/adi/data_batch_1'

        当我把data_batch_1删了之后就开始报错 

ValueError: zero-size array to reduction operation minimum which has no identity

         ok,到这为止完成了闭环,转了一圈,啥问题也没解决,但是已经可以清楚的是,我们在用图像处理工具才报了这样的错误,那么好玩的就来了,我们不是正好找作者卢卡斯要了adi.zip的文件包,里面不是正好有图片嘛,它正好需要这些啊,于是想到了这个问题的解决办法【已解决】ValueError: zero-size array to reduction operation minimum which has no identity-CSDN博客那问题不是在这加载的, 那就好玩了,肯定在其他地方,但是究竟在哪呢?回想一下,我们在加载数据的时候使用到相应的yaml文件的,那yaml文件肯定有相应的相应的配置文件.这个错误通常是因为在执行某种汇总操作(例如最小值、最大值、平均值等)时,被操作的数组是一个零大小的数组,而这种操作不支持对零大小的数组进行操作。打印相应的数据,但是发现对应的x是空值,那肯定是没办法找相应的最小值或者最大值啊!ok,这个时候就明白了,是在加载数据的时候加载到了空值,那加载数据在哪呢?这个时候会发现,在上面给的。https://blog.csdn.net/BetrayFree/article/details/134151000?spm=1001.2014.3001.5502

完结撒花

        中间失败的确实太多了,感觉挺不舒服的,但是要用心观察,就能发现出路.

        不过这里面有一个细节没有提,就是为什么在我处理上面的问题的时候为什么会出现这种问题呢?是因为我把其他加载器配置文件放到了这里边,相当于驴头不对马嘴了,自然会出现这么多问题拉.

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐