650. Drawing with LLMs | drawing-with-llms

我想向组织者致以诚挚的感谢,感谢他们的辛勤工作和 dedication,使这次比赛既引人入胜又富有意义。我也感谢所有分享有益想法的人——这种社区支持产生了巨大的影响。我的自定义图像到 SVG pipeline 受到了 @richolson 工作的启发,我特别感谢他的贡献。
我是这个领域的新手,经验和知识有限,所以欢迎任何反馈和建议!
为了生成高质量的评估问题,我使用 Gemini 和 Claude 创建了大约 10,000 个结构化示例的数据集。每组遵循严格的 4 问题 TIFA 格式:
我在这个数据集上微调了 SmolLM2-1.7B-Instruct。模型表现良好,显著提高了我的竞赛分数。在大约 2% 的情况下,Q2 和 Q3 是重复的——这可能是由于训练数据中的 minor inconsistencies 或小模型的能力有限。为了处理此类边缘情况,我添加了 fallback 逻辑,当生成的唯一问题少于四个时注入虚拟问题。
推理速度极快,平均每个提示约 3 秒。
由于速度 - 质量的权衡,我使用了 SDXL Flash。提示词是使用一致的模板构建的:
flat vector illustration of {description}, minimalist design, solid colors, flat color blocks
({description} 的扁平矢量插图,极简设计,纯色,扁平色块)
每个提示默认获得 4 次尝试,使用之前预测的剩余时间动态扩展。
每个生成的图像首先从 768×768 调整大小到 384×384 以降低 SVG 复杂度。然后使用 LAB 色彩空间中的 MiniBatchKMeans 将图像量化为 16 种颜色。量化后,我应用 并查集 (DSU) 算法合并具有相似颜色的相邻区域。处理后的图像然后 passed 到两个 SVG 转换 pipelines:
此方法分配总点数预算(例如 2000 点),并根据结合面积、形状复杂度和距图像中心接近度的重要性指标将其分配给轮廓。对于每个轮廓,我执行 二分搜索 以找到最佳 epsilon 值,使用 cv2.approxPolyDP 将轮廓简化为目标点数。
每个简化的形状然后被编码为多边形或路径,取决于哪种表示在字节上更短。这在保持文件大小受控的同时产生了视觉准确的 SVG。
作为替代方案,我还使用 VTracer 将图像转换为分层 SVG 路径。跟踪后,使用 cv2.approxPolyDP 对路径元素应用 二分搜索 简化 pass,以进一步减小文件大小并确保最终 SVG 保持在 10KB 限制以下。
对于每个生成的图像,我生成两个 SVG——一个使用自定义多边形/路径 pipeline,另一个使用带有二分搜索的 VTracer。
竞赛的评分模型经常幻觉 SVG 中存在文本, negatively impacting OCR 分数和整体性能。为了 counter 这个,我在每个 SVG 内的固定位置注入一个小的 "L" 形水印。
此水印的颜色是动态选择的——黑色或白色——基于区域的局部亮度,以确保它自然地融入图像,同时仍然可检测。这个简单但有效的技巧显著减少了 OCR 评估中的 false positives。
为了选择最佳 SVG,我使用 PaliGemma-3B,它比 10B 版本快约 3 倍,准确性损失最小。
每个描述分配了 64 秒的固定时间预算。如果样本提前完成,未使用的时间会累积并结转。
保存的时间然后被复用以允许未来描述进行额外的图像生成尝试,计算如下:
attempts = int(base_num_attempts + saved_time / per_attempt_time)
为了指导提交选择,我创建了一个包含 100 个描述的验证数据集,涵盖 11 个不同类别(自然、抽象、时尚、动物、家居、食物、城市、技术、交通、运动/娱乐、医疗/保健),全部使用 Gemini 生成。
你可以在 这里 找到数据集。
我运行了多个推理 notebooks 并跟踪了 CV 和榜单性能:
| Notebook | 公共榜单 (Public LB) | CV 分数 | 私有榜单 (Private LB) | 最终提交 |
|---|---|---|---|---|
| 1 | 0.699 | 0.724 | 0.690 | 否 |
| 2 | 0.696 | 0.730 | 0.699 | 否 |
| 3 | 0.690 | 0.752 | 0.686 | 是 |
| 4 | 0.689 | 0.763 | 0.693 | 是 |
Notebook 3 和 Notebook 4 基于强大的交叉验证性能被选为最终提交。不幸的是,我错过了选择 Notebook 2——它实际上有着稍高的私有榜单分数。
回顾过去,有几个关键领域我可以改进: