Bezel Logo

构建一个能够自我改进的 Agentic Image Generator

Palash Shah 2025年5月15日

背景

在 Bezel,我们为大型品牌创建 personas(用户画像),并帮助他们对其内容进行模拟。在这个过程中,品牌开始要求我们生成针对其客户量身定制的广告灵感。

首先,我们使用 OpenAI Image API 来生成和编辑图像。它有两个主要的 endpoint:

此外,我们使用了一组 LLMs 作为 evaluators(评估器),使用各种方法来检测图像中的问题:

方法论

我们的目标是构建一个能够自动提高 OpenAI API 生成的图像质量的系统。为此,我们需要一个强大的 evaluator 来检测缺陷,例如扭曲的文本或较弱的视觉吸引力,以及一个迭代反馈循环,以便每次迭代都改进图像。

定义一个初始 Prompt

我们首先定义一个初始 prompt 来生成我们的广告。如下所示,我们确定了一个 prompt,其中包含图像生成模型创建的各种不同的、具有挑战性的组件。

一个 Redbull 夏季活动的广告。它应该包含多种口味的 RedBull,周围有很多颜色。图像应该位于旧金山的一个屋顶上,很多人像参加派对一样社交。在右下角以纯文本形式包含一个折扣代码。

我们发现 gpt-image-1 很难从这个 prompt 生成高质量的图像。虽然总体概念存在,但结果感觉像是一种模糊的抽象。不同的视觉元素似乎压倒了模型详细渲染每个元素的能力。

方法 1:LLM-as-a-Judge 用于文本改进

文本模糊检测

LLM-as-a-Judge(LLM 作为评判者)首先被选为模糊和扭曲文本的评估方法。我们首先提示 o3 来识别最初生成的图像中的差异。

我们从上面的 prompt 中获取输出图像,并请求 o3 识别图像中与文本模糊或扭曲相关的所有问题。输出看起来像一系列特定问题,例如:

橙色罐:假设的风味名称('PEACH')以一种细而粗糙的风格呈现,与背景融为一体;大多数字母不完整或缺失,因此文本不可读。

LLM as a judge

LLM-as-a-judge 实现

迭代编辑图像

在存储了所有生成的问题后,我们使用原始图像和此问题列表来提示 /edit endpoint。以下是我们了解到的关于检测和修复这些问题的所有内容:

function detectAndFixIssues(image, prompt) {
 let currentImage = image;
 while (const issue = askLLM("Find ONE issue", currentImage)) {
  currentImage = editImage(currentImage, issue);
 }
 return currentImage;
}

通过 LLM 作为评判者,我们能够非常一致地在多次迭代中改进图像的文本模糊度。迭代次数通常徘徊在 3 次左右,具体取决于图像的复杂性。我们还发现,在 3 次迭代后,改进达到了一个平台期,表明该模型的能力存在技术上限。

扩展到文本之外:构图和吸引力

现在我们已经成功创建了一个 evaluator 来检测文本中的问题,我们希望转移到更抽象的问题。我们将要添加 evaluator 来检测的两个问题是:

下面显示了 evaluator 的一个示例输出:

Example of blurry text in generated image

需要改进的模糊文本示例

  1. 文本清晰度:罐上的产品文本不完全清楚。字母显得扭曲,难以阅读品牌和风味信息。确保字体清晰易读,并与罐的背景形成足够的对比。2. 模糊度:以人和天际线为特色的背景略微失焦,这可能是为了突出罐而有意为之。但是,如果罐是主要产品,则对罐的聚焦应该更清晰。确认产品是焦点。4. 图像构图:虽然大多数文本都在框架内,但要确保每个罐上的品牌标识都完全可见且未被切断。考虑重新定位罐或调整视角。5. 整体吸引力:色彩鲜艳的粉末效果增加了视觉吸引力,但要确保它不会掩盖产品本身或分散人们的注意力。

现在的输出包括图像扭曲的地方、对图像构图和定位的观察,以及对一组 personas 的吸引力。

结果与局限性

结果很差。我们的假设如下。

我们认为该模型遇到困难,因为它被要求同时执行两项根本不同的任务:一项是创造性的——改善图像构图并与目标 personas 保持一致——另一项是技术性的——增强文本元素的像素级清晰度。

