{
  "id": 581095,
  "title": "8th Place Solution",
  "content": "<p>Congratulations to all the winners, and thank you kaggle for hosting this very interesting and challenging competition. Thank you <a href=\"https://www.kaggle.com/philippsinger\" target=\"_blank\">@philippsinger</a> for being a great teammate as always.</p>\n<h2>Local Validation</h2>\n<p>We generated a few hundred prompt / questions samples for local validation. While scores on LB were usually a bit lower, we saw good correlation with that setup but high variance on both, local score and on public LB score. In the end, this led us to pick two high scoring subs with basically only different seeds to mitigate a bit of randomness.</p>\n<h2>The Solution Pipeline</h2>\n<p>Our pipeline consists of a SDXL model, that we fine tuned the best images from 16 previous runs of prompted Flux Schnell and SDXL models and based on the score on one of our local validation sets. We made most use of the infrastructure by utilizing both GPUs in parallel to generate images and to score in a single thread for each. The kaggle package made this a bit hard to set up. And we had to go with an API based approach to prevent context errors. Apparently, this is now fixed on newer kagglehub versions, so it shouldn't be an issue for upcoming competitions using the package approach.</p>\n<p>With that optimized pipeline, we were able to generate and iterate through about 14-18 images per sample, based on the compute requirements of the rest of the pipeline. The bitmaps were subsequently converted to SVG using optimized VTracer settings and some minification steps, mostly leveraging the <code>scour</code> lib and reducing the original image size that it fits the 10kB requirement. For OCR, we added a small \"+\" in one of the corners, which was very robust and cheap, but judging by other competitors not ideal in terms of aesthetic score.</p>\n<p>Finally, all images were scored with a proxy prompt for vqa and only applying MedianBlur to reduce runtime. </p>\n<pre><code>qa = {\n    : [f], \n    : [[, ]], \n    : []\n}\n</code></pre>\n<p>The best image was picked and returned for each sample.</p>\n<h2>Other Things we Tried</h2>\n<p>We did invest quite some time into diffvg and differentiable image preprocessing steps. While we had some promising results in easier pipelines and also locally, ultimately, \"Package Prediction Error\" stopped us from using it in our final submission.<br>\nWe also invested time into hacking the aesthetic score using fully differentiable preprocessing steps, but only had very limited success with all the defense mechanics in place and while keeping VQA score high. </p>\n<p>Apparently, we were missing diffvg and using the similarity scores between prompt and image for a better final rank. Nevertheless, we are very grateful for this challenge that always sparked new ideas to try out. I am honestly surprised by the great quality of the final images.</p>",
  "comments": [],
  "comment_count": 0,
  "messages": [
    {
      "id": 3211320,
      "postDate": "2025-05-28T09:53:36.290Z",
      "content": "<p>Congratulations to all the winners, and thank you kaggle for hosting this very interesting and challenging competition. Thank you <a href=\"https://www.kaggle.com/philippsinger\" target=\"_blank\">@philippsinger</a> for being a great teammate as always.</p>\n<h2>Local Validation</h2>\n<p>We generated a few hundred prompt / questions samples for local validation. While scores on LB were usually a bit lower, we saw good correlation with that setup but high variance on both, local score and on public LB score. In the end, this led us to pick two high scoring subs with basically only different seeds to mitigate a bit of randomness.</p>\n<h2>The Solution Pipeline</h2>\n<p>Our pipeline consists of a SDXL model, that we fine tuned the best images from 16 previous runs of prompted Flux Schnell and SDXL models and based on the score on one of our local validation sets. We made most use of the infrastructure by utilizing both GPUs in parallel to generate images and to score in a single thread for each. The kaggle package made this a bit hard to set up. And we had to go with an API based approach to prevent context errors. Apparently, this is now fixed on newer kagglehub versions, so it shouldn't be an issue for upcoming competitions using the package approach.</p>\n<p>With that optimized pipeline, we were able to generate and iterate through about 14-18 images per sample, based on the compute requirements of the rest of the pipeline. The bitmaps were subsequently converted to SVG using optimized VTracer settings and some minification steps, mostly leveraging the <code>scour</code> lib and reducing the original image size that it fits the 10kB requirement. For OCR, we added a small \"+\" in one of the corners, which was very robust and cheap, but judging by other competitors not ideal in terms of aesthetic score.</p>\n<p>Finally, all images were scored with a proxy prompt for vqa and only applying MedianBlur to reduce runtime. </p>\n<pre><code>qa = {\n    : [f], \n    : [[, ]], \n    : []\n}\n</code></pre>\n<p>The best image was picked and returned for each sample.</p>\n<h2>Other Things we Tried</h2>\n<p>We did invest quite some time into diffvg and differentiable image preprocessing steps. While we had some promising results in easier pipelines and also locally, ultimately, \"Package Prediction Error\" stopped us from using it in our final submission.<br>\nWe also invested time into hacking the aesthetic score using fully differentiable preprocessing steps, but only had very limited success with all the defense mechanics in place and while keeping VQA score high. </p>\n<p>Apparently, we were missing diffvg and using the similarity scores between prompt and image for a better final rank. Nevertheless, we are very grateful for this challenge that always sparked new ideas to try out. I am honestly surprised by the great quality of the final images.</p>",
      "rawMarkdown": "Congratulations to all the winners, and thank you kaggle for hosting this very interesting and challenging competition. Thank you @philippsinger for being a great teammate as always.\n\n## Local Validation\nWe generated a few hundred prompt / questions samples for local validation. While scores on LB were usually a bit lower, we saw good correlation with that setup but high variance on both, local score and on public LB score. In the end, this led us to pick two high scoring subs with basically only different seeds to mitigate a bit of randomness.\n\n## The Solution Pipeline\nOur pipeline consists of a SDXL model, that we fine tuned the best images from 16 previous runs of prompted Flux Schnell and SDXL models and based on the score on one of our local validation sets. We made most use of the infrastructure by utilizing both GPUs in parallel to generate images and to score in a single thread for each. The kaggle package made this a bit hard to set up. And we had to go with an API based approach to prevent context errors. Apparently, this is now fixed on newer kagglehub versions, so it shouldn't be an issue for upcoming competitions using the package approach.\n\nWith that optimized pipeline, we were able to generate and iterate through about 14-18 images per sample, based on the compute requirements of the rest of the pipeline. The bitmaps were subsequently converted to SVG using optimized VTracer settings and some minification steps, mostly leveraging the `scour` lib and reducing the original image size that it fits the 10kB requirement. For OCR, we added a small \"+\" in one of the corners, which was very robust and cheap, but judging by other competitors not ideal in terms of aesthetic score.\n\nFinally, all images were scored with a proxy prompt for vqa and only applying MedianBlur to reduce runtime. \n\n```\nqa = {\n    'question': [f'Does this look like {prompt}?'], \n    'choices': [[\"yes\", \"no\"]], \n    'answer': [\"yes\"]\n}\n```\n\nThe best image was picked and returned for each sample.\n\n## Other Things we Tried\nWe did invest quite some time into diffvg and differentiable image preprocessing steps. While we had some promising results in easier pipelines and also locally, ultimately, \"Package Prediction Error\" stopped us from using it in our final submission.\nWe also invested time into hacking the aesthetic score using fully differentiable preprocessing steps, but only had very limited success with all the defense mechanics in place and while keeping VQA score high. \n\nApparently, we were missing diffvg and using the similarity scores between prompt and image for a better final rank. Nevertheless, we are very grateful for this challenge that always sparked new ideas to try out. I am honestly surprised by the great quality of the final images.",
      "votes": 27
    }
  ],
  "complete": true,
  "source": "live",
  "fetched_at": "2026-10-20T09:10:01Z",
  "competition_id": 89659,
  "competition_slug": "drawing-with-llms",
  "team_id": 13616137,
  "solution_url": "/competitions/drawing-with-llms/writeups/psiilu-8th-place-solution"
}