Torchvision transforms.toPILImage()TypeError:函数正好采用1个参数(给定3个)

时间:2020-03-31 19:10:43

标签: python anaconda python-imaging-library conda torchvision

来自Anaconda 枕头-> 7.00 火炬视觉-> 0.5.0

我今天安装了最新的Linux版Anaconda(Anaconda3-2020.02-Linux-x86_64.sh),并运行以下命令,

conda create -n py36 python=3.6
conda activate py36
conda install -c pytorch torchvision
conda install -c pytorch pytorch
conda install -c conda-forge opencv
conda install -c conda-forge python-pptx
conda install -c conda-forge labelme
conda install -c conda-forge tensorboardx
conda install -c anaconda ipywidgets
conda install -c conda-forge ipyvolume
conda install -c conda-forge jupyter_contrib_nbextensions 
conda install -c anaconda pytables

jupyter-notebook

运行与我几个月前运行的完全相同的代码,

trusted code

# visualize a single example to verify that it is correct
( img, patch_mask, patch_mask_weight, fname) = dataset[ "train"][ 70]

我遇到以下错误,

error

如何解决?请让我知道是否需要更多代码。

更新我

所示代码对分别在深度学习训练期间要忽略的背景,前景和区域的两个RGB图像和具有唯一值0、1、2的标签图像进行了一系列变换。下面的输出来自在上面显示的错误跟踪中显示的代码中添加的print语句。

Output

对于第一个RGB图像,看起来一切正常,而对于标签图像,则存在问题。具体地说,旋转转换是一个有问题的转换,其中color属性具有一个元组作为值。但是,ToPILImage转换中的同一属性的值是单个整数。

谢谢

1 个答案:

答案 0 :(得分:0)

调用转换RandomRotation并创建Image类的新实例时出现错误。特别是,文件core.fill()中函数return im._new( core.fill(mode, size, color))中函数new第2544行anaconda3/envs/py36/lib/python3.6/site-packages/PIL/Image.py中的函数core是'evil'的来源。

anaconda3/envs/py36/lib/python3.6/site-packages/PIL/_imaging.cpython-36m-x86_64-linux-gnu.so是文件from . import _imaging as core的别名,当在同一文件(Image.py)的第69行作为core.fill(mode, size, color))导入时。

取决于mode的功能colorcolor有不同的期望。 anaconda3/envs/py36/lib/python3.6/site-packages/torchvision/transforms/functional.py始终是3元组,文件rotate中的第726-727行是函数RandomRotation,即mode == RGB变换。

如果mode == L一切正常。如果TypeError: function takes exactly 1 argument (3 given),则引发mode == F。如果TypeError: must be real number, not tuple,则引发mode in [ 'L', 'F']。我发现鉴于我的图片正在转换。

对于color,参数mode必须是一个整数。对于其他if mode in [ 'L', 'F'] and isinstance( color, tuple): color = color[ 0] return im._new( core.fill(mode, size, color)) 也可能是正确的。

因此,我通过将代码更新为来解决了我的问题,

anaconda3/envs/py36/lib/python3.6/site-packages/PIL/Image.py

在文件new中,功能为new

此更改最接近该问题。但是,由于npm似乎可用于每次转换,因此最好在其他地方更改代码,以使更改对其余代码的影响最小。