한국인 얼굴 이미지에서 퍼스널컬러 4계절 유형을 분류하는 EfficientNet-B0 기반 모델입니다.
ImageNet pretrained EfficientNet-B0
→ Deep Armocromia base training (소스 도메인: 유럽인 얼굴, ~4,000장)
→ Korean celebrity fine-tuning (타겟 도메인: 한국 셀럽, ~2,368장)
1import torch
2import timm
3from PIL import Image
4from torchvision import transforms
5from huggingface_hub import hf_hub_download
6
7# 모델 로드
8LABEL_ORDER = ["spring_warm", "summer_cool", "autumn_warm", "winter_cool"]
9LABEL_KO = ["봄웜", "여쿨", "가을웜", "겨울쿨"]
10
11ckpt_path = hf_hub_download(
12 "jiwoonkim00/personal-color-classifier",
13 "personal_color_korean_tuned_v2.pt"
14)
15
16model = timm.create_model("efficientnet_b0.ra_in1k", pretrained=False, num_classes=4)
17ckpt = torch.load(ckpt_path, map_location="cpu")
18model.load_state_dict(ckpt["model_state_dict"])
19model.eval()
20
21# 전처리
22tf = transforms.Compose([
23 transforms.Resize(256),
24 transforms.CenterCrop(224),
25 transforms.ToTensor(),
26 transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),
27])
28
29# 추론
30img = Image.open("face.jpg").convert("RGB") # 얼굴이 크롭된 이미지
31x = tf(img).unsqueeze(0)
32with torch.no_grad():
33 probs = torch.softmax(model(x), dim=1).squeeze()
34
35pred = probs.argmax().item()
36print(f"예측: {LABEL_KO[pred]} ({LABEL_ORDER[pred]})")
37print(f"확신도: {probs[pred]:.1%}")
1# 추가 패키지 필요
2pip install facenet-pytorch opencv-python-headless
3
4python src/infer_personal_color.py \
5 --image path/to/image.jpg \
6 --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