Community影像github.com

rodritimecoder/clip-box

在圖片中定位物體。讓 h2oai/h2o-lightning-4b 根據片語(如「總金額」、「紅色正方形」、「咖啡杯」)回傳邊界框,並提供圖片比例座標、像素座標、校準後的信心度(P(IoU ≥ 0.5))以及一個用於判斷物體是否存在的「present」機率。

clip-box 是什麼?

clip-box 是一個 AI 代理技能,專門用於在圖片中根據文字描述(如「那隻貓」、「紅色正方形」)定位物體。它基於 h2oai/h2o-lightning-4b 決策模型,並以「shim」形式提供「box」問答類型。與傳統的生成式視覺模型不同,此技能不產生散文或描述,而是回傳一個邊界框(以圖片比例表示)以及兩個關鍵機率值:`confidence`(邊界框與目標的交並比 IoU 至少為 0.5 的機率)和 `present`(目標物體實際存在於圖片中的機率)。它支援 CLI 工具、JSON 輸出、信心度閾值過濾以及裁剪功能。主要支援 llama.cpp 和 h2o-serve 後端,可用於 CPU、CUDA 或 Vulkan 加速。這項技能對需要可靠幾何定位的場景(如文檔解析、UI 自動化、視覺問答)特別有用,並透過 `present` 機率有效避免誤報。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/rodritimecoder/agent-skills/tree/HEAD/multimodal/clip-box

Installed? Explore more 影像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

clip-box — 它在圖片的哪裡?

這是 「X 在哪裡」 的入口。實作位於 decision-model:同一個客戶端回答 bool、choice、score 和 box,而 clip-box 是一個輕量的入口點,讓這個詞彙保持可路由,並且可以在其他模型佔用決策槽時指向一個獨立的 shim。

clip-box --image scene.png --target "the red square"          # 在 :8083 的槽 shim
clip-box --image scene.png --target "the red square" --port 8761   # 獨立 shim
decision-model box --image scene.png --target "the red square"     # 相同功能

h2o-lightning 是一個 4B 參數的決策模型:它用機率回答類型問題,從不產生散文。它的 box 問題回傳一個矩形而非標籤,以及三個比矩形更重要的數值:

欄位意義
boxleft, top, right, bottom,以圖片比例表示,從左上角開始
confidenceP(IoU ≥ 0.5) — 對已繪製方框的圖片進行的決策讀數,非模型敘述的數字
presentP(目標物體可見) — 對未經修改的圖片進行的獨立讀數
found是否產生任何方框;若未找到則回傳整張圖片且信心度為 0

請依據 present 而非 found 進行判斷。 當詢問一張沒有藍色腳踏車的場景時,模型會對其他物體回傳一個看似合理的方框,顯示 found: true 但 present: 0.111。present 才是用來表示「不存在」的值。

使用方式

# 啟動 API(box 問題已啟用;槽前端埠口為 :8083)
h2o-serve --port 8083          # CPU, Q8_0
h2o-serve --backend vulkan     # AMD GPU:建置一次固定的 Vulkan 後端
h2o-serve --status
h2o-serve --stop

# 提問
clip-box --image scene.png --target "the red square"
# ACCEPT  box=(0.247, 0.247) -> (0.753, 0.753)  confidence=0.651  present=0.885

clip-box --image scene.png --target "the blue bicycle"   # 不存在 -> 退出碼 2
clip-box --image receipt.png --target "the total amount" # confidence 0.163 < 0.30 -> 被拒絕
clip-box --image scene.png --target "the red square" --json --crop /tmp/square.png

--json 回傳 accepted、reason、box、pixels(根據實際圖片尺寸計算)、confidence、present、found 以及回答問題的 model。退出碼 0 表示接受,2 表示拒絕,1 表示請求錯誤。

--min-present(預設 0.5)和 --min-confidence(預設 0.30)設定閾值;兩者亦可透過環境變數設定(BOX_MIN_PRESENT、BOX_MIN_CONFIDENCE)。--crop 會寫入接受的方框;此功能需要 Pillow。

功能性,而非假定

box 是一個 shim 功能,而非協定功能:llama.cpp 自己的 /v1/systemone 僅接受 choice、score 和 noul。決策槽會在五個候選方案之間輪替,因此:

decision-model caps
# model       /models/h2o-lightning-4b-Q4_K_M.gguf
# slot        :8083  (box 在 :8083)
# primitives  bool, choice, score, box

如果佔用者不是 h2o,caps 就不會列出 box,且 box 會以服務中的模型名稱拒絕請求,而非向無法回答該問題的端點發送請求。

真正擅長的事

在此工作站(Q8_0,CPU 後端)上,對已知真實值的合成場景進行測量:

目標IoUconfidencepresent
紅色正方形,512×512 置中0.9760.6510.885
紅色矩形,512×1024 高0.8770.6690.897
紅色矩形,1024×512 寬0.8480.7220.895
雜亂場景中的小紅色正方形0.6030.3590.896
"the blue bicycle" (不存在)—0.1880.111
收據上的 "the total amount"未命中(方框在總額下方)0.1440.899

顯著物體、圖示、形狀、單張圖片:表現良好,長寬比處理正確。收據上的密集小文字:會失誤,其低信心度也反映了這一點。對於收據上的金額,請裁剪包含總額附近的區域,或使用決策 API 的 choice 問題("the TOTAL? subtotal/total/tax"),該模型在相同圖片上已正確評分。

這個技能存在的目的是為了吸收這個陷阱

Pillow。 shim 在緊密度讀數之前繪製方框,並在發生 ImportError 時回傳 None,因此沒有 Pillow 的 Python 會對每個方框回答 confidence: 0.0。h2o-serve 會建立自己的虛擬環境並檢查導入。

檔案

路徑角色
scripts/clip_box.py入口點 — 提升 --port/--host,委派給 decision-model box
../hardware/decision-model/scripts/decision_model.py客戶端:一個 box 問題、兩個閾值、裁剪、退出碼
../hardware/decision-model/scripts/h2o_serve.py啟動器:透過雜湊值固定的啟動程序、安全的 Pillow 虛擬環境、CPU/CUDA/Vulkan 後端、--status、--stop

狀態存放於 ~/.cache/h2o_lightning_gguf(權重 + 固定後端)和 ~/.local/share/h2o-lightning/venv。這兩個路徑之外的任何東西都不會被觸及。

協定備註

  • 此處 shim 的 box.mode 為 generate:在 Qwen 的 bbox_2d 慣例(0–1000,x 優先)中進行一次約束生成,並進行解析和限制。edges/hybrid 需要一個在邊緣讀數上訓練過的模型;此版本請保持使用 generate。
  • confidence 是一個具有自身溫度參數的機率,在擬合完成前為 1.0,因此它是保守的:一個大正方形上的近乎完美的方框,其讀數約為 0.65,而非 0.95。
  • 預設情況下每次請求處理一張圖片;shim 透過 images: 參數最多接受 8 張圖片,且後端以 --image-max-tokens 1024 啟動。
  • 同一伺服器的決策端在 /v1/systemone 上回答文字和圖片的 choice / noul / score 問題;對於文字上的校準決策,請優先使用 pplx-decider(決策指數 60.06,此處為 51.38)。將此模型用於幾何定位,而非路由決策。

相關技能