Potato 2.8: 무엇이든 주석하고, 그다음 측정하기
Potato 2.8은 컴퓨터 비전, 기가픽셀 딥 줌, 3D 포인트 클라우드, 깊이 맵, 로봇 에피소드, 생성 영상 평가, VLM 그라운딩을 더하고, 그 모두에 대해 우연 일치를 보정한 일치도를 보고합니다.
Potato는 이미지 모드가 딸린 텍스트 주석 플랫폼이었습니다. 2.8부터는 이미지, 영상, 기가픽셀 스캔, 3D 포인트 클라우드, 깊이 맵, 로봇 에피소드, 생성 영상 롤아웃, 시각-언어 그라운딩을 다루며, 그 하나하나에 대해 주석자들이 일치했는지를 보고합니다.
두 번째 절반이 두 번 읽을 만한 대목입니다. 그리기 도구는 희소하지 않습니다. CVAT, Label Studio, Roboflow, V7, Supervisely 모두 박스와 폴리곤을 그리고, 그중 몇몇은 Potato보다 잘 그립니다. 희소한 것은 공간 라벨에 대한, 우연 일치를 보정한 신뢰도 통계입니다. 그것을 보고하는 다른 주석 플랫폼을 우리는 찾지 못했습니다. 표준은 원시 IoU 아니면 일치율입니다.
Potato 2.8
PyPI에서 설치했다면 업그레이드하십시오
무엇보다 먼저입니다. 2.7.1까지의 휠은 패키지 데이터를 한 단계짜리 글롭으로 선언해서, 하위 디렉터리에 있던 템플릿 27개가 배포 패키지에 들어가지 못했습니다. pip install로 설치한 사람에게는 솔로 모드의 설정 경로, 관리자 대시보드, 심사자 보정, 코퍼스 맵이 전부 망가져 있었습니다. git 체크아웃에서 실행하던 사람은 겪은 적이 없고, 그래서 테스트 스위트도 이를 잡지 못했습니다.
pip install --upgrade potato-annotation@0x6362가 PR #164에서 보고하고 고쳤습니다.
왜 원시 IoU는 일치도가 아닌가
모든 이미지에 크고 가운데 놓인 대상이 하나씩 있는 코퍼스를 생각해 보십시오. 두 주석자가 모두 가운데에 박스를 그리면 크게 겹치므로 평균 IoU는 0.95 안팎이 됩니다.
이미지를 보지 않고 가운데에 박스를 그린 주석자도 마찬가지입니다.
이 수치가 재는 것은 주석자들이 얼마나 일치하는지가 아니라 과제가 얼마나 쉬운지이며, 그것은 범주형 라벨에 대해 우연 일치 보정이 발명될 때 풀려던 바로 그 문제입니다. Potato는 σ를 보고합니다. 이는 α 자신의 1 − D_o/D_e 형태를 임의의 거리로 일반화한 것으로, 우연 기준선은 서로 다른 항목의 주석을 비교해 경험적으로 추정합니다. σ = 0은 무관한 이미지에서와 다를 바 없는 정도로만 주석자들이 일치한다는 뜻입니다.
손쉬운 대안인 1 − IoU 위의 Krippendorff's α는 작동하지 않는 것으로 드러났고, 그것이 우리의 원래 계획이었기에 이유를 말해 둘 가치가 있습니다. IoU 거리는 포화합니다. 무작위로 짝지은 두 박스는 거의 언제나 IoU가 0이므로 기대 불일치가 1 근처로 무너지고, α는 우연 일치 보정이 남지 않은 1 − 평균 거리로 퇴화합니다. Braylan, Alonso, Lease(WWW 2022)도 경험적으로 같은 결론에 이르러, 바운딩 박스에서 α가 단순 L2를 IoU와 GIoU보다 위에 놓아 실무자들이 주는 순서를 뒤집는다고 보고했습니다.
공간 일치도는 또한 하나가 아니라 세 개의 수치로 보고됩니다. 주석자들이 같은 대상을 찾았는지, 그것을 같은 이름으로 불렀는지, 같은 자리에 두었는지입니다. 전부 찾아내고도 라벨을 틀리는 주석자는 라벨은 맞지만 박스를 헐겁게 그리는 주석자와 다른 문제를 안고 있고, 둘의 해법도 다릅니다.
이것을 필요하게 만든 버그
조정은 주석의 키를 비교했습니다. 이미지 스키마는 모든 것을 _data라는 키 하나 아래에 저장합니다.
그래서 모든 이미지 쌍이 일치도 1.0을 받았습니다. 아무것도 일치하지 않은 두 주석자가 만장일치로 보였고, 검토로 넘어간 이미지는 한 장도 없었습니다.
이는 고쳐졌고, 일치도 층이 위에 얹은 것이 아니라 각 주석 유형 안에 내장된 이유이기도 합니다.
브라우저 안의 분할과 텍스트 프롬프트
대상을 클릭하면 마스크가 나옵니다. 약 130밀리초, GPU 없이, 클릭마다의 네트워크 호출도 없이. ONNX Runtime Web 위의 MobileSAM입니다.
문구를 입력하면 해당하는 것이 모두 박스로 돌아옵니다. 이쪽은 Grounding DINO이고, 흥미로운 대목은 라이선스입니다. 텍스트 프롬프트 라벨링에는 SAM 3의 비상업 조항이 필요하다고 널리 알려져 있지만 그렇지 않습니다. Grounding DINO는 Apache-2.0이고, 그래서 이것을 유료 등급이 아니라 모두에게 내놓을 수 있었습니다.
만들면서 얻은, Potato 바깥에도 통하는 세부가 둘 있습니다.
인코더 계약을 실제 가중치로 검증했습니다. SAM의 입력 명세에는 그럴듯한 해석이 여럿 있고, 그중 셋은 자신만만하고 그럴듯한 틀린 마스크를 만듭니다. 중심점 오차로 70에서 148픽셀, 파이프라인이 망가진 것이 아니라 조금 엉성한 주석자처럼 보이는 정도입니다. 올바른 해석은 0.1px에 안착합니다. 실제 가중치와 실제 정답에 대한 검증만이 이들을 갈라놓습니다.
양자화는 측정으로 골랐습니다. 686MB짜리 완전 정밀도 Grounding DINO 내보내기와 견주어 q4f16은 박스 IoU 0.972를 유지하고 int8은 0.874를 유지합니다. 게다가 q4f16이 50MB 더 작습니다. 관행적인 선택을 했다면 더 큰 파일에 더 나쁜 모델을 담아 내놓았을 것입니다.
영상, 그리고 답하지 않기의 가치
한 프레임에 마스크를 그리고 Track forward를 누르면 SAM 2가 이어지는 프레임에서 대상을 따라갑니다. 알려진 정답과 견주어 측정했을 때 프레임별 IoU는 0.974에서 0.979였고, 첫 프레임에서 마지막까지 감쇠가 없었으며, CPU에서 프레임당 대략 1.32초였습니다.
이것은 의도적으로 서버 쪽에서 돕니다. 비용이 프롬프트당이 아니라 프레임당이고, 브라우저 탭에서 영상 모델을 백 프레임 돌리면 페이지가 몇 분간 얼어붙게 됩니다. Potato에는 더 가벼운 브라우저 내 캐리포워드 경로가 따로 있으며, 이 둘을 뭉뚱그려서는 안 됩니다.
주석 작업 루프에서 가장 중요한 성질은 모델이 대상이 가려졌음을 스스로 판단해 추측 대신 빈 프레임을 반환한다는 점입니다. 가려진 프레임에 그럴듯한 틀린 마스크가 있으면 되돌리는 일이 생깁니다. 빈 프레임은 즉시 읽히고, 게다가 그것이 옳은 답입니다.
3D, 깊이, 로봇
spatial_annotation은 PCD, PLY, LAS, KITTI .bin, .xyz를 읽고, 옥트리 기반 세부 수준, 직교 투영 슬래브 패널, 그리고 모든 3D 박스를 모든 카메라 이미지에 투영하는 캘리브레이션을 제공합니다. 주석자는 3D에서 편집하면서 2D로 확인할 수 있습니다.
회전은 요 각도가 아니라 쿼터니언으로 저장됩니다. 그래서 KITTI 가져오기가 무손실이 되며, 요만 담는 필드가 조용히 버리는 카메라-라이다 장착 기울기 약 0.85°도 보존됩니다. KITTI로 되돌려 내보낼 때도 박스를 조용히 눌러 버리는 대신 방향 정보를 얼마나 버려야 했는지 보고합니다.
깊이 맵은 16비트 PNG와 TIFF, NPY, PFM, EXR을 읽고 커서 아래에 미터 값을 표시합니다. 0은 "아주 가까움"으로 그리지 않고 마젠타로 칠합니다. 0은 거의 보편적인 "반환 없음" 코드이고, 무늬 없는 벽을 향한 스테레오 장비는 실제로 80%가 구멍으로 나오기 때문입니다.
episode_annotation은 동기화된 영상 스트림 N개와 로봇 시계열 레인 M개를 하나의 타임라인에 올립니다. 결과는 둘이 아니라 셋입니다. 실제 로봇 데이터에서는 부분 성공이 가장 흔한 결과이고, 그것을 이진값으로 밀어 넣으면 그 데이터셋에 주석을 달 가치를 만들어 주는 신호가 파괴됩니다. 레인 간축은 최솟값과 최댓값을 보존하므로 한 프레임짜리 힘 스파이크가 폭 300픽셀 레인까지 살아남습니다. 이것이 중요한 이유는 파지 실패가 카메라에서 분명해지기 여러 프레임 전에 힘 파형에 나타나기 때문입니다.
세계가 무너지는 지점 표시하기
rollout_evaluation은 생성 영상 2개에서 N개를 하나의 시계에 놓고 보여주며, 세계가 말이 되지 않기 시작하는 프레임을 표시한 뒤 어떤 물리적 또는 인과적 성질이 무너졌는지 태그하도록 주석자에게 요청합니다.
"물리적 그럴듯함"에 5점 만점의 3이라는 평점은 검증할 수도, 위치를 짚을 수도, 무언가를 고치는 데 쓸 수도 없습니다. 프레임 번호와 범주라면 셋 다 가능하며, 두 주석자의 답은 한 직선 위의 두 점이므로 진짜 일치도 통계가 적용됩니다.
붕괴 지점 일치도는 검출, 위치 지정, 범주로 보고되고, 대응 허용 오차는 하나의 값이 아니라 스윕으로 제시됩니다. 0.25초에서의 일치도와 2초에서의 일치도는 같은 데이터에 대한 서로 다른 주장이기 때문입니다.
과소평가될 것 같은 기능
사전 라벨링은 주석자를 빠르게 만듭니다. 동시에 형식적 승인을 아무 저항 없게 만듭니다. 제안이 뜨고, 주석자가 수용을 누르고, 데이터셋은 모델이 자기 자신에게 동의한 기록이 됩니다.
주석 안에는 그것과 꼼꼼한 검토를 가르는 것이 없습니다. 도형은 동일하고, 주석자 간 일치도를 포함한 모든 품질 지표가 오히려 좋아 보입니다. 같은 사전 라벨을 수용한 주석자들은 구조적으로 만장일치이기 때문입니다.
차이가 드러나는 유일한 곳은 소요 시간입니다. 드로잉 텔레메트리는 도형별 소요 시간, 스트로크 동역학, 수정 횟수, AI 제안 수용 지연을 기록하고, 좌표는 전혀, 결코 기록하지 않습니다. 이는 정책이 아니라 이벤트 기록의 구조적 성질입니다.
원클릭 자동 라벨링이 표준이 되어 가는 지금, 검토와 형식적 승인을 가르는 신호는 이것뿐입니다.
2.8의 그 밖의 변화
- 스레드형 대화.
dialogue표시는 각 턴의reply_to로부터 답글 구조를 렌더링하고,potato convokit은 모든 ConvoKit 코퍼스를 가져오고 되돌려 내보냅니다.convokit의존성은 없습니다. - 가져오기 15종, 내보내기 29종, 그중 11종은 왕복이 됩니다. Darwin은 양방향으로 동작하는데, 플랫폼에 합류할 때보다 떠날 때 중요합니다.
- 실시간 데이터베이스 수집. 기동 이후에 생성된 행이 재시작 없이
poll_interval_seconds안에 주석 대상이 됩니다. - 기계가 읽는 명세. 설정 키 159개, 주석 유형 61종, 표시 유형 24종을 담은 JSON Schema와 419개 경로의 OpenAPI 문서. 둘 다 코드에서 생성되고 둘 다 CI에서 검사됩니다.
- 외부 요청 없음. 14개 템플릿 전부에서 모든 자산이 설치본에서 제공됩니다.
styles.css는 첫머리에서 Google Fonts를@import하고 있었고, 그래서 페이지가 열릴 때마다 모든 주석자의 IP 주소를 제3자에게 보내고 있었습니다. 데이터가 자기 인프라를 벗어나지 않게 하려고 직접 호스팅하는 도구에서 말입니다. 이것은 앞선 세 번의 에어갭 감사를 살아남았습니다. 모든 검사가<script src>와<link href>를 봤고, 스타일시트 안의@import는 그 어느 쪽도 아니었기 때문입니다. - 관리자 Instances 탭이 이차에서 선형이 되었습니다. 항목 2,000개에서 15.1초가 23밀리초로 줄었습니다.
이미지 주석 키보드 단축키는 이제 기본값이 V7 관례를 따릅니다(b 브러시, r 사각형, f 채우기, k 키포인트, v 선택). 이미 현장에서 진행 중인 연구를 위해 예전 배치로 되돌리려면 keybinding_profile: legacy를 설정하십시오.
어디서 시작할까
위의 모든 것이 무료 자체 호스팅 제품에 들어 있습니다. 유료 등급은 없습니다.