Skip to content

Latest commit

Β 

History

History
111 lines (80 loc) Β· 5.47 KB

File metadata and controls

111 lines (80 loc) Β· 5.47 KB

ν‘œ 데이터λ₯Ό μœ„ν•œ μ»€μŠ€ν…€ λ„€νŠΈμ›Œν¬ 기반 μŠ€ν…Œμ΄λΈ” 디퓨전

이 ν”„λ‘œμ νŠΈλŠ” 기쑴의 ν…μŠ€νŠΈ ν”„λ‘¬ν”„νŠΈ λŒ€μ‹ , ν‘œ(Tabular) 데이터λ₯Ό μž…λ ₯으둜 λ°›μ•„ 이미지λ₯Ό μƒμ„±ν•˜λ„λ‘ μŠ€ν…Œμ΄λΈ” 디퓨전 λͺ¨λΈμ„ νŒŒμΈνŠœλ‹ν•©λ‹ˆλ‹€. ν‘œ 데이터λ₯Ό μ²˜λ¦¬ν•˜κ³  디퓨전 λͺ¨λΈμ˜ UNet을 μ‘°κ±΄ν™”ν•˜κΈ° μœ„ν•΄ μ»€μŠ€ν…€ 신경망을 μ‚¬μš©ν•©λ‹ˆλ‹€.

μ£Όμš” νŠΉμ§•

  • ν‘œ 데이터 μž…λ ₯: 숫자 λ˜λŠ” λ²”μ£Όν˜• 데이터λ₯Ό 기반으둜 이미지λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
  • μ»€μŠ€ν…€ 쑰건화: μ»€μŠ€ν…€ λ„€νŠΈμ›Œν¬κ°€ ν‘œ μž…λ ₯을 디퓨전 λͺ¨λΈμ„ μœ„ν•œ μž„λ² λ”©μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.
  • μŠ€ν…Œμ΄λΈ” 디퓨전 v1.5: 널리 μ‚¬μš©λ˜λŠ” κ°•λ ₯ν•œ μŠ€ν…Œμ΄λΈ” 디퓨전 v1.5 λͺ¨λΈμ„ 기반으둜 ν•©λ‹ˆλ‹€.
  • ν˜Όν•© 정밀도 ν•™μŠ΅ (Mixed Precision Training): λ©”λͺ¨λ¦¬ νš¨μœ¨μ„±κ³Ό ν•™μŠ΅ 속도 ν–₯상을 μœ„ν•΄ float16 및 bfloat16 ν˜Όν•© 정밀도 ν•™μŠ΅μ„ μ§€μ›ν•©λ‹ˆλ‹€.
  • κ·ΈλΌλ””μ–ΈνŠΈ 클리핑 (Gradient Clipping): ν•™μŠ΅ 쀑 기울기 폭발(Gradient Explosion)을 λ°©μ§€ν•˜κΈ° μœ„ν•œ 클리핑 κΈ°λŠ₯을 κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.
  • νŒŒμΈνŠœλ‹: μƒˆλ‘œμš΄ 쑰건(Conditioning)을 μ΄ν•΄ν•˜λ„λ‘ μŠ€ν…Œμ΄λΈ” 디퓨전 νŒŒμ΄ν”„λΌμΈμ˜ UNet 뢀뢄을 μˆ˜μ •ν•©λ‹ˆλ‹€.
  • κ°„νŽΈν•œ μ„€μ •: λͺ¨λ“  μ‹€ν—˜, λͺ¨λΈ, ν•™μŠ΅ νŒŒλΌλ―Έν„°λ₯Ό default.yaml 파일 ν•˜λ‚˜λ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€.
  • μ¦‰μ‹œ μ‚¬μš© κ°€λŠ₯ν•œ 슀크립트: ν•™μŠ΅μ„ μœ„ν•œ train.py와 ν•™μŠ΅λœ λͺ¨λΈλ‘œ 이미지λ₯Ό μƒμ„±ν•˜λŠ” inference.pyλ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
  • μž¬ν˜„μ„±: μ»¨ν…Œμ΄λ„ˆν™”λœ ν™˜κ²½μ„ κ΅¬μΆ•ν•˜κΈ° μœ„ν•œ Dockerfile을 ν¬ν•¨ν•©λ‹ˆλ‹€.

μ€€λΉ„ 사항

  • Python 3.8 이상
  • PyTorch
  • Git 및 Git LFS

μ„€μ •

  1. 리포지토리 클둠:

    git clone https://github.com/your-username/your-repo-name.git
    cd your-repo-name
  2. μ˜μ‘΄μ„± μ„€μΉ˜:

    pip install -r requirements.txt
  3. 사전 ν•™μŠ΅λœ μŠ€ν…Œμ΄λΈ” 디퓨전 v1.5 λ‹€μš΄λ‘œλ“œ: 이 ν”„λ‘œμ νŠΈλŠ” μŠ€ν…Œμ΄λΈ” 디퓨전 v1.5의 원본 κ°€μ€‘μΉ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€. κ°€μ€‘μΉ˜λ₯Ό λ‹€μš΄λ‘œλ“œν•˜μ—¬ νŠΉμ • 디렉토리에 λ°°μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. default.yaml의 κΈ°λ³Έ 섀정은 ../../../weight_original/stable-diffusion-v1-5 경둜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

    Hugging Face Hubμ—μ„œ κ°€μ€‘μΉ˜λ₯Ό λ‹€μš΄λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€: stable-diffusion-v1-5

    λͺ¨λΈ κ°€μ€‘μΉ˜λ₯Ό μ˜¬λ°”λ₯΄κ²Œ λ‹€μš΄λ‘œλ“œν•˜λ €λ©΄ git-lfsκ°€ μ„€μΉ˜λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

