Autoencoder와 U-Net (1)

김민준·2025년 9월 16일

1. Autoencoder

(1) 기본 개념

Autoencoder는 입력 데이터를 압축(Encoding)했다가 다시 복원(Decoding) 하는 신경망 구조다.

  • 학습 목표: 입력과 출력이 최대한 같아지도록 학습
  • 특징: 학습 과정에서 데이터의 핵심 패턴만 추출
X  Encoder  z  Decoder  X^X \; \xrightarrow{\text{Encoder}} \; z \; \xrightarrow{\text{Decoder}} \; \hat{X}

여기서 zz는 잠재 벡터(latent vector)다.


(2) 구조

  1. Encoder: 입력을 점점 더 작은 차원으로 줄이는 역할 (Conv/Pooling, FC Layer 등 사용)
  2. Latent Space: 입력 정보가 집약된 압축 표현
  3. Decoder: 압축된 정보를 다시 원래 차원으로 복원

(3) 주요 변형

  • Denoising Autoencoder (DAE)

    • 입력에 노이즈를 추가하고, 원래 입력을 복원하도록 학습
    • 데이터 노이즈 제거에 활용됨
  • Sparse Autoencoder

    • 잠재공간 표현에 sparsity 제약을 줘서 더 해석력 있는 특징을 학습
  • Variational Autoencoder (VAE)

    • 잠재 공간을 확률 분포로 모델링
    • 새로운 샘플 생성이 가능 (생성 모델)

(4) 활용 사례

  • 차원 축소 (PCA보다 강력한 비선형 압축 가능)
  • 데이터 노이즈 제거 (이미지 복원)
  • 이상 탐지 (재구성 오차가 크면 이상치로 판단)
  • 생성 모델 (VAE, GAN과 결합)

2. U-Net

(1) 기본 개념

U-Net은 2015년 바이오메디컬 이미지 분할 논문에서 제안된 모델로, **픽셀 단위의 이미지 분할(Segmentation)**에 특화된 아키텍처다.

  • 이름이 U-Net인 이유: 구조가 U자 형태로 생겼기 때문이다.
  • 핵심 아이디어: 인코더에서 뽑아낸 저해상도 특징과, 원래 이미지의 고해상도 특징skip connection으로 함께 사용

(2) 구조

  1. Contracting Path (인코더)

    • Conv + Pooling 반복
    • 점점 더 작은 해상도에서 큰 receptive field를 가진 특징 추출
  2. Bottleneck

    • 인코더와 디코더 사이, 가장 압축된 특징 표현
  3. Expansive Path (디코더)

    • 업샘플링(Transpose Convolution, UpConv)을 통해 해상도 복원
    • Skip Connection으로 인코더의 같은 단계 피처맵을 합쳐 공간 정보 보존

(3) 수식 관점

디코더 단계에서의 skip connection은 다음과 같이 표현된다.

Fup=UpConv(Fdec)    FencF_{up} = \text{UpConv}(F_{dec}) \; \oplus \; F_{enc}

여기서

  • FdecF_{dec}: 디코더 피처맵
  • FencF_{enc}: 대응되는 인코더 피처맵
  • \oplus: 채널 차원에서의 결합(concatenation)

(4) 변형 모델

  • U-Net++: skip connection을 더 세밀하게 조정
  • Attention U-Net: skip connection에 attention 기법 적용
  • 3D U-Net: 의료 CT/MRI 같은 3D 데이터 처리

(5) 활용 사례

  • 의료 영상 분할 (암 조직, 장기 경계 추출)
  • 자율주행 차선 인식
  • 위성 이미지 분석 (도로, 건물 추출)
  • 스타일 변환, 초해상화 등 다양한 비전 작업

3. Autoencoder vs U-Net

항목AutoencoderU-Net
목적입력을 압축/복원픽셀 단위 출력 (분할)
구조Encoder + DecoderEncoder + Decoder + Skip Connection
정보 처리잠재 벡터 z만 이용저해상도 + 고해상도 정보 모두 이용
출력 형태입력과 유사한 복원입력과 동일 크기의 Segmentation Map
주요 활용차원 축소, 이상 탐지, 노이즈 제거의료 영상, 자율주행, 이미지 분할

4. PyTorch 코드 스케치

Autoencoder

import torch.nn as nn

class Autoencoder(nn.Module):
    def __init__(self):
        super().__init__()
        self.encoder = nn.Sequential(
            nn.Linear(784, 128), nn.ReLU(),
            nn.Linear(128, 64), nn.ReLU()
        )
        self.decoder = nn.Sequential(
            nn.Linear(64, 128), nn.ReLU(),
            nn.Linear(128, 784), nn.Sigmoid()
        )
    def forward(self, x):
        z = self.encoder(x)
        return self.decoder(z)

U-Net (간단 버전)

class UNet(nn.Module):
    def __init__(self):
        super().__init__()
        self.down1 = nn.Sequential(nn.Conv2d(1,64,3,padding=1), nn.ReLU())
        self.down2 = nn.Sequential(nn.Conv2d(64,128,3,padding=1), nn.ReLU())
        self.up1   = nn.ConvTranspose2d(128,64,2,stride=2)
        self.final = nn.Conv2d(64,1,1)
    def forward(self, x):
        d1 = self.down1(x)
        d2 = self.down2(d1)
        u1 = self.up1(d2)
        u1 = u1 + d1   # skip connection
        return self.final(u1)

✅ 정리

  • Autoencoder는 입력 압축-복원 과정으로 특징을 학습하며, 차원 축소/노이즈 제거/이상 탐지 등에 활용된다.
  • U-Net은 픽셀 단위 출력을 목표로 하며, skip connection을 활용해 위치 정보를 보존한다.
  • 둘 다 Encoder-Decoder 구조지만, 출력 목표와 정보 활용 방식이 다르다.
profile
지금까지 해온 여러 활동들을 간략하게라도 정리해보고자 합니다.

0개의 댓글