650. Drawing with LLMs | drawing-with-llms
祝贺获奖者和所有参与者的努力!
我想大力感谢 @richolson 提供了极具教育意义且非常有帮助的 Notebook 和讨论帖。我个人从 他的 Notebook 中学到了很多,这也是我解决方案的起点。
编辑: 我发布了我版本的 Notebook!欢迎查看!
'a' 用于 OCR 缓解从之前的讨论中我们知道,在图像中添加一个字母可以减少 OCR 幻觉。我在图像的右下角添加了字母 'a'。
svg_a = """<path d="M329 341q-1.2 1-2 1.5t-2.4.45q-2 0-3-1t-1-3q0-1 .5-1.7.4-1 1-1.3.7-.45 1.6-.7.7 0 2-.4q2.7-.3 4-.8v-.6q0-1.4-.7-2-.9-.8-2.5-.8t-2.3.6-1 2l-2-.3q.3-1.4 1-2.2.7-.9 2-1.3 1.3-.5 3-.5t2.7.4 1.6 1 .7 1.5q.1.6.1 2v3q0 3 .15 3.9.2.8.6 1.6h-2.3q-.4-.7-.5-1.6m-.2-5q-1 .45-3.6.8-1.4.2-2 .5t-1 .7q-.3.5-.3 1 0 1 .7 1.5.7.6 2 .6t2.3-.6 1.5-1.5q.4-.8.4-2.2z" stroke="#fff"/>"""
在一个 公开 Notebook 中,VTracer 被用于 SVG 转换,但在该流程中,位图被调整为固定的较小尺寸以减小 SVG 大小(10kB 限制)。对此的一个改进是使用二分查找来找到转换为 SVG 而不超过 10kB 限制的最大尺寸。
VTracer 的输出 SVG 看起来像这样:
<path d="M0,0 L1,0 L1,24 L0,57 L6,57 L6,23 L50,23 L50,56 L61,56 L60,47 L60,24 L74,24 L74,36 L88,38 L88,7 L89,7 L89,45 Z " fill="#087905" transform="translate(26,148)"/>
压缩技术:
translate。<path d="M26 148h1v24l-1 33h6v-34h44v33h11l-1-9v-23h14v12l14 2v-31h1v38Z" fill="#087905"/>
这允许位图在不压缩的情况下调整大小约 50px 更大。它不会影响相对 SVG 友好的图像,但有助于那些不那么友好的图像。
我使用了 FLUX.1 Schnell 进行图像生成,并使用 nunchaku 进行量化。我尝试了基础 SD 模型、微调 SDXL Lora,但发现 FLUX.1 Schnell 具有更好的提示词遵循度。此外,通过量化,FLUX.1 Schnell 速度更快。
从生成的 10-12 张图像中,我使用以下问题评估了图像。
question = [
f'Does this image primarily represent "{description}"?',
f'Is "{description}" clearly shown in the image??'
]
choices = [
['definitely', 'somewhat', 'barely', 'no'],
['yes', 'somewhat', 'no']
]
answer = [
'definitely',
'yes'
]
此外,我使用来自扩展训练集的虚拟 VQA 分数对保真度 VQA 分数执行了线性回归,以预测最终 VQA 分数。
每个问题评估一张图像需要 < 2 秒,而使用 FLUX.1 Schnell 生成一张图像需要 ~ 1 秒。因此,我发现生成更多图像并用 1-2 个问题评估它们,比生成较少图像并用 3-4 个问题评估它们更高效。
在阅读 @cnumber 的帖子后,我后悔没有尝试 pydiffvg 来进一步优化分数,也没有尝试 Siglip。我也有时候希望自己能加入一个团队,因为 solo 很难想出点子。尽管如此,我对从这次竞赛中获得知识和经验感到高兴!
PS:在未来的竞赛中,我希望加入一个团队以便互相交流想法,所以如果你在未来的竞赛中看到我,请随时联系我!