Komapper SD Fine-Tuning Practice Code

Stable Diffusion ์‹ค์Šต ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ฝ˜ํฌ๋ฆฌํŠธ ์†์ƒ ์‚ฌ์ง„์„ ์†Œ์žฌ๋กœ, ํ™•์‚ฐ ๋ชจ๋ธ์˜ ์›๋ฆฌ๋ถ€ํ„ฐ LoRA ํŒŒ์ธํŠœ๋‹๊ณผ ControlNet ์กฐ๊ฑด๋ถ€ ์ƒ์„ฑ๊นŒ์ง€ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Komapper_SDFTPracticeCode/
โ”œโ”€โ”€ 01_T2I/          ํ…์ŠคํŠธ โ†’ ์ด๋ฏธ์ง€, LoRA ํŒŒ์ธํŠœ๋‹
โ”œโ”€โ”€ 02_CtrlGen/      ๋งˆ์Šคํฌ โ†’ ์ด๋ฏธ์ง€, ControlNet ์กฐ๊ฑด๋ถ€ ์ƒ์„ฑ (๊ฐ€์ค‘์น˜ ๋™๋ด‰)
โ”œโ”€โ”€ 03_Inpaint/      ์‚ฌ์ง„ ์ผ๋ถ€๋งŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ, DreamBooth (๊ฐ€์ค‘์น˜ ๋™๋ด‰)
โ”œโ”€โ”€ Dataset_Dmg/     01_T2I ยท 02_CtrlGen ์šฉ (ControlNet์ด ์ƒ์„ฑํ•œ ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ)
โ””โ”€โ”€ Dataset_Crack/   03_Inpaint ์šฉ (์‹ค์ œ ์ดฌ์˜ ์‚ฌ์ง„)

์‹ค์Šต์€ 01_T2I โ†’ 02_CtrlGen โ†’ 03_Inpaint ์ˆœ์„œ์ž…๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐ์ž์˜ ํด๋” ์•ˆ์—์„œ ์‹คํ–‰ํ•˜๋ฉฐ, ๊ฒฐ๊ณผ ๊ทธ๋ฆผ์€ ๊ทธ ํด๋”์˜ ./outputs/ ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

์„ธ ํด๋” ๋ชจ๋‘ ๊ฐ™์€ 4๋‹จ ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค โ€” 01ยท02๋Š” ๊ณต๊ฐœ ์ด๋ฏธ์ง€๋กœ ์›๋ฆฌ๋ฅผ ๋ณด๊ณ , 03์—์„œ ์šฐ๋ฆฌ ๋ฐ์ดํ„ฐ๋กœ ํ•™์Šตํ•˜๊ณ , 04์—์„œ ๋ฏธ๋ฆฌ ํ•™์Šตํ•ด ๋‘” ๊ฐ€์ค‘์น˜์™€ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

01_T2I โ€” ํ…์ŠคํŠธ๋กœ ์ด๋ฏธ์ง€ ๋งŒ๋“ค๊ธฐ

