650. Drawing with LLMs | drawing-with-llms
祝贺所有其他获奖者,并感谢 Kaggle 举办如此独特的比赛——参与过程非常有趣!同时也感谢我的队友 @huanligong 和 @kenyeungtech!
我们得分最高的提交 notebook 可以在 这里 找到。
我们在每个 SVG 的左上角嵌入三个可见字符,以避免 OCR 幻觉。通过对三个字母组合的搜索发现,"ZOK" 在不影响 VQA 分数的情况下产生了最高的平均美学分数。
提高 VQA 分数最轻量且可靠的方法是直接在图像中包含与提示相关的文本。然而,简单地嵌入提示文本会导致得分为零,因为指标会应用 OCR 惩罚。为了避免这些惩罚,我们使用以下重复的、类似噪声的模式隐藏任何嵌入的文本:
<defs>
<pattern id="a" x="0" y="0" width="10" height="10" patternUnits="userSpaceOnUse">
<g opacity=".1">
<path fill="#fff" d="M1 1h1v1H1z"/>
<path fill="#ff0" d="M4 2h1v1H4z"/>
<path fill="#0f0" d="M6 8h1v1H6z"/>
<path fill="#00f" d="M9 5h1v1H9z"/>
</g>
</pattern>
</defs>
<rect width="100%" height="100%" fill="url(#a)"/>
这导致文本在原始图像和部分处理的图像(用于 OCR)中都是隐藏的。完全处理的图像(用于计算美学和 VQA 分数)会显示隐藏的文本:
我们使用 Segmind 的 SSD-1B 模型为给定的目标 SVG 描述生成 64 张图像。
为了提高效率,我们对基础模型应用了以下修改:
cache_interval=2 和 cache_branch_id=0,每张图像的生成分辨率为 384×384,指导尺度 (guidance scale) 为 8。我们使用以下提示词:
flat vector illustration, flat color blocks, hard color boundaries, solid fills, clipart style, \
no shading, no blending, minimalist, simple design, saturated colors, extremely simplistic and minimal, \
style: vector clip art, small color palette prompt: vector art of {SVG_DESCRIPTION}
photorealistic, realistic, detailed, 3D, complex shading, gradients, soft edges, text, signature, \
watermark, texture, painting, blurry, pixelated, thin lines, dots, cropped border, picture frame
使用多线程时,64 个样本的图像生成需要约 15 秒。然而,由于 Kaggle 包中目前存在多线程 bug,我们选择使用单线程以获得更可靠的提交,导致生成时间约为 30 秒。
每张图像被下采样并量化为六种颜色。对于这六种颜色中的每一种,我们使用 OpenCV 提取轮廓并将它们简化为多边形。然后我们将多边形缩放回原始大小并转换为压缩的 SVG 路径。我们按大小、中心性和简单性对每个提取的路径进行排名,然后 continuously 将它们添加到 SVG 中,直到达到 6000 字节的 size 限制。此过程对于 64 张图像的批次需要约 2.5 秒。
我们将要从生成图像中提取的 SVG 缩放至原始大小的 40%,并将其放置在最终 SVG 的顶部中心。然后我们在左上角添加 anti-OCR 幻觉文本,从 SVG 描述中移除所有停用词,并将文本嵌入到图像正下方。文本使用 SVG 路径嵌入,我们也对其进行了 heavily 压缩。
最后,我们向 SVG 添加了许多其他伪影,旨在提高美学分数而不会对 VQA 分数产生负面影响:
这些伪影中的每一个都是通过遗传算法、爬山搜索或偶尔的手动猜测检查方法找到的。
以防超时或异常,我们还准备了一个简单的仅文本 SVG,其中包括 anti-OCR 幻觉文本、来自 SVG 描述的文本以及一个简单的后缀 ("AMAZING EUROPE OIL ART EUROPE") 和一些上述美学伪影。
在比赛的后期阶段,我们没有花太多时间完善这些备用 SVG,因为我们得分最高的提交并没有使用它们。
我们将每个 SVG 转换回图像并对它们应用图像处理管道。我们使用了来自指标的图像处理器的自定义实现,该实现效率更高且产生几乎相同的结果。然后我们计算每个图像的美学分数,并简单地返回得分最高的 SVG。在我们得分最高的提交中,我们在验证数据集上运行的选定 SVG 的平均美学分数约为 0.563,VQA 分数约为 0.88。
我们尝试了许多不同的技术和上述方法的变体,但没有导致分数提高:
对于旧指标,我们使用了一种可微分的方法来找到一组 237 个小方块,这些方块产生了最高的美学分数,并带有一些旨在最大化 VQA 分数的小文本。以下图像得分为 1.014,美学分数 >1.2: