(解决方案)使用随机擦除后报错AttributeError: ‘NoneType’object has no attribute ‘shape’
问题描述: 最近我想要在图像数据增强阶段加入随机擦除transforms.RandomErasing()
加入后发现一直报错AttributeError: ‘NoneType’ object has no attribute ‘shape’,查了很多都是在说opencv巴拉巴拉的问题,没有与我类似的问题,因此把解决方案记录下来。
其实问题很简单,我之前一直是把transforms.RandomErasing()
加在随机水平翻转transforms.RandomHorizontalFlip()
等方法前后,经过看源码,我发现官方给出了使用范例(源码相当有用!)
如图,随机擦除方法是需要放在最后这个位置的,这是什么原因呢?这里需要先经过transform.ToTensor()
,把一个取值范围是[0,255]的PIL.Image 转换成 Tensor,之后才可以进行后续随机擦除的操作,因为随机擦除里面需要获取img.shape,而img需要是tensor,如下图。
(题外话,这个ToTnsor()能将原图像(H,W,C)转为(C,H,W))
确实困扰了我一小段时间,就特地记录下来啦。