Work In Progress
Untitled
BMOD Active Labeler – Gemini 기반 Human-in-the-loop 오리 행동 비디오 라벨링 도구
AI가 행동 라벨과 관찰 근거를 제안하고, 연구자가 이를 검수하여 동물 행동 학습 데이터를 빠르게 구축하는 브라우저 기반 라벨링 도구
Be-MOre Duck Vision-Language Embodied Agent 프로젝트 보조 도구 개인 미니 프로젝트 / 진행 중 현재 상태: 수동 라벨링 프로토타입 구현 완료, AI 보조 기능 확장 예정
🎯 Executive Summary
- 문제: 오리 행동 분석 모델을 학습하려면 원본 비디오를 일정한 구간으로 나누고 각 구간에 행동 라벨을 부여해야 한다. 그러나 일반 영상 플레이어와 스프레드시트를 오가며 모든 구간을 처음부터 사람이 판단하는 과정은 반복적이고 시간이 많이 소요된다. 또한 판단이 애매한 구간이나 라벨 기준이 일관되지 않은 경우 학습 데이터의 품질이 낮아질 수 있다.
- 해결: 로컬 브라우저에서 영상을 불러와 5초 단위로 자동 분할하고, Gemini가 각 구간의 대표 프레임을 분석하여
feeding / resting / exploring / uncertain중 행동 라벨 후보와 관찰 근거를 제안한다. 사용자는 AI 제안을 수용, 수정, 기각하거나 불확실 구간으로 지정하며, AI 최초 제안과 인간의 최종 판단을 함께 저장한다.- 핵심 가치: AI가 라벨을 자동으로 확정하는 시스템이 아니라, 반복적인 초기 판단을 보조하고 사람이 최종 결정하는 Human-in-the-loop 라벨링 워크플로우를 제공한다.
- 현재 결과:
- 5초 단위 자동 세그먼트 분할 구현
- 4개 행동 라벨 체계 구현:
feeding,resting,exploring,uncertain- 키보드 단축키 기반 수동 라벨링 구현
- 브라우저
localStorage기반 진행 상황 자동 저장 구현- CSV export 구현
- 원본 영상이 서버로 업로드되지 않는 로컬 수동 라벨링 모드 구현
- 확장 목표:
- Gemini 기반 행동 라벨 후보 생성
- AI 판단 근거와 대안 라벨 제공
- AI 제안에 대한
accept / edit / reject / uncertain검수 기능- AI 최초 제안과 인간 최종 라벨을 함께 기록하는 audit log
- 수동 라벨링과 AI 보조 라벨링의 처리 시간 및 수정률 비교
- 다음 단계:
- 2주: GitHub Repository 정리, README 작성, GitHub Pages 수동 모드 배포, sample CSV 및 라벨링 가이드 추가
- 1개월: Gemini API와 Structured Output을 활용한 행동 라벨 제안 기능 구현
- 2개월: 수동 조건과 AI 보조 조건의 라벨링 시간, 수용률, 수정률 비교
- 2분기: 생성한 라벨을 활용한 행동 분류 baseline 모델 학습 및 pseudo-labeling 또는 active learning 흐름으로 확장
1. 배경·목표
1.1 배경
Be-MOre Duck 프로젝트에서는 오리 행동 비디오로부터feeding
,
resting
,
exploring
행동을 분류하는 모델을 학습하려 한다. 이를 위해서는 원본 영상을 일정한 길이의 세그먼트로 나누고 각 구간에 행동 라벨을 부여한 학습 데이터가 필요하다.
기존 라벨링 과정에서는 다음과 같은 문제가 발생한다.
- 일반 영상 플레이어에서 시간을 확인한 뒤 스프레드시트에 라벨을 별도로 입력해야 한다.
- 구간 이동, 시간 기록, 라벨 입력 작업이 반복된다.
- 사람이 모든 구간을 처음부터 판단해야 하므로 시간이 많이 소요된다.
- 행동 경계가 모호하거나 여러 행동이 함께 나타나는 구간은 판단이 어렵다.
- 라벨 정의가 명확하지 않으면 동일한 사람도 시점에 따라 다른 기준을 적용할 수 있다.
- AI를 활용하더라도 AI 제안을 그대로 정답으로 저장하면 오류가 학습 데이터에 유입될 수 있다.
1.2 프로젝트 목표
본 프로젝트의 목표는 다음과 같다.- 영상 구간 분할과 라벨 입력 과정을 하나의 브라우저 화면에서 수행한다.
- Gemini가 각 영상 구간에 대해 행동 라벨 후보와 시각적 관찰 근거를 제안하도록 한다.
- 사용자가 AI 제안을 수용, 수정, 기각하거나 불확실 구간으로 분류할 수 있도록 한다.
- AI 최초 제안과 인간 최종 판단을 모두 기록하여 AI 오류 유형을 분석할 수 있도록 한다.
- 수동 라벨링 대비 AI 보조 라벨링이 처리 시간과 판단 부담을 줄이는지 평가한다.
- 생성된 CSV를 후속 행동 분류 모델 학습 파이프라인에서 바로 사용할 수 있도록 한다.
- 향후 pseudo-labeling, active learning, pose/keypoint sequence 분석으로 확장 가능한 기반을 만든다.
1.3 사용자·페르소나
주요 사용자
- 동물 행동 분석 프로젝트를 진행하는 학부 연구자
- 오리 또는 소형 동물 행동 영상을 직접 라벨링하여 소규모 학습 데이터를 구축하려는 사용자
- 범용 annotation platform의 복잡한 기능은 필요하지 않지만 영상 구간별 행동 라벨이 필요한 사용자
- AI가 자동 생성한 라벨을 그대로 사용하기보다 직접 검수하고 수정하려는 연구자
사용 상황
- 소수 시간 분량의 동물 행동 영상을 빠르게 초기 라벨링해야 하는 경우
- 행동 정의가 프로젝트마다 달라 사용자 정의 라벨링 가이드가 필요한 경우
- AI가 어떤 행동에서 잘못 판단하는지 확인해야 하는 경우
- 라벨링 결과를 CSV로 내보내 Python 기반 학습 파이프라인에 연결해야 하는 경우
2. 핵심 워크플로우
Local MP4 Video
↓
Browser Video Player
↓
5-second Segment Generator
↓
Representative Frame Extraction
↓
Gemini Label Suggestion
↓
Suggested Label + Evidence + Alternative
↓
Human Review
(Accept / Edit / Reject / Uncertain)
↓
AI Suggestion + Human Final Label 저장
↓
CSV / JSON Export
↓
Behavior Classification Dataset
수동 모드
- 영상은 브라우저 내부에서만 처리한다.
- 외부 서버나 AI API로 데이터가 전송되지 않는다.
- 사용자가 단축키 또는 버튼으로 직접 행동 라벨을 부여한다.
Gemini 보조 모드
- 사용자가 명시적으로 AI 보조 기능을 활성화한다.
- 전체 원본 영상이 아니라 현재 세그먼트의 대표 프레임만 AI 분석에 사용한다.
- Gemini가 행동 후보, 관찰 근거, 대안 라벨, 추가 검토 필요 여부를 반환한다.
- AI 제안은 자동으로 최종 라벨로 확정되지 않는다.
- 사용자가 최종 판단을 내린 뒤 데이터셋에 포함한다.
3. 핵심 기능
3.1 로컬 영상 불러오기
- 사용자가 로컬 MP4 파일을 선택하면 브라우저에서 바로 재생한다.
- 수동 모드에서는 영상 파일이 외부 서버로 전송되지 않는다.
- 지원하지 않는 코덱일 경우 H.264 MP4 변환 안내를 제공한다.
3.2 5초 단위 자동 세그먼트 분할
- 영상 전체 길이를 기준으로 5초 단위 구간을 자동 생성한다.
-
각 구간에
segment_id, 시작 시간, 종료 시간을 부여한다. - 마지막 5초 미만 구간은 설정에 따라 제외하거나 별도 구간으로 유지한다.
3.3 사용자 정의 행동 라벨 가이드
사용자가 각 행동의 정의와 판단 기준을 직접 입력할 수 있다. 예시:Feeding
- 머리를 음식이나 바닥 쪽으로 반복적으로 내린다.
- 쪼는 동작이 여러 차례 연속해서 나타난다.
Resting
- 신체 이동이 거의 없다.
- 앉거나 몸을 웅크린 상태가 일정 시간 지속된다.
Exploring
- 주변을 이동하거나 여러 방향을 살펴본다.
- 명확한 섭식 또는 휴식 행동은 나타나지 않는다.
입력한 가이드는 AI의 판단 맥락과 사용자의 수동 라벨링 기준으로 함께 사용한다.
3.4 Gemini 행동 라벨 제안
- 현재 5초 구간에서 여러 대표 프레임을 추출한다.
- 대표 프레임과 사용자 정의 행동 가이드를 Gemini에 전달한다.
- AI는 다음 정보를 구조화된 형식으로 반환한다.
{
"suggested_label": "feeding",
"certainty_level": "medium",
"alternative_label": "exploring",
"needs_human_review": true,
"evidence": [
{
"timestamp_sec": 1.0,
"observation": "The duck repeatedly lowers its head toward the ground."
}
],
"ambiguity_reason": "Food is not clearly visible."
}
certainty_level
은 통계적으로 보정된 정확도 확률이 아니라 AI의 자체 판단 수준으로만 사용한다.
3.5 Human-in-the-loop 검수
사용자는 AI 제안에 대해 다음 중 하나를 선택한다.-
Accept: AI 제안을 그대로 수용 -
Edit: 다른 행동 라벨로 수정 -
Reject: AI 제안을 기각하고 직접 입력 -
Uncertain: 판단이 어려운 구간으로 분류
3.6 키보드 단축키 입력
-
1: feeding -
2: resting -
3: exploring -
U: uncertain -
A: AI 제안 수용 -
E: AI 제안 수정 - 방향키: 이전·다음 세그먼트 이동
3.7 진행 상황 자동 저장
- 파일명, 영상 길이, 세그먼트 정보를 기준으로 진행 상황을 저장한다.
- 같은 영상을 다시 열면 첫 미라벨 구간 또는 마지막 작업 구간부터 이어서 작업할 수 있다.
- AI 요청 결과와 사용자 검수 결과도 함께 저장한다.
- 브라우저 저장 공간 초기화에 대비해 주기적인 CSV 또는 JSON export를 안내한다.
3.8 재검토 큐
다음 조건에 해당하는 구간을 별도로 모아 보여준다.-
사용자가
uncertain으로 지정한 구간 - AI가 추가 검토가 필요하다고 판단한 구간
- AI 제안과 인간 최종 라벨이 다른 구간
- AI가 명확한 관찰 근거를 제시하지 못한 구간
- 처리 시간이 다른 구간보다 긴 구간
3.9 CSV·JSON Export
기본 CSV 필드:video_id
segment_id
start_sec
end_sec
ai_suggested_label
human_final_label
review_action
certainty_level
needs_human_review
labeling_time_sec
notes
prompt_version
model_version
AI의 상세 관찰 근거와 대안 라벨은 JSON 파일로 별도 저장할 수 있다.
4. 성공 기준과 평가 지표
4.1 기능 완성 기준
- 로컬 영상 재생이 가능하다.
- 5초 단위 세그먼트가 자동 생성된다.
- 수동 라벨을 키보드와 버튼으로 입력할 수 있다.
- Gemini가 구조화된 행동 라벨 제안을 반환한다.
- 사용자가 AI 제안을 수용, 수정, 기각할 수 있다.
- AI 최초 제안과 인간 최종 라벨이 별도로 저장된다.
- 진행 상황이 브라우저에 자동 저장된다.
- CSV가 후속 Python 학습 파이프라인에서 정상적으로 읽힌다.
- API 키가 프론트엔드 코드에 직접 노출되지 않는다.
4.2 라벨링 워크플로우 KPI
- 라벨링 완료 구간 수
- 영상 1분당 라벨링 소요 시간
- 세그먼트당 평균 처리 시간
- 수동 조건 대비 AI 보조 조건의 시간 절감률
- AI 제안 수용률
- AI 제안 수정률
- AI 제안 기각률
- AI와 인간 최종 라벨의 일치율
-
uncertain비율 - 클래스별 AI 제안 수용률
- 재검토 큐에 포함된 구간 비율
- 동일 영상 재라벨링 시 라벨 일관성
4.3 후속 모델 KPI
- Accuracy
- Macro F1
- Class별 Precision, Recall, F1
- AI 제안 라벨과 인간 최종 라벨로 각각 학습했을 때의 성능 차이
-
uncertain구간 포함 여부에 따른 성능 차이
5. Responsible AI 원칙
인간의 최종 결정
AI가 제안한 라벨은 자동으로 정답 처리하지 않는다. 최종 데이터셋에는 사용자가 확정한 라벨만 포함한다.AI 근거 표시
AI가 행동 라벨만 반환하지 않고 다음 내용을 함께 제공하도록 한다.- 관찰된 시각적 행동
- 해당 행동이 나타난 시점
- 대안 라벨
- 애매한 이유
- 추가 검토 필요 여부
데이터 전송 고지
- 수동 모드에서는 영상이 외부로 전송되지 않는다.
- Gemini 보조 모드에서는 AI 분석에 사용되는 대표 프레임이 외부 API로 전송될 수 있음을 명시한다.
- 사용자가 동의한 경우에만 AI 분석을 수행한다.
- 원본 전체 영상을 기본적으로 업로드하지 않는다.
AI 결과 감사 가능성
AI 최초 제안과 인간의 수정 결과를 모두 보존하여 다음 내용을 분석할 수 있도록 한다.- AI가 자주 혼동하는 행동
- 근거 없이 라벨을 제안한 사례
- 특정 촬영 환경에서 발생하는 오류
- 사람이 자주 수정하는 라벨 유형
- 프롬프트나 모델 버전에 따른 결과 차이
6. 범위
포함
- 단일 오리 또는 소수 오리가 등장하는 짧은 행동 비디오
- 5초 고정 길이 세그먼트
-
feeding,resting,exploring,uncertain행동 라벨 - 로컬 브라우저 기반 수동 라벨링
- Gemini 기반 행동 후보 및 관찰 근거 생성
- Human-in-the-loop 검수
- 진행 상황 저장
- CSV·JSON export
- 수동 조건과 AI 보조 조건의 처리 시간 비교
- AI 오류 및 수정 패턴 분석
제외
- CVAT 또는 Label Studio를 대체하는 범용 annotation platform
- 다중 사용자 협업 기능
- 로그인 및 회원 관리
- 영상 전체의 서버 저장
- 실시간 스트리밍 영상 분석
- bounding box annotation
- segmentation mask annotation
- keypoint 및 pose annotation
- 객체 추적
- 자체 행동 인식 모델을 활용한 실시간 자동 라벨링
- 자동 재학습을 포함한 완전한 active learning 시스템
- 대규모 annotation 운영
- 모든 동물 종과 모든 행동을 지원하는 범용 모델
- AI 제안을 사람의 검수 없이 자동 확정하는 기능
7. 기술 스택
현재 구현
- HTML
- CSS
- Vanilla JavaScript
- Browser Video API
- Canvas API
- localStorage
- CSV export
- GitHub Pages
AI 확장
- Google AI Studio
- Gemini API
- Structured Output
- Node.js 또는 AI Studio server-side runtime
- JSON Schema validation
- 환경 변수 기반 API key 관리
후속 ML 파이프라인
- Python
- pandas
- scikit-learn
- PyTorch
- CLIP 또는 video embedding model
- Logistic Regression baseline
- Macro F1 및 class별 오류 분석
8. 프로젝트 포지셔닝
BMOD Active Labeler는 범용 annotation 도구를 대체하려는 프로젝트가 아니다. 본 프로젝트의 차별점은 다음과 같다.- 동물 행동 비디오 구간 라벨링이라는 좁고 구체적인 문제에 집중한다.
- 소규모 개인 연구자가 별도의 복잡한 서버 없이 사용할 수 있다.
- 행동 라벨뿐 아니라 AI의 관찰 근거와 인간 수정 이력을 기록한다.
- AI 자동화보다 Human-in-the-loop 데이터 품질 관리에 초점을 둔다.
- 생성된 라벨이 실제 행동 분류 모델 학습으로 바로 연결된다.
- 향후 pseudo-labeling, active learning, pose trajectory 분석으로 발전할 수 있다.
9. 예상 실험
실험 조건
| 조건 | 방식 |
|---|---|
| A | AI 도움 없이 수동 라벨링 |
| B | Gemini 행동 제안 이후 인간 검수 |
비교 항목
- 세그먼트당 평균 처리 시간
- 전체 라벨링 완료 시간
- 최종 라벨 일관성
- AI 제안 수용률
- AI 제안 수정 및 기각률
- 행동 클래스별 AI 오류
- 사용자가 느낀 판단 부담
- 최종 데이터로 학습한 baseline 모델 성능
핵심 질문
Gemini 기반 행동 제안이 오리 행동 비디오의 최종 라벨 품질을 유지하면서 라벨링 시간과 반복적인 판단 부담을 줄일 수 있는가?