RelateAnythingLab
EXPERIMENT NOTE / 2026.09.22

병이 사라진 게 아니라,
탐지 클래스가 바뀌고 있었다.

RelateAnything을 영상에 연결해 실제 GPU 추론을 실행했다. 들고 있는 병의 관계가 누락되는 원인을 탐지 단계까지 추적하고, 프레임 사이에서 객체 ID를 유지해 누락을 줄였다.

한 개의 합성 개발 영상에서 확인한 파이프라인 개선이다. 기본 모델을 재학습하지 않았고, 별도 테스트셋이나 실제 카메라 영상의 정확도를 주장하지 않는다.

1. 실험 질문과 입력

사람이 병에 손을 가까이 가져갔다가 들고, 다시 테이블에 내려놓는 장면에서 person → holding → bottlebottle → on → table을 구분할 수 있는지 확인했다. 물체 탐지는 YOLO11s, 주어진 박스 사이의 관계 점수는 RelateAnything이 담당한다.

영상
Higgsfield / Seedance 2.5 생성 · 20.042초 · 1280×720 · 24 fps · 481프레임
관계 어휘
holding, on, touching, above, next to, behind
원본 점수
공식 체크포인트의 보정값 적용 · 표시·평가 임계값 0.5
평가 주석
0.25초 간격의 81프레임 × 관계 2개 · 추론 전에 작성한 보조 AI의 시각 검토 초안
회색 셔츠를 입은 사람이 테이블 위에서 파란색 병을 들고 있고, 오른쪽에는 흰색 머그가 있는 합성 영상의 10초 프레임
입력 영상의 10초 프레임. 머리와 들어 올린 병의 일부가 잘리는 구간이 있어 경계 사례는 불확실한 주석으로 제외했다.

2. 원인: 박스의 부재와 클래스 혼동

기본 파이프라인은 매 프레임에서 bottle 클래스만 선택했다. 병 박스가 기록된 프레임은 287/481개(59.67%)였고, holding의 양성 주석 33개 중 30개가 박스 누락으로 실패했다.

색상으로 파란 병 영역을 제공하는 진단 실험에서는 holding 재현율이 100%로 회복됐다. 이어 전체 클래스의 탐지를 확인하니, 같은 병의 현재 관측이 bottle 273회, vase 137회, cell phone 65회, cup 6회로 분류되고 있었다. 이 수치는 개선 추적이 채택한 481개의 관측에 대한 집계다.

따라서 매 프레임의 클래스 이름을 객체의 정체성과 같게 취급하면, 실제로 위치를 찾은 경우에도 관계 모델에 박스를 전달하지 못한다.

3. 개선: 클래스가 달라도 객체 ID 유지

  1. 신뢰도 0.5 이상의 병 탐지로 bottle_1을 초기화한다.
  2. 이후에는 모든 클래스의 현재 탐지 후보를 보고, 예측 위치와의 IoU 및 크기 변화로 같은 객체를 연결한다. 최소 IoU는 0.25, 면적 비율 범위는 0.4–2.5다.
  3. 관계 모델에는 실제 현재 프레임의 관측 박스만 전달한다. 관측이 없으면 미확인으로 남기고, 0.5초 이상 끊기면 다시 초기화한다.
  4. 원본 관계 점수는 그대로 저장한다. 선택적인 시간적 상태는 0.20초 EMA와 진입 0.55 / 이탈 0.45 기준으로 별도 계산한다.

주요 개선에는 색상 마스크, 수동 ROI, 새 탐지 가중치, 관측 없는 프레임의 외삽 박스를 사용하지 않았다. EMA 값과 최종 상태는 공학적 후처리이며 모델의 확률이 아니다. 현재 구현은 클래스당 한 객체가 있는 장면을 위한 연관 방식이다.

4. 같은 개발 영상에서의 결과

