pytorch/vision

Bug: torchvision/transforms/functional/to_pil_image always converts 1-channel (gray) FloatTensor images to 8-bit unsigned int

Open

#448 opened on 2018年3月19日

GitHub で見る
 (16 comments) (2 reactions) (2 assignees)Python (15,050 stars) (6,858 forks)batch import
bughelp wantedmodule: documentation

説明

  • 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.

コントリビューターガイド