1. 프로젝트 디렉터리 구조 분석
DiffusionSat 프로젝트는 다음과 같은 폴더와 파일로 구성되어 있습니다:
DiffusionSat/
├── datasets/ # 훈련 및 검증 데이터 파일 저장
├── diffusionsat/ # DiffusionSat 모델의 핵심 구현 코드
├── launch_accelerate_configs/ # 가속화된 훈련을 위한 설정 파일 (accelerate 도구 관련)
├── launch_scripts/ # 훈련 실행을 위한 bash 스크립트
├── notebooks/ # 모델 시연 및 실험용 주피터 노트북
├── src/ # 프로젝트 핵심 로직 및 유틸리티 소스 코드
├── LICENSE # Apache-2.0 라이선스 파일
├── Makefile # 프로젝트 빌드용 Makefile
├── README.md # 프로젝트 개요 및 사용법
├── pyproject.toml # Python 프로젝트 의존성 설정
├── requirements_remaining.txt # 필요 Python 패키지 목록
├── setup.cfg 및 setup.py # 패키지 설치 설정 파일
└── train_controlnet.py # ControlNet 학습 전용 Python 스크립트
각 디렉터리와 파일의 역할을 설명합니다:
datasets/: 모델 훈련에 사용되는 원본 및 전처리된 데이터셋을 관리합니다.diffusionsat/: 모델 구조, 학습 루프, 샘플링 함수 등 주요 알고리즘이 포함된 핵심 디렉터리입니다.launch_accelerate_configs/:accelerate라이브러리와 함께 사용되며, 분산 훈련 환경 및 옵티마이저 설정을 정의합니다.launch_scripts/:train_controlnet.py등 스크립트를 실행하기 위한 쉘 스크립트를 제공합니다.notebooks/: 예제 데이터로 모델 추론을 테스트해 볼 수 있는 주피터 노트북 파일입니다.train_controlnet.py: ControlNet 모델만 별도로 학습시키는 엔트리 포인트 스크립트입니다.
2. 프로젝트 실행 방식
모델 훈련은 주로 launch_scripts/ 내에 있는 bash 스크립트를 통해 이루어집니다. 주요 실행 스크립트는 다음과 같습니다:
launch_256_fmow_satlas_spacenet_img_txt_md.sh: (텍스트, 메타데이터) → 단일 이미지 생성 모델 훈련용 스크립트입니다.launch_texas_md_controlnet.sh: 텍사스 주택 데이터셋을 이용한 초해상도(super-resolution) 제어 학습을 수행합니다.launch_fmow_md_superres.sh: fMoW Sentinel 위성 이미지를 fMoW RGB 수준으로 초해상도 복원하는 태스크용 스크립트입니다.
각 스크립트는 일반적으로 아래 과정을 자동화합니다:
- 설정 파일을 로드하여 하이퍼파라미터를 불러옵니다.
- CUDA 디바이스, 데이터 경로 등 필요한 환경 변수를 설정합니다.
accelerate launch명령 또는 직접train_controlnet.py를 호출하여 훈련을 시작합니다.
3. 설정 파일 구조 및 수정 방법
훈련 환경 설정은 launch_accelerate_configs/ 디렉터리에 YAML 형식으로 저장됩니다. 아래는 예시 설정입니다:
gradient_accumulation_steps: 1
plugins:
- DDPPlugin
- fsdpPlugin
optimizer:
name: AdamW
params:
lr: 0.0001
betas:
- 0.9
- 0.999
weight_decay: 0.01
model:
unet:
in_channels: 3
...
설정 파일에서 수정 가능한 주요 항목:
- gradient_accumulation_steps: 그래디언트 누적 횟수. 배치 크기와 GPU 메모리에 맞게 조정합니다.
- plugins: 분산 훈련 플러그인 (예:
DDPPlugin,fsdpPlugin)을 선택할 수 있습니다. - optimizer: 학습률, 베타 값, 가중치 감쇠 등 AdamW 옵티마이저 파라미터를 정의합니다.
- model: U-Net 블록 수, 채널 수 등 모델 아키텍처 세부 사항을 조정합니다.
이 가이드가 DiffusionSat 프로젝트의 구조와 사용법을 이해하는 데 도움이 되기를 바랍니다.