holding 비교 · 불확실한 7개 주석을 제외한 74개 사례
실행병 박스 확보정밀도재현율F1오탐
기본 탐지59.67%17.65%9.09%0.1200014
색상 ROI 진단100.00%70.21%100.00%0.8250014
객체 ID 유지 · 원본 점수100.00%70.21%100.00%0.8250014
객체 ID 유지 · 시간적 상태100.00%71.74%100.00%0.8354413

핵심 결과는 원본 점수 F1 0.120 → 0.825다. 선택적인 시간적 상태의 F1은 0.83544로, 오탐이 14개에서 13개로 줄었다. 시간적 상태의 작은 차이를 별도의 모델 성능 향상으로 해석하지 않는다.

on 관계는 모든 실행에서 0.5 임계값 기준 재현율이 0%였다. 손이 병 가까이에 있지만 아직 잡지 않은 장면의 holding 오탐도 남았다. 탐지 누락을 줄여도 관계 의미의 모호함이 자동으로 해결되지는 않았다.

병 박스 확보율은 박스가 존재하는 비율이다. 정확한 경계 상자와의 IoU로 평가한 위치 정확도가 아니다. 일부 프레임에서는 테이블 탐지 박스가 테이블 전체를 포함하지 않는다. 추적 박스의 신뢰도는 원래 탐지 클래스에 대한 값이며, 유지한 병 ID에 대한 확률이 아니다.

5. 측정 조건과 재현성

실행 장치
NVIDIA RTX 4090 · float32 · batch 1
환경
Python 3.12.14 · torch 2.13.0+cu130 · torchvision 0.28.0+cu130
기본 실행
평균 38.733 ms / 프레임 · p95 45.401 ms · 평균 지연의 역수 25.818 fps
개선 실행
평균 38.679 ms / 프레임 · p95 46.144 ms · 평균 지연의 역수 25.854 fps

3회 워밍업 후 CUDA 동기화 벽시계 시간으로 측정했다. 디코딩, 탐지·연관, 관계 추론, 시간적 후처리를 포함하며 JSON 기록과 영상 인코딩은 제외한다. 원본 프레임을 건너뛰지 않았다. 두 실행의 작은 평균 차이는 속도 개선의 증거로 보지 않는다.

평가는 정확한 원본 프레임 번호로 맞췄다. 불확실한 주석은 제외하고, 양성 사례의 점수 누락은 거짓 음성으로 센다. 음성 사례의 점수 누락은 미확인으로 처리하며 참음성에 포함하지 않는다. holding은 양성 33개·음성 41개, on은 양성 56개·음성 21개로 평가했다.

코드 · 영상 · 주석 · 재현 가이드 다운로드

다운로드에는 원본 추론 기록과 해시가 고정된 자산 다운로드 도구가 들어 있다. 모델 가중치와 외부 라이브러리는 포함하지 않는다. 새 환경에 ZIP만 설치하는 절차는 다시 실행하지 않았다.

추론 후 검토에서 한 탐지 관측이 병과 컵 ID에 중복 할당되는 경우를 막는 수정과 14개 CPU 회귀 검사를 추가했다. 현재 영상의 기록에는 해당 중복 조건이 없어 기존 결과는 영향을 받지 않는다. 수정 후 전체 GPU 추론은 다시 실행하지 않았으며, 코드 변경 전후 해시와 검토 기록을 함께 제공한다.

6. 남은 문제와 다음 실험

7. 원작과 실험의 구분

RelateAnything 모델과 학습 데이터는 원저자의 연구다. 이 포트폴리오 프로젝트의 범위는 입력 영상 준비, 로컬 추론 재현, 실패 분석, 탐지 연관과 시간적 후처리 구현, 결과 시각화다.

원본 코드는 Apache-2.0, 모델 카드에는 DINOv3 라이선스가 기재되어 있다. 탐지 도구의 Ultralytics 라이선스도 별도로 적용된다. 이 데모는 모델 가중치나 외부 소스 코드를 배포하지 않는다.