본문 바로가기
AI/딥러닝

[AI 부트캠프] DAY 94 - 트랙학습 CV 8

by HOHHOH 2023. 12. 2.

[오늘의 일지]

트랙학습 실시간 강의 - Image segmentation(Unet), Generative Models 맛보기

[상세 내용]

Image segmentation(Unet)

- 오늘은 어제 사용했던 데이터에 모델만 Unet을 적용시켜서 학습을 시킨 뒤 성능을 확인해 보았습니다. 일반 인코딩 디코딩 모델보다 로스값이 빠르게 내려가는 것을 확인했습니다. 그리고 녹화 강의를 들을 때 이해하기 힘들었던 Unet 코드에 대해서 점진적인 단계를 거치고 사용해 보니 훨씬 이해하기 좋았습니다.

 

모델 코드

class Down(nn.Module):
    def __init__(self, in_channels, out_channels):
        super(Down, self).__init__()
        self.conv = nn.Sequential(
            nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=2, padding=1),
            nn.BatchNorm2d(out_channels),
            nn.ReLU()
        )

    def forward(self, x):
        return self.conv(x)

class Up(nn.Module):
    def __init__(self, in_channels, out_channels):
        super(Up, self).__init__()
        self.up = nn.ConvTranspose2d(in_channels, out_channels, kernel_size=2, stride=2)
        self.conv = nn.Sequential(
            nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1),
            nn.BatchNorm2d(out_channels),
            nn.ReLU()
        )

    def forward(self, x1, x2):
        x1 = self.up(x1)
        x = torch.cat([x2, x1], dim=1)
        return self.conv(x)

class UNet(nn.Module):
    def __init__(self, in_channels=3, out_channels=1):
        super(UNet, self).__init__()
        self.down1 = Down(in_channels, 64)
        self.down2 = Down(64, 128)
        self.down3 = Down(128, 256)
        self.down4 = Down(256, 512)

        self.up1 = Up(512, 256)
        self.up2 = Up(256, 128)
        self.up3 = Up(128, 64)
        self.final_conv = nn.ConvTranspose2d(64, out_channels, kernel_size=3, stride=2, padding=1, output_padding=1)

    def forward(self, x):
        x1 = self.down1(x)
        x2 = self.down2(x1)
        x3 = self.down3(x2)
        x4 = self.down4(x3)

        x = self.up1(x4, x3)
        x = self.up2(x, x2)
        x = self.up3(x, x1)
        x = self.final_conv(x)

        return x

 

결과

- 어제의 결과와 비교해 보면 로스값의 크기가 훨씬 낮아진 것을 확인할 수 있습니다.

 

Generative Models

- 생성 모델(Generative Model)은 주어진 데이터의 분포를 학습하여, 새로운 데이터를 생성하는 모델입니다. 이 모델은 주어진 데이터셋에서 특정 패턴이나 규칙을 학습하고, 이를 기반으로 새로운 데이터를 생성합니다.

 

Probabilistic  생성 모델

  • Generative Adversarial Networks (GANs): 생성자(Generator)와 감별자(Discriminator)라는 두 신경망이 경쟁하면서 학습하는 구조를 가지고 있습니다. 생성자는 실제 데이터와 비슷한 가짜 데이터를 생성하고, 감별자는 이 둘을 구별하는 역할을 합니다. 이 과정을 통해 생성자는 더 진짜 같은 데이터를 만들어내게 되며, 감별자는 더욱 정교한 판별 능력을 향상합니다.
  • Variational Autoencoders (VAEs): VAEs는 데이터를 저차원의 잠재 공간으로 압축하는 인코더와, 잠재 공간에서 샘플링하여 원래 데이터를 복원하는 디코더로 구성됩니다. 이 모델은 잠재 공간에서 무작위로 샘플링함으로써 다양한 형태의 데이터를 생성할 수 있습니다.

Deterministic 생성 모델

  • Autoencoders: Autoencoder는 입력 데이터를 학습하여 작은 차원의 표현으로 인코딩한 후, 디코더를 사용하여 원래의 데이터를 복원합니다. 학습된 autoencoder는 새로운 데이터를 생성하는 데 사용될 수 있습니다.
  • PixelRNN/PixelCNN: 이 모델은 이미지의 각 픽셀을 순차적으로 생성하는 방식으로 이미지를 생성합니다. 이전에 생성된 픽셀들을 이용하여 다음 픽셀을 예측합니다.

 

[마무리]

 오늘은 segmentation 실습을 마무리해 보고 생성 모델에 대해서 간단하게 알아보는 수업을 들었습니다. 실시간 강의는 오늘이 마지막이었고 다음 주에 녹화강의로 보충할 수 있는 내용을 좀 더 듣게 되면 부트캠프의 공식적인 수업일정은 마무리가 될 거 같습니다. 그 뒤로는 프로젝트가 두 번 남아 있는데 마지막 프로젝트는 기간이 길어서 그때 부족한 부분을 개인적으로 학습하면 될 거 같습니다. 

반응형

댓글