生产级 AI 流水线中的视觉输入:无人记录的预处理决策
你的视觉模型在评估套件上跑出了 90% 以上的分数。接着,真实用户上传了实体文档的照片、低 DPI 显示器的屏幕截图,以及经过三次传真机往返扫描的 PDF。准确率骤降。模型“正常运行”——它返回了连贯的响应——但在没有已知标准答案(ground truth)的情况下,这些响应的错误方式很难被察觉。你将其归咎于“模型限制”并继续前进。
模型本身可能不是问题,输入流水线才是。
大多数构建视觉大语言模型(Vision LLMs)的团队在提示词工程(prompt engineering)和模型选择上投入了巨大精力,而在图像到达模型之前的预处理上几乎投入为零。这种不对称正是生产环境质量崩盘的根源。那些无人记录的预处理决策,也是导致生产环境多模态系统准确率无声下降的最大元凶。
分辨率:无声的 Token 预算权衡
每个视觉模型供应商都有分辨率预算,且处理方式各不相同。Claude 会对长边超过 1.15 megapixels (1568px) 的图像进行降采样。GPT-4o 会将图像放入 2048×2048 的边界框中,将短边缩放至 768px,然后切分成 512×512 的分块(tiles)。Gemini 则有自己的切分流水线。同一张 2048×2048 的图像在 Claude 上大约消耗 1,590 个 token,在 GPT-4o(高细节模式)上消耗 1,105 个 token,而在 Gemini 上大约只需 280 个 token——这种实现细节掩盖了 5 倍的成本差异。
成本差异的重要性次于像素的变化。当供应商在后台悄悄缩小你的输入尺寸时,你无法得知哪些信息被丢弃了。对于名片的照片,缩放可能会抹除电话号码。对于医疗扫描,它可能会抹平你需要模型检测到的病变。Claude 的 API 文档指出,任何边长低于 200px 的图像“可能会降低输出质量”——但这种失效模式并不是报错,而是给出一个听起来合理但错误的响应。
MME-RealWorld 基准测试(ICLR 2025)使用了 13,366 张真实世界的图像(平均分辨率为 2,000×1,500px),结果发现即使是表现最好的模型,在高清真实场景下的准确率也难以突破 60%。而这些模型在传统基准测试中几乎达到了饱和。这种差距主要不在于模型能力,而在于干净的基准测试图像分布与用户实际产生的图像分布之间的不匹配。
该怎么做: 在将图像传递给 API 之前,先自行预缩放图像。设定明确的目标百万像素上限,通过信箱模式(letterboxing/padding)保持长宽比,并记录原始尺寸和输出尺寸。当你控制缩放时,你知道丢弃了什么。而当供应商代劳时,你并不知道。
压缩伪影:不是你想的那个问题,而是 你忽略的那个
当团队遇到视觉质量问题时,首先调查的通常是 JPEG 压缩,但它往往不是主因。Vision Transformers 在 JPEG 质量因子为 85 时仍能保持 98% 以上的分类准确率,而在质量因子为 80 时,在标准分类基准测试中的下降最多只有 1.22 个百分点。在正常的 Web 质量设置下,JPEG 压缩是次要问题。
真正的核心问题是模糊,特别是来自移动端拍照的运动模糊。深度神经网络对模糊和噪声的敏感度远高于对 JPEG 压缩伪影或对比度变化的敏感度——这一结论从图像分类器延伸到了视觉语言模型。当用户在移动中用智能手机拍摄实体文档时,产生的模糊比上传流水线可能应用的任何压缩都更具破坏性。
第二个压缩问题具有不同的特性:OCR 任务中的压缩悬崖。在 10 倍压缩比下能达到 97% 字符级准确率的 OCR 系统,在 20 倍压缩比下准确率可能会骤降至 60%。这不是渐进式的退化,而是一种阈值效应。一个在网页截图和扫描 PDF 上表现良好的流水线,在处理从本身就是有损源生成的打印输出图像时,可能会发生灾难性的失败。
该怎么做: 在流水线处理的每张图像上记录模糊指标(拉普拉斯方差是一个廉价且有效的代理指标)。设置一个阈值,低于该阈值则拒绝输入、请求重新拍摄或降低对模型输出的置信度。模糊是可测量的且计算成本低廉;不测量它意味着你在面对最大的输入质量衰减因素时是在盲目飞行。
长宽比处理:无声累积的不匹配
标准的建议是使用信箱模式(填充)而非拉伸图像至目标尺寸。这种推理是正确的——拉伸会引入系统性的形状畸变,影响所有需要比例推理的任务。但真实世界的失效模式比“拉伸 vs 填充”更微妙。
问题在于一致性。如果你的训练或微调数据使用了一种长宽比策略进行预处理,而你的推理流水线使用了另一种,那么模型在推理时看到的输入在分布上是系统性偏差的。这很容易意外引入:微调数据是由数据科学团队使用默认拉伸的库预处理的;而推理流水线是由工程团队编写的,他们独立选择了填充。这两个选择单独看都是合理的,但结合起来就是一个无声的倒退。
GPT-4o 的分块流水线引入了一个相关问题:不寻常的长宽比可能会将具有语义重要性的区域切割到不同的分块边界。一张宽大的数据表格截图可能会从表头中间横向切断。模型接收到两个分块,每个看起来都很连贯,但却丢失了让原始图像具有可解释性的结构上下文。
该怎么做: 确定一种长宽比处理决策,并在训练、评估和推理中始终如一地执行。将其视为 API 合约:aspect_ratio_strategy: letterbox | pad_color: white | target: 1024x1024。如果你正在使用供应商的分块流水线且无法控制分块边界,请意识到宽全景图像和长文档扫描是风险最高的长宽比。
OCR 预处理:将文本故障与视觉故障解耦
生产环境中最常见的视觉故障类别是文档图像中的文本提取。这种故障模式的代价尤其高昂,因为模型的响应通常看起来是正确的——语法通顺、格式得体——但却包含错误的数字或读错的字符,而这些问题只有在下游环节才会暴露出来。
可靠的 OCR 需要至少 300 DPI 的有效分辨率。移动端拍摄的纸质文档通常只有 72–150 DPI 的有效分辨率。低于这个阈值,无论模型能力如何,字符级识别都会变得不可靠。故障的原因并非模型缺乏 OCR 能力,而是输入的信息不足以恢复文本。
PreP-OCR 流水线研究表明,纠偏(deskewing)、降噪(denoising)和对比度增强是在将文档图像传递给视觉语言模型之前的必要步骤。这些不是可选的质量改进,而是“可处理输入”与“不可处理输入”之间的本质区别。一份倾斜 3 度且光照不均的扫描文档,在预处理后可以被正确读取,而没有预处理则会完全失败。
这里的实际工程模式是将文本识别故障与结构化理解故障解耦。对文档图像运行传统的 OCR 处理(如 Tesseract 或商业服务),并将原始图像和提取出的文本同时传递给视觉模型。这会为你提供两个独立的故障信号:如果 OCR 文本是乱码,说明输入质量有问题;如果 OCR 文本清晰但模型响应错误,说明模型推理有问题。没有这种区分,你就是在调试一个黑盒。
