准确度测试 · 2026 年 10 月
我们在 400 张餐食照片上测试了 Soba 的碳水估算
照片来自两个公开研究数据集,其中每餐的碳水均经过称重或记录。下文列出测试结果、测试方法,以及 Soba 估算出错的餐食。
68.5%的餐食仅凭一张照片,碳水估算与实际值相差不超过 10 克
+4个百分点:提示按研究记录准确写出食物名称后,相差不超过 10 克的餐食比例提高的幅度
5.2 克仅凭一张照片时的误差中位数
测试结果
本节的数字是 Soba 仅凭照片给出的首次估算,此时还没有人修改重量或添加提示。49% 的估算与实际碳水相差不超过 5 克。相差不超过 10 克的比例,其 95% 置信区间为 64.0% 至 72.9%。
小份和中份餐食的估算最接近实际值。碳水低于 15 克的餐食中,89% 的估算相差不超过 10 克。
大份餐食通常被低估。在 42 份碳水达到 60 克或以上的餐食中,有 38 份的估算偏低。估算值的中位数为实际值的 64%。主要原因是份量重量:在这 38 份餐食中,有 30 份 Soba 估算的食物重量比实际轻至少 15%,而每 100 克的碳水估算通常接近实际值。
使用 Soba 时需要注意什么
- 如果一大盘餐食中有面包、米饭、意面、土豆或披萨,请尽量称一下主要的含碳水食物。估算值达到 40 克或以上时,偏高和偏低的情况都有:84 份餐食中,32 份偏高超过 10 克,23 份偏低超过 10 克。
- 单个小份食物,如一块饼干或一片披萨,有时会被估算得比实际更重。
- 溶解在饮料中的糖在照片中看不出来。测试中,一杯甜冰茶被识别为无糖冰茶。请添加简短提示,例如“甜茶”,或扫描条形码。
- 包装食品可通过条形码获取标签上的营养数值。
在应用中可以补充的信息
以上结果仅基于一张照片。在应用中,你可以用几个字描述这餐饭;在配备深度摄像头的 iPhone 上,Soba 还会测量到食物的距离。我们分别加入这两项,重复了测试。
全部 400 张照片
带深度数据的 200 张食堂照片
文字提示
“甜茶”或“荞麦”这样的几个字,可以补充照片中看不出的信息。测试中,400 张照片都加上了提示,提示中写有数据集记录里主要食物的名称,不含用量,例如“Coffee, brewed; Coffee creamer, liquid, fat free”。相差不超过 10 克的比例从 68.5% 提高到 72.8%(提升幅度的 95% 区间:0.7 至 7.9 个百分点),误差中位数从 5.2 克降至 4.5 克。
照片可以有多种理解时,提示的作用最大。没有提示时,Soba 把那杯加了奶精的咖啡当成了焦糖酱,估算碳水为 162 克。有提示时,估算为 5.5 克,饮食记录中为 2.7 克。在 SNAPMe 中由参与者自己拍摄的餐食照片上,相差不超过 10 克的比例从 59.5% 提高到 67.5%。在食物清晰可见的食堂照片上,这一比例几乎没有变化:从 77.5% 到 78.0%。
提示写出了食物名称,但 Soba 仍根据照片判断用量。有提示时,42 份大份餐食中有 37 份被低估;没有提示时为 38 份。测试用的提示完全照搬数据集记录。大部分提升来自第一组 200 份餐食,为 8.0 个百分点;第二组仅为 0.5 个百分点。你自己输入的提示,带来的提升可能更小。
深度摄像头测得的距离
在配备 LiDAR 扫描仪或两颗及以上后置摄像头的 iPhone 上用 Soba 的相机拍照时,Soba 会测量到食物的距离,并告诉模型画面宽度是多少厘米。Nutrition5k 的每张照片都附有深度摄像头记录,因此我们加入这项测量,重复测试了其中的 200 份餐食。相差不超过 10 克的比例从 77.5% 提高到 82.0%(提升幅度的 95% 区间:1.0 至 8.3 个百分点),误差中位数从 3.9 克降至 3.1 克。大份餐食仍被低估,13 份中有 12 份。这些照片都是从固定高度垂直俯拍的。倾斜拍摄的照片我们还没有测试。
同时使用深度测量和提示时,结果为 78.5%。在这些食堂照片上,提示能补充的信息很少。与仅用深度相比,差值的 95% 区间为 −8.8 至 +1.5 个百分点,包含零。
你的修改
如果你知道份量的重量,请输入,所有数值都会重新计算。在本次测试中,份量重量是大误差的主要原因。
Soba 会在每项估算旁显示重量范围。在 200 份已称重的 Nutrition5k 餐盘中,有 97 份的实际重量落在这个范围内,约占一半。这个范围表示模型预计重量所在的区间。最可靠的方法是用厨房秤称一下。
按餐食大小分组的结果
| 实际碳水 | 餐食数 | 相差不超过 10 克 | 相差不超过 20 克 | 误差中位数 |
|---|---|---|---|---|
| 低于 15 克 | 167 | 88.6% | 98.8% | 2.0 克 |
| 15 至 30 克 | 94 | 69.1% | 88.3% | 6.2 克 |
| 30 至 60 克 | 97 | 54.6% | 84.5% | 8.4 克 |
| 60 克或以上 | 42 | 19.0% | 38.1% | 25.4 克 |
总体结果取决于这一构成:测试餐食中有 42% 的碳水低于 15 克。如果你平时吃的份量更大,典型误差也会更大。
这些分组按实际碳水划分,而识别时应用并不知道实际碳水。如果按 Soba 自己的估算分组,有 84 份餐食的估算达到 40 克或以上,其中 55 份相差超过 10 克:32 份偏高,23 份偏低。因此,当估算达到 40 克时,应用会建议你称一下主要的含碳水食物。
测试中的四份餐食
两份估算接近,两份出错。Soba 给出的食物名称和重量取自它的回答。
照片:Nutrition5k 数据集,Google Research,CC BY 4.0。已为本页调整尺寸。
两个数据集,两类照片
| 数据集,各 200 份餐食 | 相差不超过 10 克 | 误差中位数 | 平均误差 |
|---|---|---|---|
| Nutrition5k | 77.5% | 3.9 克 | 6.8 克 |
| SNAPMe | 59.5% | 6.8 克 | 12.2 克 |
Nutrition5k 的餐盘来自 Google 的食堂。每种食材都经过称重,每张照片都由固定相机垂直俯拍。拍摄条件很规整,Soba 在这组照片上的结果最好。
SNAPMe 是美国农业部和加州大学戴维斯分校的一项研究。美国的 95 名参与者在用餐前拍下自己的餐食,并用膳食评估工具 ASA24 记录饮食。这些照片与人们用 Soba 拍的照片相似。参考值来自参与者的饮食记录,这些记录本身也有误差。两个数据集之间的差距,一部分来自照片,一部分来自参考值。
与已发表研究的比较
Rodríguez-Jiménez 等人(Nutrients, 2025)仅用照片在 74 份 SNAPMe 餐食上测试了 ChatGPT-5。他们报告的碳水平均绝对误差为 12.99 克,中位数为 8.75 克。
| 仅照片 | 餐食数 | 平均误差 | 误差中位数 |
|---|---|---|---|
| ChatGPT-5(已发表) | 74 | 12.99 克 | 8.75 克 |
| Soba | 200 | 12.2 克 | 6.8 克 |
该研究的作者选取餐食的方式不同,并手动修正了部分参考值,因此这两行只能粗略比较。两者的误差水平相近。在同一研究中,补充一句关于餐食中脂肪、糖和肉类的简短说明后,平均误差降至 11.29 克。在 Soba 中,写出食物名称的提示使 200 份 SNAPMe 餐食的平均误差从 12.2 克降至 10.2 克。
Soba 使用哪个模型
我们用 Soba 的指令,在第一组 200 份餐食上测试了八个模型。
| 模型 | 相差不超过 10 克 | 时间中位数 |
|---|---|---|
| Google Gemini 3.7 Flash | 73.0% | 3.7 秒 |
| Google Gemini 3.8 Flash | 71.5% | 4.8 秒 |
| Google Gemini 3.5 Flash-Lite | 69.0% | 2.1 秒 |
| Google Gemini 3.6 Flash | 67.5% | 3.3 秒 |
| OpenAI GPT-6 Luna | 65.0% | 6.9 秒 |
| OpenAI GPT-6 Luna Pro | 63.0% | 11.7 秒 |
| OpenAI GPT-6.1 Sol | 58.0% | 13.1 秒 |
| Anthropic Claude Sonnet 5.5 | 53.0% | 6.0 秒 |
每个模型通过 OpenRouter 运行一次,使用 Soba 在 2026 年 10 月之前的请求设置。通过 OpenRouter 选择的服务商,Claude Sonnet 5.5 在 200 张照片中有 41 张返回了空的食物项。在其余照片上,它的结果为 66.7%。GPT-6.1 Sol 平均高估碳水 10 克。
Gemini 3.7 Flash 在这 200 份餐食上排名第一。在八个模型的一次比较中胜出,往往会让模型看起来比实际更好,所以我们在第二组 200 份餐食上又做了检验。在第二组中,它与 Gemini 3.6 Flash 的结果相同,都是 70.5%,但价格更高。Soba 继续使用 Gemini 3.6 Flash。
我们还尝试给 Gemini 3.6 Flash 更多推理时间。在 400 份餐食上,相差不超过 10 克的比例提高了 4.1 个百分点,而相差不超过 5 克的比例和超过 30 克的误差数量保持不变。每次识别的时间增加一倍,从 3.5 秒增加到 6.6 秒。我们保留了速度更快的设置。
完整比较,包含 95% 区间、每餐数据和可重新计算每张表的脚本:用餐食照片比较 8 个 AI 模型(英文)。
测试方法
选取餐食
初始样本包括 Nutrition5k 官方俯拍照片测试集中的 505 份餐盘,以及 SNAPMe 中 1,457 张餐前拍摄的照片。在此之前,我们剔除了 22 条记录:数值无效的餐盘和餐食,以及无法与唯一一条饮食记录对应的 SNAPMe 照片。
脚本使用固定的随机种子,从每个数据集中各选取 100 份餐食:在碳水范围的每个四分位区间中各选 25 份。同一个十分钟内拍摄的食堂餐盘往往看起来相似,所以脚本限制了从同一个十分钟时段中选取的餐盘数量。随后,脚本用同样的方法选出第二组 200 份餐食,与第一组没有重复的照片或餐食。
两组餐食
我们只在第一组 200 份餐食上分析误差,并尝试修改 Soba 的指令。第二组 200 份用来检验结果是否成立。上文 Gemini 3.7 Flash 的结果就是这样发现的。
运行 Soba
每张照片都经过应用所用的同一套服务器代码:相同的指令、模型和设置。照片的长边缩小到 1,024 像素,与应用发送前的处理相同。主测试中没有文字提示、没有深度摄像头数据,事后也没有修改。带提示或深度数据的测试使用同一套代码,只改变这一项输入。应用语言设为俄语。
误差的计算
Soba 分别给出净碳水(不含膳食纤维)和膳食纤维。数据集给出的是总碳水,所以我们把 Soba 的净碳水加膳食纤维与总碳水进行比较。主要指标是差值不超过 10 克的餐食比例。识别失败会计为未达标,本次测试中没有出现。95% 区间来自 10,000 次重抽样的自助法(bootstrap),同一名 SNAPMe 参与者的餐食,或同一个十分钟食堂时段的餐食,在重抽样时放在一起。
本次测试的局限
- 所有餐食均来自美国。Nutrition5k 的餐盘都用同一套相机设置垂直俯拍。
- 参考值本身有误差。SNAPMe 的数值来自参与者自行填写的饮食记录。部分 Nutrition5k 餐盘的标注漏掉了照片中可见的食物。
- 我们测试的是照片识别。文字描述、条形码查询和手动输入不在测试范围内。
- 测试提示完全按数据集记录写出食物名称,而且提示带来的提升在两组餐食之间差别很大(见“文字提示”)。
- 深度测量的结果只涵盖 200 张 Nutrition5k 照片,全部为垂直俯拍。
- 我们测试的是碳水。蛋白质、脂肪和热量不在本页范围内。
- 模型服务商会更新模型。本页结果反映的是 2026 年 10 月的 Soba。
Soba 不属于医疗器械。它给出的数值均为估算。请对照餐盘中的食物和食品标签核对,并遵循你的糖尿病管理方案。
测试后的改动
- Soba 来自 OpenAI 的备用模型此前无法运行。OpenAI 的模型不接受其中一项请求设置(temperature),而请求只允许接受所有设置的服务商。我们删除了这项设置。主模型有这项设置时的结果为 68.9%,删除后为 68.5%,在重复运行的正常波动范围内。现在的备用模型是 Gemini 3.7 Flash 和 GPT-6 Luna。
- 在 3,614 次测试请求中,有 9 次(0.25%)Gemini 反复输出同一句话,识别耗时 35 至 87 秒。Soba 现在限制了回答的长度,能更早结束这种循环。
数据与参考资料
每餐结果(CSV,400 行,英文):数据集 ID、参考碳水、Soba 仅凭照片的估算、提示文字,以及有提示和有深度数据时的估算。该文件遵循 SNAPMe 的许可协议 CC BY-SA 4.0。
- Thames Q, Karpur A, Norris W, et al. Nutrition5k: Towards Automatic Nutritional Understanding of Generic Food. CVPR 2021. arXiv:2103.03375. 数据集:github.com/google-research-datasets/Nutrition5k,CC BY 4.0。
- Larke JA, Chin EL, Bouzid YY, et al. Surveying Nutrient Assessment with Photographs of Meals (SNAPMe): A Benchmark Dataset of Food Photos for Dietary Assessment. Nutrients. 2023;15(23):4972. PMC10708545. 数据:USDA Ag Data Commons,CC BY-SA 4.0。
- Rodríguez-Jiménez et al. Image-Based Dietary Energy and Macronutrients Estimation with ChatGPT-5: Cross-Source Evaluation Across Escalating Context Scenarios. Nutrients. 2025;17(22):3613. PMC12655113.