V1 로직 - 100-hours-a-week/5-yeosa-wiki GitHub Wiki
0. 사용한 태그셋
-
태그셋 전체
동물 새 곤충 해양 생물 의류 및 액세서리 건물 명소 일상 속 사물 음식과 음료 가구 및 인테리어 건강 취미 실내 가전제품 주방 자연 및 야외 사무실 무늬 및 형태 인물 식물 랜드마크 스포츠 상징 및 깃발 기술 텍스트 및 문서 도구 및 기계 놀이 및 게임 여행 차량 하늘 바다 산
-
일상/여행 사진에 주로 등장할만한 태그를 임의로 32개 추출
1. 초기 로직 요약
a. 이미지 ↔ 태그 유사도 계산
- 모든 이미지에 대해, 사전에 정의된 M개 태그 임베딩과 cosine 유사도를 계산
- 0.25 미만 유사도는 제외(threshold)
- 남은 태그 중 이미지별로 상위 3개 태그(Top-3) 추출
b. 글로벌 태그 후보 선정
- 모든 이미지의 Top-3 태그를 모아 “등장 횟수” 기준으로 집계
- 빈도가 높은 순서대로 상위 5개 태그를 글로벌 카테고리 후보로 확정
c. 최종 카테고리 할당
- 각 이미지는 후보 5개 중, 자신과 유사도(기존 계산된 값)가 가장 높은 태그로 분류
- 만약 어떤 이미지의 Top-3에 후보가 하나도 없으면 → **‘기타’**로 분류
2. 주요 문제점
유사도만 보면 ‘가구 및 인테리어’로 카테고리가 묶여야 하지만, ‘놀이 및 게임’으로 묶였다. 글로벌 상위 5개의 태그 추출과정에서 ‘가구 및 인테리어’가 누락 됐을 것으로 추정
a. 절대 임계값(threshold)의 한계
- 0.25 기준으로 낮은 스코어는 걸러내지만,
- “가구 및 인테리어(≈0.27)” vs “놀이 및 게임(≈0.26)” 모두 통과 → 빈도 기반으로 밀려날 수 있음
b. 빈도 기반 후보 선정의 편향
- 단순 등장 횟수만 세다 보니,
- 소수 이미지에서 더 높은 유사도를 보인 태그가 글로벌 Top-5에 들지 못함
c. 작은 스코어 차이로 인한 순위 불안정
- Top-1과 Top-2 차이가 0.01–0.02 수준 → 순위가 쉽게 바뀌고 뚜렷한 우위 태그가 제대로 반영되지 않음
d. 글로벌 분포 무시로 인한 클러스터별 특성 상실
- 다양한 장면이 섞인 전체 집합에서 인기 태그만 선택 → 특정 그룹의 대표 태그가 사라질 수 있음
e. 후보 내 “낮은 자신감” 필터 부재
- 후보 5개에 포함된 경우, 아무리 유사도가 낮아도 무조건 할당
- Top-3 밖은 ‘기타’로 분류하지만, 후보 내 태그들 간 차이가 작으면 오분류 위험이 큼
3. 개선한 로직
a. 로직 설명
가. 초기 분류 (First Pass)
- 각 이미지에 대해:
- Top-3 태그와 점수 계산
- Global Top-5 태그 중에서 최고 점수 태그 선택
- 분류 조건:
- 최고 점수가 Threshold(0.22) 미만이면 → '기타'
- 최고 점수 태그가 Top-3에 없으면 → '기타'
- 그 외의 경우 → 최고 점수 태그로 분류
나. 그룹 정제 (Refinement)
- 각 카테고리 그룹에 대해:
- '기타' 그룹이거나 3장 미만인 그룹은 그대로 유지
- 그 외의 경우:
- 그룹 내 모든 이미지의 Top-3 태그 점수 합산
- 합산 점수가 가장 높은 태그를 새로운 대표 태그로 설정
- 해당 그룹의 모든 이미지를 새 대표 태그로 이동
다. 유사도 재검증 (Second Pass)
- 각 정제된 그룹에 대해:
- '기타' 그룹은 그대로 유지
- 그 외의 경우:
- 각 이미지의 대표 태그와의 유사도 재확인
- 유사도가 0.22 미만인 이미지는 '기타'로 재분류
라. 카테고리 병합 (Final Merge)
- 동일한 이름을 가진 카테고리들을 자동으로 하나로 병합
b. 주요 파라미터
- tau: Confidence Threshold (기본값: 0.22)
- lambda_boost: Boost Weight (기본값: 1.1)
- 유사도 임계값: 0.22
c. 특징
- 이중 검증: 초기 분류와 정제 후 재검증을 통해 정확도 향상
- 유연한 분류: 낮은 유사도를 가진 이미지는 '기타'로 분류
- 그룹 기반 정제: 비슷한 이미지들을 그룹화하여 더 정확한 대표 태그 선정
- 자동 병합: 중복 카테고리 자동 통합