Skip to content

영상 객체 추적에 주석을 다는 방법

모델 보조 마스크 전파로 클립 전체에 걸쳐 객체를 추적하고, 가림을 정직하게 다루며, 허용 오차 스윕으로 시간적 일치도를 재는 방법.

추적 주석이란 여러 프레임에 걸쳐 같은 객체에 라벨을 붙이는 일이며, 비용이 드는 쪽은 첫 마스크가 아니라 그 뒤에 이어지는 수백 장입니다. 모델 보조 전파는 그 대부분을 없애 줍니다. 단, 모델이 객체를 놓쳤을 때 정직하다는 조건 아래서입니다.

작업 흐름

  1. 한 프레임에서 객체를 마스킹합니다.
  2. 앞으로 전파시킵니다. 결과는 키프레임으로 도착합니다.
  3. 키프레임을 훑으며 마스크가 어긋난 곳을 고칩니다. 한 프레임을 고치면 그 지점부터 추적이 다시 고정됩니다.
yaml
annotation_schemes:
  - annotation_type: video_annotation
    name: tracks
    description: "Draw the object once, then press Track forward."
    source_field: video_url
    mode: tracking
    labels:
      - {name: subject, color: "#d1495b"}
    tracking_options:
      interpolation: linear
      auto_advance_frames: 5
    video_fps: 12
    frame_stepping: true

가려졌을 때는 아무것도 반환하지 않아야 한다

주석 루프에서 전파 모델이 가진 가장 쓸모 있는 성질은, 객체가 숨었을 때 사양한다는 것입니다. 최선의 추측 대신 빈 프레임을 돌려주는 것이죠.

가려진 프레임 위의 그럴듯하지만 틀린 마스크는 공백보다 나쁩니다. 주석자가 그것을 알아채고, 틀렸다고 판단하고, 지워야 하기 때문입니다. 빈 프레임은 "여기서는 객체가 보이지 않는다"로 곧바로 읽히며, 그것이 곧 올바른 라벨이기도 합니다.

SAM 2가 이렇게 동작하며, 그 메모리 모듈이야말로 가림 너머에서 객체를 놓치지 않고 전파를 이어가게 하는 요소입니다. 알려진 정답과 비교해 측정한 결과, 프레임별 IoU는 0.974에서 0.979를 유지했고 시퀀스 전반에 걸친 감쇠가 없었습니다.

유지와 혼합

키프레임 사이의 프레임에서 마스크는 유지(직전 키프레임에서 반복)되거나 혼합(보간)됩니다. 정직한 선택은 유지이며, 유지된 프레임은 시각적으로 표시해야 합니다.

혼합된 마스크는 더 매끄러워 보이면서 아무도 볼 수 없는 방식으로 틀려 있습니다. 소비하는 쪽이 보간된 형상을 필요로 한다면, 그것이 명시된 변환인 내보내기 시점에 보간하십시오. 보이지 않는 인터페이스 안이 아니라요.

폴리곤 보간은 보기보다 어렵다

두 폴리곤 키프레임 사이의 보간은 단순한 구현이 놓치는 두 가지 방식으로 실패합니다.

  • 두 키프레임의 꼭짓점 개수가 다를 수 있습니다.
  • 주석자가 형상의 다른 지점에서 그리기를 시작했을 수 있습니다.

회전 정렬을 동반한 호 길이 재샘플링이 둘 다 처리합니다. 이것이 없으면 보간된 폴리곤이 키프레임 사이에서 뒤집힐 수 있습니다.

전파는 어디서 돌려야 하는가

모델이 메모리를 갖는다면 서버에서입니다. 비용은 프롬프트당이 아니라 프레임당 발생하며, 브라우저 탭에서 영상 모델을 백 프레임 돌리면 UI가 몇 분간 멈춥니다. 프레임마다 다시 프롬프트하는 브라우저 쪽 이어가기는 그것과는 다른, 더 가벼운 방식입니다. 유용하긴 하지만 같은 능력은 아니며, 자기 문서에서 뒤섞지 않을 만한 가치가 있습니다.

일치도 측정

두 주석자가 이벤트 경계로 같은 프레임을 고르는 일은 없으므로, 시간적 일치도는 매칭 허용 오차에 좌우됩니다. 임계값 하나가 아니라 스윕을 보고하십시오.

  • 2초에서 높고 0.25초에서 낮음: 이벤트가 일어났다는 데는 동의하지만 정확히 언제인지는 아닙니다. 대개 지침의 문제입니다.
  • 둘 다 낮음: 애초에 일어났는지를 두고 갈립니다.

마스크 자체에 대해서는 프레임별로 마스크 일치도 장치를 쓰십시오.

자기 도구에서도 확인해 볼 만한 버그

HTML video는 currentTime을 소수점 여섯 자리에서 잘라 보고합니다. 그것을 단순히 곱하고 내림해 프레임 인덱스로 바꾸면 탐색할 때마다 1씩 어긋납니다. 12 fps 클립의 14번 프레임이 13으로 되읽히는 식입니다.

이 문제는 2.8 이전 Potato에서 실제로 살아 있었고, 모든 클립의 모든 주석자에게 영향을 주었습니다. 어떤 도구에서든 프레임 인덱스가 붙은 영상 주석을 갖고 있다면, 알려진 프레임과 대조해 검증할 가치가 있습니다.

더 읽을거리