Skip to content

개방 어휘 텍스트 프롬프트

문구를 입력하면 이미지 안의 일치 대상이 모두 박스로 돌아옵니다. Apache-2.0인 Grounding DINO를 GPU 없이 브라우저에서 돌리는 법, 그리고 양자화를 측정으로 고른 이유.

traffic cone이라고 입력하면 이미지 안의 모든 교통 콘이 수용하거나 거절할 제안으로 박스에 담겨 돌아옵니다. 모델은 주석자의 브라우저에서 돌아가므로 마련할 GPU도, 설치 후의 네트워크 왕복도 없습니다.

설치

bash
potato download-models grounding_dino_tiny   # once per install
potato download-models onnxruntime           # shared with segmentation
yaml
annotation_schemes:
  - annotation_type: image_annotation
    name: objects
    description: "Find and label the objects."
    source_field: image
    tools: [bbox, polygon, sam]
    labels: [cat, bus, stop sign]
 
    text_prompt:
      phrases: [cat, bus, stop sign]   # what the box starts with
      box_threshold: 0.3               # how sure before a box is offered
      text_threshold: 0.25             # how a box gets its label
      segment: false                   # true turns accepted boxes into masks

동작하는 모습을 보려면 examples/image/text-prompt-labeling/를 실행하십시오.

흥미로운 대목은 라이선스다

텍스트 프롬프트 라벨링에는 SAM 3와 그 비상업 조건이 필요하다고 널리 여겨집니다. 그렇지 않습니다. 여기 쓰인 모델은 Grounding DINO, Apache-2.0으로 공개된 개방 어휘 검출기입니다. 그래서 유료 등급이 아니라 모두에게 배포할 수 있었습니다.

Grounding DINO는 이미지와 캡션을 받아 900개의 후보 박스를 그 캡션의 각 단어에 대해 채점합니다. Potato는 당신의 문구로 캡션을 조립하고, ONNX Runtime Web으로 모델을 돌리고, 출력을 제안으로 바꿉니다. 제안을 수용하면 다른 모든 도구와 같은 좌표 계약을 거쳐 정규화된 바운딩 박스로 저장되므로, 제안과 손으로 그린 박스는 하류에서 같은 종류의 객체가 됩니다.

segment: true로 설정하면 수용된 각 박스가 SAM 디코더로 넘어가 마스크가 됩니다.

양자화는 측정으로 골랐다

배포되는 모델은 양자화되어 있습니다. 어느 양자화인지는 어쩌다 선택된 기본값이 아니라 전정밀도 익스포트와 비교해 측정한 결과입니다.

익스포트전정밀도 대비 박스 IoU크기
전정밀도686 MB
q4f160.972151 MB
int80.874201 MB

q4f16은 원래 형상을 훨씬 많이 보존하면서 동시에 int8보다 50 MB 작습니다. 기본값을 그대로 받아들였다면 더 큰 파일에 더 나쁜 모델을 담아 배포했을 것입니다.

COCO의 고양이 두 마리 사진에서 실제로 검증했습니다. 고양이 둘 다 신뢰도 0.724와 0.688로 검출되었고, 바운딩 박스는 파이썬 참조 구현과 소수점 넷째 자리까지 일치했습니다.

BERT 토큰화는 직접 구현했다

Grounding DINO는 캡션이 BERT와 같은 방식으로 토큰화되어 있어야 합니다. Potato는 함수 하나 때문에 약 2 MB짜리 transformers.js를 끌어오는 대신 WordPiece를 직접 구현했고, 그 구현은 HuggingFace의 tokenizers와 토큰 단위로 대조해 확인했습니다.

핵심은 아낀 용량이 아닙니다. 모델의 학습 토크나이저와 어긋나는 토크나이저는 임계값 문제처럼 보이는 미묘하게 틀린 검출을 만들어 내므로, 믿고 넘어가기보다 참조 구현과 대조해 시험할 가치가 있다는 것입니다.

이 기능의 자리

제안은 제안입니다. 수용된 박스는 주석이고, 수용되지 않은 박스는 아니며, 둘은 끝까지 분리되어 있습니다. 주석자가 제안을 검토하는지 형식적으로 승인하는지가 궁금하다면, 그것을 알려주는 것은 소요 시간입니다. 드로잉 텔레메트리를 보십시오.

관련 문서