mongle-bg-lora / README.md
Hadimeeee's picture
update README
c9a2274 verified
|
Raw
History Blame Contribute Delete
5.79 kB
# feed_pipeline
ํ€˜์ŠคํŠธ ์™„๋ฃŒ ๋ฉ”์‹œ์ง€ + ์บ๋ฆญํ„ฐ ๋ˆ„๋ผ ์ด๋ฏธ์ง€ โ†’ ๋ชฝ๊ธ€๋งˆ์„ ํ”ฝ์…€์•„ํŠธ ํ”ผ๋“œ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ํŒจํ‚ค์ง€.
---
## ํด๋” ๊ตฌ์กฐ
```
feed_pipeline/
โ”œโ”€โ”€ __init__.py โ† ํ•ต์‹ฌ ํ•จ์ˆ˜ export
โ”œโ”€โ”€ pipeline.py โ† ํ•ต์‹ฌ ๋กœ์ง (์บ๋ฆญํ„ฐ ์ƒ์„ฑ + ๋ฐฐ๊ฒฝ ์ƒ์„ฑ + ํ•ฉ์„ฑ)
โ”œโ”€โ”€ run.py โ† CLI ์ง„์ž…์ 
โ””โ”€โ”€ README.md โ† ์ด ํŒŒ์ผ
```
๊ฒฐ๊ณผ๋Š” `outputs/feed/{name}/` ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
---
## ํŒŒ์ดํ”„๋ผ์ธ ํ๋ฆ„
```
result_nobg.png (image_pipeline ๊ฒฐ๊ณผ๋ฌผ) + ํ•œ๊ตญ์–ด ํ€˜์ŠคํŠธ ๋ฉ”์‹œ์ง€
โ”‚
โ–ผ
[STEP 0] Qwen2-VL โ€” ํ€˜์ŠคํŠธ ๋ฒˆ์—ญ
โ†’ action: ์บ๋ฆญํ„ฐ ํฌ์ฆˆ ์„ค๋ช… (์˜ˆ: "running with arms swinging")
โ†’ scene: ๋ฐฐ๊ฒฝ ํ™˜๊ฒฝ ์„ค๋ช… (์˜ˆ: "fluffy cloud meadow path")
โ”‚
โ–ผ
[STEP 1] img2img (strength=0.75)
result_nobg.png โ†’ ํ”ฝ์…€์•„ํŠธ ์บ๋ฆญํ„ฐ (ํฐ ๋ฐฐ๊ฒฝ)
์บ๋ฆญํ„ฐ LoRA + action ํ”„๋กฌํ”„ํŠธ + appearance.json ์™ธํ˜• ์ •๋ณด
โ”‚
โ–ผ
[STEP 2] rembg โ€” ํ”ฝ์…€์•„ํŠธ ์บ๋ฆญํ„ฐ ๋ˆ„๋ผ
โ”‚
โ–ผ
[STEP 3] text2img โ€” ํ€˜์ŠคํŠธ ๋ฐฐ๊ฒฝ ์žฅ๋ฉด ์ƒ์„ฑ
๋ฐฐ๊ฒฝ LoRA + scene ํ”„๋กฌํ”„ํŠธ + ๋žœ๋ค ์‹œ๋“œ (์ด๋ฏธ์ง€๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฐฐ๊ฒฝ)
โ”‚
โ–ผ
[STEP 4] ํ•ฉ์„ฑ โ€” ์บ๋ฆญํ„ฐ๋ฅผ ๋ฐฐ๊ฒฝ ์œ„์— ๋ฐฐ์น˜ (๊ทธ๋ฆผ์ž ํฌํ•จ)
โ”‚
โ–ผ
[STEP 5] ์ธํŽ˜์ธํŒ… ๋ธ”๋ Œ๋”ฉ โ€” ์บ๋ฆญํ„ฐ ๊ฒฝ๊ณ„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ฒ˜๋ฆฌ
โ”‚
โ–ผ
{name}_feed.png โ˜… ์ตœ์ข… ๊ฒฐ๊ณผ
```
---
## ์‚ฌ์šฉ ๋ชจ๋ธ
**HuggingFace ์ž๋™ ๋‹ค์šด๋กœ๋“œ** (์ฒซ ์‹คํ–‰ ์‹œ ์บ์‹œ์— ์ €์žฅ):
| ๋ชจ๋ธ | ์šฉ๋„ | VRAM |
|------|------|------|
| `stabilityai/stable-diffusion-xl-base-1.0` | ๊ธฐ๋ฐ˜ ์ƒ์„ฑ ๋ชจ๋ธ | ~8GB |
| `latent-consistency/lcm-lora-sdxl` | 8์Šคํ… ๋น ๋ฅธ ์ƒ์„ฑ | (LoRA) |
| `Hadimeeee/mongle-character-lora` | ๋ชฝ๊ธ€ ํ”ฝ์…€์•„ํŠธ ์บ๋ฆญํ„ฐ ์Šคํƒ€์ผ LoRA | (LoRA) |
| `Hadimeeee/mongle-bg-lora` | ๋ชฝ๊ธ€ ํ”ฝ์…€์•„ํŠธ ๋ฐฐ๊ฒฝ ์Šคํƒ€์ผ LoRA | (LoRA) |
| `Qwen/Qwen2-VL-7B-Instruct` | ํ€˜์ŠคํŠธ ํ•œโ†’์˜ ๋ฒˆ์—ญ | ~8GB (8bit) |
> ๋กœ์ปฌ์— ๋ชจ๋ธ ํด๋”๊ฐ€ ์—†์–ด๋„ ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘ HuggingFace์—์„œ ์ž๋™์œผ๋กœ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค.
---
## ํ™˜๊ฒฝ ์š”๊ตฌ์‚ฌํ•ญ
- Python 3.10+
- CUDA GPU (VRAM 12GB ์ด์ƒ ๊ถŒ์žฅ)
```bash
pip install torch diffusers transformers accelerate
pip install rembg pillow numpy
pip install bitsandbytes qwen-vl-utils
pip install huggingface_hub
```
---
## ์‹คํ–‰ ๋ฐฉ๋ฒ•
### CLI
```bash
# ๋ฐฐ์น˜ โ€” ํด๋” ์•ˆ result_nobg.png ์ „์ฒด ์ฒ˜๋ฆฌ
python -m feed_pipeline.run --batch path/to/folder --quest "์˜ค๋Š˜ ๋„์„œ๊ด€์—์„œ ์ฑ… ํ•œ ๊ถŒ์„ ๋‹ค ์ฝ์—ˆ์–ด์š”" --name run_01
# ๋‹จ์ผ ์ด๋ฏธ์ง€
python -m feed_pipeline.run --input path/to/result_nobg.png --quest "๊ณต์›์—์„œ 30๋ถ„ ๋‹ฌ๋ฆฌ๊ธฐ๋ฅผ ์™„๋ฃŒํ–ˆ์–ด์š”"
# ์˜์–ด ์ง์ ‘ ์ž…๋ ฅ (VLM ๋ฒˆ์—ญ ์ƒ๋žต, ๋น ๋ฆ„)
python -m feed_pipeline.run --batch path/to/folder --quest-en "running in the park" --name run_02
# ์ฒ˜์Œ n์žฅ๋งŒ ํ…Œ์ŠคํŠธ
python -m feed_pipeline.run --batch path/to/folder --quest "..." --limit 3 --name test_01
```
> `python -m feed_pipeline.run` ์€ **๋ ˆํฌ ๋ฃจํŠธ**์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
### ์ž…๋ ฅ ํด๋” ๊ตฌ์กฐ
`--batch` ํด๋” ์•ˆ์— ์•„๋ž˜์ฒ˜๋Ÿผ `result_nobg.png` ๊ฐ€ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
`appearance.json` ์ด ๊ฐ™์€ ํด๋”์— ์žˆ์œผ๋ฉด ์บ๋ฆญํ„ฐ ์™ธํ˜• ์ •๋ณด๋กœ ์ž๋™ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.
```
batch_folder/
โ”œโ”€โ”€ 01/
โ”‚ โ”œโ”€โ”€ result_nobg.png โ† ํ•„์ˆ˜ (image_pipeline ๊ฒฐ๊ณผ๋ฌผ)
โ”‚ โ””โ”€โ”€ appearance.json โ† ์„ ํƒ (์™ธํ˜• ์ž๋™ ๋ฐ˜์˜)
โ”œโ”€โ”€ 02/
โ”‚ โ”œโ”€โ”€ result_nobg.png
โ”‚ โ””โ”€โ”€ appearance.json
โ””โ”€โ”€ ...
```
---
## ๊ฒฐ๊ณผ ํŒŒ์ผ
```
outputs/feed/{name}/
โ”œโ”€โ”€ {ํด๋”๋ช…}_char.png โ† STEP 1 ํ”ฝ์…€์•„ํŠธ ์บ๋ฆญํ„ฐ (ํฐ ๋ฐฐ๊ฒฝ)
โ”œโ”€โ”€ {ํด๋”๋ช…}_feed.png โ† ์ตœ์ข… ํ”ผ๋“œ ์ด๋ฏธ์ง€ โ˜…
โ””โ”€โ”€ {ํด๋”๋ช…}_compare.png โ† ์›๋ณธ / ์บ๋ฆญํ„ฐ / ๋ฐฐ๊ฒฝ / ๊ฒฐ๊ณผ 4๋‹จ ๋น„๊ต
```
---
## ํŒŒ๋ผ๋ฏธํ„ฐ ์ƒ์„ธ
| ํŒŒ๋ผ๋ฏธํ„ฐ | ๊ธฐ๋ณธ๊ฐ’ | ์„ค๋ช… |
|----------|--------|------|
| `--strength` | `0.75` | ์บ๋ฆญํ„ฐ img2img ๊ฐ•๋„. ๋†’์„์ˆ˜๋ก ์›๋ณธ์—์„œ ๋งŽ์ด ๋ณ€ํ˜•๋จ |
| `--char-scale` | `1.0` | ์บ๋ฆญํ„ฐ LoRA ๊ฐ•๋„ |
| `--bg-scale` | `1.0` | ๋ฐฐ๊ฒฝ LoRA ๊ฐ•๋„ |
| `--inpaint-str` | `0.35` | ๋ธ”๋ Œ๋”ฉ ๊ฐ•๋„. ๋‚ฎ์„์ˆ˜๋ก ํ•ฉ์„ฑ ๊ฒฝ๊ณ„๋งŒ ์‚ด์ง ์ฒ˜๋ฆฌ |
| `--blend-mode` | `inpaint` | `inpaint`=๊ฒฝ๊ณ„๋งŒ / `img2img`=์ „์ฒด ์ด๋ฏธ์ง€ ๋ธ”๋ Œ๋”ฉ |
| `--steps` | `8` | ์ถ”๋ก  ์Šคํ… ์ˆ˜ (LCM 8์Šคํ… ๊ธฐ๋ณธ) |
| `--seed` | `42` | ์บ๋ฆญํ„ฐ ์ƒ์„ฑ ์‹œ๋“œ (๋ฐฐ๊ฒฝ์€ ์ด๋ฏธ์ง€๋งˆ๋‹ค ์ž๋™ ๋žœ๋ค) |
| `--limit` | `0` | ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ์ตœ๋Œ€ ์žฅ์ˆ˜ (`0`=์ „์ฒด) |
| `--name` | `run_01` | ์ถœ๋ ฅ ํด๋” ์ด๋ฆ„ |
---
## ์ฃผ์š” ํŒŒ์ผ ์„ค๋ช…
### `pipeline.py`
ํ•ต์‹ฌ ์ƒ์„ฑ ํ•จ์ˆ˜๋“ค์ด ์ •์˜๋œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
- `load_pipelines()` โ€” SDXL txt2img + img2img + inpaint ํŒŒ์ดํ”„๋ผ์ธ ๋กœ๋“œ (UNet ๊ณต์œ ๋กœ VRAM ์ ˆ์•ฝ)
- `generate_character()` โ€” img2img๋กœ ํ”ฝ์…€์•„ํŠธ ์บ๋ฆญํ„ฐ ์ƒ์„ฑ
- `remove_bg()` โ€” rembg๋กœ ์บ๋ฆญํ„ฐ ๋ˆ„๋ผ
- `generate_background()` โ€” text2img๋กœ ๋ฐฐ๊ฒฝ ์žฅ๋ฉด ์ƒ์„ฑ
- `composite()` โ€” ์บ๋ฆญํ„ฐ๋ฅผ ๋ฐฐ๊ฒฝ ์œ„์— ํ•ฉ์„ฑ (๊ทธ๋ฆผ์ž ํฌํ•จ, ํฌ๊ธฐ ์ž๋™ ์กฐ์ •)
- `inpaint_blend()` โ€” ์บ๋ฆญํ„ฐ ๊ฒฝ๊ณ„ ์ธํŽ˜์ธํŒ… ๋ธ”๋ Œ๋”ฉ
- `img2img_blend()` โ€” ์ „์ฒด ์ด๋ฏธ์ง€ img2img ๋ธ”๋ Œ๋”ฉ (๋Œ€์•ˆ)
### `run.py`
`python -m feed_pipeline.run` ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” CLI ์ง„์ž…์ ์ž…๋‹ˆ๋‹ค.
### `__init__.py`
`pipeline.py` ์˜ ํ•ต์‹ฌ ํ•จ์ˆ˜๋“ค์„ ํŒจํ‚ค์ง€ ๋ ˆ๋ฒจ๋กœ exportํ•ฉ๋‹ˆ๋‹ค.
---
## ์ฃผ์˜์‚ฌํ•ญ
- `result_nobg.png` ๋Š” `image_pipeline` ์˜ ์ถœ๋ ฅ๋ฌผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
- ๋ฐฐ๊ฒฝ์€ ์ด๋ฏธ์ง€๋งˆ๋‹ค ๋žœ๋ค ์‹œ๋“œ๊ฐ€ ์ ์šฉ๋˜์–ด ํ•ญ์ƒ ๋‹ค๋ฅธ ๋ฐฐ๊ฒฝ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
- ์ฒซ ์‹คํ–‰ ์‹œ ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ๋กœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค (ํ•ฉ๊ณ„ ์•ฝ 15~20GB).
- LCM ๋ชจ๋“œ์—์„œ `guidance_scale` ์€ ์ž๋™์œผ๋กœ 1.5 ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.