캐릭터 분류 과정에서 만난 가장 까다로운 문제와 그 해결 과정의 기록. "정체성은 CCIP, 스타일은 크기"로 신호를 분담한 사례.
동구(남주)는 개그 담당이라 말풍선 옆 작은 SD 미니체(치비)로 매우 자주 등장한다. 이 치비들이 캐릭터 분류에서 가장 확신 높은 "기준"으로 떠올라, 실사 얼굴이 오히려 뒤로 밀렸다. 인물 LoRA는 실사를 학습해야 하는데, 신뢰도 상위만 뽑으면 치비가 딸려오는 상황.
▲ 문제의 치비 — 말풍선 옆 손바닥만 한 SD 동구. 사람 눈엔 명백히 "약식 그림"이지만…
분류에 쓴 CCIP(Contrastive Character Image Pre-training)는 "누구인가(정체성)"만 본다. 그림체가 달라도 같은 인물이면 가깝게 보도록 학습된 모델이라, 치비 동구와 실사 동구를 같은 사람으로 정확히 인식한다 — 바로 그게 문제였다. 거리로는 둘이 0.03~0.05로 붙어 있어, 스타일(치비/실사) 구분이 원천적으로 불가능했다.
먼저 분류 기준(시드)이 오염됐다고 보고, 시드를 CCIP 밀집 코어만 남겨 정제했다. 타캐릭터·뒤통수 시드는 제거됐지만(동구 +287장 오분류 정정), 치비는 그대로 남았다 — 치비도 "진짜 동구"라 코어 안에 멀쩡히 들어있었기 때문.
그럼 동구 안에서 다시 클러스터링해 치비 무리를 떼어내자. → 안 갈라졌다. eps를 조여도 치비와 실사가 한 덩어리(conf 0.03). CCIP에겐 둘이 동일 인물이라, 몇 번을 나눠도 분리 불가. "CCIP 계열 신호로는 절대 못 푼다"는 걸 여기서 확정.
치비는 물리적으로 작게 그려진다(말풍선 옆 스티커). 정체성이 아니라 그려진 크기를 재면 된다. 실제 측정:
| 얼굴 높이 중앙값 | 장수 | |
|---|---|---|
| 치비 | 98 px | 323 |
| 실사 | 261 px | 1,179 |

치비 (작게 그려진 얼굴)

실사 (큰 클로즈업)
→ chibi = (얼굴높이 < 115px) 한 줄로 깔끔히 분리. CCIP가 못 한 걸 단순한 크기 신호가 해결.
결과는 플래그됐지만, 리뷰 중 분류의 기준점(시드 204장)에 치비 25~30장이 여전히 남은 것을 발견.
플래그는 결과에만 걸었고 시드엔 안 걸었던 것 — 기준이 치비로 살짝 끌리는 원인.
시드에도 크기컷(<130px)을 적용해 기준점을 대형 실사로만 재구성.
▲ 최종 기준점 204장 — 전부 대형 실사, 치비 0. 이 얼굴들과의 거리로 전체 동구가 판정된다.
신호 분담이 핵심. 두 질문을 서로 다른 신호로 답하게 나눴다:
| 질문 | 신호 | 적용 |
|---|---|---|
| 누구인가? (정체성) | CCIP 임베딩 거리 | 캐릭터 분류 (kNN) |
| 어떤 그림체인가? (스타일) | 얼굴 bbox 크기 | 치비 분리 (2곳) |
두 곳에 적용 — 기준점(시드): <130px 제거 → 동구 234→204. 결과(학습 풀): <115px 플래그 → 갤러리 토글·학습 제외.
결과: 동구 1,179장의 깨끗한 실사 학습 풀 확보.
단순 크기컷이라 원경의 작은 실사도 일부 치비로 묶인다. 하지만 실사가 1,179장 남아 학습엔 무관 → 재현율을 조금 희생하고 순도를 택한 보수적 선택. 115~145px 경계를 직접 검수해 치비 누출이 없음을 확인했다.