데이터셋 μ€€λΉ„

데이터 λ‘œλ”λŠ” data_example/sushi 디렉토리와 같은 νŠΉμ • ꡬ쑰의 데이터셋을 ν•„μš”λ‘œ ν•©λ‹ˆλ‹€.

  • images/: λͺ¨λ“  이미지 파일이 ν¬ν•¨λœ 폴더.
  • metadata.jsonl: 각 쀄이 file_nameκ³Ό custom_input을 ν¬ν•¨ν•˜λŠ” λ”•μ…”λ„ˆλ¦¬μΈ JSON Lines 파일.

metadata.jsonl μ˜ˆμ‹œ:

{"file_name": "sushi_0.jpg", "custom_input": [1, 0, 0, 0, 0]}
  • file_name: images 폴더에 μžˆλŠ” 이미지 파일의 이름.
  • custom_input: ν‘œ 데이터λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 숫자 리슀트. 이 리슀트의 κΈΈμ΄λŠ” μ„€μ • 파일의 model_custom.num_input_layer와 μΌμΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

default.yaml 파일의 data.path_dataset을 λ‹Ήμ‹ μ˜ 데이터셋 디렉토리 경둜둜 μˆ˜μ •ν•˜μ„Έμš”.

μ„€μ • (default.yaml)

λͺ¨λ“  섀정은 default.yaml을 톡해 μ œμ–΄λ©λ‹ˆλ‹€. μ£Όμš” μ„€μ • νŒŒλΌλ―Έν„°λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • experiment: μ‹€ν—˜ 이름, μ €μž₯ 디렉토리, μ‹œλ“œ(seed) μ„€μ •.
  • model_custom:
    • num_input_layer: ν‘œ 데이터 μž…λ ₯의 ν”Όμ²˜(feature) 수.
    • path_sd: 사전 ν•™μŠ΅λœ μŠ€ν…Œμ΄λΈ” 디퓨전 v1.5 κ°€μ€‘μΉ˜ 경둜.
  • train: 에포크, 배치 크기, ν•™μŠ΅λ₯  λ“± ν•™μŠ΅ κ΄€λ ¨ νŒŒλΌλ―Έν„°.
    • dtype: ν•™μŠ΅ 데이터 νƒ€μž…μž…λ‹ˆλ‹€. "float32", "float16", "bfloat16"을 μ§€μ›ν•©λ‹ˆλ‹€. "float16" λ˜λŠ” "bfloat16"으둜 μ„€μ •ν•˜κ³  CUDA ν™˜κ²½μΈ 경우 μžλ™μœΌλ‘œ ν˜Όν•© 정밀도 ν•™μŠ΅μ΄ ν™œμ„±ν™”λ©λ‹ˆλ‹€.
  • data:
    • path_dataset: 데이터셋 디렉토리 경둜.

ν•™μŠ΅ (Training)

λͺ¨λΈ ν•™μŠ΅μ„ μ‹œμž‘ν•˜λ €λ©΄ train.py 슀크립트λ₯Ό μ‹€ν–‰ν•˜μ„Έμš”. 이 μŠ€ν¬λ¦½νŠΈλŠ” λ‹€μŒμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  1. default.yamlμ—μ„œ 섀정을 λΆˆλŸ¬μ˜΅λ‹ˆλ‹€.
  2. exp_results μ•„λž˜μ— νƒ€μž„μŠ€νƒ¬ν”„κ°€ ν¬ν•¨λœ μ‹€ν—˜ 디렉토리λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
  3. μž¬ν˜„μ„±μ„ μœ„ν•΄ μ„€μ • 파일과 μ½”λ“œ μŠ€λƒ…μƒ·μ„ μ €μž₯ν•©λ‹ˆλ‹€.
  4. ν•™μŠ΅ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€.
python train.py

μ²΄ν¬ν¬μΈνŠΈμ™€ 졜적 λͺ¨λΈμ€ μ‹€ν—˜ 디렉토리(예: ../../../exp_results/YYYYMMDD_HHMMSS_exp)에 μ €μž₯λ©λ‹ˆλ‹€.

μΆ”λ‘  (Inference)

ν•™μŠ΅μ΄ μ™„λ£Œλœ ν›„, inference.pyλ₯Ό μ‚¬μš©ν•˜μ—¬ 이미지λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

  1. λͺ¨λΈ 경둜 μ„€μ •: inference.py νŒŒμΌμ„ μ—΄κ³  path_infer λ³€μˆ˜λ₯Ό λ‹Ήμ‹ μ˜ μ‹€ν—˜ 디렉토리 경둜둜 μˆ˜μ •ν•©λ‹ˆλ‹€.

    # inference.pyμ—μ„œ
    path_infer = "../../../exp_results/your_experiment_timestamp_exp"
  2. μž…λ ₯ 데이터 제곡: list_values λ³€μˆ˜λ₯Ό μ΄λ―Έμ§€λ‘œ μƒμ„±ν•˜λ €λŠ” ν‘œ λ°μ΄ν„°λ‘œ μˆ˜μ •ν•©λ‹ˆλ‹€. μž…λ ₯은 곡백으둜 κ΅¬λΆ„λœ 숫자 λ¬Έμžμ—΄μ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€.

    # inference.pyμ—μ„œ
    values_input_0 = "0 1 0 0 1"
    values_input_1 = "1 0 0 0 0"
    list_values = [values_input_0, values_input_1]
  3. 슀크립트 μ‹€ν–‰:

    python inference.py

μƒμ„±λœ μ΄λ―Έμ§€λŠ” img_gen 디렉토리에 μ €μž₯λ©λ‹ˆλ‹€.