회고기간 : 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차원 벡터로 변환하여 최종 출력을 계산한다.
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
저번주와 마찬가지로 제때 복습하고 뭐든 방향성부터 잘 설계하기

'SKN > Remind' 카테고리의 다른 글
| sk네트웍스 family AI 캠프 11기 5월 3주차 회고록 (2) | 2025.05.24 |
|---|---|
| sk네트웍스 family AI 캠프 11기 5월 2주차 회고록 (0) | 2025.05.19 |
| sk네트웍스 family AI 캠프 11기 4월 5주차 회고록 (1) | 2025.05.04 |
| sk네트웍스 family AI 캠프 11기 4월 4주차 회고록 (3) | 2025.04.28 |
| sk네트웍스 family AI 캠프 11기 4월 3주차 회고록 (1) | 2025.04.20 |