图像类型错误导致执行报错:TypeError: img should be PIL image or NumPy array. Got <class ‘list‘>.

  • Post author:
  • Post category:其他



1.系统环境

硬件环境(Ascend/GPU/CPU): GPU

软件环境:

– MindSpore 版本: 1.7.0

执行模式: 动态图(PYNATIVE_MODE) – Python 版本: 3.7.6

– 操作系统平台: linux


2.报错信息

2.1 问题描述

图像的类型应该是PIL image or NumPy array,但传入的是list类型的,导致执行报错。

2.2 报错信息

TypeError: img should be PIL image or NumPy array. Got .

2.3 脚本代码

if __name__ == '__main__':

inputs = AFR.load_data(‘opencv_photo/input/’) targets = AFR.load_data(‘opencv_photo/target/’) adversarial = AFR.Attack(inputs, targets) attack_method = “non-target attack” adversarial_tensor, mask_tensor = adversarial.train(attack_method)

复制

class Attack(object):
   def init(self,input_img,target_img,seed=None):
       if (seed != None): np.random.seed(seed)
       self.MEAN = Tensor([0.485, 0.456, 0.406])
       self.STD = Tensor([0.229, 0.224, 0.225])
       self.LOSS = Tensor(0)
       self.expand_dims = mindspore.ops.ExpandDims()
       self.imageize = ToPILImage()
       self.tensorize = ToTensor()
       self.normalize = P.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
       self.resnet = get_net()
       self.input_tensor = Tensor(self.normalize(self.tensorize(input_img)))
       self.target_tensor = Tensor(self.normalize(self.tensorize(target_img)))


3.根因分析

看报错信息,翻译的意思是img应该是PIL图像或NumPy数组。而不应该是list类型。定位到错误代码行self.input_tensor = Tensor(self.normalize(self.tensorize(input_img))),说明是传入的input_img类型有问题。

调试发现input_img类型是list。

查看生成input_img的函数,发现input_img是被保存在一个列表中,所以处理图片时需要将list里面的图像拿出来。


4.解决方案

解决方案说明:把图像从list中取出。

修改后代码:


if name == 'main':


inputs = AFR.load_data('opencv_photo/input/') targets = AFR.load_data('opencv_photo/target/') adversarial = AFR.Attack(inputs[0], targets[0]) attack_method = "non-target attack" adversarial_tensor, mask_tensor = adversarial.train(attack_method)

inputs[0], targets[0],即是从列表中取出具体的图片。

修改后正常运行。



版权声明:本文为beauty0220原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。