Personal Color Classifier (ํผ์Šค๋„์ปฌ๋Ÿฌ ๋ถ„๋ฅ˜๊ธฐ)

ํ•œ๊ตญ์ธ ์–ผ๊ตด ์ด๋ฏธ์ง€์—์„œ ํผ์Šค๋„์ปฌ๋Ÿฌ 4๊ณ„์ ˆ ์œ ํ˜•์„ ๋ถ„๋ฅ˜ํ•˜๋Š” EfficientNet-B0 ๊ธฐ๋ฐ˜ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

๋ชจ๋ธ ์„ฑ๋Šฅ

Metric Score
Test Accuracy (TTA) 70.8%
Test Accuracy (๋‹จ์ผ ์ถ”๋ก ) 68.3%
Macro F1 0.71

ํด๋ž˜์Šค๋ณ„ ์„ฑ๋Šฅ (TTA ๊ธฐ์ค€)

ํด๋ž˜์Šค Precision Recall F1
spring_warm (๋ด„์›œ) 0.69 0.80 0.74
summer_cool (์—ฌ์ฟจ) 0.97 0.84 0.90
autumn_warm (๊ฐ€์„์›œ) 0.54 0.58 0.56
winter_cool (๊ฒจ์šธ์ฟจ) 0.68 0.61 0.64

ํ•™์Šต ์ „๋žต

ImageNet pretrained EfficientNet-B0
  โ†’ Deep Armocromia base training  (์†Œ์Šค ๋„๋ฉ”์ธ: ์œ ๋Ÿฝ์ธ ์–ผ๊ตด, ~4,000์žฅ)
  โ†’ Korean celebrity fine-tuning   (ํƒ€๊ฒŸ ๋„๋ฉ”์ธ: ํ•œ๊ตญ ์…€๋Ÿฝ, ~2,368์žฅ)
  • ์ „์ฒ˜๋ฆฌ: MTCNN ์–ผ๊ตด ๊ฒ€์ถœ โ†’ BiSeNet ํ”ผ๋ถ€ ๋งˆ์Šคํ‚น (๋จธ๋ฆฌ์นด๋ฝยท๋ˆˆยท์ž…์ˆ  ์ œ๊ฑฐ)
  • ์ •๊ทœํ™”: Mixup (ฮฑ=0.2), Label smoothing (0.1), Strong augmentation
  • TTA: 6-crop ํ‰๊ท  (center crop + horizontal flip ร— 3 scale)

ํŒŒ์ผ ๊ตฌ์„ฑ

ํŒŒ์ผ ์„ค๋ช…
personal_color_korean_tuned_v2.pt ๋ฉ”์ธ ๋ชจ๋ธ โ€” ์ตœ๊ณ  ์„ฑ๋Šฅ fine-tuned ์ฒดํฌํฌ์ธํŠธ
deep_armocromia_efficientnet_b0_base_rgb.pt Base ์ฒดํฌํฌ์ธํŠธ (Deep Armocromia ํ•™์Šต)
src/infer_personal_color.py ๋‹จ์ผ ์ด๋ฏธ์ง€ ์ถ”๋ก  ์Šคํฌ๋ฆฝํŠธ
src/evaluate_personal_color.py ํ…Œ์ŠคํŠธ์…‹ ํ‰๊ฐ€ ์Šคํฌ๋ฆฝํŠธ
PROGRESS_SNAPSHOT.md ์ „์ฒด ์‹คํ—˜ ๊ธฐ๋ก ์š”์•ฝ

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

์„ค์น˜

pip install timm torch torchvision huggingface_hub

๋น ๋ฅธ ์ถ”๋ก 

import torch
import timm
from PIL import Image
from torchvision import transforms
from huggingface_hub import hf_hub_download

# ๋ชจ๋ธ ๋กœ๋“œ
LABEL_ORDER = ["spring_warm", "summer_cool", "autumn_warm", "winter_cool"]
LABEL_KO    = ["๋ด„์›œ", "์—ฌ์ฟจ", "๊ฐ€์„์›œ", "๊ฒจ์šธ์ฟจ"]

ckpt_path = hf_hub_download(
    "jiwoonkim00/personal-color-classifier",
    "personal_color_korean_tuned_v2.pt"
)

model = timm.create_model("efficientnet_b0.ra_in1k", pretrained=False, num_classes=4)
ckpt  = torch.load(ckpt_path, map_location="cpu")
model.load_state_dict(ckpt["model_state_dict"])
model.eval()

# ์ „์ฒ˜๋ฆฌ
tf = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),
])

