跳到正文
Hacker News· dwa3592·· 6 天前AI 评分22

OpenDecision 发布自托管图像决策 API,基于 SigLIP2 匹配图像与候选描述

Show HN: Self Hosted System One Decision API for Images

AI 导读

OpenDecision 推出自托管图像决策 API,用 SigLIP2 将图像与候选描述匹配,并依据规则返回动作,如识别到熊触发 sound_alarm、垃圾桶溢出触发 request_collection。在 Apple M3 本地加载模型下,单次 HTTP 调用中位耗时 233-317 ms,覆盖 2-4 个问题,动作均为模拟执行。

正文 · AI 翻译

OpenDecision 使用 SigLIP2 将图像与候选描述进行匹配。下面的示例展示了提供的描述、返回的答案以及组合出的动作。

这 11 张照片使用图像 API 进行了测试。每个表格展示了陈述或问题以及返回的答案。

图像 API 与设置 · 运行图像演示

时间是在搭载 Apple M3 并加载模型的设备上,五次本地 HTTP 调用的中位数。每次时间包含该照片列出的所有问题。测量详情。

结果

野生动物警报

API 调用:316 毫秒,共 2 个问题。

Wildlife alert

陈述或问题 返回的答案
图像中可见一只动物。 是
可见的是什么动物? bear

规则:animal_present 为真且 animal_type 等于 bear。

返回的动作:sound_alarm。该动作是模拟的。

描述与返回的分数

animal_present(noul)

  • true:图像中可见一只动物。
  • false:没有任何动物的场景。
{
  "type": "noul",
  "noul": 0.9854469299316406
}

animal_type(choice)

  • cat:一张猫的照片。
  • dog:一张狗的照片。
  • coyote:一张郊狼的照片。
  • bear:一张熊的照片。
  • other_animal:一张其他种类动物的照片。
  • no_animal:没有任何动物的风景。
{
  "type": "choice",
  "choice": "bear",
  "probabilities": {
    "cat": 4.2180534364888445e-05,
    "dog": 0.00014694735000375658,
    "coyote": 0.000802758033387363,
    "bear": 0.9885395169258118,
    "other_animal": 0.010174029506742954,
    "no_animal": 0.00029455311596393585
  },
  "confidence": 0.9620985402679022
}

垃圾桶收集

API 调用:240 毫秒,共 3 个问题。

Bin collection

陈述或问题 返回的答案
一张垃圾桶的照片。 是
垃圾桶处于什么状态? overflowing
垃圾桶周围的地板上散落着垃圾。 是

规则:bin_present 为真且 bin_condition 等于 overflowing。

返回的动作:request_collection。该动作是模拟的。

描述与返回的分数

bin_present(noul)

  • true:一张垃圾桶的照片。
  • false:一张空房间的照片。
{
  "type": "noul",
  "noul": 0.9997207522392273
}

bin_condition(choice)

  • empty:一个空的垃圾桶。
  • contained:一个整齐地装着垃圾的垃圾桶。
  • overflowing:一个垃圾满溢、堆在顶部并洒落到地板上的垃圾桶。
{
  "type": "choice",
  "choice": "overflowing",
  "probabilities": {
    "empty": 0.02629130892455578,
    "contained": 0.27365437150001526,
    "overflowing": 0.7000542879104614
  },
  "confidence": 0.3629010822262866
}

ground_litter(noul)

  • true:垃圾桶周围的地板上散落着垃圾。
  • false:垃圾桶周围干净整洁的地板。
{
  "type": "noul",
  "noul": 0.9977849721908569
}

围栏维修

API 调用:266 毫秒,共 3 个问题。

Fence repair

陈述或问题 返回的答案
一张金属围栏的照片。 是
围栏处于什么状态? damaged
围栏是什么材料制成的? other

规则:fence_present 为真且 fence_condition 等于 damaged。

返回的动作:create_repair_task。该动作是模拟的。

描述与返回的分数

fence_present(noul)

  • true:一张金属围栏的照片。
  • false:一张森林中植物的照片。
{
  "type": "noul",
  "noul": 0.9967530369758606
}

fence_condition(choice)

  • intact:一个笔直竖立、状况良好的金属围栏。
  • damaged:一个弯曲倒塌、倾倒在植被中的金属围栏。
  • unclear:一个大部分被植物遮挡、状况不明的围栏。
{
  "type": "choice",
  "choice": "damaged",
  "probabilities": {
    "intact": 6.503957411041483e-05,
    "damaged": 0.9995725750923157,
    "unclear": 0.00036233218270353973
  },
  "confidence": 0.9964272309629573
}

fence_material(choice)

  • metal:一个由铁条制成的金属围栏。
  • wood:一个由木板制成的木质围栏。
  • wire_mesh:一个由柔性铁丝网制成的围栏。
  • other:一个由其他材料制成的围栏。
{
  "type": "choice",
  "choice": "other",
  "probabilities": {
    "metal": 0.1567850559949875,
    "wood": 0.08964116871356964,
    "wire_mesh": 0.03200826793909073,
    "other": 0.7215655446052551
  },
  "confidence": 0.3851610518055971
}

