We have fine-tuned the Instruct Pix2Pix model to create a system that can colorize characters in images using only text.
๐Prize - ๋ฐ์ดํฐ๊ณผํ ๊ฒฝ์ง๋ํ ์ฐ์์
๐ถ dataset
๐ท image-captioning
๐บ fine-tuning
๐ WEB SERVICE
์ด ํ๋ก์ ํธ๋ instruct pix2pix ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ํ๋ฐฑ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉ์์ ์บก์ ์ ๋ง๊ฒ ์ฑ์ํ๋ ๊ธฐ์ ์ ๊ฐ๋ฐํ๊ณ ํ ์คํธ ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ๋ชฉํ๋ ํ๋ฐฑ ์ด๋ฏธ์ง์ ์ฌ์ฉ์์ ์บก์ ์ ๋ฐ๋ผ ์์์ ๋ถ์ฌํ์ฌ ์ปฌ๋ฌ ์ด๋ฏธ์ง๋ก ์ถ๋ ฅํ๋ ๊ฒ ์ ๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ ์ญ์ฌ์ ์ฌ์ง, ์์ ์ํ ๋ฑ ๋ค์ํ ๋ถ์ผ์์ ํ์ฉ ๋ ์ ์์ต๋๋ค.
๋ณธ ๋ฐ์ดํฐ์
์ svjack/pokemon-blip-captions-en-ja์ ์บก์
๋ฐ์ดํฐ, Sketch2Pokemon์ ์ปฌ๋ฌ, ํ๋ฐฑ ์ด๋ฏธ์ ํด๋นํ๋ฉฐ, 2023๋
7์ ๊ธฐ์ค์ผ๋ก ์์ง๋์์ต๋๋ค. ๋ฐ์ดํฐ ์ฌ์ฉ์ ๋ํ ๋ผ์ด์ ์ค ๋ฐ ์ ์๊ถ ์ ๋ณด๋
svjack/pokemon-blip-captions-en-ja ยท Datasets at Hugging Face
Sketch2Pokemon
svjack/pokemon-blip-captions-en-ja ์์ ์บก์ ์ ์์ง, Sketch2Pokemon์์ ์์ผ๋ก ์ด๋ฃจ์ด์ง ํ๋ฐฑ ์ด๋ฏธ์ง์ ์ปฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ์์งํ์์ต๋๋ค.
์์งํ ํ๋ฐฑ ์ด๋ฏธ์ง์ ์ปฌ๋ฌ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ 256x256, pngํ์ ์ ๋๋ค. (ํฌ๊ธฐ๋ฅผ ๋ง์ถ ํ์๋ ์์ต๋๋ค.) ๊ฐ ๋ฐ์ดํฐ๋ค์ csvํ์ผ๋ก ๋ชจ๋ธ์ ์ ์ฉ๋์์ต๋๋ค. ํ๋ฐฑ ์ด๋ฏธ์ง, ์ปฌ๋ฌ ์ด๋ฏธ์ง ๊ทธ๋ฆฌ๊ณ ์ด๋ฏธ์ง๋ฅผ ์ค๋ช ํ๋ ์บก์ ์ ๋งค์นญ์ํจ ํํ๋ก ๊ตฌ์ฑ ๋์์ต๋๋ค. ํ์ต ์ํจ ์ด๋ฏธ์ง๋ ์์ผ๋ก ์ด๋ฃจ์ด์ง ํ๋ฐฑ, ์ปฌ๋ฌ ์ด๋ฏธ์ง ๊ฐ๊ฐ 826์ฅ, ์ด๋ฏธ์ง๋ฅผ ์ค๋ช ํ๋ ์บก์ 307๊ฐ ์ ๋๋ค.
| ํ๋ฐฑ ์ด๋ฏธ์ง | ์ปฌ๋ฌ ์ด๋ฏธ์ง | cation | |
|---|---|---|---|
| ์ด๋ฏธ์ง ๊ฐ์ | 826 | 826 | 307 |
| ํฌ๊ธฐ | 28.6MB | 37.6MB | 15.1KB |
์ฌ์ฉ์๋ ์์ ์ ๋ฐ์ดํฐ์ ์ ๊ตฌ์กฐ์ ๋ง๊ฒ ์ค๋นํด์ผ ํฉ๋๋ค. ๊ฐ ์ด๋ฏธ์ง์ ๋ง๊ฒ ์ด๋ฏธ์ง ๊ฒฝ๋ก๋ฅผ ์ ํํ๊ฒ ๋งค์นญ ์ํค๊ณ , ์ด๋ฏธ์ง๋ฅผ ์ค๋ช ํ๋ ์บก์ ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์ฌ์ฉ๋ ๋ฐ์ดํฐ์ ์ ํ๋ฐฑ ์ด๋ฏธ์ง, ์ปฌ๋ฌ ์ด๋ฏธ์ง์ ์ปฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ์ค๋ช ํ๋ ์บก์ ์ด ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ ๊ตฌ์กฐ์ ๋๋ค.
- ํ๋ฐฑ ์ด๋ฏธ์ง : ์๋ณธ ์ปฌ๋ฌ ์ด๋ฏธ์ง์์ ์์ ์ ๋ณด๋ฅผ ์ ๊ฑฐํ ์ด๋ฏธ์ง์ ๋๋ค. ์ด ํ๋ฐฑ ์ด๋ฏธ์ง๋ค์ ๋ชจ๋ธ์ด ์ฑ์์ ์ํํ ๋์์ด ๋ฉ๋๋ค.
- ์ปฌ๋ฌ ์ด๋ฏธ์ง : ํ๋ฐฑ ์ด๋ฏธ์ง์ ์์ ์ด๋ฃจ๋ ์๋ณธ ์ปฌ๋ฌ ์ด๋ฏธ์ง์ ๋๋ค. ์ด ์ปฌ๋ฌ ์ด๋ฏธ์ง๋ค์ ๋ชจ๋ธ์ด ์ฑ์ ํจํด์ ํ์ตํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์บก์ : ์๋ณธ ์ปฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ์ค๋ช ํ๋ ์งง์ ๋ฌธ์ฅ์ ๋๋ค. ์ด ์บก์ ์ ์๋ณธ ์ปฌ๋ฌ ์ด๋ฏธ์ง์ ์์ ์ ๋ณด, ํน์ง ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค.
์ ์์ ์ด๋ฃจ๋ ํ๋ฐฑ ์ด๋ฏธ์ง, ์ปฌ๋ฌ ์ด๋ฏธ์ง์ ์บก์ ์ ํ๋์ ์์์ ๋๋ค.
์ด ๋ฐ์ดํฐ ์ ์ ํ์ต์ ํ์ํ ๊ฒ์ผ๋ก, ์บก์ ์ ๊ฒฝ์ฐ ๋ ๋ง์ ์์ ์ ๋ณด์ ํน์ง์ ๋ด๋๋ค๋ฉด, ๋ชจ๋ธ ํฅ์์ ๋์์ด ๋ฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ๊ฐ์ง dataset ์ ๋ํด์ ์๋ง๋ caption์ ์๋ํํ์ฌ ์์ฑํ ์ ์๋๋ก image captioning๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ
caption data๋ฅผ ์์ฑํ์๋ค.
Instruct pix2pix ๋ชจ๋ธ์ finetuning ์ํฌ ๋ ๋ค๋์ caption data๊ฐ ํ์ํ๋ฏ๋ก ํฌ์ผ๋ชฌ ์ด๋ฏธ์ง์ ์ ๋ณด๋ฅผ text๋ก ๋ํ๋ด์ค ์ ์๋ image captioning model์
์ ์ ํด์ผํ๋ค. ๊ทธ ์ค โ**CNN-LSTMโ**๊ณผ โCLIPโ 2๊ฐ์ ๋ชจ๋ธ์ด ํ๋ณด์ ์ฌ๋๋ค.
์ด ์ค์์ ํฌ์ผ๋ชฌ ์ด๋ฏธ์ง์ ์ ์ ๋ณด๋ฅผ ๋ ์ ์ดํดํ๊ณ caption์ผ๋ก ์ถ์ถํ ์ ์๋ ๋ชจ๋ธ์ย ์ ํํ๋ ๊ฒ์ด ๊ด๊ฑด์ด์๋ค.
ํ๋ณด ๋ชจ๋ธ๊ตฐ
CNN-LSTM
CLIP
์ ๋ชจ๋ธ์ ํน์ง์ Encoder, Decoder ์ ๋ฌด๋ก ๋ฐ์ํ๋ ์ฐจ์ด๋ก ์ค๋ช ์ ํ ์ ์๋ค.
(1)Encoder(CLIP)
ํน์ input data๊ฐ ๋ค์ด์์ ๋ ๊ทธ๊ฒ์ ์ ์์ฝ์ ํด์ค์ ์ ์ฌ์ ์ธ ์ ๋ณด(latent vector)์ ์ด์ ์ ๋ง์ถ์๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ์ ๋ณด์ ์์ ๋๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค. ->โzero-shotโ ์ฑ๋ฅ ์ฐ์
(2)Encoder, Decoder(CNN-LSTM)
****์ฐ์ encoder๋ก latent vector๋ฅผ ์ถ์ถํ๊ณ decoder๋ฅผ ํตํด์ ์ ์ ๋ caption์ ์ ์ถ์ถํ ์ ์๋ค.
-> ์ฑ๋ฅ ๋ฐธ๋ฐ์ค ์ฐ์
๋ชจ๋ธ์ ๋๋ ค๋ณธ ๊ฒฐ๊ณผ, CNN-LSTM์์๋ unknown token์ด ๋ฐ์ํ์ฌ ์ด๋ฏธ์ง์ ์ค์ํ ์ ์ ๋ณด๋ฅผ ํํํ์ง ๋ชปํ์๋ค. ํ์ง๋ง latent vector์ ์ด์ ์ ๋ง์ถ CLIP์ CNN-LSTM์ ๋นํด ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ์๊ธฐ ๋๋ฌธ์ CLIP์ผ๋ก 826๊ฐ์ caption data๋ฅผ ์์ฑํ์๋ค.
CLIP์ meta์์ 2022๋ ์ ๋ฐํํ ๋ชจ๋ธ๋ก 10์ต๊ฐ์ ๋ฐ์ดํฐ ๊ธฐ๋ฐ์ผ๋ก noise๊ฐ ์กฐ๊ธ ์์ง๋ง ํํ์ ๋ฒ์๊ฐ ๋ณด๋ค ๋ค์ํ ๊ฒ์ ๋ณผ ์ ์๋ค.
| CNN-LSTM | CLIP |
|---|---|
| Turn it into a drawing with a body, face, and horns. | Turn it into a close up of a cartoon bird with a red head and white wings, style of pokemon, werecrow, ultra-high resolution, kid named finger, cleanest image, wildfire, metalhead, soaring, tuxedo, black white red, folklore |
์ด์ ํ์ํ ํ์ต์ ํ์ํ ๋ฐ์ดํฐ์ ์ด ๋ชจ๋ ๊ตฌ์ถ์ด ๋์์ผ๋ instruct pix2pix ๋ชจ๋ธ์ ํฌ์ผ๋ชฌ ์ฑ์์ ์ต์ ํ๋ ๋ชจ๋ธ๋ก ๋ง๋ค๊ธฐ ์ํด fine-tuning์ ํด๋ณผ ๊ฒ์ด๋ค. fine-tuning์ ํ ๋ ๋ค์๊ณผ ๊ฐ์ github, huggingface ๋ ํผ๋ฐ์ค๋ฅผ ์ฐธ๊ณ ํ์ฌ ํ์๋ค.
GitHub - huggingface/instruction-tuned-sd: Code for instruction-tuning Stable Diffusion.
ํ์ต ํ๊ฒฝ์ PyTorch 1.13.1 (CUDA 11.6) GPU RTX4090 ์ ์ฌ์ฉํ์ฌ ํ์ตํ์๊ณ .
xformer 0.0.16 ์ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ํจ์จ์ ์ธ ํ์ต์ ํ๋ค.
์ด์ ๊ฐ์ ๊ฒฐ๊ณผ๋ instruct pix2pix model์ ๊ทธ๋ฆผ์ ์ ๋ณด๋ฅผ ์ค๋ช ํ๋ caption๊ณผ ๋ณํ์ image,๋ณํ ํ image๋ฅผ ๋ฃ๊ณ fine-tuning์ ํ ํ ์ฌ์ฉ์๊ฐ ์ํ๋ ๋ถ์์ ์ํ๋ ์์ ์น ํ๊ฒ ๋ค๋ prompt๋ฅผ fine-tuning๋ ๋ชจ๋ธ์ด ๋ฐ์ผ๋ฉด ์ธ๋ฐํ๊ฒ ์ค์ผ์น์ ๋ถ์๋ฅผ ์ธ์ํ๊ณ ์์ ์น ํด์ค ์ ์๋ค๋ ๊ฒ์ ์ฆ๋ช ํ๋ค. ๋ํ CNN-LSTM์ caption data์ CLIP์ caption data๋ฅผ ํ์ต์ํจ ๊ฒฝ์ฐ๋ฅผ ๋น๊ตํ๋ฉด ํ์ต๋ caption์ ์ง์ ๋ฐ๋ผ ํ์ฐํ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅธ ๊ฒ์ ๋ณผ ์ ์๊ณ instruct pix2pix๋ ๋ค์ํ ํธ์ง๋ฅ๋ ฅ์ ๊ฐ์ง๊ณ ์๊ณ ์ ๋ก์ท ์ฑ๋ฅ๋ ๋๊ธฐ ๋๋ฌธ ์ง๊ณผ ์์์ ์ฐ์ํ data๋ฅผ ํ์ต์ํจ๋ค๋ฉด ๊ทธ์ ๋ฐ๋ฅธ ์ฑ๋ฅ๋ ๋์ ๋๊ฒ ํฅ์๋ ๊ฒ์ด๋ผ ๊ธฐ๋ํด ๋ณผ ์ ์๋ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋ฌ๋ค.
fine-tuning code
export MODEL_ID="timbrooks/instruct-pix2pix"
export DATASET_ID="instruction-tuning-sd/cartoonization"
export OUTPUT_DIR="cartoonization-finetuned"
accelerate launch --mixed_precision="fp16" finetune_instruct_pix2pix.py \
--pretrained_model_name_or_path=$MODEL_ID \
--dataset_name=$DATASET_ID \
--use_ema \
--enable_xformers_memory_efficient_attention \
--resolution=256 --random_flip \
--train_batch_size=2 --gradient_accumulation_steps=4 --gradient_checkpointing \
--max_train_steps=15000 \
--checkpointing_steps=5000 --checkpoints_total_limit=1 \
--learning_rate=5e-05 --lr_warmup_steps=0 \
--mixed_precision=fp16 \
--val_image_url="./pokemon_pix2pix_dataset/trainA/0002.png" \
--validation_prompt="a cartoon character with a potted plant on his head" \
--seed=42 \
--output_dir=$OUTPUT_DIR \
--report_to=wandb \
--push_to_hubCollectPage Header background by Pinterest
pokeball image, search-icon image by Flaticon









