라벨링,
대부분은 기계가.
이미지 폴더를 넣으면 모델이 먼저 라벨을 만들고,
사람은 틀린 것만 고친다. 승인할수록 다음 초안은 더 정확해진다.
어노테이션 (10)
홀드아웃 비교: 6개 일치 · 중복/오분류/오탐 4개는 사람이 검수
A 승인 · X 거부
←→ 이동 · ⌘Z 되돌리기
실제 DeepPCB 홀드아웃 + 번들 모델 추론 결과 — 앱 레이아웃만 재현한 도식
사람이 전부 그리던 순서를
기계가 먼저 그리도록 뒤집었다
그런데 기존 도구는 사람이 그리는 화면을 먼저 주고 오토라벨을 부가 기능으로 둔다. 순서가 거꾸로다. 슬라이더를 끌어 차이를 보라.
말로 찾는다
클래스 이름과 검출 프롬프트를 분리해 적는다. 도메인이 바뀌어도 코드가 아니라 설정만 바뀐다.
검증된 예외만 본다
홀드아웃과 클래스별 정밀도 검증을 통과한 초안만 자동 승인한다. 나머지와 심판의 위반·불확실은 사람에게 온다.
쓸수록 좋아진다
승인 라벨로 전용 모델을 자동 학습하고, 홀드아웃에서 기존 모델을 이길 때만 교체한다. 지면 조용히 폐기.
라벨링할수록
라벨링이 쉬워진다
사람이 승인한 라벨이 다음 라운드의 교사가 된다. 이 고리가 도구의 심장이다.
투입 — 복사 없이 연결까지
이미지 업로드, 기존 폴더 연결(복사 없음, 기존 COCO·YOLO 라벨 흡수), 또는 비디오 임포트.
자동 초안 — 두 엔진을 먼저 견준다
전용 모델이 없으면 SAM 3와 Grounding DINO를 앞 30장 교차 실행해 비교 표본을 만든다. 승인 정답이 쌓이면 클래스마다 검수 비용이 적었던 엔진 또는 둘의 합의를 자동 선택한다.
문맥 심판 — 기준으로 판정
“사고에 연루된 차량만” 같은 판정은 검출 모델이 못 푼다. 기준문을 읽는 VLM이 박스마다 근거를 달아 예비 판정한다.
리뷰 — 예외 확인
위반·불확실·저신뢰 순으로 정렬해 보여준다. 고신뢰 이미지는 미리보기를 확인하고 한 번에 승인.
자동 학습 — 이겨야 교체
승인 8장부터 실험 학습을 시작하고, 데이터가 쌓이면 그룹이 섞이지 않는 train/val/test로 평가한다. 현재 모델과 같은 val에서 비교해 이긴 후보만 교체한다.
다시 2번으로 — 이번엔 더 정확하게
승급한 전용 모델이 초안 엔진을 대신한다. 초안이 좋아지면 리뷰가 줄고, 리뷰가 줄면 더 많이 승인된다.
meta.track_id로 묶인다
실측: 팬 영상 10프레임 → 박스 19개, 한 트랙이 9프레임 연속 유지
“이 박스가 기준에 맞나”를
기계가 먼저 답한다
검출 모델은 어디에 있는지만 안다. 아래는 실제 판정 출력 그대로 — 기준문 한 단락을 쓰고 돌린 결과다.
“빨간 박스 안 주 객체가 곱슬털 개(푸들류)로 dog 라벨에 부합한다”
사람이 볼 필요 없음 — 통과
“빨간 박스 안 주 객체가 개가 아니라 세로 나무 판자(울타리·상자 형태) 구조물이라 dog 라벨과 부합하지 않는다”
검출기가 흘린 오탐을 심판이 잡아냄
“이미지 해상도가 낮아 빨간 박스 안 객체가 컵인지 그릇인지 형태를 명확히 구분할 수 없다”
거짓 확신 대신 “모른다” — 사람 확인 대상
- 비용 — Claude Code CLI가 있으면 구독 경로로 무료, API 키가 있으면 Claude API, 로컬 Ollama도 가능. 셋 다 없으면 이 기능만 비활성되고 나머지는 정상 동작한다.
- 재실행이 공짜 — 판정은 기준 해시와 박스 스냅샷을 키로 캐시된다. 고친 박스만 다시 묻는다.
- 중단에 안전 — 서버를 세 번 강제 재시작한 실측에서 “중단됨”을 정직하게 보고하고, 재실행 시 캐시 재사용으로 판정 유실 0.
숫자로
전부 고정 홀드아웃 기준 자체 측정치다. M4 Pro · MPS · 단일 머신.
문서 서명 제로샷 mAP50
SAM 3. 같은 데이터에서 기존 경로는 0.000 —
라벨 0장으로 시작이 가능해졌다
PCB 결함 (제로샷 완전 실패 도메인)
≈0 → 승인 42장 0.571 → 300장 0.963.
특수 도메인의 정공법
정검출 · 오검출 0
개 9장 + 함정 6장. 개 닮은 인형에도 속지 않았다
| 항목 | 수치 |
|---|---|
| 배치 오토라벨 (박스 / 박스+마스크) | 0.8초 / 1.8초 per 장 |
| SAM 클릭 보정 (브라우저에서 디코딩) | 클릭당 ~120ms |
| 흔한 객체 제로샷 — person 128장 | 이미지 단위 61 / 62 |
| 멀티클래스 제로샷 — cup · bowl · table | mAP50 0.690 |
| 비디오 트래킹 — 팬 영상 10프레임 | 박스 19개 · 9프레임 연속 |
| 익스포트 → 재임포트 왕복 (128장) | 460 → 460 박스 |
| 목록 전송량 (썸네일 캐시 도입 후) | −97.8% |
| 회귀 테스트 — 백엔드 / 프론트(unit+browser) | 88 / 14+35 통과 |
핵심 결론: 흔한 객체는 첫날부터 자동, 특수 도메인은 수동 수십 장 투자 후 자동.
조용히 틀리지 않는다
라벨링 도구의 최악은 오류가 아니라 보고되지 않은 오류다. 회귀 테스트 137개는 실제 결함과 핵심 경계 조건을 재현해 막는다.
완료가 아닌 종료를
완료라고 말하지 않는다
서버가 재시작되면 진행 중이던 작업은 “중단됨”으로, 어디까지 처리했는지와 함께 보고된다. 절반만 라벨된 데이터를 끝난 줄 알고 넘기는 일이 없다.
사용자 원본은
건드리지 않는다
폴더 연결 임포트는 복사 없이 참조한다. 프로젝트·이미지 삭제는 도구가 만든 파일만 지운다 — 연결된 원본 데이터셋은 그대로 남는다.
부분 실패도
세서 알린다
손상 파일 건너뛰기, 온톨로지에 없는 클래스 제외, 이미지 누락 — 조용히 통과시키지 않고 개수로 노출한다.
그리고 라벨링에 필요한 나머지 전부
세 단계면 시작된다
Apple Silicon Mac · Python 3.11 · Node 20 기준.
# 1. 저장소 받기 git clone https://github.com/Seung-Won-Yu/autolabel.git && cd autolabel # 2. 최초 1회 — venv · 의존성 · SAM 가중치 · 브라우저 디코더 ./setup.sh # 3. 실행 — 백엔드 + 프론트 동시, 브라우저 자동 오픈 ./start.sh
- 코드를 고쳤다면 —
./test.sh && ./test-e2e.sh로 백엔드 88개와 프론트 49개(unit 14 + 브라우저 35) 회귀 경로를 확인한다. - 첫 프로젝트 — 이름 짓고, 클래스 한 줄 적고, 이미지 던지고, “전체 오토라벨”을 누른다. 나머지는 “지금 할 일” 배너가 단계별로 안내한다.
- SAM 3는 선택 — facebook/sam3 접근 승인 후
models/sam3.pt로 두면 제로샷이 자동 승급된다. 없으면 Grounding DINO + SAM 경로로 동작. - 결과는 어디로든 — COCO / YOLO zip은 바로 학습 가능한 구조, 학습된
.pt도 내려받는다. 로컬로 감당 안 되는 규모는 Colab 노트북으로.
자주 나오는 질문
정말 무료인가?
도구와 로컬 모델(SAM 3 · Grounding DINO · SAM · YOLO)은 전부 로컬 실행이라 사용료가 없다. 문맥 심판도 Claude Code CLI가 설치돼 있으면 구독에 포함된 경로로 돌아 별도 과금이 없다.
다만 구독 사용량은 소비된다. 완전 무료를 원하면 로컬 Ollama 비전 모델로 바꿀 수 있다
(품질은 낮아진다). ANTHROPIC_API_KEY를 넣는 순간부터만 종량 과금이다.
사람이 아예 안 봐도 되나?
아니다. 그리고 그건 어떤 도구도 못 한다 — 라벨의 정답 자체가 프로젝트마다 다르게 정의되기 때문이다(“접시는 bowl인가?”는 모델이 아니라 사람이 정한다).
이 도구가 겨냥하는 최선은 전수 판독을 예외 확인으로 줄이는 것이다. 기준을 글로 적어두면 그 판단을 기계가 먼저 대신하고, 사람은 위반·불확실만 본다.
내 도메인은 특수한데 될까?
텍스트로 설명되는 개념이면 첫날부터 자동에 가깝다(서명 실측 0.995). PCB 미세 결함처럼 제로샷이 완전히 실패하는 도메인은 수동 수십 장이 필요하다 — 대신 그 뒤로는 급격히 좋아진다(42장 0.571 → 300장 0.963).
첫 3장에서는 SAM 3와 Grounding DINO를 함께 돌려 합의·단독 후보를 보여주고, 사람이 승인한 결과로 클래스별 엔진을 보정한다. 그래도 검출률이 낮으면 도구가 다음 수 (프롬프트 실험 / 직접 라벨 후 학습)를 지정한다.
팀에서 같이 쓸 수 있나?
지금은 1인 로컬 전제다(SQLite · 단일 프로세스). 여러 사람이 동시에 쓰려면 잡 큐와 DB 교체가 필요하고, 그건 로드맵에 남아 있다.
라이선스는?
전용 모델 학습에 쓰는 YOLO 계열은 AGPL-3.0이다. 개인·내부 사용은 무방하지만
제품에 실어 배포할 계획이면 교체가 필요하다 — 교체 지점은
server/train_worker.py 한 곳으로 격리해 두었다.
SAM 3는 Meta의 자체 라이선스(SAM License)를 따른다. 상용·재배포 조건은 원문을 확인할 것.