# ์ถ”๋ก 
img   = Image.open("face.jpg").convert("RGB")   # ์–ผ๊ตด์ด ํฌ๋กญ๋œ ์ด๋ฏธ์ง€
x     = tf(img).unsqueeze(0)
with torch.no_grad():
    probs = torch.softmax(model(x), dim=1).squeeze()

pred  = probs.argmax().item()
print(f"์˜ˆ์ธก: {LABEL_KO[pred]} ({LABEL_ORDER[pred]})")
print(f"ํ™•์‹ ๋„: {probs[pred]:.1%}")

์ถ”๋ก  ์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ (์–ผ๊ตด ์ž๋™ ๊ฒ€์ถœ ํฌํ•จ)

# ์ถ”๊ฐ€ ํŒจํ‚ค์ง€ ํ•„์š”
pip install facenet-pytorch opencv-python-headless

python src/infer_personal_color.py \
  --image path/to/image.jpg \
  --checkpoint personal_color_korean_tuned_v2.pt

์ถœ๋ ฅ ์˜ˆ์‹œ:

์˜ˆ์ธก ๊ฒฐ๊ณผ: ์—ฌ์ฟจ (summer_cool)
ํ™•์‹ ๋„: 0.84 (confident)

์ „์ฒด ํ™•๋ฅ :
  ๋ด„์›œ (spring_warm): 0.06
  ์—ฌ์ฟจ (summer_cool): 0.84  โ† ์˜ˆ์ธก
  ๊ฐ€์„์›œ (autumn_warm): 0.04
  ๊ฒจ์šธ์ฟจ (winter_cool): 0.06

ํ™•์‹ ๋„ ์ •์ฑ…

ํ™•์‹ ๋„ ๋“ฑ๊ธ‰ ์ฒ˜๋ฆฌ
โ‰ฅ 0.70 confident ๊ฒฐ๊ณผ ์‹ ๋ขฐ
0.55 ~ 0.70 moderate ์ฐธ๊ณ  ์ˆ˜์ค€
< 0.55 low ์žฌ์ดฌ์˜ ๋˜๋Š” ์ˆ˜๋™ ๋ณด์ • ๊ถŒ์žฅ

ํ•œ๊ณ„ ๋ฐ ์ฃผ์˜์‚ฌํ•ญ

  • ํ•œ๊ตญ ์…€๋Ÿฝ ์Šคํฌ๋ฆฐ์ƒท ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ โ€” ๋ฉ”์ดํฌ์—…ยท์กฐ๋ช…ยทํŽธ์ง‘ ํŽธํ–ฅ ์กด์žฌ
  • ๊ฐ€์„์›œ(autumn_warm) โ†” ๋ด„์›œ(spring_warm) ํ˜ผ๋™์ด ๊ฐ€์žฅ ์žฆ์Œ (๋‘˜ ๋‹ค ์›œํ†ค)
  • ํ”„๋กœํ† ํƒ€์ž…/ํฌํŠธํด๋ฆฌ์˜ค ์‹คํ—˜ ๋ชฉ์ ์œผ๋กœ ๊ฐœ๋ฐœ๋จ
  • ์ž„์ƒยท์ „๋ฌธ๊ฐ€ ์ˆ˜์ค€์˜ ํผ์Šค๋„์ปฌ๋Ÿฌ ์ง„๋‹จ ๋„๊ตฌ๋กœ ์‚ฌ์šฉ ๋ถˆ๊ฐ€
  • ์ „๋ฌธ ์ง„๋‹จ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ž๊ฒฉ์„ ๊ฐ–์ถ˜ ํผ์Šค๋„์ปฌ๋Ÿฌ ์ „๋ฌธ๊ฐ€์—๊ฒŒ ๋ฌธ์˜ํ•˜์„ธ์š”

๋ฐ์ดํ„ฐ์…‹

๋ฐ์ดํ„ฐ์…‹ ์šฉ๋„ ์ด๋ฏธ์ง€ ์ˆ˜
Korean Celebrity (์ž์ฒด ์ˆ˜์ง‘) Fine-tuning ~2,368์žฅ
Deep Armocromia Base training ~4,920์žฅ

๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜

  • ๋ฐฑ๋ณธ: efficientnet_b0.ra_in1k (timm)
  • ํŒŒ๋ผ๋ฏธํ„ฐ: ์•ฝ 5.3M
  • ์ž…๋ ฅ: 224 ร— 224 RGB (ํ”ผ๋ถ€ ๋งˆ์Šคํ‚น ์ ์šฉ ์–ผ๊ตด ์ด๋ฏธ์ง€)
  • ์ถœ๋ ฅ: 4-class softmax
Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Space using jiwoonkim00/personal-color-classifier 1