林中的鸟

API 调用:317 毫秒,共 4 个问题。

Bird in the woods

陈述或问题 返回的答案
图像中可见一只鸟。 是
图像中可见一只鹰。 是
图像中可见一个人。 否
可见的是什么鸟? other_bird

描述与返回的分数

bird_present(noul)

  • true:图像中可见一只鸟。
  • false:没有任何鸟的场景。
{
  "type": "noul",
  "noul": 0.9660131335258484
}

eagle_present(noul)

  • true:图像中可见一只鹰。
  • false:没有鹰的场景。
{
  "type": "noul",
  "noul": 0.8165377378463745
}

human_present(noul)

  • true:图像中可见一个人。
  • false:森林中树木间的一只野鸟。
{
  "type": "noul",
  "noul": 0.0017106442246586084
}

bird_kind(choice)

  • eagle:一张鹰的照片。
  • hawk:一张鹰(隼形目)的照片。
  • owl:一张猫头鹰的照片。
  • other_bird:一张其他鸟类的照片。
  • no_bird:没有鸟的场景。
{
  "type": "choice",
  "choice": "other_bird",
  "probabilities": {
    "eagle": 0.051251474767923355,
    "hawk": 0.16163183748722076,
    "owl": 0.08185870200395584,
    "other_bird": 0.6947102546691895,
    "no_bird": 0.010547762736678123
  },
  "confidence": 0.4080094712923271
}

天空中的月亮

API 调用:233 毫秒,共 3 个问题。

Moon in the sky

陈述或问题 返回的答案
哪个天体可见? moon
天空中可见一架飞机。 是
图像中可见一棵树。 是

标题与返回的分数

sky_object(选择)

  • moon:蓝天中可见月亮。
  • sun:蓝天中可见太阳。
  • neither:蓝天中既无月亮也无太阳。
{
  "type": "choice",
  "choice": "moon",
  "probabilities": {
    "moon": 0.7818400859832764,
    "sun": 0.17475949227809906,
    "neither": 0.04340038076043129
  },
  "confidence": 0.4234408001266272
}

plane_present(noul)

  • true:天空中可见一架飞机。
  • false:天空中没有可见的飞机。
{
  "type": "noul",
  "noul": 0.7038407921791077
}

tree_present(noul)

  • true:图像中可见一棵树。
  • false:没有任何树木的场景。
{
  "type": "noul",
  "noul": 0.8658673763275146
}

露台上的猫

API 调用:234 毫秒,共 3 个问题。

Cat on a patio

陈述或问题 返回的答案
图像中可见一只猫。 是
可见多少只猫? one
一只猫正在睡觉或打盹。 否

标题与返回的分数

cat_present(noul)

  • true:图像中可见一只猫。
  • false:没有任何猫的场景。
{
  "type": "noul",
  "noul": 0.9102864265441895
}

cat_count(选择)

  • zero:没有猫的场景。
  • one:一只猫的照片。
  • multiple:两只或更多猫的照片。
{
  "type": "choice",
  "choice": "one",
  "probabilities": {
    "zero": 0.055449433624744415,
    "one": 0.7995275855064392,
    "multiple": 0.14502301812171936
  },
  "confidence": 0.4363100113079119
}

cat_napping(noul)

  • true:一只猫正在睡觉或打盹。
  • false:一只猫醒着,端坐并环顾四周。
{
  "type": "noul",
  "noul": 0.0040166135877370834
}

冷却架上的面包

API 调用:85 毫秒,共 1 个问题。

Bread on a cooling rack

陈述或问题 返回的答案
可见多少条面包? one

标题与返回的分数

bread_count(选择)

  • zero:没有面包的场景。
  • one:冷却架上的一条面包。
  • multiple:冷却架上的两条或更多面包。
{
  "type": "choice",
  "choice": "one",
  "probabilities": {
    "zero": 0.0010277321562170982,
    "one": 0.8948542475700378,
    "multiple": 0.10411805659532547
  },
  "confidence": 0.6886767894020007
}

树林中的水

API 调用:233 毫秒,共 3 个问题。

Water in the woods

陈述或问题 返回的答案
后院被积水淹没。 是
一条浅浅的溪流穿过树林区域。 是
什么最能描述这个水景? wooded_creek

标题与返回的分数

backyard_flooded(noul)

  • true:后院被积水淹没。
  • false:后院干燥,没有积水。
{
  "type": "noul",
  "noul": 0.8128588795661926
}

water_present(noul)

  • true:一条浅浅的溪流穿过树林区域。
  • false:干燥的森林地面覆盖着植物和倒下的树枝。
{
  "type": "noul",
  "noul": 0.9993311166763306
}

