Bug: torchvision/transforms/functional/to_pil_image always converts 1-channel (gray) FloatTensor images to 8-bit unsigned int
#448 创建于 2018年3月19日
描述
- OS: Ubuntu 16.04.4 LTS x64
- PyTorch version: 0.3.0
- Torchvision version: 0.2.0
- How you installed PyTorch (conda, pip, source): conda
- Python version: 3
- CUDA/cuDNN version: 8.0
- GPU models and configuration: Titan X (Maxwell)
ERROR: ValueError: Incorrect mode (<class 'float'>) supplied for input type <class 'numpy.dtype'>. Should be L
The torchvision transform ToPILImage(mode=float) will always break for input of type torch.FloatTensor ToPILImage() uses the internal function to_pil_image found in torchvision/transforms/functional.py
In https://github.com/pytorch/vision/blob/master/torchvision/transforms/functional.py: Line 104 checks if the input is of type torch.FloatTensor If so, line 105 scales the input by 255, but then converts it to byte Lines 113-127 check if the user-specified mode is the expected mode, and throws an error if not. The expected mode is assigned by npimg.dtype, which return np.uint8 if line 105 is executed
I believe the bug can be fixed by changing line 105 from: pic = pic.mul(255).byte() -to- pic = pic.mul(255)
Test script: import torch from torchvision import transforms a = torch.FloatTensor(1,64,64) tform = transforms.Compose([transforms.ToPILImage(mode='F')]) b = tform(a)
Please let me know if I am in error. Thank you.