ํŒŒ์ผ ๋‚ด์šฉ
00_Ready4SD.py ์„ธ ํด๋” ์ „๋ถ€์— ์“ฐ์ด๋Š” ๋ชจ๋ธ์„ ๋ฏธ๋ฆฌ ๋‚ด๋ ค๋ฐ›์•„ ์บ์‹œ์— ๋„ฃ์–ด ๋‘ก๋‹ˆ๋‹ค (์•ฝ 7GB, 6~10๋ถ„). ํ•™์Šต๋„ ์ƒ์„ฑ๋„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
01_noise_to_image.py ํ…์ŠคํŠธ๋„ VAE๋„ ์—†์ด, ์ˆœ์ˆ˜ ๋…ธ์ด์ฆˆ โ†’ ์‚ฌ์ง„. ํ™•์‚ฐ ๋ชจ๋ธ์˜ ์›๋ฆฌ๋งŒ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค.
02_text_to_image.py ํ…์ŠคํŠธ๋กœ ์ด๋ฏธ์ง€ ์ƒ์„ฑ. ํ”„๋กฌํ”„ํŠธยท์Šคํ… ์ˆ˜ยทguidance scale์„ ๋ฐ”๊ฟ” ๊ฐ€๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ๋ด…๋‹ˆ๋‹ค.
03_lora_finetune.py ํ•ต์‹ฌ. 860M UNet์„ ์–ผ๋ ค ๋‘๊ณ  LoRA(์•ฝ 0.8M)๋งŒ ํ•™์Šต์‹œํ‚ต๋‹ˆ๋‹ค. 300์Šคํ…, GPU๋กœ 2๋ถ„ ์ •๋„.
04_lora_inference.py ๊ฐ™์€ ํ”„๋กฌํ”„ํŠธยท๊ฐ™์€ ์‹œ๋“œ๋กœ LoRA ์ ์šฉ ์ „/ํ›„๋ฅผ ๋‚˜๋ž€ํžˆ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
lora_pretrained/ ๋ฏธ๋ฆฌ ํ•™์Šตํ•ด ๋‘” LoRA ๊ฐ€์ค‘์น˜. 03์€ ์—ฌ๊ธฐ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
lora_finetuned/ 03์ด ๋งŒ๋“œ๋Š” ํด๋”. lora_pretrained์™€ ๊ตฌ์„ฑ์ด ๊ฐ™์•„ 04์—์„œ ๊ณจ๋ผ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

03๋งŒ ๊ฒฐ๊ณผ ๊ทธ๋ฆผ ๋Œ€์‹  ๊ฐ€์ค‘์น˜๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

02_CtrlGen โ€” ๋งˆ์Šคํฌ๋กœ ์ด๋ฏธ์ง€ ๋งŒ๋“ค๊ธฐ

ํ”„๋กฌํ”„ํŠธ ์˜†์— ์กฐ๊ฑด ์ด๋ฏธ์ง€๋ฅผ ํ•˜๋‚˜ ๋” ๋„ฃ์–ด, ์†์ƒ์ด ์–ด๋””์— ์ƒ๊ธธ์ง€๊นŒ์ง€ ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ ๋‚ด์šฉ
01_edge_to_image.py ๊ณต๊ฐœ ์‚ฌ์ง„์˜ ์œค๊ณฝ์„ (Canny)์„ ์กฐ๊ฑด์œผ๋กœ ๋„ฃ์–ด ๋‹ค์‹œ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค. ControlNet ๋„์ž…๋ถ€.
02_control_strength.py controlnet_conditioning_scale 0 โ†’ 1.5. ์กฐ๊ฑด์ด ๊ฒฐ๊ณผ๋ฅผ ์–ผ๋งˆ๋‚˜ ๋ถ™์žก๋Š”๊ฐ€.
03_controlnet_finetune.py ํ•ต์‹ฌ. UNet์„ ์–ผ๋ ค ๋‘๊ณ  ControlNet(361M)๋งŒ ํ•™์Šต์‹œํ‚ต๋‹ˆ๋‹ค. 300์Šคํ….
04_controlnet_inference.py ๊ฐ™์€ ์บก์…˜ยท๊ฐ™์€ ์‹œ๋“œ๋กœ ๋งˆ์Šคํฌ๋ฅผ ์ค€ ๊ฒฝ์šฐ์™€ ์•ˆ ์ค€ ๊ฒฝ์šฐ๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
ctrl_pretrained/ ๋ฏธ๋ฆฌ ํ•™์Šตํ•ด ๋‘” ControlNet (fp16, 722MB). Dataset_Dmg ์˜ ์‚ฌ์ง„์„ ๋งŒ๋“ค์–ด ๋‚ธ ๋ฐ”๋กœ ๊ทธ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

01ยท02๋Š” ๊ณต๊ฐœ ์ด๋ฏธ์ง€์™€ ๊ณต๊ฐœ ControlNet์œผ๋กœ ์›๋ฆฌ๋งŒ ๋ณด๊ณ , 03ยท04์—์„œ Dataset_Dmg๋กœ ์ง์ ‘ ํ•™์Šตํ•˜๊ณ  ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ 02_CtrlGen/README.md๋ฅผ ๋ณด์„ธ์š”.

03_Inpaint โ€” ์‚ฌ์ง„ ์ผ๋ถ€๋งŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ

