Ollama视觉模型实测

我简单地拍了几张营养标签的照片,并使用提示转换为 JSON。然后我针对一堆自托管模型和 Mistral Open API 进行了测试。它们都表现得相当好,但 Mistral API 是最好的。

你知道,击败基准测试是一回事。但基准测试通常是自我报告的随机变量,就像驾照考试和驾驶并不完全一样,它们不能保证给定的现实生活问题会以可行的方式解决。这就是为什么我想给它一个真实的测试用例。

测试很简单:我拍了一堆营养标签的照片,就像下面这张:

视觉模型在将其转换为 JPEG 方面有多好?

我尝试提取以下格式的 JSON:

复制代码
{
  "calories": 180,
  "serving_size": 28.0,
  "unit": "g"
}

我使用的提示:

复制代码
The image is the label of a packaged food product.

Extract the following information from the nutrition facts label and return ONLY a JSON object with no additional text:

- calories: total calories per serving (integer)
- serving_size: numeric serving size value (float)
- unit: unit of measurement for serving size (string, e.g., "g", "ml", "oz", "cup")

Use this exact format:
```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "calories": {
      "type": "integer",
      "description": "Total calories per serving"
    },
    "serving_size": {
      "type": "number",
      "description": "Numeric serving size"
    },
    "unit": {
      "type": "string",
      "description": "Unit of measurement (e.g., g, ml, oz, cups)"
    }
  },
  "required": ["calories", "serving_size", "unit"]
}

Example:

json 复制代码
{
  "calories": 180,
  "serving_size": 28.0,
  "unit": "g"
}

If any value cannot be determined from the label, use null for that field.

复制代码
我运行同样的东西 50 次,看看是否能得到期望的结果。

我使用的评估标准:

prompt_path: ".../prompts/calories_and_serving_size.md"

repeat: 50

threshold: 0

cases:

  • id: calories-label-180

    steps:

    • input:
      image_path: "images/IMG_B768CE83-9FEC-461A-BE63-CDDF64EBEB58.jpeg"
      max_tokens: 64
      expectations:
      • type: equals
        value:
        calories: 180
        serving_size: 40.0
        unit: g
  • id: calories-label-harvest-trail-mix-1

    steps:

    • input:
      image_path: "images/IMG_3236.HEIC"
      max_tokens: 64
      expectations:
      • type: oneOf
        values:
        • calories: 220
          serving_size: 50.0
          unit: g
        • calories: 220
          serving_size: 0.5
          unit: cup
        • calories: 220
          serving_size: 50.0
          unit: grams
  • id: calories-label-chunky-supreme-granola-exact

    steps:

    • input:
      image_path: "images/IMG_3228.HEIC"
      max_tokens: 64
      expectations:
      • type: equals
        value:
        calories: 630
        serving_size: 140.0
        unit: g
  • id: calories-label-maple-eh-granola-exact

    steps:

    • input:
      image_path: "images/IMG_3231.HEIC"
      max_tokens: 64
      expectations:
      • type: equals
        value:
        calories: 570
        serving_size: 130.0
        unit: g
  • id: calories-label-harvest-trail-mix-2

    steps:

    • input:
      image_path: "images/IMG_3232.HEIC"
      max_tokens: 64
      expectations:
      • type: oneOf
        values:
        • calories: 220
          serving_size: 50.0
          unit: g
        • calories: 220
          serving_size: 0.5
          unit: cup
        • calories: 220
          serving_size: 50.0
          unit: grams
  • id: calories-label-harvest-trail-mix-3

    steps:

    • input:
      image_path: "images/IMG_3237.HEIC"
      max_tokens: 64
      expectations:
      • type: oneOf
        values:
        • calories: 220
          serving_size: 50.0
          unit: g
        • calories: 220
          serving_size: 0.5
          unit: cup
        • calories: 220
          serving_size: 50.0
          unit: grams
  • id: calories-label-hersheys-christmas-cookies-exact

    steps:

    • input:
      image_path: "images/IMG_3276.HEIC"
      max_tokens: 64
      expectations:
      • type: equals
        value:
        calories: 200
        serving_size: 41.0
        unit: g
  • id: calories-label-mnm-mint-chocolate-candy-1

    steps:

    • input:
      image_path: "images/IMG_3279.HEIC"
      max_tokens: 64
      expectations:
      • type: oneOf
        values:
        • calories: 190
          serving_size: 40.0
          unit: g
        • calories: 220
          serving_size: 0.25
          unit: cup
  • id: calories-label-hersheys-candy-cane-kisses

    steps:

    • input:
      image_path: "images/IMG_3280.HEIC"
      max_tokens: 64
      expectations:
      • type: equals
        value:
        calories: 220
        serving_size: 42.0
        unit: g
  • id: calories-label-milk-chocolate-christmas-balls

    steps:

    • input:
      image_path: "images/IMG_3282.HEIC"
      max_tokens: 64
      expectations:
      • type: oneOf
        values:
        • calories: 200
          serving_size: 40.0
          unit: g
        • calories: 200
          serving_size: 6.0
          unit: pcs
        • calories: 200
          serving_size: 6.0
          unit: pieces
  • id: calories-label-mnm-mint-chocolate-candy-2

    steps:

    • input:
      image_path: "images/IMG_3284.HEIC"
      max_tokens: 64
      expectations:
      • type: oneOf
        values:
        • calories: 190
          serving_size: 40.0
          unit: g
        • calories: 220
          serving_size: 0.25
          unit: cup
  • id: calories-label-jumbo-sour-sukkers

    steps:

    • input:
      image_path: "images/IMG_3286.HEIC"
      max_tokens: 64
      expectations:
      • type: equals
        value:
        calories: 150
        serving_size: 40.0
        unit: g
      • type: oneOf
        values:
        • calories: 150
          serving_size: 40.0
          unit: g
        • calories: 150
          serving_size: 2.0
          unit: pcs
        • calories: 150
          serving_size: 2.0
          unit: pieces
  • id: calories-label-quality-street

    steps:

    • input:
      image_path: "images/IMG_3288.HEIC"
      max_tokens: 64
      expectations:

      • type: oneOf
        values:
        • calories: 200
          serving_size: 42.0
          unit: g
        • calories: 200
          serving_size: 5.0
          unit: pcs
        • calories: 200
          serving_size: 5.0
          unit: pieces

      不再废话,以下是结果:

      测试用例的平均模型准确度让我们分解一下:我认为 Llava 失败了。我认为 Llava 是一个 OCR 模型,旨在像 DeepSeek-OCR 一样使用。这些模型不属于这里,它们不遵循像"以 JSON 格式输出"这样的具体指令。

      第二个学习是:Qwen3,8B 参数,在 16GB-VRAM 机器上工作得很好。但是,在现实设置中,它们可能并没有比在更小机器上也能工作的 Qwen3:2B 带来太多 ------ 它们可能即使在 6GB VRAM 上也能正常工作。使用 8B 来实现与统计噪音无法区分的性能提升可能是不可行的。

      另一个观点是,Qwen3:2B 似乎比 Qwen3:4B 更好。我不知道这是否真的是改进,或者只是统计波动。我目前的想法是:如果应用程序实际上需要一个小窗口,那么增加上下文窗口确实没有意义。不仅会增加成本,实际上可能还会降低性能。

      最后一个学习:托管 Ollama 时,打开流式传输!否则,当请求超过 60 秒时,请求会被丢弃。我听说这是可定制的,但默认为流式传输可能更容易,尽管需要额外的代码。


      原文链接:Ollama视觉模型实测 - 汇智网

相关推荐
Geeys2 分钟前
拼多多店铺怎么运营才能有订单?新手低成本出单攻略
大数据·网络·人工智能
艾莉丝努力练剑6 分钟前
【AI大模型接入SDK】ChatSDK架构设计与实现
网络·c++·人工智能·学习·语言模型
Data-Miner7 分钟前
做表格数据分析的AI工具怎么选?先对一下这三个真实需求,再看哪些真能落地
人工智能·数据分析·excel
闭包不眠17 分钟前
网站支持HEIC上传要多大解码器?gzip后510KB
图像处理·人工智能·计算机视觉
Leo.yuan30 分钟前
从 DataX 到 Informatica,再到国产一体化平台:2026 年企业数据集成平台怎么选
人工智能
叠层归一研究院33 分钟前
区分预算与通道诱导:Ω–L叠层体系的观测赋值与定量验证
人工智能·算法
知几蜗牛41 分钟前
AI权限写进JSON就安全了吗?真正缺的是配置生效验证
人工智能
知几蜗牛43 分钟前
大模型会规划,为什么人形机器人还站不稳?关键是双层控制
人工智能
爱签AI电子合同1 小时前
电子合同上手成本怎么测?易用性维度专项测评
服务器·人工智能·智能合约·企业微信
知几蜗牛1 小时前
多发一点CSS,页面反而更快:GitHub大规模样式迁移的真正方法
人工智能