650. Drawing with LLMs | drawing-with-llms
我们(@cnumber 和 @daiwakun)想要感谢主办方不断改进指标,使本次竞赛变得有趣且有意义。在进入本次竞赛之前,我们对图像生成知之甚少,但我们学到了很多。
[最终提交代码]
解决方案描述如下
由 FLUX.1-schnell 生成的原始图像
.png?generation=1748396425784049&alt=media)
由 vtracer 生成的原始 SVG 图像
.png?generation=1748396445969721&alt=media)
迭代优化后的 SVG 图像
.png?generation=1748396464177345&alt=media)
迭代优化后经 ImageProcessor 处理的 SVG 图像(用于 VQA 评估的最终图像)

我们很高兴分享我们在"Drawing with LLMs"竞赛中获得第三名的方法。本次竞赛挑战我们根据文本提示生成可缩放矢量图形 (SVG),同时遵守严格的大小和内容约束,并最大化视觉保真度和美学吸引力。我们的解决方案是一个多阶段管道,结合了强大生成模型、矢量化工具和可微分图形渲染的优势。我们很自豪能够展示我们的解决方案,它没有利用文本嵌入来作弊欺骗 VQA 评估器!
我们的核心思路是首先生成捕捉提示词本质的高质量位图图像,将其转换为初始 SVG,然后迭代优化此 SVG,以提高其对提示词的忠实度、美学质量以及对竞赛 VQA 指标的遵循度,同时尊重输出约束。
以下是各阶段的分解:
位图生成 (Flux):
flux.1-schnell) 来生成候选位图图像。'{description}' (原始提示词)'Beautiful illustration of "{description}"''Simple svg illustration of "{description}", with colorful background, beautiful background.''Simple svg illustration of "{description}", with background of minimal flat vector illustration of "colorful layered big mountains"'初始 SVG 转换 (vtracer):
vtracer 转换为 SVG。我们发现 vtracer 能有效生成清晰的多边形矢量图形。候选选择与预优化:
google/siglip-so400m-patch14-384) 对这些 PNG 进行排名,以选择与原始文本提示最相似的图像;该模型与 VQA 评分器 PaliGemma2 使用的图像编码器相同。我们从最初的 8 个候选中选择了前 2 名。pydiffvg 基于优化器进行了简短优化 (iterations = 10) (详情见下文)。主要 SVG 优化 (pydiffvg 与自定义损失函数):
pydiffvg 进行优化。ImageProcessor 处理后)的 SigLIP (google/siglip2-base-patch16-224) 嵌入与目标 png 图像的 SigLIP 嵌入之间的负余弦相似度。ImageProcessorTorch 处理后)与目标位图图像(经具有相同随机种子进行裁剪的参考 ImageProcessor 处理后)之间的均方误差。这有助于保持与初始高质量位图的结构和颜色保真度。iterations = 200 次迭代。ImageProcessorTorch - 可微分预处理:
ImageProcessorTorch。该 PyTorch 模块应用了一系列类似于评估详情中描述的图像变换。diff_jpeg 模拟)、中值滤波、FFT 低通滤波和双边滤波。最终 SVG 压缩与格式化:
pydiffvg 输出 / vtracer 输入的最佳渲染大小,以便压缩后符合 10KB 限制。如有必要, aggressively 修剪路径。<path d="M167 200h20l-20 30h20"...)。