대화형 분할
객체를 클릭하면 마스크가 나옵니다. 브라우저 안에서, GPU 없이, 클릭마다 네트워크를 부르지 않고. Potato가 ONNX Runtime Web으로 MobileSAM을 돌리는 방식과 설정하는 법.
객체를 클릭하면 약 130밀리초 만에 마스크가 돌아옵니다. 주석자의 브라우저 안에서, GPU도 네트워크 왕복도 없이 말입니다. 설치는 명령 두 개면 되고, 가중치가 기기에 놓인 뒤에는 에어갭 환경에서도 동작합니다.
설치
potato download-models onnxruntime # 13.5 MB, once per install
potato download-models mobile_sam # 45 MB그다음 스키마의 tools에 sam을 추가합니다.
annotation_schemes:
- annotation_type: image_annotation
name: objects
description: "Outline every object you find."
source_field: image
tools: [sam, polygon, brush, eraser]
labels:
- name: object
color: "#6e56cf"브러시, 지우개, 색을 고려한 채우기 도구는 손작업용으로 계속 쓸 수 있습니다. 대화형 분할은 마스크를 시작하는 수단이지, 마스크를 고치는 일을 대신하는 것이 아닙니다.
동작하는 모습을 보려면 examples/image/interactive-segmentation/를 실행하십시오.
작동 방식
모델은 Segment Anything의 증류 변종인 MobileSAM이며, ONNX Runtime Web을 통해 돌아갑니다.
인코더와 디코더는 의도적으로 분리되어 있습니다. 인코더는 비싸고 이미지당 한 번 돌며, 디코더는 싸고 클릭당 한 번 돕니다. 둘을 떼어 놓고 이미지별로 임베딩을 캐시하는 것이, 클릭이 네트워크 요청이 아니라 대화형으로 느껴지는 이유의 전부입니다. 캐시에는 상한이 있고 가장 오래 쓰이지 않은 임베딩부터 밀려납니다.
양의 클릭으로 마스크에 더하고, 음의 클릭으로 깎아내고, 박스로 탐색 범위를 제한하고, 이미 있는 마스크를 다듬을 수도 있습니다.
브라우저를 기본으로 삼은 이유
pip install potato-annotation만 하면 GPU도, 새로운 파이썬 의존성도, 주석 시점의 외부 통신도 없이 분할이 동작해야 합니다. 마지막 항목은 배려의 문제가 아닙니다. 여러 연구 그룹이 에어갭 환경에서 Potato를 운영하는데, 거기서는 클릭할 때 받아오는 모델이 느린 기능이 아니라 없는 기능입니다.
| 브라우저(기본) | 서버 엔드포인트 | |
|---|---|---|
| 설치 | potato download-models | pip install 'potato-annotation[vision]' 와 가중치 |
| GPU | 필요 없음 | 권장 |
| 에어갭 | 모델을 내려받은 뒤에는 가능 | 가능 |
| 모델 크기 | 증류됨, 약 45 MB | 준비한 것에 따름 |
GPU가 있고 더 큰 모델을 쓰고 싶은 연구실을 위해 서버 엔드포인트도 있지만, 그것은 기본이 아니라 예외입니다.
입력 계약은 가정이 아니라 검증되었다
SAM의 인코더는 전처리된 이미지를 받는데, 그 명세는 그럴듯한 해석을 여럿 허용합니다. 그중 셋은 자신만만하고 그럴듯하지만 틀린 마스크를 만듭니다. 중심점 오차가 70에서 148픽셀로, 망가진 파이프라인이 아니라 조금 부주의한 주석자처럼 보입니다. 올바른 해석은 0.1 px에 안착합니다.
이 차이는 실제 가중치와 실제 정답에 대조해야만 보이며, 그래서 이 계약은 주석이 아니라 테스트로 고정되어 있습니다. 여기서 잘못 읽었다면 그것으로 만든 모든 데이터셋의 모든 마스크가 조용히 나빠졌을 것입니다.
마스크의 일치도
같은 객체를 분할하는 두 주석자가 똑같은 픽셀을 내놓지는 않으므로, 마스크 일치도에는 겹침 수치 이상이 필요합니다. Potato는 STAPLE(Warfield, Zou, Wells, 2004)을 사용해 잠재적인 합의 경계를 평가자별 민감도·특이도와 함께 추정합니다.
픽셀별 다수결과의 차이는 겉모습의 문제가 아닙니다. 꼼꼼한 두 명이 부주의한 세 명에게 3대 2로 밀릴 때, 다수결은 정답 대비 Dice 0.846이고 STAPLE은 1.000입니다. STAPLE은 꼼꼼한 두 명이 서로 일치하는 반면 부주의한 세 명은 그렇지 않다는 것을 알아채기 때문입니다.
자세한 내용과 주의점은 마스크 합의를 보십시오.