-
[torchvision] ToTensor 알아보기AI-ML 2024. 3. 1. 09:08728x90반응형
- 목차
들어가며.
이번 글에서는 torchvision 의 To_Tensor 기능에 대해서 알아보도록 하겠습니다.
ToTensor 는 torchvision.transforms 모듈 내의 함수입니다.
이는 Image 를 Tensor 로 변형할 수 있는 기능을 제공합니다.
예를 들어 임의의 이미지를 To_Tensor 함수를 이용하여 Tensor 로 변형해보도록 하겠습니다.
사용할 이미지는 임의의 이미지로 176x197 사이즈의 이미지입니다.
import torchvision from PIL import Image image = Image.open("../images/sample1.jpg") to_tensor = torchvision.transforms.ToTensor() tensor = to_tensor(image) print(tensor.shape)
torch.Size([4, 176, 197])
하나의 이미지를 To_Tensor 함수를 통해 Transformation 한 결과로써 하나의 Tensor 가 생성됩니다.
그리고 Tensor 의 Shape 는 (4, 176, 197) 로 나타납니다.
이를 분석해보면 Channel, Width, Height 로 구성됩니다.
Channel.
Image Tensor 의 첫번째 Dimension 은 Channel 입니다.
Channel 은 어떠한 컬러들로 구성된 이미지임을 나타냅니다.
RGB, RGBA, CYMK 등 하나의 이미지는 여러가지 컬러들의 조합으로 구성됩니다.
검정색의 경우에는 (255, 255, 255) 와 같은 구성을 가지며, RGB 에 해당하는 모든 색상의 합은 검정이 되죠.
이러한 방식으로 모든 Image Tensor 는 Channel 을 가집니다.
위의 결과의 Image Tensor 는 4개의 Channel 을 가집니다.
이러한 경우에 4번째 Channel 은 Alpha 의 값을 가지며, 이는 투명도를 뜻합니다.
그래서 4번째 Channel 인 Alpha 는 보통 1 또는 255 를 뜻하는 Maximum 값을 가집니다.
아래는 검정색 이미지 파일을 To_Tensor 함수를 통해서 Tensor 로 변형하는 예시입니다.
< pure_black.jpeg >
import torchvision from PIL import Image image = Image.open("../images/pure_black.jpeg") to_tensor = torchvision.transforms.ToTensor() tensor = to_tensor(image) print(tensor.shape) print(tensor)
torch.Size([3, 2160, 3840]) tensor([[[0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], ..., [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.]], [[0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], ..., [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.]], [[0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], ..., [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.]]])
위 출력 결과처럼 Tensor 의 Shape 는 (3, 2160, 3840) 이며 이는 3개의 Channel 과 2160x3840 의 Height 와 Width 를 의미합니다.
그리고 각 Channel 의 값은 검정색을 표현하기 위해 모든 값이 0 으로 설정됩니다.
순백의 이미지는 아래와 같이 모든 Tensor 의 값이 1 로 설정됩니다.
torch.Size([4, 191, 248]) tensor([[[1., 1., 1., ..., 1., 1., 1.], [1., 1., 1., ..., 1., 1., 1.], [1., 1., 1., ..., 1., 1., 1.], ..., [1., 1., 1., ..., 1., 1., 1.], [1., 1., 1., ..., 1., 1., 1.], [1., 1., 1., ..., 1., 1., 1.]], [[1., 1., 1., ..., 1., 1., 1.], [1., 1., 1., ..., 1., 1., 1.], [1., 1., 1., ..., 1., 1., 1.], ..., [1., 1., 1., ..., 1., 1., 1.], [1., 1., 1., ..., 1., 1., 1.], [1., 1., 1., ..., 1., 1., 1.]], [[1., 1., 1., ..., 1., 1., 1.], [1., 1., 1., ..., 1., 1., 1.], [1., 1., 1., ..., 1., 1., 1.], ..., [1., 1., 1., ..., 1., 1., 1.], [1., 1., 1., ..., 1., 1., 1.], [1., 1., 1., ..., 1., 1., 1.]], [[1., 1., 1., ..., 1., 1., 1.], [1., 1., 1., ..., 1., 1., 1.], [1., 1., 1., ..., 1., 1., 1.], ..., [1., 1., 1., ..., 1., 1., 1.], [1., 1., 1., ..., 1., 1., 1.], [1., 1., 1., ..., 1., 1., 1.]]])
반응형'AI-ML' 카테고리의 다른 글
[pytorch] nn.Embedding 알아보기 (0) 2024.03.08 pytorch - Conv2D 알아보기 ( CNN ) (0) 2024.03.03 [pytorch] NLLLoss 알아보기 (Negative Log Likelihood) (0) 2024.02.22 Sigmoid Activation Saturation 알아보기 (0) 2024.01.10 [PyTorch] RNN 모듈 알아보기 (0) 2023.12.29