clip-box — 이 이미지에서 어디에 있나요?
이것은 "X는 어디에" 의 첫 진입점입니다. 실제 구현은 decision-model에 있습니다. 동일한 클라이언트가 bool, choice, score, box를 처리하며, clip-box는 이 어휘를 라우팅 가능하게 유지하고 다른 모델이 의사 결정 슬롯을 차지할 때 독립형 심(shim)을 가리킬 수 있는 얇은 진입점입니다.
clip-box --image scene.png --target "빨간 사각형" # 슬롯 심 :8083
clip-box --image scene.png --target "빨간 사각형" --port 8761 # 독립형 심
decision-model box --image scene.png --target "빨간 사각형" # 동일한 기능
h2o-lightning은 4B 의사 결정 모델입니다. 확률을 사용하여 타입이 지정된 질문에 답변하며 절대 산문을 생성하지 않습니다. box 질문은 레이블 대신 사각형과 사각형보다 더 중요한 세 가지 숫자를 반환합니다.
| 필드 | 의미 |
|---|---|
box | 이미지의 left, top, right, bottom(분율), 왼쪽 상단 기준 |
confidence | P(IoU ≥ 0.5) — 박스가 그려진 이미지에 대한 의사 결정 판독값, 모델이 말하는 숫자가 아님 |
present | P(대상이 전혀 보이는가) — 손대지 않은 이미지에 대한 별도 판독값 |
found | 박스가 생성되었는지 여부; 미스인 경우 신뢰도 0으로 전체 이미지 반환 |
found가 아니라 present를 게이트로 사용하세요. 파란 자전거가 없는 장면에서 요청하면 모델은 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 "빨간 사각형"
# ACCEPT box=(0.247, 0.247) -> (0.753, 0.753) confidence=0.651 present=0.885
clip-box --image scene.png --target "파란 자전거" # 없음 -> 종료 코드 2
clip-box --image receipt.png --target "총액" # confidence=0.163 < 0.30 -> 거부
clip-box --image scene.png --target "빨간 사각형" --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 on :8083)
# primitives bool, choice, score, box
점유자가 h2o가 아니면 caps는 box를 나열하지 않으며 box는 서빙된 모델 이름을 명시하며 거부합니다. 엔드포인트가 대답할 수 없는 질문을 올리는 대신입니다.
실제로 잘하는 것
이 워크스테이션(Q8_0, CPU 백엔드)에서 측정한 합성 장면, 알려진 진실값 사용:
| 대상 | IoU | confidence | present |
|---|---|---|---|
| 빨간 사각형, 512×512 중앙 | 0.976 | 0.651 | 0.885 |
| 빨간 사각형, 512×1024 세로 | 0.877 | 0.669 | 0.897 |
| 빨간 사각형, 1024×512 가로 | 0.848 | 0.722 | 0.895 |
| 혼잡한 장면 속 작은 빨간 사각형 | 0.603 | 0.359 | 0.896 |
| "파란 자전거" (없음) | — | 0.188 | 0.111 |
| 영수증의 "총액" | 미스 (박스가 총액 아래) | 0.144 | 0.899 |
눈에 띄는 객체, 아이콘, 도형, 단일 이미지: 좋음, 종횡비를 올바르게 처리. 영수증의 빽빽한 작은 텍스트: 놓치며, 낮은 신뢰도가 이를 알려줍니다. 영수증의 금액 값의 경우, 총액 주변을 크롭하거나 의사 결정 API의 choice 질문("TOTAL은 무엇인가요? subtotal/total/tax")을 사용하세요. 동일한 이미지에서 올바르게 점수를 매겼습니다.
이 스킬이 존재하는 이유 (함정)
Pillow. 심은 긴밀성 판독 전에 박스를 그리고 ImportError 시 None을 반환하므로 Pillow가 없는 Python은 모든 박스에 confidence: 0.0으로 답변합니다. h2o-serve는 자체 venv를 구축하고 임포트를 확인합니다.
파일
| 경로 | 역할 |
|---|---|
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-safe venv, CPU/CUDA/Vulkan 백엔드, --status, --stop |
상태는 ~/.cache/h2o_lightning_gguf(가중치 + 고정 백엔드)와 ~/.local/share/h2o-lightning/venv에 저장됩니다. 이 두 경로 외에는 아무것도 건드리지 않습니다.
프로토콜 참고사항
- 여기서 심의
box.mode는generate입니다: Qwen의bbox_2d규칙(0–1000, x 먼저)에 따라 하나의 제약 생성된 결과를 파싱하고 클램핑합니다.edges/hybrid는 가장자리 판독에 학습된 모델이 필요합니다; 이 릴리스에서는generate를 유지하세요. confidence는 자체 온도를 가진 확률로, 피팅될 때까지1.0이므로 보수적입니다: 큰 사각형의 거의 완벽한 박스라도 0.65로 읽히며 0.95가 아닙니다.- 기본적으로 요청당 하나의 이미지; 심은
images:로 최대 8개까지 허용하며 백엔드는--image-max-tokens 1024로 시작됩니다. - 동일 서버의 의사 결정 측면은 텍스트와 이미지에 대해
/v1/systemone에서choice/noul/score에 답변합니다; 텍스트에 대한 보정된 결정의 경우pplx-decider를 선호하세요(여기서 결정 지수 60.06 대 51.38). 기하학에는 이 모델을, 라우팅에는 사용하지 마세요.