Torchvision transforms.toPILImage() TypeError: function takes exactly 1 argument (3 given)

Torchvision transforms.toPILImage() TypeError: function takes exactly 1 argument (3 given)

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

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

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

运行 与我运行几个月来一直使用的完全相同的代码,

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

我收到以下错误,

如何解决?如果需要更多代码,请告诉我。

更新我

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

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

谢谢

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

的来源

core 是文件 anaconda3/envs/py36/lib/python3.6/site-packages/PIL/_imaging.cpython-36m-x86_64-linux-gnu.so 的别名,当在同一文件 (Image.py).

的第 69 行作为 from . import _imaging as core 导入时

函数 core.fill(mode, size, color)) 取决于 modecolor 有不同的期望。 color 始终是一个 3 - 元组,文件 anaconda3/envs/py36/lib/python3.6/site-packages/torchvision/transforms/functional.py 中的第 726 - 727 行,函数 rotateRandomRotation transform.

如果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 似乎用于每个转换,因此最好在其他地方更改代码,以便更改对其余代码的影响尽可能小。