๋ฉ€์ฉกํ•œ ๋ฒฝ ์‚ฌ์ง„์— ๊ท ์—ด ๋งˆ์Šคํฌ๋ฅผ ์”Œ์›Œ ๊ทธ ์ž๋ฆฌ์—๋งŒ ๊ท ์—ด์„ ๊ทธ๋ ค ๋„ฃ์Šต๋‹ˆ๋‹ค. ๋ฐฐ๊ฒฝ์€ ์ง„์งœ ์‚ฌ์ง„ ๊ทธ๋Œ€๋กœ ๋‚จ๊ณ , ๋งˆ์Šคํฌ๊ฐ€ ๊ณง ์ •๋‹ต ๋ผ๋ฒจ์ด ๋ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ ๋‚ด์šฉ
01_inpaint_basic.py ๊ณต๊ฐœ ์‚ฌ์ง„์˜ ์ผ๋ถ€๋ฅผ ๋งˆ์Šคํฌ๋กœ ์ง€์šฐ๊ณ  ๋‹ค์‹œ ์ฑ„์šฐ๊ธฐ. inpainting ๋„์ž…๋ถ€.
02_inpaint_strength.py strength 0.2 โ†’ 1.0. ๋งˆ์Šคํฌ ์•ˆ์„ ์–ผ๋งˆ๋‚˜ ๋ฒ„๋ฆฌ๊ณ  ์ƒˆ๋กœ ๊ทธ๋ฆด ๊ฒƒ์ธ๊ฐ€.
03_dreambooth_finetune.py ํ•ต์‹ฌ. DreamBooth๋กœ sks ํ† ํฐ์— "์šฐ๋ฆฌ ๊ท ์—ด"์„ ๊ฐ์ธ. UNet ์ „์ฒด(866M)๋ฅผ ํ•™์Šต.
04_inpaint_inference.py ๋ฉ€์ฉกํ•œ ๋ฒฝ + ๋งˆ์Šคํฌ โ†’ ๊ท ์—ด ์‚ฌ์ง„. ์ „/ํ›„ ๋น„๊ต.
dreambooth_pretrained/ ๋ฏธ๋ฆฌ ํ•™์Šตํ•ด ๋‘” DreamBooth UNet (1.7GB). ์‹ค์ œ ์—ฐ๊ตฌ์— ์“ด ๊ทธ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ 03_Inpaint/README.md๋ฅผ ๋ณด์„ธ์š”.

Dataset_Crack โ€” 03_Inpaint ์šฉ ๋ฐ์ดํ„ฐ

์‹ค์ œ๋กœ ์ดฌ์˜ํ•œ ์‚ฌ์ง„์ž…๋‹ˆ๋‹ค. Dataset_Dmg(ControlNet ์ƒ์„ฑ๋ฌผ)์™€๋Š” ์ถœ์ฒ˜๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

ํด๋” ๋‚ด์šฉ
CrackImages/ ๊ท ์—ด ์‚ฌ์ง„ 100์žฅ (448x448)
CrackMasks/ ๊ทธ ๊ท ์—ด์˜ ๋งˆ์Šคํฌ 100์žฅ. ํŒŒ์ผ๋ช…์ด ์‚ฌ์ง„๊ณผ ์ง์„ ์ด๋ฃน๋‹ˆ๋‹ค.
IntactImages/ ๋ฉ€์ฉกํ•œ ์ฝ˜ํฌ๋ฆฌํŠธ ๋ฒฝ 100์žฅ. DreamBooth์˜ class ์ด๋ฏธ์ง€์ด์ž ์ƒ์„ฑ ๋ฐฐ๊ฒฝ์ž…๋‹ˆ๋‹ค.

Dataset_Dmg โ€” 01_T2I ยท 02_CtrlGen ์šฉ ๋ฐ์ดํ„ฐ

ํด๋” ๋‚ด์šฉ
JPEGImages/ ์ฝ˜ํฌ๋ฆฌํŠธ ์†์ƒ ์‚ฌ์ง„ 100์žฅ (1024x1024, 166MB)
CtrlNetImages/ ์†์ƒ ๋ถ€์œ„ ๋งˆ์Šคํฌ 100์žฅ (1024x1024). ControlNet ์กฐ๊ฑด ์ž…๋ ฅ์œผ๋กœ ์“ฐ๋Š” ํด๋ž˜์Šค๋ณ„ ์ปฌ๋Ÿฌ ๋งˆ์Šคํฌ์ž…๋‹ˆ๋‹ค.
TextFiles/ ์‚ฌ์ง„๋ณ„ ์บก์…˜ 100๊ฐœ

