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

**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 <class 'list'>.
```

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. 根因分析**

![](figures/10-50.png)

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

![](figures/11.png)

调试发现input\_img类型是list。

![](figures/12.png)

查看生成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\]，即是从列表中取出具体的图片。

修改后正常运行。

