Skip to content

이름을 입력해 객체에 라벨을 붙이는 방법

개방 어휘 검출은 주석자가 문구를 입력하면 일치하는 모든 대상을 박스로 돌려줍니다. Grounding DINO의 작동 방식, 라이선스가 허용하는 범위, 그리고 이 접근이 무너지는 지점.

개방 어휘 검출이란, 주석자가 문구를 입력하면 그 클래스가 어떤 학습 데이터에도 없었더라도 이미지 안의 일치 대상이 모두 박스로 돌아오는 것을 말합니다. 기성 검출기가 다루지 않는 클래스에 대해 검출 데이터셋을 띄우는 가장 빠른 방법입니다.

작동 방식

Grounding DINO는 이미지와 캡션을 받아, 900개의 후보 박스를 그 캡션의 각 단어에 대해 채점합니다. "cat . bus . stop sign"을 주면 문구별 신뢰도와 함께 박스를 돌려줍니다.

이는 고정 클래스 검출기와 다른 메커니즘이며, 프롬프트를 쓰는 방식도 달라집니다.

  • 라벨보다 문구. "traffic cone"은 모델이 캡션에서 보아 온 문구이지만 cone_orange_road는 아닙니다.
  • 문맥이 도움이 됩니다. 붐비는 거리에서는 "person riding a bicycle"이 "person"보다 위치를 더 잘 잡습니다.
  • 무뚝뚝할수록 불리합니다. 모델은 자연어로 학습되었으니 자연어로 쓰십시오.

라이선스가 중요하다

텍스트 프롬프트 라벨링에는 SAM 3와 그 비상업 조건이 필요하다고 널리 여겨집니다. 그렇지 않습니다. Grounding DINO는 Apache-2.0입니다.

이는 데이터셋을 만든 뒤가 아니라 만들기 전에 확인할 일입니다. 라벨링에 쓰는 모델의 라이선스가 비상업인데 데이터셋은 그렇지 않다면, 늦게 발견할수록 비싸지는 문제를 안게 됩니다. Potato의 모델 주는 각 모델의 라이선스를 밝히고, 비상업 모델은 --accept-licence 없이는 내려받지 않습니다.

설정

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]
      box_threshold: 0.3
      text_threshold: 0.25
      segment: false

두 임계값은 하는 일이 다르므로 따로 조정해야 합니다.

  • box_threshold 는 애초에 박스를 제시할지를 정합니다. 주석자가 오검출에 파묻히고 있다면 올리십시오.
  • text_threshold 는 제시된 박스에 어느 문구가 라벨을 붙일지를 정합니다. 박스가 엉뚱한 라벨 아래 나타난다면 올리십시오.

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

양자화는 실질적인 선택이다

이것을 직접 배포한다면 기본 익스포트를 그대로 받아들이지 마십시오. 686 MB 전정밀도 Grounding DINO 익스포트와 비교한 결과입니다.

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

q4f16은 형상을 훨씬 많이 보존하면서 동시에 더 작습니다. 관행이라는 이유로 int8을 고르면 더 큰 파일에 더 나쁜 모델을 담아 배포하게 됩니다.

무너지는 지점

  • 세분화된 클래스. "골든 리트리버" 대 "래브라도"는 감당하지 못합니다. 그냥 개를 박스로 칠 뿐입니다.
  • 분야 특유의 어휘. 의료, 산업, 과학 용어는 대개 학습 캡션에 들어 있지 않습니다.
  • 개수 세기. 인스턴스를 찾기는 하지만, 붐비는 장면에서 모든 인스턴스를 확실히 찾아내지는 못합니다.
  • 부정과 관계. "테이블 위에 있지 않은 컵"은 답할 수 있는 질의가 아닙니다.

그런 경우에도 제안은 출발점으로 쓸모가 있지만, 직접 그릴 각오를 해두십시오.

제안은 주석이 아니다

끝까지 둘을 분리해 두십시오. 주석자가 수용한 박스는 정답 데이터이고, 수용하지 않은 박스는 모델에 관한 증거입니다. 둘을 뭉치면 후자가 존재하는 유일한 이유가 사라집니다.

그 수용이 진짜 검토인지 알고 싶다면, 그것은 정확도의 문제가 아니라 시간의 문제입니다.

더 읽을거리