์ „๋ถ€ 1024px ์›๋ณธ ๊ทธ๋Œ€๋กœ์ž…๋‹ˆ๋‹ค. 01_T2I์˜ LoRA ํ•™์Šต์€ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ 512๋กœ ์ค„์—ฌ ์“ฐ๊ณ , 02_CtrlGen์€ 1024๋ฅผ ๊ทธ๋Œ€๋กœ ์”๋‹ˆ๋‹ค โ€” ControlNet ๊ฐ€์ค‘์น˜๊ฐ€ 1024๋กœ ํ•™์Šต๋ผ์„œ 512๋กœ ์ค„์ด๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ๋ง๊ฐ€์ง‘๋‹ˆ๋‹ค.

์„ธ ํด๋”๋Š” ํŒŒ์ผ๋ช…์ด 1:1๋กœ ์ง์„ ์ด๋ฃน๋‹ˆ๋‹ค (000000_271_image โ†’ .png / .png / .txt).

๋งˆ์Šคํฌ ์ƒ‰์ƒ ํ‘œ

์ƒ‰ RGB ์†์ƒ
ํฐ์ƒ‰ (255,255,255) Crack (๊ท ์—ด)
๋นจ๊ฐ• (255,0,0) Spalling (๋ฐ•๋ฆฌ)
๋…ธ๋ž‘ (255,255,0) Exposed rebar (์ฒ ๊ทผ ๋…ธ์ถœ)
ํ•˜๋Š˜ (0,255,255) Efflorescence (๋ฐฑํƒœ)
์ดˆ๋ก (0,255,0) Vegetation (์‹์ƒ)
ํŒŒ๋ž‘ (0,0,255) Control point (ํ‘œ์ )
๊ฒ€์ • (0,0,0) ์†์ƒ ์—†์Œ (๋ฐฐ๊ฒฝ)

100์žฅ ์ค‘ 2์žฅ์€ ๋งˆ์Šคํฌ๊ฐ€ ์ „๋ถ€ ๊ฒ€์ •์ž…๋‹ˆ๋‹ค. ์บก์…˜๋„ "no visible damage"์ด๋ฏ€๋กœ ์ •์ƒ์ด๋ฉฐ, ์กฐ๊ฑด์„ ๋น„์› ์„ ๋•Œ ๋ฌด์—‡์ด ๋‚˜์˜ค๋Š”์ง€ ๋ณด์—ฌ ์ฃผ๋Š” ์˜ˆ์‹œ๋กœ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹คํ–‰

CUDA GPU๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

pip install torch diffusers transformers accelerate peft safetensors matplotlib pillow tqdm

cd 01_T2I
python 00_Ready4SD.py        # ๋จผ์ € ํ•œ ๋ฒˆ (๋ชจ๋ธ ๋‚ด๋ ค๋ฐ›๊ธฐ)
python 01_noise_to_image.py
python 02_text_to_image.py
python 03_lora_finetune.py   # LoRA ํ•™์Šต
python 04_lora_inference.py  # ์ „/ํ›„ ๋น„๊ต

Colab์—์„œ๋Š” ์ด ํด๋”๋ฅผ ํ†ต์งธ๋กœ MyDrive/Komapper_SDFTPracticeCode ์— ์˜ฌ๋ฆฐ ๋’ค, ๊ฐ ์Šคํฌ๋ฆฝํŠธ ๋์— ์žˆ๋Š” ์ฃผ์„ ๋ธ”๋ก์„ ๊ทธ๋Œ€๋กœ ์…€์— ๋ถ™์—ฌ ๋„ฃ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒฝ๋กœ์— ์˜ฌ๋ ธ๋‹ค๋ฉด ์ฃผ์„ ์•ˆ์˜ %cd ๊ฒฝ๋กœ๋งŒ ๋ฐ”๊พธ์„ธ์š”.

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support