ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [torchvision] ToTensor 알아보기
    AI-ML 2024. 3. 1. 09:08
    728x90
    반응형

     

    - 목차

     

    들어가며.

    이번 글에서는 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.]]])

     

     

    반응형
Designed by Tistory.