Skip to content

바운딩 박스의 주석자 간 일치도를 측정하는 방법

원시 IoU는 일치도가 아닙니다. 바운딩 박스, 폴리곤, 마스크에 대해 우연 일치를 보정해 일치도를 측정하는 방법과, 검출·분류·위치 지정에 각각 별도의 수치가 필요한 이유.

주석자 간 평균 IoU가 측정하는 것은 과제가 얼마나 쉬운지이지, 그들이 얼마나 일치하는지가 아닙니다. 전형적인 검출 코퍼스에서는 이미지를 한 번도 보지 않은 주석자에게도 0.95 안팎이 나옵니다. 공간 라벨의 일치도를 측정한다는 것은 우연 일치를 보정하고, 검출·분류·위치 지정을 별도의 수치로 보고한다는 뜻입니다.

원시 IoU가 왜 오해를 부르는가

각 이미지에 크고 중앙에 놓인 대상이 하나씩 있는 코퍼스를 생각해 봅시다. 두 주석자가 모두 가운데에 박스를 그리면 크게 겹치므로 평균 IoU는 0.95 안팎이 됩니다. 이미지를 보지 않고 가운데에 박스를 그린 주석자도 마찬가지입니다.

이 수치가 재고 있는 것은 주석자가 아니라 과제입니다. 이는 범주형 라벨에서 일치율이 겪는 문제와 똑같습니다. 지배적인 클래스가 하나 있으면 점수가 부풀려집니다. 해법도 같습니다. 그 과제가 우연히 만들어내는 일치의 양을 보정하는 것입니다.

CVAT의 합의 엔진과 V7의 합의 단계는 둘 다 클래스별 임계값 대비 원시 IoU로 주석자를 비교합니다. 어느 쪽도 우연 일치를 보정하지 않으면서 둘 다 널리 쓰이므로, 그중 어디서 보고된 "일치도 0.9"든 대개 어떤 것과도 비교할 수 없습니다.

왜 1 − IoU 위의 Krippendorff's α가 아닌가

가장 손쉬운 해법은 어떤 거리 함수든 받아들이는 Krippendorff's α에 IoU 거리를 넣는 것입니다. 여기서는 잘 작동하지 않으며, 그 이유는 직접 구현하기 전에 알아둘 가치가 있습니다.

Braylan, Alonso, Lease(WWW 2022)는 결과 점수가 주석자 품질을 올바르게 순위 매기는가를 기준으로 거리 함수를 평가했습니다. 바운딩 박스에서 α는 단순 L2(0.687)를 IoU(0.505)와 GIoU(0.507)보다 위에 놓으며, 이는 저자들의 분포 기반 측도와 실무자들이 모두 제시하는 순서를 뒤집습니다.

구조적으로 IoU 거리는 [0, 1]로 제한되며 포화됩니다. 무작위로 짝지은 두 박스는 거의 언제나 IoU가 0이므로 기대 불일치가 1 근처로 무너지고, α는 1 − 평균 거리로 퇴화해 우연 일치 보정이 남지 않습니다. IoU는 정작 중요한 곳에서 평평하기도 합니다. 겹치지 않는 두 박스는 맞닿아 있든 반대쪽 모서리에 있든 0점이므로, 주석자들이 실제로 불일치하는 바로 그 지점에서 기울기가 없습니다.

대신 무엇을 보고할 것인가

질문을 셋으로 나눈다

성분질문측도
검출애초에 같은 대상을 찾았는가존재 여부에 대한 명목 α
분류대응된 대상에 같은 라벨을 주었는가라벨에 대한 명목 α
위치 지정대응된 대상이 같은 위치에 있는가σ와 KS

모든 대상을 찾아내고도 라벨을 전부 틀린 주석자와, 라벨은 맞지만 박스를 헐겁게 그린 주석자는 서로 다른 문제입니다. 합쳐진 점수로는 어느 쪽인지 알 수 없고, 두 경우의 해법도 다릅니다.

σ와 경험적 우연 기준선

text
σ = 1 − mean(within-item distance) / mean(between-item distance)

