Skip to content

如何評估 VLM 的定位與指點能力

定位按多個閾值下的 IoU 評分,指點按點落入區域的命中率評分,無可指物件則單獨作為一種答案。以及為什麼用給框評分的方式給點評分總是會失敗。

定位評估問的是模型有沒有把區域放在正確的位置;指點評估問的是它有沒有把點放在正確的東西上。 兩者需要不同的度量,而用定位的度量去評估指點,會把一個指點完全正確的模型報成徹底失敗。

定位:報告多個閾值

以人工標註區域為參照,按 IoU0.25、0.5、0.75 與 0.9 四個閾值下為定位評分。

單一閾值無法區分"幾乎正確"與"差得很遠",而一個恰好被調到剛好跨過 0.5 的模型,看起來與一個真正貼合的模型毫無二致。跨閾值的曲線形狀才是結論所在。

指點不是"畫個小框的定位"

Molmo 系列的模型輸出的是點。點沒有面積,因此任何針對它的 IoU 都是 0。 用給定位模型評分的方式去給指點模型評分,無論它指得多好,報出來的都是徹底失敗。

點所回答的問題是"它是否那個東西里面",因此度量是一個命中率:point_in_region

mean_miss_distance 只在未命中的樣本上報告。若把命中樣本也一併平均,它主要衡量的將是物體有多大,而不是模型偏得有多離譜。

標註者在點上的一致性是一個距離

同樣的結構性問題也出現在標註者之間。把由重疊匯出的度量套用到點上會飽和:兩位標註者分別指向同一張圖的對角,得分仍約為 0.86,而任何係數量表都會把它歸入"高度一致"。

因此請報告標註者點位之間的平均距離與中位距離,以歸一化影像單位表示,0 為完美。距離沒有可飽和的上限,而把它稱作距離,也就阻止了任何人把它當作係數來歸檔。

無可指物件是三種不同的錯誤

請分開跟蹤:

結果含義
正確拒答該表示式並未指向畫面中存在的任何東西,而模型也如實指出了
臆造了位置為一個並不存在的東西給出了區域
漏掉了確實存在的指稱物件東西在那裡,卻沒被找到

把它們合併成一個"錯誤"數字,會掩蓋"過度斷言"與"過度保守"之間的差別,而這兩者的糾正方式恰好相反。

標註者從未作答的表示式會被排除,而不是計作漏檢。 若把它計入,被跳過的短語越多、模型看起來就越差,而那說的其實是標註者,不是模型。

區域描述需要語義距離

描述同一個物體的兩位標註者,很少會用到相同的實詞。"一個把手有缺口的紅馬克杯"與"左邊那個破了的杯子"描述的是同一個區域,卻沒有任何重合的實詞。

請通過語義距離而非字串重疊來計算描述的一致性。Krippendorff's α 接受任意距離函式,因此只要距離選對了,同一套係數機制便可沿用。

配置

yaml
annotation_schemes:
  # grounding_eval 負責繫結,但它自己不繪圖,
  # 因此由一個影像模式來提供畫布。
  - annotation_type: image_annotation
    name: region
    description: "Draw the region for the selected phrase."
    source_field: image
    tools: [bbox, polygon, landmark]
    labels: [{name: referent, color: "#6e56cf"}]
 
  - annotation_type: grounding_eval
    name: grounding
    description: "What does each phrase refer to?"
    region_type: box          # 指點評估時改用 `point`
    expressions_field: expressions

條目攜帶其短語,並帶有穩定的 id:

json
{"id": "img1", "image": "/media/img1.jpg",
 "expressions": [{"id": "e1", "text": "the man in the red shirt"}]}

直接給一個字串列表也可以,但此時 id 會回退為位置序號,因此重排該列表會讓已有標註指向別處。

可用示例:RefCOCOPixMo-Points 展示設計。

複核模型預測

如果你是在審計一個模型,而不是在採集基準答案,請讓預測在整條鏈路上都被標記為預測。一條標註者尚未接受的預測,是關於模型的證據;把它併入人工標註區域,就毀掉了它唯一的用途。

延伸閱讀