SKN/Remind

sk네트웍스 family AI 캠프 11기 5월 1주차 회고록

claovy☘️ 2025. 5. 12. 09:08

회고기간 : 2025.05.07수~2025.05.09금

이번 주차는 자연어 - 이미지 멀티모달 기법에 대해 배웠다

CNN (합성곱 신경망)

합성곱이란?
이미지 처리에서 주변 픽셀과의 가중합을 계산하여 특징을 추출하는 연산
합성곱 연산은 커널(필터)를 사용하여 입력 데이터와의 내적을 수행한다.
CNN 구성 개요
  • 합성곱 계층 : 필터(커널)을 사용하여 이미지의 특징 추출
  • 풀링 계층 : 데이터의 크기를 줄이고 중요한 특징을 유지하여 연산량 감소
  • 완전 연결 계층 : 최종적으로 학습된 특징을 바탕으로 분류 또는 회귀
  • 배치 처리 : 여러개의 입력 데이터를 한 번에 연산하는 방식, 학습을 안정적으로 수행하고 연산 속도 향상
1. 필터 & 특징맵

 

  • 필터 : 연산에서 사용하는 커널. 학습을 통해 최적 값을 찾으며, 특정한 특징을 추출함
  • 특징맵 : 필터를 입력데이터에 적용하여 얻은 출력 / 입력 이미지에서 특정 패턴을 강조
  • => 여러 개의 필터를 사용하면 여러 개의 특징 맵이 생성되고, 각 필터는 다른 특징을 추출하도록 학습
2. 패딩 & 스트라이드

  • 패딩 : 입력 데이터의 가장자리에 특정 값을 추가하여 출력 크기를 조정
    • valid padding : 패딩을 사용하지 않아 출력 크기가 줄어듦
    • same padding : 출력 크기를 입력과 동일하게 유지하기 위해 패딩 추가
  • 스트라이드 : 필터를 이동시키는 간격 / 스트라이드가 클수록 출력크기가 작아짐 
3. 풀링 레이어
풀링이란 공간의 크기를 줄여 계산량을 감소시키고, 특징의 위치 변화에 대한 강건성을 높이는 연산
계산량을 감소하고, 과적합을 방지할 수 있다.
  • Max Pooling : 주어진 필터 내에서 가장 큰 값을 선택 
  • Min Pooling : 주어진 필터 내에서 가장 작은 값을 선택
  • Average Pooling : 필터 내의 모든 값을 평균 내어 출력 
  • Global Pooling : 전체 입력을 하나의 값으로 변환
4. CNN의 순전파 과정 

  1. 입력 이미지 전달: 모델의 입력으로 이미지 데이터를 받는다.
  2. 합성곱 연산: 필터를 사용하여 특징 맵을 생성한다.
  3. 활성화 함수 적용: 비선형 활성화 함수를 통해 특징 맵에 비선형성을 부여한다.
  4. 풀링 연산: 풀링 레이어를 통해 공간적 크기를 축소한다.
  5. 완전 연결 레이어: 1차원 벡터로 변환하여 최종 출력을 계산한다.

CNN 모델

1. LeNet

2. AlexNet

3. VGGNet

4. ResNet

5. InceptionNet / DenseNet / MobileNet

 

Style Transfer Learning (스타일 전이 학습)

Style Transfer는 하나의 이미지로부터 콘텐츠를, 다른 이미지로부터 스타일을 추출하여 두 요소를 결합한 새로운 이미지를 생성하는 기법이다.
  • 콘텐츠 : 이미지의 윤곽, 구조, 배치 등 실제 장면을 구성하는 정보
  • 스타일 : 색상 분포, 질감, 붓 터치 등의 시각적 요소로서 예술적인 표현에 해당

=> Style Transfer는 일반적으로 사전 학습된 CNN의 중간 계층에서 추출된 Feature Map을 사용하여 콘텐츠와 스타일을 분리한다

 

스타일 전이 학습의 핵심원리
: 콘텐츠, 스타일을 반영한 손실함수를 설계하여 새로운 이미지를 반복적으로 업데이트 한다.

 

1. Content Loss

- 콘텐츠 이미지와 생성 이미지의 중간 feature map 간의 차이를 계산

- 일반적으로 vgg-19의 conv4_2 층의 출력을 기준으로 한다

 

2. Style Loss

- 스타일 이미지와 생성 이미지의 feature map을 Gram Matrix로 변환하여 두 스타일 간 차이를 계산한다

- Gram Matrix는 feature map의 상호 상관관계를 측정하는 행렬 

 

3. Total Variation Loss

- 생성 이미지의 필셀 간 차이를 줄여 더 부드럽고 자연스러운 이미지를 만든다 

# 스타일 전이 학습

# 콘텐츠 손실
for i in range(200):
  target_features = get_features(target, vgg)
  content_loss = torch.mean((target_features['conv4_2'] - content_features['conv4_2']) ** 2)

# 스타일 손실
  style_loss = 0
  for i in style_grams:
    target_gram = gram_matrix(target_features[i])
    style_gram = style_grams[i]
    layer_loss = torch.mean((target_gram - style_gram) ** 2)
    style_loss += layer_loss / (target_features[i].shape[1] ** 2)

# 총 손실 계산
  total_loss = content_weight * content_loss + style_weight * style_loss
  optim.zero_grad()
  total_loss.backward()
  optim.step()

GAN 

GAN은 Generator, Discriminator 두 모델이 서로 경쟁하면서 학습하는 방식이다.
생성자는 가짜 이미지를 만들고, 판별자는 그것이 진짜인지 가짜인지 구분한다.

 

  • Generator : 무작위 노이즈를 받아서 진짜 같은 이미지를 생성
  • Discriminator : 진짜 이미지와 Generator가 만든 이미지를 구분하여 진짜 가짜를 판별 

[ 생성기 기울기 소실 문제를 해결하기 위한 기법 ]

  • Label Smoothing: 정답을 1.0 대신 0.9로 설정하여 D의 확신을 줄이고 G에 학습 여지를 줌
  • One-sided Label Flipping: 진짜와 가짜 레이블을 일부러 바꿔서 학습 안정성 증가
  • Wasserstein GAN (WGAN): 비용함수를 Earth Mover Distance로 바꾸어 gradient가 0이 되지 않도록 함
  • Gradient Penalty (WGAN-GP): Discriminator의 기울기를 일정하게 유지하여 Lipschitz 조건을 만족하게 함

 

💡 Keep

프로젝트 진행 잘하기 

 

⚠️ Problem

이번주는 없습니다

 

🔥 Try

저번주와 마찬가지로 제때 복습하고 뭐든 방향성부터 잘 설계하기