이는 α의 1 − D_o/D_e 형태를 임의의 거리로 일반화한 것으로, 우연 기준선은 서로 다른 항목의 주석을 비교해 추정합니다. σ = 0은 무관한 이미지에서와 다를 바 없는 수준으로만 일치한다는 뜻입니다.

음수 값을 잘라내지 마십시오. "같은 이미지에서가 서로 다른 이미지에서보다 더 멀다"는 것은 실재하는 상태이며, 거의 언제나 주석자가 부주의한 것이 아니라 지침이 모호하다는 뜻입니다.

KS를 함께

항목 내 거리 분포와 항목 간 거리 분포 사이의 이표본 콜모고로프–스미르노프 통계량입니다. σ는 두 평균을 비교하므로 소수의 이상치에 끌려갈 수 있지만, KS는 분포 전체를 비교합니다.

둘 다 보고하십시오. 두 값이 어긋난다면 소수의 항목이 불일치의 대부분을 떠안고 있다는 뜻이며, 그 항목들을 직접 살펴보라는 신호입니다.

마스크에는 다른 도구가 필요하다

픽셀 마스크에서 "누구의 경계를 기록할 것인가"는 "그들이 일치하는가"와 다른 질문입니다. STAPLE(Warfield, Zou, Wells, 2004)을 쓰십시오. 픽셀별 라벨에 기댓값 최대화를 수행해 주석자별 민감도와 특이도를 추정합니다.

민감도와 특이도를 따로 보고하는 이유는 고치는 방향이 정반대이기 때문입니다. 민감도가 낮으면 과소 분할, 특이도가 낮으면 과대 분할이며, 단일한 정확도 수치는 둘을 똑같이 채점합니다.

STAPLE은 꼼꼼한 주석자가 수적으로 밀릴 때 다수결도 능가합니다. 꼼꼼한 두 명이 부주의한 세 명을 상대할 때, 다수결은 정답 대비 Dice 0.846, STAPLE은 1.000이었습니다.

3D 박스에는 정확한 회전 IoU가 필요하다

직육면체에는 정확한 회전 3D IoU를 쓰십시오. 축에 정렬된 근사는 데이터에 실제 피치와 롤이 있는 순간, 측도 자체에서 비롯된 불일치를 보고하게 됩니다. 드론, 손에 든 장비, 실내 스캔 데이터가 모두 그렇습니다.

Potato에서 하는 법

yaml
agreement_metrics:
  enabled: true
 
annotation_schemes:
  - annotation_type: image_annotation
    name: objects
    description: "Draw a tight box around every vehicle."
    source_field: image
    tools: [bbox]
    labels:
      - {name: car, color: "#FF6B6B"}
      - {name: truck, color: "#4ECDC4"}
 
num_annotators_per_item:
  default: 2

보고서는 /admin/iaa에 표시됩니다. 알아둘 만한 성질이 둘 있습니다.

  • 정의되지 않은 값은 스스로를 설명합니다. 만장일치 코퍼스에서 α는 실제로 정의되지 않습니다. 맨 NaN은 계산이 고장 난 것처럼 보이고 1.0을 반환하면 거짓이 됩니다.
  • 조용히 잘라내지 않습니다. 쌍별 비교는 주석자 수와 항목당 인스턴스 수에 대해 이차적으로 늘어나므로 예산이 있습니다. 예산에 도달하면 항목을 절반만 측정하지 않고 통째로 건너뛰며, 보고서는 몇 건이 포함되었는지 밝힙니다.

체크리스트

  1. 항목마다 독립적인 주석을 최소 두 개 확보하십시오. 주석자 한 명에 대한 일치도는 완벽한 것이 아니라 정의되지 않은 것입니다.
  2. 검출, 분류, 위치 지정을 따로 보고하십시오.
  3. 고정 임계값이 아니라 경험적으로 추정한 기준선에 대해 우연 일치를 보정하십시오.
  4. σ와 KS를 함께 보고하십시오.
  5. 마스크에는 STAPLE을, 직육면체에는 회전 3D IoU를 쓰십시오.
  6. 커버리지를 밝히십시오. 표본에서 계산된 수치가 완전한 것처럼 제시되면 완전한 것으로 인용됩니다.

더 읽을거리