water_scene(选择)

  • flooded_yard:后院被水淹没,覆盖了草坪。
  • wooded_creek:一条小溪或溪流穿过树林区域。
  • dry_yard:干燥的后院,地面上没有水。
{
  "type": "choice",
  "choice": "wooded_creek",
  "probabilities": {
    "flooded_yard": 7.847583765396848e-05,
    "wooded_creek": 0.9998863935470581,
    "dry_yard": 3.519013989716768e-05
  },
  "confidence": 0.9988928978738509
}

露台上的动物

API 调用:514 毫秒,共 5 个问题。

Animals on a patio

陈述或问题 返回的答案
可见多少只动物? one
一张熊的照片。 否
一张郊狼的照片。 否
图像中可见一只动物。 是
可见什么种类的动物? cat

规则:animal_present 为真且 animal_type 等于 bear。

返回的动作:no_alarm。该动作是模拟的。

标题与返回的分数

animal_count(选择)

  • zero:没有动物的户外场景。
  • one:露台上的一只动物。
  • multiple:露台上一起的几只动物。
{
  "type": "choice",
  "choice": "one",
  "probabilities": {
    "zero": 0.04124877601861954,
    "one": 0.7521222233772278,
    "multiple": 0.2066289633512497
  },
  "confidence": 0.3887085165327596
}

bear_present(noul)

  • true:一张熊的照片。
  • false:一张猫的照片。
{
  "type": "noul",
  "noul": 0.03849371522665024
}

coyote_present(noul)

  • true:一张郊狼的照片。
  • false:一张猫的照片。
{
  "type": "noul",
  "noul": 0.052384644746780396
}

animal_present(noul)

  • true:图像中可见一只动物。
  • false:没有任何动物的场景。
{
  "type": "noul",
  "noul": 0.9874376654624939
}

animal_type(选择)

  • cat:一张猫的照片。
  • dog:一张狗的照片。
  • coyote:一张郊狼的照片。
  • bear:一张熊的照片。
  • other_animal:一张其他种类动物的照片。
  • no_animal:没有任何动物的风景。
{
  "type": "choice",
  "choice": "cat",
  "probabilities": {
    "cat": 0.8867677450180054,
    "dog": 0.01656363531947136,
    "coyote": 0.049020957201719284,
    "bear": 0.035501569509506226,
    "other_animal": 0.012059740722179413,
    "no_animal": 8.643681212561205e-05
  },
  "confidence": 0.7237879201664215
}

天气与停放的汽车

API 调用:191 毫秒,共 2 个问题。

Weather and parked cars

陈述或问题 返回的答案
可见什么天气? sunny
可见多少辆停放的汽车? two

标题与返回的分数

weather(选择)

  • sunny:晴朗的一天,蓝天无云。
  • rainy:下雨的一天,雨水落下。
  • cloudy:阴天,有灰色的云。
  • night:黑暗的夜晚场景。
{
  "type": "choice",
  "choice": "sunny",
  "probabilities": {
    "sunny": 0.9859010577201843,
    "rainy": 0.002233620034530759,
    "cloudy": 0.009337893687188625,
    "night": 0.0025274145882576704
  },
  "confidence": 0.9376820523920272
}

parked_car_count(选择)

  • zero:没有停放汽车的车道。
  • one:停放着一辆汽车的车道。
  • two:车道上停着两辆车。
  • three_or_more:车道上停着三辆或更多辆车。
{
  "type": "choice",
  "choice": "two",
  "probabilities": {
    "zero": 0.20297342538833618,
    "one": 0.25532975792884827,
    "two": 0.3041783571243286,
    "three_or_more": 0.23751848936080933
  },
  "confidence": 0.0076392976526203915
}

猫在窗边

API 调用:180 毫秒,用于 2 个问题。

Cat at a window

陈述或问题 返回的答案
图像中可见一只猫。 是
猫在看哪里? window

说明文字和返回的分数

cat_present(noul)

  • true:图像中可见一只猫。
  • false:没有任何猫的场景。
{
  "type": "noul",
  "noul": 0.8177101612091064
}

cat_gaze(choice)

  • camera:一只猫正对着并直视镜头。
  • window:一只猫望向窗外,呈侧面。
  • elsewhere:一只猫在房间内望向别处。
{
  "type": "choice",
  "choice": "window",
  "probabilities": {
    "camera": 0.00216315477155149,
    "window": 0.9727381467819214,
    "elsewhere": 0.02509867027401924
  },
  "confidence": 0.8792590849353216
}

这些示例的说明

  • 监控照片中包含多只动物。模型返回了 one。
  • 受损的栅栏是金属的。材质问题返回了 other。
  • 车辆计数问题返回了 two,获胜概率为 0.304。
  • 鸟的种类尚未核实。天空照片中可见凝结尾迹。林间水道通常的水位未知。
  • 否定式说明文字在测试期间产生了误报。具体的替代方案改善了若干结果。

这些规则使用 0.5 的 Noul 阈值,并要求获胜的 Choice 概率至少为 0.6。缺失或较弱的答案会产生未知的规则状态。分数未经校准。

来源:Hacker News · deepanwadhwa.github.io