为了证明这一假设,我们设计了一种辅助方法。在这种方法中,我们将从低质量的生成开始,并使用 evaluator 来修复文本清晰度问题。然后,我们将进行 upscale(放大),并创建一个单独的 LLM-as-a-judge 来修复图像构图问题。

Final evaluation flow

顶部工作流程是文本校正器,底部是质量模块。

Gemini bounding box detection

初始图像

OpenAI bounding box detection

中间图像

Final image flow

最终的 upscale 图像

事实证明,这种方法更加有效。

方法 2:Bounding Box(边界框)方法

我们发现在使用 LLM-as-a-Judge 进行文本模糊时,图像修改不仅限于 evaluator 列举的问题。它经常改变图像的其他部分。

文本模糊检测

为了识别模糊文本,我们提出了一种替代方法,即要求推理模型生成文本问题的 bounding boxes。然后,我们将这些 boxes 作为 masks 提供给 OpenAI API 的 edit endpoint,以修改相关区域。

Bounding box approach

Bounding box 方法

用于此目的的 prompt:描述此图像中模糊的文本,并以 JSON 格式提供其 bounding boxes。文本应该是模糊且无法阅读的。这些是需要改进的文本。JSON 应该是一个包含“description”(字符串)字段和一个“objects”(数组)字段的对象。“objects”数组中的每个对象都应该有一个“label”(字符串)字段和一个“box”字段(包含 4 个整数的数组 [x_min, y_min, x_max, y_max])。假设 box 坐标相对于图像尺寸(0-1 比例)。JSON 结构示例:

{ "description": "...", "objects": [ {"label": "...", "box": [x_min, y_min, x_max, y_max]}, ... ] }

包括图像的尺寸以及 bounding box 的输出格式 [x_min, y_min, x_max, y_max]。我们首先使用 o3 对此进行测试,结果很差。为了验证这是否是一个可以推广到其他 LLMs 的问题,我们也使用 gemini-2.5-flash-preview-04—17 进行了测试。

结果与局限性

Gemini bounding box detection

gemini-2.5-flash bounding box 检测

OpenAI bounding box detection

o3 bounding box 检测

很明显,LLMs 无法产生强大的像素关联。LLM 能够始终如一地识别图像中在自然语言中准确的问题,但很难将其转换为图像平面上的点。例如:

品牌名称显示拼写错误('PodBul'),字符在 box:[706, 634, 860, 808] 处略有模糊和扭曲(相对值:[0.46, 0.62, 0.56, 0.79])

在上面的示例中,拼写错误被正确检测到。但是,bounding box 坐标不准确,因为它们没有完全捕获有问题的文本。

Bounding box as a transparent mask

Bounding box 作为透明 masks

由于 bounding boxes 的不准确,将它们作为 mask 提供给 OpenAI API 的 edit endpoint 是无效的。出于本报告的目的,我们省略了这种方法的其他方法。

结论

我们对 agentic image generation 的探索揭示了关于多模式 evaluators 和 editors 的很多信息。

虽然 LLMs 在自然语言推理视觉缺陷方面表现出强大的能力,特别是在语义级别的缺陷,例如难以辨认的文本或扭曲的品牌标识,但它们很难将这些高级见解映射到精确的像素空间操作中。这在需要空间准确性的任务中尤为明显,例如 bounding box 生成或本地化 masks。

我们发现,当推理被限制在离散的、范围明确的维度时,LLMs 表现出色,但当被要求平衡抽象的美学判断与确定性的像素级校正时,它们的性能会下降。这种不匹配表明 LLMs 在桥接符号理解和空间基础方面存在脱节,尤其是在需要 surgical image edits(精细图像编辑)的迭代工作流程中。

LLM-as-a-Judge 应该是图像生成的多模式评估中的首选方法。我们正处于图像生成新时代的开端,我们可以提供模型所走的道路,并观察它们迭代地改进。

Palash Shah Kashyap Achar

© 2025 Bezel Research。版权所有。 引用为:Bezel Research Team。(2025)。Agentic Image Generation 指南。Bezel Research Papers。