MindSpore数据增强报错:对编码数据使用Decode(),对解码数据使用ToPIL()。

使用GeneratorDataset进行数据加载,再基于map操作使用py_transforms做数据增强

关于py_transform: mindspore-dataset-vision-py-transforms

有时候会报出了如下错误:

TypeError: img should be PIL image. Got <class ‘numpy.ndarray’>. Use Decode() for encoded data or ToPIL() for decoded data.

打开脚本分析一下:

原因分析:

基于GeneratorDataset读取完数据,data 和 label字段转为numpy.ndarray,但是dataset.map中使用的resize_op,是py_transform的算子,py_transform的算子是基于PIL库实现的,其要求接收的数据类型为PIL.Image,因此对于输入的numpy类型数据,就会报出这个错误。

解决办法:

  • 如果需要使用py_transforms算子进行处理的话,需要使用ToPIL算子转为PIL Image对象,然后才能Resize操作,并且在处理完后,也需要显示调用下 ToTensor转为Tensor。新增如下的to_pil操作即可

其他错误相关帖: