File size: 4,765 Bytes
9c98083 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | # Wan 2.2 LoRA Dataset Builder
์์์ ์ด๋ฏธ์ง/์์ ํด๋๋ฅผ ๋ฃ์ผ๋ฉด ํผ์ฌ์ฒด ์ค์ฌ์ผ๋ก ํฌ๋กญํ๊ณ ๋ก์ปฌ VLM์ผ๋ก ์บก์
์ ๋ฌ์,
LoRA ํ์ต ์คํฌ๋ฆฝํธ(musubi-tuner ๋ฑ)์ ๋ฐ๋ก ๋ฃ์ ์ ์๋ `images/`, `videos/`,
`.txt` ์บก์
, `dataset.toml` ์ด์์ ์์ฑํ๋ ๋
๋ฆฝ CLI ๋๊ตฌ.
ComfyUI ๋
ธ๋๊ฐ ์๋ โ `__init__.py`์์ importํ์ง ์์ผ๋ฏ๋ก ComfyUI ๋
ธ๋ ๋ก๋ฉ์
๊ด์ฌํ์ง ์๊ณ , `python_embeded\python.exe`๋ก ์ง์ ์คํํ๋ค.
**์ฌ์ฉ ์ ์ : ํ์ต ๋์ ์ธ๋ฌผ/์บ๋ฆญํฐ๊ฐ ๋ช
๋ฐฑํ ์ฑ์ธ์ด์ด์ผ ํจ.** ๋์ด๊ฐ ๋ถ๋ช
ํํ๊ฑฐ๋
์ณ๋ผ ๋ณด์ด๋ ์ธ๋ฌผ์ ์ฑ์ ์ฝํ
์ธ ๋ฐ์ดํฐ์
๊ตฌ์ถ์๋ ์ด ๋๊ตฌ๋ฅผ ์ฐ์ง ๋ง ๊ฒ.
## ์ฌ์ฉ๋ฒ
```
D:\SD\ComfyUI_windows_portable\python_embeded\python.exe ^
dataset_builder\build.py ^
--input "D:\raw_media" ^
--output "D:\wan_lora_dataset" ^
--trigger "ohwx man" ^
--captioner joycaption
```
`--input` ํด๋๋ฅผ ์ฌ๊ท์ ์ผ๋ก ์ค์บํด ์ด๋ฏธ์ง(jpg/png/webp/bmp)์ ์์(mp4/mov/mkv/avi/webm)์
์๋ ๋ถ๋ฅํ์ฌ ์ฒ๋ฆฌํ๋ค.
## ํ์ดํ๋ผ์ธ
1. **ํผ์ฌ์ฒด ๊ฐ์ง**: mediapipe ์ผ๊ตด ๊ฒ์ถ โ (์คํจ ์) OpenCV Haar cascade ์ผ๊ตด ๊ฒ์ถ โ
(๊ทธ๋๋ ์คํจ ์) ultralytics YOLOv8n ์ฌ๋ ๊ฒ์ถ โ (๊ทธ๋๋ ์์ผ๋ฉด) ์ ์ฒด ํ๋ ์
๊ทธ๋๋ก ์ฌ์ฉ. ์ฌ๋์ด ์๋ ์ฌ๋ฌผ/์ฅ๋ฉด LoRA๋ ์์ฐ์ค๋ฝ๊ฒ "์ ์ฒด ํ๋ ์" ๊ฒฝ๋ก๋ก ๋น ์ง๋ค.
2. **๋ฒํท ๋งค์นญ + ํฌ๋กญ**: ๊ฐ์ง๋ bbox๋ฅผ ์ผ๊ตด 2.2๋ฐฐ / ์ฌ๋ 1.3๋ฐฐ๋ก ํจ๋ฉํ ๋ค, Wan
480p/720p/1080p ร (๊ฐ๋ก/์ธ๋ก/์ ์ฌ๊ฐ) ๋ฒํท ์ค ์ข
ํก๋น๊ฐ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฒ์ ๊ณจ๋ผ
๊ทธ ํด์๋๋ก ํฌ๋กญ+๋ฆฌ์ฌ์ด์ฆ(16 ๋ฐฐ์ ์ ๋ ฌ). ์๋ณธ ํด์๋๋ณด๋ค ์ปค์ง๋(์
์ค์ผ์ผ) ๋ฒํท์
์๋์ผ๋ก ๊ฑด๋๋ด๋ค โ `--max-tier`๋ก ์ํ๋ง ์ง์ .
3. **์์ ์ฌ ๋ถํ **: OpenCV ํ์คํ ๊ทธ๋จ ์ฐจ๋ถ์ผ๋ก ์ปท ์ง์ ์ ์ฐพ๊ณ , `--clip-min-sec`
~ `--clip-max-sec` ๋ฒ์๋ก ํด๋ฆฝ์ ๋๋๋ค. ํด๋ฆฝ๋ง๋ค ๋ํ ํ๋ ์ ๋ช ์ฅ์ bbox
์ค์๊ฐ์ผ๋ก ํฌ๋กญ์ ๊ณ ์ ํ๊ณ (ํ๋ ์ ํ๋ค๋ฆผ ๋ฐฉ์ง), `--video-fps`๋ก ๋ฆฌ์ํ, 4n+1
ํ๋ ์ ์๋ก ํธ๋ฆฌ๋ฐ, optical flow ํ๊ท ํฌ๊ธฐ๋ก "static/subtle/moderate/fast
motion" ํ๊ทธ๋ฅผ ์บก์
์ ๋ง๋ถ์ธ๋ค.
4. **์บก์
๋** (`--captioner`):
- `joycaption` (๊ธฐ๋ณธ) โ `fancyfeast/llama-joycaption-beta-one-hf-llava`.
**์ฃผ์**: HuggingFace ๋ชจ๋ธ ์นด๋์ "ํ์ต์ฉ ์บก์
" ์ ์ฉ ํ๋กฌํํธ ๋ฌธ์์ด์ด ๊ณต์
๋ฌธ์ํ๋์ด ์์ง ์์, ์ฌ๊ธฐ ์ฐ์ธ ์ง์๋ฌธ(`caption.py`์ `DEFAULT_PROMPT`)์
์์ฒด ์์ฑํ ๊ธฐ๋ณธ๊ฐ์ด๋ค. ์ํ๋ ์คํ์ผ์ด ์์ผ๋ฉด `--caption-prompt`๋ก ๋ฐ๊ฟ๋ผ.
- `florence2` โ `microsoft/Florence-2-large`, ๊ฐ๋ณ๊ณ ๋น ๋ฆ(~0.77B).
- `wd14` โ `SmilingWolf/wd-vit-tagger-v3` (onnx), booru ํ๊ทธ ์คํ์ผ.
- ๊ณตํต: `--trigger`๋ก ๋๊ธด ํธ๋ฆฌ๊ฑฐ ์๋๋ฅผ ์บก์
๋งจ ์์ ์๋ ์ฝ์
.
## ์ถ๋ ฅ
```
output_dir/
images/0001.jpg, 0001.txt, ...
videos/0001.mp4, 0001.txt, ...
dataset.toml # musubi-tuner ์คํ์ผ ์ด์ โ ์ค์ ํธ๋ ์ด๋ ๋ฒ์ ๋ฌธ์์ ๋์กฐ ํ ์ฌ์ฉ
```
## ๋ชจ๋ธ ๋ค์ด๋ก๋ / VRAM ์ฐธ๊ณ
- ์ต์ด ์คํ ์ HuggingFace์์ ์บก์
๋ ๊ฐ์ค์น(JoyCaption ~16GB, Florence-2-large
~1.5GB, WD14 ~์๋ฐฑMB)์ ultralytics `yolov8n.pt`(~6MB)๋ฅผ ์๋ ๋ค์ด๋ก๋ํ๋ค.
๋คํธ์ํฌ/๋์คํฌ ์ฉ๋ ํ์ธ ํ ์คํํ ๊ฒ.
- RTX 5090 32GB ๊ธฐ์ค, ComfyUI๊ฐ ์ด๋ฏธ VRAM์ ์ ์ ์ค์ด๋ฉด JoyCaption(8B, bf16 ๊ธฐ์ค
~16GB)์ด ๋ถ์กฑํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ `--load-in-4bit`(bitsandbytes)๋ก ์ค์ด๊ฑฐ๋,
ComfyUI ์๋ฒ๋ฅผ ์ ์ ๋ด๋ ค๋๊ณ ์คํํ ๊ฒ.
## ์๋ ค์ง ํ๊ฒฝ ํน์ด์ฌํญ
- ์ด embedded Python ํ๊ฒฝ์ `import torch`๋ง ํด๋ ์ธํฐํ๋ฆฌํฐ ์ข
๋ฃ ์ ๋น์ ์
์ข
๋ฃ ์ฝ๋(์: `-1073740791`)๋ฅผ ๋ธ๋ค. `dataset_builder`์ ๋ฌด๊ดํ ๊ธฐ์กด ํ๊ฒฝ
์ด์์ด๋ฉฐ, ์ค์ ์์
(ํ์ผ ์ ์ฅ)์ ๊ทธ ์ ์ ์ด๋ฏธ ๋๋ ๋ค ๋ฐ์ํ๋ ์ข
๋ฃ ์์
ํฌ๋์๋ผ ๊ฒฐ๊ณผ๋ฌผ์๋ ์ํฅ ์์. ๋ฐฐ์น ์คํฌ๋ฆฝํธ์์ ์ข
๋ฃ ์ฝ๋๋ก ์ฑ๊ณต/์คํจ๋ฅผ
ํ๋จํ์ง ๋ง๊ณ ์ฝ์ ๋ก๊ทธ์ `Done.` ์ค๋ก ํ์ธํ ๊ฒ.
## ๊ฒ์ฆ๋ ๊ฒ / ์ ๋ ๊ฒ
- `crop_resize.py`(๋ฒํท ๋งค์นญ ์ํ), `detect.py`(๋ค๋จ๊ณ ํด๋ฐฑ), `scene_split.py`
(์ฌ ์ปท + ํด๋ฆฝ ์ถ์ถ + 4n+1 ํธ๋ฆฌ๋ฐ + ๋ชจ์
ํ๊ทธ)๋ ์ค์ ์ํ ์ด๋ฏธ์ง/์์์ผ๋ก
์ค๋ชจํฌ ํ
์คํธ ์๋ฃ.
- `caption.py`(JoyCaption/Florence-2/WD14 ์ค์ ์ถ๋ก ํธ์ถ)๋ ๋ชจ๋ธ ๊ฐ์ค์น ๋ค์ด๋ก๋๊ฐ
์ปค์ ์ด๋ฒ ์ธ์
์์ end-to-end๋ก ๋๋ ค๋ณด์ง ์์๋ค. ํด๋์ค/์ ์ฒ๋ฆฌ๋ ๊ฐ ๋ชจ๋ธ์
๊ณต์ ๋ฌธ์(HF ๋ชจ๋ธ ์นด๋, wd-tagger Space ์์ค)๋ฅผ ๋์กฐํด ์์ฑํ์ง๋ง, ์ฒ์
์คํํ ๋ ์บก์
๋ ์ชฝ ์๋ฌ๊ฐ ๋๋ฉด ๊ทธ ๋ถ๋ถ๋ถํฐ ํ์ธํ ๊ฒ.
|