BleachNick's picture
upload required packages
87d40d2
|
raw
history blame
5.47 kB

Unconditional 이미지 생성

unconditional 이미지 생성은 text-to-image λ˜λŠ” image-to-image λͺ¨λΈκ³Ό 달리 ν…μŠ€νŠΈλ‚˜ 이미지에 λŒ€ν•œ 쑰건이 없이 ν•™μŠ΅ 데이터 뢄포와 μœ μ‚¬ν•œ μ΄λ―Έμ§€λ§Œμ„ μƒμ„±ν•©λ‹ˆλ‹€.

이 κ°€μ΄λ“œμ—μ„œλŠ” 기쑴에 μ‘΄μž¬ν•˜λ˜ 데이터셋과 μžμ‹ λ§Œμ˜ μ»€μŠ€ν…€ 데이터셋에 λŒ€ν•΄ unconditional image generation λͺ¨λΈμ„ ν›ˆλ ¨ν•˜λŠ” 방법을 μ„€λͺ…ν•©λ‹ˆλ‹€. ν›ˆλ ¨ μ„ΈλΆ€ 사항에 λŒ€ν•΄ 더 μžμ„Ένžˆ μ•Œκ³  μ‹Άλ‹€λ©΄ unconditional image generation을 μœ„ν•œ λͺ¨λ“  ν•™μŠ΅ 슀크립트λ₯Ό μ—¬κΈ°μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

슀크립트λ₯Ό μ‹€ν–‰ν•˜κΈ° μ „, λ¨Όμ € μ˜μ‘΄μ„± λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ„ μ„€μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

pip install diffusers[training] accelerate datasets

κ·Έ λ‹€μŒ πŸ€— Accelerate ν™˜κ²½μ„ μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.

accelerate config

λ³„λ„μ˜ μ„€μ • 없이 κΈ°λ³Έ μ„€μ •μœΌλ‘œ πŸ€— Accelerate ν™˜κ²½μ„ μ΄ˆκΈ°ν™”ν•΄λ΄…μ‹œλ‹€.

accelerate config default

λ…ΈνŠΈλΆκ³Ό 같은 λŒ€ν™”ν˜• μ‰˜μ„ μ§€μ›ν•˜μ§€ μ•ŠλŠ” ν™˜κ²½μ˜ 경우, λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•΄λ³Ό μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

from accelerate.utils import write_basic_config

write_basic_config()

λͺ¨λΈμ„ ν—ˆλΈŒμ— μ—…λ‘œλ“œν•˜κΈ°

ν•™μŠ΅ μŠ€ν¬λ¦½νŠΈμ— λ‹€μŒ 인자λ₯Ό μΆ”κ°€ν•˜μ—¬ ν—ˆλΈŒμ— λͺ¨λΈμ„ μ—…λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

--push_to_hub

체크포인트 μ €μž₯ν•˜κ³  뢈러였기

ν›ˆλ ¨ 쀑 λ¬Έμ œκ°€ λ°œμƒν•  경우λ₯Ό λŒ€λΉ„ν•˜μ—¬ 체크포인트λ₯Ό μ •κΈ°μ μœΌλ‘œ μ €μž₯ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 체크포인트λ₯Ό μ €μž₯ν•˜λ €λ©΄ ν•™μŠ΅ μŠ€ν¬λ¦½νŠΈμ— λ‹€μŒ 인자λ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€:

--checkpointing_steps=500

전체 ν›ˆλ ¨ μƒνƒœλŠ” 500μŠ€ν…λ§ˆλ‹€ output_dir의 ν•˜μœ„ 폴더에 μ €μž₯되며, ν•™μŠ΅ μŠ€ν¬λ¦½νŠΈμ— --resume_from_checkpoint 인자λ₯Ό μ „λ‹¬ν•¨μœΌλ‘œμ¨ 체크포인트λ₯Ό 뢈러였고 ν›ˆλ ¨μ„ μž¬κ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

--resume_from_checkpoint="checkpoint-1500"

νŒŒμΈνŠœλ‹

이제 ν•™μŠ΅ 슀크립트λ₯Ό μ‹œμž‘ν•  μ€€λΉ„κ°€ λ˜μ—ˆμŠ΅λ‹ˆλ‹€! --dataset_name μΈμžμ— νŒŒμΈνŠœλ‹ν•  데이터셋 이름을 μ§€μ •ν•œ λ‹€μŒ, --output_dir μΈμžμ— μ§€μ •λœ 경둜둜 μ €μž₯ν•©λ‹ˆλ‹€. 본인만의 데이터셋λ₯Ό μ‚¬μš©ν•˜λ €λ©΄, ν•™μŠ΅μš© 데이터셋 λ§Œλ“€κΈ° κ°€μ΄λ“œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

ν•™μŠ΅ μŠ€ν¬λ¦½νŠΈλŠ” diffusion_pytorch_model.bin νŒŒμΌμ„ μƒμ„±ν•˜κ³ , 그것을 λ‹Ήμ‹ μ˜ 리포지토리에 μ €μž₯ν•©λ‹ˆλ‹€.

πŸ’‘ 전체 ν•™μŠ΅μ€ V100 GPU 4개λ₯Ό μ‚¬μš©ν•  경우, 2μ‹œκ°„μ΄ μ†Œμš”λ©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, Oxford Flowers 데이터셋을 μ‚¬μš©ν•΄ νŒŒμΈνŠœλ‹ν•  경우:

accelerate launch train_unconditional.py \
  --dataset_name="huggan/flowers-102-categories" \
  --resolution=64 \
  --output_dir="ddpm-ema-flowers-64" \
  --train_batch_size=16 \
  --num_epochs=100 \
  --gradient_accumulation_steps=1 \
  --learning_rate=1e-4 \
  --lr_warmup_steps=500 \
  --mixed_precision=no \
  --push_to_hub
[Naruto](https://huggingface.co/datasets/lambdalabs/naruto-blip-captions) 데이터셋을 μ‚¬μš©ν•  경우:
accelerate launch train_unconditional.py \
  --dataset_name="lambdalabs/naruto-blip-captions" \
  --resolution=64 \
  --output_dir="ddpm-ema-naruto-64" \
  --train_batch_size=16 \
  --num_epochs=100 \
  --gradient_accumulation_steps=1 \
  --learning_rate=1e-4 \
  --lr_warmup_steps=500 \
  --mixed_precision=no \
  --push_to_hub

μ—¬λŸ¬κ°œμ˜ GPU둜 ν›ˆλ ¨ν•˜κΈ°

accelerate을 μ‚¬μš©ν•˜λ©΄ μ›ν™œν•œ 닀쀑 GPU ν›ˆλ ¨μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€. accelerate을 μ‚¬μš©ν•˜μ—¬ λΆ„μ‚° ν›ˆλ ¨μ„ μ‹€ν–‰ν•˜λ €λ©΄ μ—¬κΈ° 지침을 λ”°λ₯΄μ„Έμš”. λ‹€μŒμ€ λͺ…λ Ήμ–΄ μ˜ˆμ œμž…λ‹ˆλ‹€.

accelerate launch --mixed_precision="fp16" --multi_gpu train_unconditional.py \
  --dataset_name="lambdalabs/naruto-blip-captions" \
  --resolution=64 --center_crop --random_flip \
  --output_dir="ddpm-ema-naruto-64" \
  --train_batch_size=16 \
  --num_epochs=100 \
  --gradient_accumulation_steps=1 \
  --use_ema \
  --learning_rate=1e-4 \
  --lr_warmup_steps=500 \
  --mixed_precision="fp16" \
  --logger="wandb" \
  --push_to_hub