02_char_lora · 케이스 스터디

치비(SD 미니체) 분리 — CCIP가 못 하는 걸 어떻게 풀었나

캐릭터 분류 과정에서 만난 가장 까다로운 문제와 그 해결 과정의 기록. "정체성은 CCIP, 스타일은 크기"로 신호를 분담한 사례.

문제

동구(남주)는 개그 담당이라 말풍선 옆 작은 SD 미니체(치비)로 매우 자주 등장한다. 이 치비들이 캐릭터 분류에서 가장 확신 높은 "기준"으로 떠올라, 실사 얼굴이 오히려 뒤로 밀렸다. 인물 LoRA는 실사를 학습해야 하는데, 신뢰도 상위만 뽑으면 치비가 딸려오는 상황.

▲ 문제의 치비 — 말풍선 옆 손바닥만 한 SD 동구. 사람 눈엔 명백히 "약식 그림"이지만…

왜 어려운가

분류에 쓴 CCIP(Contrastive Character Image Pre-training)는 "누구인가(정체성)"만 본다. 그림체가 달라도 같은 인물이면 가깝게 보도록 학습된 모델이라, 치비 동구와 실사 동구를 같은 사람으로 정확히 인식한다 — 바로 그게 문제였다. 거리로는 둘이 0.03~0.05로 붙어 있어, 스타일(치비/실사) 구분이 원천적으로 불가능했다.

시행착오

시도 1 · 시드 정제 — 부분 성공

먼저 분류 기준(시드)이 오염됐다고 보고, 시드를 CCIP 밀집 코어만 남겨 정제했다. 타캐릭터·뒤통수 시드는 제거됐지만(동구 +287장 오분류 정정), 치비는 그대로 남았다 — 치비도 "진짜 동구"라 코어 안에 멀쩡히 들어있었기 때문.

시도 2 · CCIP 서브클러스터로 분리 — 실패

그럼 동구 안에서 다시 클러스터링해 치비 무리를 떼어내자. → 안 갈라졌다. eps를 조여도 치비와 실사가 한 덩어리(conf 0.03). CCIP에겐 둘이 동일 인물이라, 몇 번을 나눠도 분리 불가. "CCIP 계열 신호로는 절대 못 푼다"는 걸 여기서 확정.

통찰 · 다른 신호 — 얼굴 크기

치비는 물리적으로 작게 그려진다(말풍선 옆 스티커). 정체성이 아니라 그려진 크기를 재면 된다. 실제 측정:

얼굴 높이 중앙값장수
치비98 px323
실사261 px1,179

치비 (작게 그려진 얼굴)

실사 (큰 클로즈업)

chibi = (얼굴높이 < 115px) 한 줄로 깔끔히 분리. CCIP가 못 한 걸 단순한 크기 신호가 해결.

피드백 루프 · "기준점에도 치비가 섞여있다"

결과는 플래그됐지만, 리뷰 중 분류의 기준점(시드 204장)에 치비 25~30장이 여전히 남은 것을 발견. 플래그는 결과에만 걸었고 시드엔 안 걸었던 것 — 기준이 치비로 살짝 끌리는 원인. 시드에도 크기컷(<130px)을 적용해 기준점을 대형 실사로만 재구성.

▲ 최종 기준점 204장 — 전부 대형 실사, 치비 0. 이 얼굴들과의 거리로 전체 동구가 판정된다.

최종 구조

신호 분담이 핵심. 두 질문을 서로 다른 신호로 답하게 나눴다:

질문신호적용
누구인가? (정체성)CCIP 임베딩 거리캐릭터 분류 (kNN)
어떤 그림체인가? (스타일)얼굴 bbox 크기치비 분리 (2곳)

두 곳에 적용 — 기준점(시드): <130px 제거 → 동구 234→204. 결과(학습 풀): <115px 플래그 → 갤러리 토글·학습 제외. 결과: 동구 1,179장의 깨끗한 실사 학습 풀 확보.

한계 (정직하게)

단순 크기컷이라 원경의 작은 실사도 일부 치비로 묶인다. 하지만 실사가 1,179장 남아 학습엔 무관 → 재현율을 조금 희생하고 순도를 택한 보수적 선택. 115~145px 경계를 직접 검수해 치비 누출이 없음을 확인했다.

← 캐릭터 분류 결과 · 전수 검수 갤러리 · 프로젝트 개요
×