TL;DR
작성자는 CIFAR 이미지 분류기를 만든 뒤 Diffusion model의 Noise Scheduler, Forward Diffusion, UNET을 직접 구현하며 이미지 생성 프로젝트를 확장했습니다. PyTorch indexing 오류와 장시간 학습 문제를 겪었지만 TensorBoard로 loss 추세를 확인하고 SGD를 AdamW로 바꾸었으며, M2 Air의 MPS를 활용해 연산 속도도 개선했습니다. CIFAR의 32×32 출력에서 Flowers102의 256×256 이미지로 전환하는 과정에서는 VAE를 UNET과 결합했다가 색이 뒤섞인 결과를 얻어 VAE를 제거하고 UNET을 다시 구성했습니다. 약 561번째 epoch와 반복 학습 100회 이후 꽃 형태가 나타나기 시작했지만 아직 출력 품질과 loss 정체 문제는 남아 있습니다.
실용적 조언
- 학습 loss를 직전 값과 단순 비교하는 대신 TensorBoard로 전체 추세를 기록하면 장기 학습에서 발산이나 정체 시점을 더 쉽게 파악할 수 있습니다.
- PyTorch에서 연산하는 tensor와 model이 같은 device에 있는지 확인해야 하며, MPS나 CUDA를 사용할 때 device 이동을 일관되게 관리해야 합니다.
- 새 데이터셋으로 확장할 때는 이미지 해상도와 UNET 구조를 함께 조정하고, VAE를 결합하는 경우 압축 표현의 shape와 복원 결과가 UNET의 입력·출력과 맞는지 단계별로 확인해야 합니다.
섹션별 상세
용어 해설
- 노이즈 스케줄러(Noise Scheduler)
- — Diffusion model에서 이미지에 노이즈를 어느 단계에서 얼마나 추가할지 정하는 구성 요소입니다. Forward Diffusion 동안 원본 이미지에 점진적으로 노이즈를 섞어 순수한 노이즈에 가깝게 만들며, 이후 UNET이 각 단계의 노이즈를 줄이는 학습 과정에 필요한 시간별 입력을 만듭니다.
- 순방향 확산(Forward Diffusion)
- — 원본 이미지에 여러 단계로 노이즈를 추가해 점차 알아보기 어려운 상태로 바꾸는 과정입니다. 글에서는 Noise Scheduler가 이 과정을 제어하고, 학습 중 UNET이 각 단계에서 제거해야 할 노이즈 패턴을 익히도록 입력을 생성하는 흐름으로 다뤄집니다.
- UNET
- — Diffusion model에서 노이즈가 섞인 이미지의 노이즈를 예측하거나 줄이는 데 사용하는 신경망 구조입니다. 기본 구조만으로는 데이터셋에 맞는 출력 품질을 보장하기 어려워 병목층 길이, convolution 수, 추가 layer 등을 데이터 해상도와 형태에 맞게 조정해야 합니다.
- Variational Autoencoder
- — 이미지를 더 작고 고차원적인 표현으로 압축했다가 복원하는 생성 모델 계열입니다. 글에서는 VAE를 먼저 학습한 뒤 UNET과 결합했지만 색이 뒤섞인 출력이 나왔고, 결국 VAE를 제거하고 256×256 입력을 직접 처리하도록 UNET을 다시 작성했습니다.
- TensorBoard
- — 학습 중 기록한 loss 같은 지표를 시간에 따른 그래프로 확인하는 도구입니다. 작성자는 콘솔 색상으로 직전 값과 비교하던 방식 대신 TensorBoard에서 loss의 전체 추세를 확인하면서 모델이 제대로 학습되는지 더 쉽게 판단할 수 있었다고 말합니다.
- MPS
- — Apple Silicon GPU에서 PyTorch 연산을 실행하기 위한 API입니다. 글에서는 M2 Air에서 MPS를 사용했고, 서로 연산하는 두 tensor가 같은 device에 있어야 한다는 조건을 뒤늦게 파악한 뒤 코드를 수정해 학습 속도를 높였습니다.
언급된 도구
Tensor 연산, UNET 학습, MPS와 CUDA 기반 device 실행에 사용했습니다.
학습 loss의 전체 추세를 그래프로 확인하는 데 사용했습니다.
Diffusion model 구현을 시작하고 코드를 작성하는 편집 환경으로 사용했습니다.
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.