Dataset Operations · Current
Data and Text Labeling Guide
이 문서는 MobileCLIP2-S3/S4 계열 모델을 우리 데이터셋에 multi-task fine-tuning하기 위한 현재 라벨링 기준이다.
현재 기준은 catalog.json을 먼저 만들고, 그 catalog를 입력으로
labels.json을 생성하는 흐름이다. 이미지별 Vision AI 작업은 최소 라벨 판단에 집중하고,
caption_set은 Python 후처리가 catalog의 scene_group template을 기준으로 만든다.
왜 caption이 필요한가?
MobileCLIP2 계열 모델은 이미지 인코더와 텍스트 인코더를 함께 가진 embedding 모델이다.
같은 landmark 이미지와 그 landmark를 설명하는 한/영 caption을 가까운 embedding 방향으로 학습시키면,
이미지 인식과 자연어 검색을 같은 표현 공간에서 함께 개선할 수 있다.
현재 결정
앞으로의 라벨링은 image-label classification만을 위한 작업이 아니라
image-text contrastive 학습까지 가능한 데이터셋을 만드는 작업이다.
단, 모든 이미지마다 긴 caption을 사람이 직접 쓰지 않는다.
landmark 단위 catalog.json에 기준 어휘와 scene_group별 caption template을 만들고,
이미지별 labels.json에는 주 피사체, 품질, scene_group, training_role 같은 판단 결과를 남긴다.
이전 Sprint 1 기준은 기존 학습방식용 old guide로 보존했다. 왜 그 방식을 썼는지도 old guide에 남겨 두었다.
2026-06-08 기준 변경 이유
- 카탈로그와 라벨을 분리했다.
catalog.json은 landmark 1개의 기준 사전이고,labels.json은 이미지 1장마다 학습에 넣을지 판단하는 파일이다. 둘을 섞으면 재작업과 검수가 어려워진다. - caption_set을 단순화했다. 학습 코드는 caption_type을 고급 의미로 골라 쓰지 않고
caption_set안의 문장을 학습 pair로 사용한다. 그래서 최종 label에는name_anchor와visual_feature만 남긴다. - function/contrast 문장은 catalog로 보냈다. 기능 설명과 비교 설명은 검색 사전과 검수에는 유용하지만, 이미지별 caption에 직접 넣으면 사진에 보이지 않는 의미를 학습시킬 수 있다.
- hard negative는 구조화 필드로 관리한다. 헷갈리는 대상 이름은 caption text에 넣지 않고
confusing_with와Dataset/confusion_prior_v1.json에만 기록한다.
라벨링 산출물 지도
이름이 비슷해서 헷갈리기 쉬운 산출물을 먼저 분리한다. 핵심은 “사진 1장에 붙는 정보”와 “랜드마크 1개에 붙는 검색 사전”을 구분하는 것이다.
| 산출물 | 저장 단위 | 현재 목적 | 모델/앱에 미치는 영향 |
|---|---|---|---|
| 이미지 라벨 | 이미지 1장 | 이 사진이 어떤 landmark의 confirmed positive인지, hard case인지, OOS/저품질인지 결정한다. | 이미지 분류, prototype 품질, train/val/test split, confidence policy. |
| 이미지 caption set | 이미지 1장 | catalog.json을 기준으로 name_anchor와 visual_feature를 자동 생성한다. |
image-text contrastive 학습과 자연어 검색 embedding 품질. |
| 랜드마크 catalog | 랜드마크 1개 | 공식명, 별칭, 시각 설명, scene_group, caption template, query example을 모은다. | labels.json 생성, text index, keyword bonus, 검색 회귀 테스트. |
| 회귀 테스트 fixture | 입력 케이스 1건 | 수정 후 이미지/텍스트 검색과 신뢰도 정책이 깨졌는지 확인한다. | 시연 안정성, 실패 재발 방지. |
이미지 record 필수 필드
이미지 record는 모델이 “무엇을 정답으로 배워야 하는가”와 “무엇을 정답으로 배우면 안 되는가”를 나누는 기준이다. 잘못된 confirmed 하나는 classification과 contrastive 학습을 동시에 오염시킬 수 있다.
{
"image_id": "gwanghwamun_001",
"file_name": "images/gwanghwamun_001.jpg",
"landmark_id": "gwanghwamun",
"label_status": "confirmed",
"scope_status": "in_scope",
"landmark_visibility": "dominant",
"multi_landmark_present": true,
"background_landmark_ids": ["cheongwadae"],
"confusing_with": ["gyeongbokgung_geunjeongmun", "cheongwadae"],
"scene_group": "night_view",
"view_type": "front_exterior",
"time_condition": "night",
"distance_scale": "medium",
"quality_status": ["ok"],
"training_role": "train_positive",
"source_group_id": "",
"caption_set": []
}
| 필드 | 권장 값 | 왜 필요한가 |
|---|---|---|
label_status |
confirmed, uncertain, rejected |
confirmed만 기본 학습 positive로 사용한다. uncertain은 사람이 다시 본다. |
scope_status |
in_scope, similar_out_of_scope, out_of_scope_other,
screen_or_document
|
지원 범위 밖 이미지를 현재 지원 class 중 하나로 억지 답하지 않도록 평가한다. |
landmark_visibility |
dominant, clear_partial, small_background,
background_only, not_visible
|
배경에 보이는 landmark를 positive로 잘못 학습하지 않기 위한 핵심 필드다. |
confusing_with |
예: ["gwanghwamun", "gyeongbokgung_geunjeongmun"] |
hard negative pair와 혼동 분석을 위한 구조화 필드다. caption text에 상대 이름을 넣지 않는다. |
source_group_id |
Optional. 확실한 같은 원본/crop/resize/연속 장면일 때만 작성 | 수동 필수 입력이 아니다. 기관 코드나 파일 prefix만으로 넓게 묶지 않는다. 모르면 빈 문자열로 둔다. |
quality_status |
ok, blurry, dark, low_resolution,
occluded, cropped_too_much
|
저품질 입력을 positive 학습에 넣을지, confidence/OOS 평가로 뺄지 결정한다. |
training_role |
train_positive, low_weight_positive, calibration_only,
eval_only, exclude
|
Top-1 중심 학습에 강하게 넣을 이미지와 OOS/저품질/검수 보류 이미지를 분리한다. |
Caption set 기준
Multi-task 학습에서 caption은 보조 설명이 아니라 image-text 학습 pair의 정답이다.
현재 최종 labels.json에는 name_anchor와 visual_feature만 둔다.
function, contrast_with, viewpoint는 이미지별 caption_set에 넣지 않는다.
기능 설명과 비교 설명은 catalog.json에서 관리한다.
"caption_set": [
{
"caption_type": "name_anchor",
"target": "gwanghwamun",
"text_ko": "광화문 사진",
"text_en": "Gwanghwamun Gate photo"
},
{
"caption_type": "visual_feature",
"target": "gwanghwamun",
"text_ko": "넓은 광장 앞에 있는 큰 궁궐 문과 흰 돌담, 어두운 기와지붕이 보인다.",
"text_en": "A large palace gate in front of a broad plaza, with white stone walls and dark tiled roofs."
}
]
| caption_type | 현재 처리 | 이유 |
|---|---|---|
name_anchor |
최종 labels.json에 포함 | 랜드마크 이름과 이미지 embedding을 직접 연결한다. “사진/photo”만 쓰지 않고 이름을 포함한다. |
visual_feature |
최종 labels.json에 포함 | 사진에서 보이는 색, 재료, 형태, 구도만 학습시킨다. catalog의 scene_group template에서 가져온다. |
function |
labels.json에서는 금지, catalog에 보관 | 기능 설명은 자연어 검색에는 유용하지만 이미지에 직접 보이지 않는 의미일 수 있다. |
viewpoint |
labels.json에서는 금지, scene_group/view_type으로 기록 |
view 정보는 caption_type을 늘리지 않고 구조화 필드와 visual_feature template으로 처리한다. |
contrast_with |
labels.json에서는 금지, catalog/priority에 보관 | 비교 문장은 검수에는 좋지만 상대 landmark 이름이나 특징이 caption embedding을 오염시킬 수 있다. |
landmark catalog.json 기준
catalog.json은 이미지 1장용 caption이 아니라 landmark 1개를 대표하는 기준 파일이다.
앱의 자연어 검색, keyword bonus, text index, caption template, hard negative 후보 검수에 함께 쓰인다.
{
"landmark_id": "naksan_park",
"landmark_name_ko": "낙산공원",
"landmark_name_en": "Naksan Park",
"alias_ko": ["낙산공원", "낙산 성곽길", "성곽 산책로"],
"alias_en": ["Naksan Park", "fortress wall trail"],
"visual_description_ko": "언덕 위 성곽과 돌담길이 이어지고 높은 전망이 보이는 공원이다.",
"visual_description_en": "A hillside park with stone fortress walls and an elevated city view.",
"allowed_scene_groups": ["fortress_wall_trail", "night_view", "wide_city_view", "other"],
"caption_templates": {
"fortress_wall_trail": {
"text_ko": "언덕 위 돌 성곽과 산책로가 이어지고 도시 전망이 보인다.",
"text_en": "A stone fortress wall trail continues along a hill with a city view."
}
},
"confusing_landmark_ids": [],
"query_examples_ko": ["돌담 있는 공원", "성곽 산책로", "야경 보이는 성곽"],
"query_examples_en": ["stone wall park", "fortress trail", "night view city wall"]
}
텍스트 검색 오염 방지
catalog.json의 검색 문장과 caption은 embedding/text index에 직접 들어갈 수 있으므로,
정답 landmark 자체가 아닌 지명, 주변 장소, 근접 관계를 검색 단서로 쓰지 않는다.
“경복궁 근처”, “국립현대미술관 옆”, “서울 도심”, “near Gyeongbokgung” 같은 문장은
실제 검색에서 주변 landmark 점수를 잘못 올릴 수 있어 금지한다.
- 허용: 정답 landmark의 공식명, 공식 별칭, 사진에 보이는 형태·색·재료·구도·기능.
- 금지: 행정 지명, “근처/옆/가까운”, 주변 유명 landmark 이름, 이동 경로, 주소성 설명.
- 예외: 공식명 자체에 지명이 포함된 경우에는 그 공식명만 허용한다.
- 다른 landmark 이름은
confusing_with,background_landmark_ids,target_landmark_id같은 구조화 필드에만 기록한다. contrast_descriptions는 catalog 검수용이다. 이미지별caption_set에는 넣지 않는다.avoid_terms도 text index에 포함될 수 있으면 지명이나 주변 landmark 이름을 넣지 않는다.
Hard negative 운영
Hard negative는 그냥 틀린 예시가 아니라 모델이 실제로 헷갈릴 만한 예시다. 광화문과 근정문처럼 둘 다 궁궐, 기와, 단청, 문 구조가 보이면 random negative보다 훨씬 중요한 학습 신호가 된다.
| 혼동쌍 | 기록할 차이 | 기록 위치 |
|---|---|---|
| 광화문 vs 경복궁 근정문/근정전 | 바깥 주 출입문과 궁궐 내부 건물/문 차이. | confusion_prior_v1.json, confusing_with, catalog의 contrast_descriptions. |
| 청와대 vs 궁궐 전경 | 푸른 지붕과 산 배경은 비슷하지만 건물 용도와 구도가 다름. | 배경이면 background_landmark_ids, 주 피사체가 아니면 small_background 또는 background_only. |
| 조계사 vs 보현산신각 | 큰 사찰 공간과 작은 산신각 구조 차이. | 정답 landmark의 고유 시각 특징만 caption template에 쓰고, 상대 이름은 구조화 필드에만 둔다. |
| 덕수궁 vs 창경궁 | 궁궐 계열이지만 전각 구성과 마당/숲 비중이 다름. | 세부 class는 landmark_id로, 앱 grouping은 parent_landmark_id 같은 catalog metadata로 처리한다. |
라벨링 프롬프트
아래 프롬프트는 새 기준의 기본 템플릿이다.
자동 생성 결과는 바로 학습에 넣지 말고 사람이 label_status, caption 사실성,
hard negative 여부를 다시 확인한다.
공통 입력 파일: confusion prior
표준 입력 파일
confusion_prior_v1.json
catalog.json 작성과 이미지별 labels.json 생성에 함께 쓰는 혼동 후보 기준 파일이다.
내려받은 파일은 그대로 Dataset/confusion_prior_v1.json으로 Dataset 루트에 둔다.
라벨링 제작 흐름
1. Dataset/confusion_prior_v1.json을 Dataset 루트에 둔다
2. landmark별 catalog.json을 먼저 만든다
3. 이미 존재하는 catalog.json을 기준으로 이미지 라벨 + caption 생성 프롬프트를 실행해 labels.json을 만든다
4. validator와 사람 검수로 학습 투입 여부를 확정한다.
1. landmark catalog.json 생성 프롬프트
이 프롬프트는 각 랜드마크의 catalog.json을 만드는 기준이다.
catalog는 자연어 검색, 이미지 caption template, hard negative 후보,
라벨러 기준어를 함께 제공한다.
catalog.json: landmark 1개의 이름, 별칭, 시각 기준어, scene_group, caption template, query 예시를 담는다.confusion_prior_v1.json: 공통 입력 파일이다. catalog 작성 시에는confusing_landmark_ids후보를 정하는 데 참고한다.contrast_descriptions: caption_set으로 직접 들어가지 않는다. 검수와 confusion prior 작성 참고용이다.
[역할]
너는 Landmark Assistant의 catalog.json 작성자이자 시각 정보 검수자다.
[목표]
landmark 1개에 대해 Dataset/<landmark_id>/catalog.json을 작성한다.
이 catalog.json은 다음 용도로 사용된다:
1. 이미지별 labels.json 생성 시 caption_set 자동 생성 기준
2. scene_group별 visual_feature caption template 기준
3. 자연어 검색을 위한 alias, query_examples, visual_description 기준
4. confusing_with와 hard negative 후보 구성 기준
5. 라벨러가 같은 시각 특징을 같은 표현으로 쓰게 만드는 기준 어휘집
중요:
이 프롬프트는 별도의 “텍스트 카탈로그” 파일을 만들기 위한 것이 아니다.
최종 산출물은 Dataset/<landmark_id>/catalog.json이다.
[입력]
- landmark_id: 랜드마크의 고유 ID
- landmark_name_ko: 한국어 공식 명칭
- landmark_name_en: 영어 공식 명칭
- landmark_category: 건물/공간 유형
예: museum, temple, palace, palace_gate, park, stream, tower, statue, cathedral 등
- candidate_landmark_ids: 전체 landmark_id 목록
- confusion_prior_v1.json: 표준 입력. 전체 landmark 간 헷갈릴 수 있는 쌍 목록
- reference_images: 대표 이미지. 선택 사항이지만 있으면 시각 묘사 정확도 향상
- optional_user_notes: 사용자가 제공한 추가 정보. 없으면 빈 값
[confusion_prior_v1.json 사용 규칙]
1. 현재 landmark_id와 관련된 항목만 참고한다.
2. priority가 high 또는 medium인 관련 pair는 confusing_landmark_ids 후보로 우선 고려한다.
3. priority가 low인 pair는 catalog_notes에 참고만 남기고, 확실하지 않으면 confusing_landmark_ids에 넣지 않는다.
4. confusion_prior의 reason_ko, labeling_note_ko는 라벨링 주의사항이다.
5. confusion_prior의 상대 landmark 이름, 별칭, 영문명은 visual_description, caption_templates, query_examples에 직접 넣지 않는다.
6. confusing_landmark_ids에는 반드시 candidate_landmark_ids 안에 있는 id만 넣는다.
[자료 조사 규칙]
1. 웹 검색 또는 외부 자료 접근이 가능한 환경이라면 catalog 작성 전에 landmark 정보를 조사한다.
2. 우선순위는 다음과 같다:
1순위: 공식 홈페이지, 공공기관, 박물관/미술관/문화재청/지자체 등 공식 출처
2순위: 신뢰 가능한 관광/문화 정보 사이트
3순위: 대표 이미지 또는 사용자가 제공한 reference_images
4순위: 일반 검색 결과
3. 이 catalog의 핵심은 위치 정보가 아니라 시각 정보이다.
4. 주소, 주변 지명, 근처 landmark, 행정구역 정보는 최종 검색 텍스트와 visual_description에 넣지 않는다.
5. reference_images가 있으면 시각 묘사는 reference_images를 최우선으로 한다.
6. reference_images가 없고 외관을 확신할 수 없으면 색상, 재질, 형태, 구조를 구체적으로 단정하지 않는다.
7. 확실하지 않은 시각 정보는 visual_description, key_visual_terms, caption_templates에 넣지 않는다.
8. 불확실성은 catalog_notes에 기록한다.
9. 모델의 기억만으로 구체적 외관을 지어내지 않는다.
[작성해야 할 필드]
1. alias_ko / alias_en
- 공식명, 약칭, 통칭, 영문 약어, 흔한 표기 변형을 포함한다.
- 주변 landmark 기반 표현이나 주소성 표현은 넣지 않는다.
2. visual_description_ko / visual_description_en
- 이미지로 확인 가능한 외관 중심 설명이다.
- 색상, 재질, 형태, 구조, 지붕, 외벽, 기둥, 타워 형태, 조형물, 입면 등을 쓴다.
- 1~3문장으로 짧고 반복 가능하게 작성한다.
- 다른 landmark와의 비교 문장은 쓰지 않는다.
3. function_description_ko / function_description_en
- 기능/용도를 1문장으로 짧게 작성한다.
- 역사 설명은 최소화한다.
4. key_visual_terms_ko / key_visual_terms_en
- visual_description에서 추출한 핵심 시각 용어이다.
- 이미지 caption template과 라벨링 기준 어휘로 쓰인다.
- 같은 특징을 여러 표현으로 바꿔 쓰지 않는다.
5. allowed_scene_groups
- 이 landmark에서 반복적으로 등장하는 장면 유형 목록이다.
- lower_snake_case로 작성한다.
- 보통 6~12개 정도가 적절하다.
- 과도하게 세분화하지 않는다.
- 가능한 경우 other를 포함한다.
예:
- front_exterior
- side_exterior
- wide_view
- night_view
- courtyard_view
- detail_roof
- interior
- other
6. caption_templates
- scene_group별 visual_feature caption template이다.
- Python 후처리가 이미지별 caption_set의 visual_feature를 만들 때 사용한다.
- 각 scene_group마다 text_ko와 text_en을 작성한다.
- caption에는 정답 landmark의 시각 특징만 쓴다.
- confusing landmark 이름, 별칭, 비교 문장, 주변 위치 표현은 넣지 않는다.
7. confusing_landmark_ids
- candidate_landmark_ids 중 시각적으로 혼동될 가능성이 있는 landmark_id 목록이다.
- confusion_prior_v1.json의 high/medium pair를 우선 참고한다.
- 확실하지 않으면 무리해서 넣지 않는다.
- 새로운 landmark_id를 만들지 않는다.
8. contrast_descriptions
- confusing_landmark_ids의 각 항목과 1:1로 작성한다.
- 이 필드는 caption_set에 직접 들어가지 않는다.
- 사람이 catalog를 검수하거나 confusion_prior_v1.json을 보강할 때 참고하는 설명이다.
- text_ko/text_en에는 target landmark의 이름, 별칭, 주변 지명, 고유명사를 직접 쓰지 않는다.
- 비교 대상은 target_landmark_id 필드로만 표시한다.
9. query_examples_ko / query_examples_en
- 사용자가 실제로 입력할 만한 자연어 검색 질의 예시이다.
- 한국어와 영어를 각각 최소 6개 작성한다.
- 별칭/약어형, 시각 묘사형, 기능/용도형, 오기/구어형을 모두 포함한다.
- 주변 landmark 이름, 주소성 설명은 넣지 않는다.
10. visual_confidence
- high: reference_images 또는 공식 자료로 외관을 명확히 확인한 경우
- medium: 일부 자료는 있으나 시각 특징이 제한적으로만 확인되는 경우
- low: reference_images가 없고 외관 정보가 부족한 경우
11. catalog_notes
- 자료 부족, reference_images 부재, 시각 정보 불확실성, low priority confusion 참고 등을 짧게 기록한다.
- 특별한 메모가 없으면 []로 둔다.
[작성 원칙]
1. 모든 class에 걸리는 일반어만 반복하지 않는다.
나쁜 예: 큰 건물, 예쁜 장소, modern building, famous place
좋은 예: 붉은 목조 기둥과 기와지붕, 수직 베이지 타일 외벽, 상부 전망대가 있는 타워형 구조물
2. Top-1 검색을 목표로 해당 landmark에 강하게 연결되는 고유 시각 단서를 먼저 쓴다.
3. 같은 시각 특징은 catalog 전체에서 같은 용어로 유지한다.
4. visual_description에서 사용한 핵심 시각 용어는 key_visual_terms에 반드시 반영한다.
5. key_visual_terms에서 정한 기준어는 caption_templates에서도 같은 표현으로 사용한다.
6. contrast_descriptions는 검수 참고용이며 caption_set에 넣지 않는다.
7. scene_group별 caption_templates는 짧고 일관된 문장으로 작성한다.
8. 확실하지 않은 외관 특징은 쓰지 않는다.
[query_examples 규칙]
query_examples_ko와 query_examples_en은 각각 최소 6개 이상 작성한다.
아래 유형을 모두 포함한다:
1. 별칭/약어형 2개 이상
2. 시각 묘사형 2개 이상
3. 기능/용도형 1개 이상
4. 오기/구어형 1개 이상
예:
- 기와지붕 궁궐 정문
- 붉은 기둥 사찰 건물
- stone wall park
- tower with observation deck
- modern art museum building
[출력 JSON 스키마]
{
"landmark_id": "",
"landmark_name_ko": "",
"landmark_name_en": "",
"landmark_category": "",
"alias_ko": [],
"alias_en": [],
"visual_description_ko": "",
"visual_description_en": "",
"function_description_ko": "",
"function_description_en": "",
"key_visual_terms_ko": [],
"key_visual_terms_en": [],
"allowed_scene_groups": [],
"caption_templates": {
"other": {
"text_ko": "",
"text_en": ""
}
},
"confusing_landmark_ids": [],
"contrast_descriptions": [
{
"target_landmark_id": "",
"text_ko": "",
"text_en": ""
}
],
"query_examples_ko": [],
"query_examples_en": [],
"visual_confidence": "high | medium | low",
"catalog_notes": []
}
[출력 규칙]
- JSON만 출력한다.
- 설명문, 마크다운, 코드블록, 주석을 출력하지 않는다.
- trailing comma를 사용하지 않는다.
- 모든 문자열은 큰따옴표를 사용한다.
- candidate_landmark_ids에 없는 ID를 confusing_landmark_ids에 넣지 않는다.
- 확실하지 않은 시각 특징은 쓰지 않는다.2. 이미지 라벨 + caption 생성 프롬프트
최종 운영 기준은 catalog.json과 labels.json을 핵심 산출물로 두는 것이다.
scene_groups_suggestion.json, scene_only_labels.json,
validation_report.json은 검수와 디버깅을 위한 중간 산출물이며 기본적으로 Dataset 폴더에 계속 쌓아두지 않는다.
전체 프롬프트와 복사 버튼은
이미지 라벨 + caption 생성 프롬프트 페이지에서 확인한다.
confusion_prior_v1.json은 전체 랜드마크 간 헷갈릴 수 있는 관계를 담는 표준 입력이다.- Vision AI는 이미지별
scene_group,label_status,visibility,training_role같은 최소 라벨만 판단한다. - Python 후처리가
catalog.json을 기준으로caption_set,confusing_with,landmark_id,image_id를 채운다. - 헷갈리는 대상 이름은 caption text에 넣지 않고,
confusing_with와confusion_prior_v1.json으로만 관리한다.
| 파일 | 역할 | 보관 기준 |
|---|---|---|
Dataset/<landmark_id>/catalog.json |
랜드마크 이름, 별칭, 시각 기준, scene_group caption template, confusing 후보를 담는 기준 파일 | 필수 최종 산출물 |
Dataset/<landmark_id>/labels.json |
학습 코드가 직접 읽는 이미지별 라벨, caption_set, quality, training_role 파일 | 필수 최종 산출물 |
Dataset/confusion_prior_v1.json |
전체 클래스 간 헷갈릴 수 있는 쌍을 미리 정의하는 hard negative 후보 지도 | 표준 전역 입력 |
scene_groups_suggestion.json, scene_only_labels.json, validation_report.json |
scene_group 제안, Vision AI 최소 라벨, 검증 결과 | debug output 또는 실패 분석용 |
3. 학습 투입 전 검수 프롬프트
[역할]
너는 Landmark Assistant 데이터 품질 리뷰어다.
아래 이미지 라벨, caption_set, catalog.json이 multi-task fine-tuning에 들어가도 되는지 검토한다.
[검토 기준]
- confirmed인데 주 피사체가 약하거나 배경 landmark만 보이는가?
- captions 단일 객체를 사용했는가? 사용했다면 schema error로 needs_fix다.
- caption_set에 허용 타입인 name_anchor와 visual_feature만 있는가?
- function, contrast_with, viewpoint caption_type이 labels.json에 들어갔는가? 들어갔다면 needs_fix다.
- caption이 이미지에 실제로 보이지 않는 내용을 말하는가?
- 한국어/영어 caption 중 하나만 있고 다른 언어 coverage가 부족한가?
- hard negative가 필요한데 confusing_with나 confusion_prior_v1.json에 반영되지 않았는가?
- source_group_id가 기관 코드나 파일명 prefix 전체처럼 너무 넓게 잡혀 있는가? 없다면 그 자체로 문제 삼지 않는다.
- training_role이 label_status, visibility, quality_status와 모순되는가?
- OOS, screenshot, blur, noise가 positive 학습에 섞였는가?
- caption/catalog/query text에 근처 지명, 주변 landmark 이름, 주소성 설명이 들어가 text search를 오염시키는가?
- Top-1 학습에 중요한 구분 단서가 빠져 모든 caption이 “전통 건물”, “관광지”처럼 일반어로만 되어 있는가?
[출력]
{
"verdict": "pass | needs_fix | reject",
"critical_issues": [],
"recommended_fixes": [],
"fields_to_recheck_by_human": [],
"short_summary_ko": ""
}
작업 순서
- Dataset 루트에
confusion_prior_v1.json을 둔다. - 각 class의
catalog.json을 먼저 만든다. 이름, alias, visual_description, scene_group, caption_template을 확정한다. - 이미지별
label_status, 주 피사체, 품질, view, 배경 landmark를 판단한다. - Python 후처리로
labels.json의caption_set을 생성한다. caption_type은name_anchor와visual_feature만 사용한다. source_group_id는 필수로 작성하지 않는다. 같은 원본/crop/resize/연속 장면이 확실할 때만 optional로 기록한다.- hard negative pair를
confusing_with와confusion_prior_v1.json기준으로 검수한다. - 학습 전 audit로 missing file, duplicate, source leakage, caption coverage, OOS 분리를 확인한다.
성능에 가장 도움 되는 우선순위
| 우선순위 | 작업 | 해결하려는 문제 |
|---|---|---|
| P0 | confirmed positive 정리와 배경 landmark 분리 | 광화문 사진이 청와대나 근정문으로 흔들리는 문제. |
| P0 | catalog 기반 한/영 visual caption template 작성 | 한국어 자연어 검색이 keyword 보정에 과도하게 의존하는 문제. |
| P0 | hard negative 구조화 | 궁궐, 사찰, 성곽 계열처럼 시각적으로 비슷한 class 구분. |
| P1 | OOS/저품질/screenshot 회귀 세트 유지 | 지원 범위 밖 이미지를 확정 답처럼 보여주는 문제. |
| P1 | view_type 균형 보강 | 정면/낮 사진에는 강하지만 야간/측면/먼 거리에서 약한 문제. |
변경 이력 및 관련 문서
| 문서 | 작성 날짜 | 용도 |
|---|---|---|
| Data and Text Labeling Guide | 2026-06-08 | catalog-first 흐름, caption_set 2종 제한, confusion_prior_v1 표준 입력, MobileCLIP2-S3/S4 공통 라벨링 기준으로 최신화. |
| Image Label + Caption Prompt | 2026-06-08 | 이미 존재하는 catalog.json을 입력으로 labels.json을 생성하는 프롬프트. |
| Multi-task Fine-tuning and Dataset Labeling | 2026-05-20 | 왜 multi-task가 필요한지, 데이터셋이 어떻게 바뀌어야 하는지 설명하는 배경지식. |
| Old Labeling Guide: Classification v1 | 2026-05-20 | Sprint 1 classification 중심 라벨링 기준과 그 이유를 보존한 old 문서. |
| Dataset Contract | 2026-05-13 | 폴더 구조, labels.json 필드, split 정책의 기본 계약. |
하지 말아야 할 것
- 사진에 실제로 보이지 않는 내용을 caption에 쓰지 않는다.
- 배경에 작게 보이는 landmark를 주 정답 class로 넣지 않는다.
- 한국어 caption만 쓰거나 영어 caption만 쓰지 않는다. 둘 다 필요하다.
labels.json의caption_set에function,contrast_with,viewpoint를 넣지 않는다.- 검색/embedding 대상 텍스트에 “경복궁 근처”, “국립현대미술관 옆”, “near Gyeongbokgung”처럼 주변 장소나 근접 관계를 쓰지 않는다.
- 다른 landmark 이름은 문장에 섞지 말고
confusing_with,background_landmark_ids,target_landmark_id같은 구조화 필드에만 기록한다. - “서울 관광지”, “전통 건물”처럼 모든 class에 걸리는 일반어만 반복하지 않는다.
- 같은 원본의 crop/resize/중복 변형 이미지가 train/test에 동시에 들어가게 두지 않는다.