{
  "id": 557546,
  "title": "10th place solution ",
  "content": "<h1>Top 10th Place Solution for the CIDAUT AI Fake Scene Classification 2024 Competition</h1>\n<hr>\n<h2>1. <strong>Context</strong></h2>\n<ul>\n<li><strong>Business context</strong>: <a href=\"https://www.kaggle.com/competitions/cidaut-ai-fake-scene-classification-2024/overview\" target=\"_blank\">Competition Overview</a>  </li>\n<li><strong>Data context</strong>: <a href=\"https://www.kaggle.com/competitions/cidaut-ai-fake-scene-classification-2024/data\" target=\"_blank\">Competition Data</a></li>\n</ul>\n<p>In this competition, the task was to classify images into two categories:  </p>\n<ul>\n<li><strong>editada</strong> (i.e., “fake” or retouched)  </li>\n<li><strong>real</strong> (i.e., an authentic, unedited image)</li>\n</ul>\n<hr>\n<h2>2. <strong>Overview of the Approach</strong></h2>\n<h3>2.1 Models and algorithms used</h3>\n<p>To address this problem, we trained and compared <strong>three image classification models</strong> from the <code>torchvision.models</code> library:</p>\n<ol>\n<li><p><strong>Vision Transformer (ViT)</strong></p>\n<ul>\n<li>Model based on the paper <a href=\"https://arxiv.org/abs/2010.11929\" target=\"_blank\">\"An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale\"</a>.  </li>\n<li>Public score around <strong>0.9263</strong>.</li></ul></li>\n<li><p><strong>EfficientNet V2</strong></p>\n<ul>\n<li>A variant of EfficientNet described in <a href=\"https://arxiv.org/abs/2104.00298\" target=\"_blank\">EfficientNetV2: Smaller Models and Faster Training</a>.  </li>\n<li>Best public score of <strong>0.9476</strong> (this placed us in the Top 10 on the leaderboard).</li></ul></li>\n<li><p><strong>RegNet</strong></p>\n<ul>\n<li>A family of models introduced in the paper <a href=\"https://arxiv.org/abs/2003.13678\" target=\"_blank\">\"Designing Network Design Spaces\"</a>.  </li>\n<li>Public score of <strong>0.9300</strong> (though I suspect with proper tuning it could surpass EfficientNet).</li></ul></li>\n</ol>\n<p>We imported the official pretrained weights from <code>torchvision</code>, then replaced the last layer (<code>head</code> or <code>classifier</code>) to output 2 classes (one for the <em>editada</em> class and one for the <em>real</em> class).</p>\n<hr>\n<h3>2.2 Data preprocessing, feature engineering, and/or feature selection</h3>\n<ul>\n<li><p><strong>Image size</strong>:  <br>\nWe standardized all images to <code>224x224</code> (or <code>256x256</code> with a <em>CenterCrop(224)</em>).</p></li>\n<li><p><strong>Augmentations</strong>:  </p>\n<ul>\n<li><code>RandomHorizontalFlip</code>, <code>RandomResizedCrop(224)</code>, etc. to enrich the dataset and reduce overfitting.</li>\n<li>The mean and std for normalization are the usual ImageNet values (<code>[0.485, 0.456, 0.406]</code> / <code>[0.229, 0.224, 0.225]</code>).</li></ul></li>\n<li><p><strong>No complex feature engineering</strong> (the features are automatically learned by the CNNs/Transformers).  </p></li>\n<li><p><strong>No manual feature elimination</strong> (we used all channels and layers provided by the pretrained weights).</p></li>\n</ul>\n<hr>\n<h3>2.3 Validation strategy</h3>\n<p>To evaluate our models, we primarily used a <strong>train/validation split</strong>:</p>\n<ul>\n<li><p><strong>In our final notebooks</strong>:  </p>\n<ul>\n<li>A simple split (e.g., 95% / 5% or 85% / 15% depending on the iteration).  </li>\n<li>We tracked the <code>AUC</code> on the validation set and the Kaggle public leaderboard.</li></ul></li>\n<li><p><strong>Before making official submissions</strong> (to test more strategies, e.g., a “three-way split”):  </p>\n<ul>\n<li>70% / 15% / 15%, which gave us a mini local test set.  </li>\n<li>This helped us verify overfitting risks.  </li>\n<li>With EfficientNetV2 and RegNet, we repeatedly reached a train AUROC of 1.0, demonstrating that the models were powerful enough to achieve very strong results.</li></ul></li>\n</ul>\n<p>In the end, the best final validation approach mirroring the final LB was a 95% / 5% split, despite some risk of overfitting.</p>\n<hr>\n<h2>3. <strong>Details of the Submission</strong></h2>\n<h3>3.1 Important/impactful strategies/decisions</h3>\n<ol>\n<li><p><strong>Comparing three model families</strong>:  <br>\nWe knew that ViT (Vision Transformer), EfficientNet, and RegNet are all competitive for image classification.  </p>\n<ul>\n<li>The idea was to explore all three in parallel to find a balance among convergence speed, overfitting, and final score.</li></ul></li>\n<li><p><strong>Learning rate and Scheduler</strong>:  </p>\n<ul>\n<li>We fixed the <code>learning rate</code> at <code>5e-5</code> and applied a <code>StepLR(gamma=0.7)</code> to reduce the LR every epoch.  </li>\n<li>This played a crucial role in preventing overfitting (especially for RegNet).</li></ul></li>\n<li><p><strong>Data augmentation</strong>:  </p>\n<ul>\n<li>Horizontal flip, random crop</li></ul></li>\n<li><p><strong>Choice of batch size</strong>:  </p>\n<ul>\n<li><code>batch_size=8</code> achieved the best results for each model.</li></ul></li>\n<li><p><strong>EfficientNet V2</strong>:  </p>\n<ul>\n<li>Clearly the top-performing model on this dataset, reaching <strong>0.9476</strong> on the leaderboard.  </li>\n<li>Lighter than RegNet, converges quickly, and seems to generalize better.</li></ul></li>\n</ol>\n<h3>3.2 Creative or non-obvious strategies/decisions</h3>\n<ul>\n<li><p><strong>Small test-time augmentation (TTA)</strong>:  </p>\n<ul>\n<li>In a few runs, we averaged predictions from the horizontally flipped image + the original.  </li>\n<li>Very slight improvement on the LB, so we left it out in the final version to keep the code shorter.</li></ul></li>\n<li><p><strong>Comparison of a “three-way split” locally</strong>:  </p>\n<ul>\n<li>With a mini local test set to estimate generalization.  </li>\n<li>This confirmed that RegNet (with more epochs) easily overfits (train AUC=1.0) while EfficientNet V2 was better at generalizing.</li></ul></li>\n</ul>\n<h3>3.3 What didn’t work well</h3>\n<ul>\n<li><p><strong>Aggressive augmentations</strong> (e.g., extreme rotations, strong color jitter):  </p>\n<ul>\n<li>Paradoxically, this worsened the AUC. The dataset seemed too “straightforward” to benefit from heavy augmentations.</li></ul></li>\n<li><p><strong>Increasing input size to 384x384</strong>:  </p>\n<ul>\n<li>No major improvement in our runs (and more expensive training).</li></ul></li>\n<li><p><strong>Stacking more final layers</strong> or heavier <em>fine-tuning</em> of intermediate layers**:  </p>\n<ul>\n<li>We mostly froze the pretrained <em>backbones</em> in the first blocks and “unfroze” the last portion.  </li>\n<li>For ViT, fully fine-tuning didn’t significantly improve the final score.</li></ul></li>\n</ul>\n<hr>\n<h2>4. <strong>Personal Reflections</strong></h2>\n<p>Below are some sample plots of training and validation curves for each model tested:</p>\n<p><img src=\"https://www.kaggleusercontent.com/kf/218507867/eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..X8A_sbwng6grYb4Ff3xORw.jSu0TAkCoVwuhrW_adjEBYdB5fpsA_GiNgcA4Y8tfJ5XiQjsWIPYScsypAHxFequwg10jYFioa0-GXLqr0QCUWtAFdaD3phCl7FGiYPFqkSEvve7FYS_Q3muwGYjCsoICawjqAM7-0O_U_RiVGyOz450e_t7F-OrurcwfGpa5lV-UaEDwlch5kcV1BoTdDdTvx7z6-fljtH8X_MxIAuBP_QnzA_7TQiriy2A7YTzviNuUaDkmvJAxe25ucOjVhtduuobbl4Dugxhr1JuLfJQMqJxnoOJKYwT-KfDQTmz__ZKA-WhEZOXGPHU83yadGOA4bhGei4ga6VhknVUH--ZFHatlTDukyEKBYf4YEJ5skp8woFS1txmyylW0rv5-V51nDS-dQfjrw2_WHi377bea5tkzG7lm6ry8KhjJrBK7gH8--dhM0RPajfHhJAZtb2B0l3TOyzt6XFSsprarGQi8XvJ-UEheXAxZfhmiCNIA9FHHT21RgyYKBwHpQC-rvm6aDF1bob8KrfTnw0y2m77QaHUUCZdo_5pa-a8YDnAb14qIbU2Ux8E00UN_pHylMzlc15JXssiJCjhdlU4_pkkRpaex-_IiYpK3r5XWGLBTXt_E0dAAP_40bv8sLYMyhb0g1qLLjllsB02LnHZMc-aEhhvL_QTknsWXOGgsHd3zo1ZrkzLLZ4246nyVW6HHzoC.w16zKoj8Bo80Ong-gFK15w/__results___files/__results___35_0.png\" alt=\"figure 1\"></p>\n<p><img src=\"https://www.kaggleusercontent.com/kf/218507867/eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..X8A_sbwng6grYb4Ff3xORw.jSu0TAkCoVwuhrW_adjEBYdB5fpsA_GiNgcA4Y8tfJ5XiQjsWIPYScsypAHxFequwg10jYFioa0-GXLqr0QCUWtAFdaD3phCl7FGiYPFqkSEvve7FYS_Q3muwGYjCsoICawjqAM7-0O_U_RiVGyOz450e_t7F-OrurcwfGpa5lV-UaEDwlch5kcV1BoTdDdTvx7z6-fljtH8X_MxIAuBP_QnzA_7TQiriy2A7YTzviNuUaDkmvJAxe25ucOjVhtduuobbl4Dugxhr1JuLfJQMqJxnoOJKYwT-KfDQTmz__ZKA-WhEZOXGPHU83yadGOA4bhGei4ga6VhknVUH--ZFHatlTDukyEKBYf4YEJ5skp8woFS1txmyylW0rv5-V51nDS-dQfjrw2_WHi377bea5tkzG7lm6ry8KhjJrBK7gH8--dhM0RPajfHhJAZtb2B0l3TOyzt6XFSsprarGQi8XvJ-UEheXAxZfhmiCNIA9FHHT21RgyYKBwHpQC-rvm6aDF1bob8KrfTnw0y2m77QaHUUCZdo_5pa-a8YDnAb14qIbU2Ux8E00UN_pHylMzlc15JXssiJCjhdlU4_pkkRpaex-_IiYpK3r5XWGLBTXt_E0dAAP_40bv8sLYMyhb0g1qLLjllsB02LnHZMc-aEhhvL_QTknsWXOGgsHd3zo1ZrkzLLZ4246nyVW6HHzoC.w16zKoj8Bo80Ong-gFK15w/__results___files/__results___35_1.png\" alt=\"figure 2\"></p>\n<ul>\n<li><strong>Figures 1 and 2</strong> show <strong>EfficientNet</strong> results:  <ul>\n<li>We notice decent generalization but some fluctuations in validation accuracy and loss from epoch to epoch.  </li>\n<li>The best public leaderboard score reached about 0.9476.</li></ul></li>\n</ul>\n<p><img src=\"https://www.kaggleusercontent.com/kf/218364683/eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..W4ne8TOi7psjitxhBUJb-w.ztPc5SZr3OT3ZlQ08JLJzzYsEYmQlcvx6c9jwHVSsVS7Z-D1ueftooQ_kqOTlWTrFJE43EHL008Vpnef-XLBrEudqCInmHkY3eTtnTqImmImBloiQyGa8N7MgjT_ufcFwQuWBQN9bdo9_gC6R-Zjp4glHNNbhv_NuHtZXuHEaFqqq_pkk6vaA-xBY8EuBmF_XII_BjelUtD4acwM9fmpbIA3AxWG11qzam5yt22gkDLEB930WG-1Z18qfrJiMhGthfainoNxXfxRVFdvnrf5YNr6xOtjHIdeF_lGK4e8ZTahrL4mRWGdqnpUPvP4I_7XOfytNlpfWL-DB9SzXB822EupaUML_jGh-CkyKnrYYvDbmh57ptQx3dwmFjFKEKuEJbB7ez1Gzh6D_ysYy0LtGwdOdwfpLvW286F7Gt35vL_ATsAOIZ79Qn7cOf0Qbnmo7Q8XP7vvpE7fy7DywVF8LnpkYdqMIuTO9q6pJg1Mi8nZEwkgKkH2EVvIeVHD6p-i-irZmv7Bugcm7xvSSFtEiYG_8HgeBJEusc-vpO4cwxkjYkWG29lCOqjRK285AZ1FhyyXx-LqXqXXlipmZWvWN9BPFQccQh5bfiUNz064JbowLvGGVjGN06cTFvzHKzvT2cSv-idHH5sXRF1kl0wWuw.kCV5oHHuLVRrABAsxe3PFg/__results___files/__results___11_0.png\" alt=\"figure 3\"></p>\n<p><img src=\"https://www.kaggleusercontent.com/kf/218364683/eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..W4ne8TOi7psjitxhBUJb-w.ztPc5SZr3OT3ZlQ08JLJzzYsEYmQlcvx6c9jwHVSsVS7Z-D1ueftooQ_kqOTlWTrFJE43EHL008Vpnef-XLBrEudqCInmHkY3eTtnTqImmImBloiQyGa8N7MgjT_ufcFwQuWBQN9bdo9_gC6R-Zjp4glHNNbhv_NuHtZXuHEaFqqq_pkk6vaA-xBY8EuBmF_XII_BjelUtD4acwM9fmpbIA3AxWG11qzam5yt22gkDLEB930WG-1Z18qfrJiMhGthfainoNxXfxRVFdvnrf5YNr6xOtjHIdeF_lGK4e8ZTahrL4mRWGdqnpUPvP4I_7XOfytNlpfWL-DB9SzXB822EupaUML_jGh-CkyKnrYYvDbmh57ptQx3dwmFjFKEKuEJbB7ez1Gzh6D_ysYy0LtGwdOdwfpLvW286F7Gt35vL_ATsAOIZ79Qn7cOf0Qbnmo7Q8XP7vvpE7fy7DywVF8LnpkYdqMIuTO9q6pJg1Mi8nZEwkgKkH2EVvIeVHD6p-i-irZmv7Bugcm7xvSSFtEiYG_8HgeBJEusc-vpO4cwxkjYkWG29lCOqjRK285AZ1FhyyXx-LqXqXXlipmZWvWN9BPFQccQh5bfiUNz064JbowLvGGVjGN06cTFvzHKzvT2cSv-idHH5sXRF1kl0wWuw.kCV5oHHuLVRrABAsxe3PFg/__results___files/__results___11_1.png\" alt=\"figure 4\"></p>\n<ul>\n<li><strong>Figures 3 and 4</strong> show <strong>RegNet</strong> results:  <ul>\n<li>These curves look quite “clean”, suggesting more stable learning behavior.  </li>\n<li>Although we achieved around 0.9300 on the public LB with limited time, I firmly believe that with an appropriate number of epochs, RegNet can surpass the 0.95 mark and potentially outperform EfficientNet.</li></ul></li>\n</ul>\n<p>Finally, I joined the competition only 9 days before its end, so I didn’t really have time to make plenty of submissions. I also chose to <strong>respect</strong> the Kaggle guideline:</p>\n<blockquote>\n  <p>“You cannot sign up to Kaggle from multiple accounts and therefore you cannot enter or submit from multiple accounts.”</p>\n</blockquote>\n<p>…unlike certain others in the Top 10 🥸. Nonetheless, had I been able to iterate a bit more on RegNet (e.g., tuning hyperparameters, adjusting the epoch count), I’m convinced it would have achieved even better performance like +0.95.</p>\n<h2>5. <strong>A Challenge with the Leaderboard</strong></h2>\n<p>One key issue with this competition was the absence of a <strong>split between the public and private leaderboard</strong>, making <strong>brute force</strong> submissions a highly effective strategy. By learning from the leaderboard itself, participants could iteratively fine-tune predictions rather than genuinely optimizing the model.</p>\n<p>This is apparent in many Top 10 solutions. For instance, <strong>bestwater</strong> (ranked 1st) openly admits to this approach in their post (<a href=\"https://www.kaggle.com/competitions/cidaut-ai-fake-scene-classification-2024/discussion/557589#3101028\" target=\"_blank\">link here</a>). Additionally, it's almost certain that <strong>solosid69</strong> (top 2, 4, 5, 6, 7) used the same technique—leveraging <strong>five different accounts</strong> 😶‍🌫️ to maximize submissions and brute force his way up the leaderboard.</p>\n<p>It’s worth noting that <strong>bestwater's honesty</strong> in admitting this method is commendable, as it underscores the bigger problem: the <strong>competition design</strong> itself. With <strong>no private leaderboard</strong>, brute-forcing overshadowed more rigorous model optimization efforts.  </p>\n<p>Even with thorough hyperparameter tuning, the results presented here are likely close to the best achievable <strong>without brute-forcing</strong>. Nevertheless, I <strong>enjoyed</strong> this competition a lot; it was a fun and rewarding experience that allowed me to <strong>discover new models</strong> and gain deeper insights into their performance on real-world data.</p>\n<h2>6. <strong>Sources</strong></h2>\n<ul>\n<li><p><strong>Reference Papers</strong>  </p>\n<ul>\n<li><a href=\"https://arxiv.org/abs/2010.11929\" target=\"_blank\">Vision Transformer (ViT)</a>  </li>\n<li><a href=\"https://arxiv.org/abs/2104.00298\" target=\"_blank\">EfficientNet V2</a>  </li>\n<li><a href=\"https://arxiv.org/abs/2003.13678\" target=\"_blank\">RegNet (Designing Network Design Spaces)</a></li></ul></li>\n<li><p><strong>Kaggle Notebooks</strong>  </p>\n<ul>\n<li><a href=\"https://www.kaggle.com/code/quentinducoulombier/top-10-vit-efficientnet-regnet-cidaut-ai\" target=\"_blank\">Notebook showcasing ViT, EfficientNet, and RegNet</a> ← <em>Most important notebook</em>  </li>\n<li><a href=\"https://www.kaggle.com/code/quentinducoulombier/cidaut-regnet\" target=\"_blank\">RegNet (3-way split) Notebook</a>  </li>\n<li><a href=\"https://www.kaggle.com/code/quentinducoulombier/cidaut-efficientnetv2\" target=\"_blank\">EfficientNet V2 (3-way split) Notebook</a>  </li>\n<li><a href=\"https://www.kaggle.com/code/quentinducoulombier/cidaut-vit\" target=\"_blank\">ViT (3-way split) Notebook</a></li></ul></li>\n</ul>",
  "comments": [],
  "comment_count": 0,
  "messages": [
    {
      "id": 3100803,
      "postDate": "2025-01-19T22:53:40.060Z",
      "content": "<h1>Top 10th Place Solution for the CIDAUT AI Fake Scene Classification 2024 Competition</h1>\n<hr>\n<h2>1. <strong>Context</strong></h2>\n<ul>\n<li><strong>Business context</strong>: <a href=\"https://www.kaggle.com/competitions/cidaut-ai-fake-scene-classification-2024/overview\" target=\"_blank\">Competition Overview</a>  </li>\n<li><strong>Data context</strong>: <a href=\"https://www.kaggle.com/competitions/cidaut-ai-fake-scene-classification-2024/data\" target=\"_blank\">Competition Data</a></li>\n</ul>\n<p>In this competition, the task was to classify images into two categories:  </p>\n<ul>\n<li><strong>editada</strong> (i.e., “fake” or retouched)  </li>\n<li><strong>real</strong> (i.e., an authentic, unedited image)</li>\n</ul>\n<hr>\n<h2>2. <strong>Overview of the Approach</strong></h2>\n<h3>2.1 Models and algorithms used</h3>\n<p>To address this problem, we trained and compared <strong>three image classification models</strong> from the <code>torchvision.models</code> library:</p>\n<ol>\n<li><p><strong>Vision Transformer (ViT)</strong></p>\n<ul>\n<li>Model based on the paper <a href=\"https://arxiv.org/abs/2010.11929\" target=\"_blank\">\"An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale\"</a>.  </li>\n<li>Public score around <strong>0.9263</strong>.</li></ul></li>\n<li><p><strong>EfficientNet V2</strong></p>\n<ul>\n<li>A variant of EfficientNet described in <a href=\"https://arxiv.org/abs/2104.00298\" target=\"_blank\">EfficientNetV2: Smaller Models and Faster Training</a>.  </li>\n<li>Best public score of <strong>0.9476</strong> (this placed us in the Top 10 on the leaderboard).</li></ul></li>\n<li><p><strong>RegNet</strong></p>\n<ul>\n<li>A family of models introduced in the paper <a href=\"https://arxiv.org/abs/2003.13678\" target=\"_blank\">\"Designing Network Design Spaces\"</a>.  </li>\n<li>Public score of <strong>0.9300</strong> (though I suspect with proper tuning it could surpass EfficientNet).</li></ul></li>\n</ol>\n<p>We imported the official pretrained weights from <code>torchvision</code>, then replaced the last layer (<code>head</code> or <code>classifier</code>) to output 2 classes (one for the <em>editada</em> class and one for the <em>real</em> class).</p>\n<hr>\n<h3>2.2 Data preprocessing, feature engineering, and/or feature selection</h3>\n<ul>\n<li><p><strong>Image size</strong>:  <br>\nWe standardized all images to <code>224x224</code> (or <code>256x256</code> with a <em>CenterCrop(224)</em>).</p></li>\n<li><p><strong>Augmentations</strong>:  </p>\n<ul>\n<li><code>RandomHorizontalFlip</code>, <code>RandomResizedCrop(224)</code>, etc. to enrich the dataset and reduce overfitting.</li>\n<li>The mean and std for normalization are the usual ImageNet values (<code>[0.485, 0.456, 0.406]</code> / <code>[0.229, 0.224, 0.225]</code>).</li></ul></li>\n<li><p><strong>No complex feature engineering</strong> (the features are automatically learned by the CNNs/Transformers).  </p></li>\n<li><p><strong>No manual feature elimination</strong> (we used all channels and layers provided by the pretrained weights).</p></li>\n</ul>\n<hr>\n<h3>2.3 Validation strategy</h3>\n<p>To evaluate our models, we primarily used a <strong>train/validation split</strong>:</p>\n<ul>\n<li><p><strong>In our final notebooks</strong>:  </p>\n<ul>\n<li>A simple split (e.g., 95% / 5% or 85% / 15% depending on the iteration).  </li>\n<li>We tracked the <code>AUC</code> on the validation set and the Kaggle public leaderboard.</li></ul></li>\n<li><p><strong>Before making official submissions</strong> (to test more strategies, e.g., a “three-way split”):  </p>\n<ul>\n<li>70% / 15% / 15%, which gave us a mini local test set.  </li>\n<li>This helped us verify overfitting risks.  </li>\n<li>With EfficientNetV2 and RegNet, we repeatedly reached a train AUROC of 1.0, demonstrating that the models were powerful enough to achieve very strong results.</li></ul></li>\n</ul>\n<p>In the end, the best final validation approach mirroring the final LB was a 95% / 5% split, despite some risk of overfitting.</p>\n<hr>\n<h2>3. <strong>Details of the Submission</strong></h2>\n<h3>3.1 Important/impactful strategies/decisions</h3>\n<ol>\n<li><p><strong>Comparing three model families</strong>:  <br>\nWe knew that ViT (Vision Transformer), EfficientNet, and RegNet are all competitive for image classification.  </p>\n<ul>\n<li>The idea was to explore all three in parallel to find a balance among convergence speed, overfitting, and final score.</li></ul></li>\n<li><p><strong>Learning rate and Scheduler</strong>:  </p>\n<ul>\n<li>We fixed the <code>learning rate</code> at <code>5e-5</code> and applied a <code>StepLR(gamma=0.7)</code> to reduce the LR every epoch.  </li>\n<li>This played a crucial role in preventing overfitting (especially for RegNet).</li></ul></li>\n<li><p><strong>Data augmentation</strong>:  </p>\n<ul>\n<li>Horizontal flip, random crop</li></ul></li>\n<li><p><strong>Choice of batch size</strong>:  </p>\n<ul>\n<li><code>batch_size=8</code> achieved the best results for each model.</li></ul></li>\n<li><p><strong>EfficientNet V2</strong>:  </p>\n<ul>\n<li>Clearly the top-performing model on this dataset, reaching <strong>0.9476</strong> on the leaderboard.  </li>\n<li>Lighter than RegNet, converges quickly, and seems to generalize better.</li></ul></li>\n</ol>\n<h3>3.2 Creative or non-obvious strategies/decisions</h3>\n<ul>\n<li><p><strong>Small test-time augmentation (TTA)</strong>:  </p>\n<ul>\n<li>In a few runs, we averaged predictions from the horizontally flipped image + the original.  </li>\n<li>Very slight improvement on the LB, so we left it out in the final version to keep the code shorter.</li></ul></li>\n<li><p><strong>Comparison of a “three-way split” locally</strong>:  </p>\n<ul>\n<li>With a mini local test set to estimate generalization.  </li>\n<li>This confirmed that RegNet (with more epochs) easily overfits (train AUC=1.0) while EfficientNet V2 was better at generalizing.</li></ul></li>\n</ul>\n<h3>3.3 What didn’t work well</h3>\n<ul>\n<li><p><strong>Aggressive augmentations</strong> (e.g., extreme rotations, strong color jitter):  </p>\n<ul>\n<li>Paradoxically, this worsened the AUC. The dataset seemed too “straightforward” to benefit from heavy augmentations.</li></ul></li>\n<li><p><strong>Increasing input size to 384x384</strong>:  </p>\n<ul>\n<li>No major improvement in our runs (and more expensive training).</li></ul></li>\n<li><p><strong>Stacking more final layers</strong> or heavier <em>fine-tuning</em> of intermediate layers**:  </p>\n<ul>\n<li>We mostly froze the pretrained <em>backbones</em> in the first blocks and “unfroze” the last portion.  </li>\n<li>For ViT, fully fine-tuning didn’t significantly improve the final score.</li></ul></li>\n</ul>\n<hr>\n<h2>4. <strong>Personal Reflections</strong></h2>\n<p>Below are some sample plots of training and validation curves for each model tested:</p>\n<p><img src=\"https://www.kaggleusercontent.com/kf/218507867/eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..X8A_sbwng6grYb4Ff3xORw.jSu0TAkCoVwuhrW_adjEBYdB5fpsA_GiNgcA4Y8tfJ5XiQjsWIPYScsypAHxFequwg10jYFioa0-GXLqr0QCUWtAFdaD3phCl7FGiYPFqkSEvve7FYS_Q3muwGYjCsoICawjqAM7-0O_U_RiVGyOz450e_t7F-OrurcwfGpa5lV-UaEDwlch5kcV1BoTdDdTvx7z6-fljtH8X_MxIAuBP_QnzA_7TQiriy2A7YTzviNuUaDkmvJAxe25ucOjVhtduuobbl4Dugxhr1JuLfJQMqJxnoOJKYwT-KfDQTmz__ZKA-WhEZOXGPHU83yadGOA4bhGei4ga6VhknVUH--ZFHatlTDukyEKBYf4YEJ5skp8woFS1txmyylW0rv5-V51nDS-dQfjrw2_WHi377bea5tkzG7lm6ry8KhjJrBK7gH8--dhM0RPajfHhJAZtb2B0l3TOyzt6XFSsprarGQi8XvJ-UEheXAxZfhmiCNIA9FHHT21RgyYKBwHpQC-rvm6aDF1bob8KrfTnw0y2m77QaHUUCZdo_5pa-a8YDnAb14qIbU2Ux8E00UN_pHylMzlc15JXssiJCjhdlU4_pkkRpaex-_IiYpK3r5XWGLBTXt_E0dAAP_40bv8sLYMyhb0g1qLLjllsB02LnHZMc-aEhhvL_QTknsWXOGgsHd3zo1ZrkzLLZ4246nyVW6HHzoC.w16zKoj8Bo80Ong-gFK15w/__results___files/__results___35_0.png\" alt=\"figure 1\"></p>\n<p><img src=\"https://www.kaggleusercontent.com/kf/218507867/eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..X8A_sbwng6grYb4Ff3xORw.jSu0TAkCoVwuhrW_adjEBYdB5fpsA_GiNgcA4Y8tfJ5XiQjsWIPYScsypAHxFequwg10jYFioa0-GXLqr0QCUWtAFdaD3phCl7FGiYPFqkSEvve7FYS_Q3muwGYjCsoICawjqAM7-0O_U_RiVGyOz450e_t7F-OrurcwfGpa5lV-UaEDwlch5kcV1BoTdDdTvx7z6-fljtH8X_MxIAuBP_QnzA_7TQiriy2A7YTzviNuUaDkmvJAxe25ucOjVhtduuobbl4Dugxhr1JuLfJQMqJxnoOJKYwT-KfDQTmz__ZKA-WhEZOXGPHU83yadGOA4bhGei4ga6VhknVUH--ZFHatlTDukyEKBYf4YEJ5skp8woFS1txmyylW0rv5-V51nDS-dQfjrw2_WHi377bea5tkzG7lm6ry8KhjJrBK7gH8--dhM0RPajfHhJAZtb2B0l3TOyzt6XFSsprarGQi8XvJ-UEheXAxZfhmiCNIA9FHHT21RgyYKBwHpQC-rvm6aDF1bob8KrfTnw0y2m77QaHUUCZdo_5pa-a8YDnAb14qIbU2Ux8E00UN_pHylMzlc15JXssiJCjhdlU4_pkkRpaex-_IiYpK3r5XWGLBTXt_E0dAAP_40bv8sLYMyhb0g1qLLjllsB02LnHZMc-aEhhvL_QTknsWXOGgsHd3zo1ZrkzLLZ4246nyVW6HHzoC.w16zKoj8Bo80Ong-gFK15w/__results___files/__results___35_1.png\" alt=\"figure 2\"></p>\n<ul>\n<li><strong>Figures 1 and 2</strong> show <strong>EfficientNet</strong> results:  <ul>\n<li>We notice decent generalization but some fluctuations in validation accuracy and loss from epoch to epoch.  </li>\n<li>The best public leaderboard score reached about 0.9476.</li></ul></li>\n</ul>\n<p><img src=\"https://www.kaggleusercontent.com/kf/218364683/eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..W4ne8TOi7psjitxhBUJb-w.ztPc5SZr3OT3ZlQ08JLJzzYsEYmQlcvx6c9jwHVSsVS7Z-D1ueftooQ_kqOTlWTrFJE43EHL008Vpnef-XLBrEudqCInmHkY3eTtnTqImmImBloiQyGa8N7MgjT_ufcFwQuWBQN9bdo9_gC6R-Zjp4glHNNbhv_NuHtZXuHEaFqqq_pkk6vaA-xBY8EuBmF_XII_BjelUtD4acwM9fmpbIA3AxWG11qzam5yt22gkDLEB930WG-1Z18qfrJiMhGthfainoNxXfxRVFdvnrf5YNr6xOtjHIdeF_lGK4e8ZTahrL4mRWGdqnpUPvP4I_7XOfytNlpfWL-DB9SzXB822EupaUML_jGh-CkyKnrYYvDbmh57ptQx3dwmFjFKEKuEJbB7ez1Gzh6D_ysYy0LtGwdOdwfpLvW286F7Gt35vL_ATsAOIZ79Qn7cOf0Qbnmo7Q8XP7vvpE7fy7DywVF8LnpkYdqMIuTO9q6pJg1Mi8nZEwkgKkH2EVvIeVHD6p-i-irZmv7Bugcm7xvSSFtEiYG_8HgeBJEusc-vpO4cwxkjYkWG29lCOqjRK285AZ1FhyyXx-LqXqXXlipmZWvWN9BPFQccQh5bfiUNz064JbowLvGGVjGN06cTFvzHKzvT2cSv-idHH5sXRF1kl0wWuw.kCV5oHHuLVRrABAsxe3PFg/__results___files/__results___11_0.png\" alt=\"figure 3\"></p>\n<p><img src=\"https://www.kaggleusercontent.com/kf/218364683/eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..W4ne8TOi7psjitxhBUJb-w.ztPc5SZr3OT3ZlQ08JLJzzYsEYmQlcvx6c9jwHVSsVS7Z-D1ueftooQ_kqOTlWTrFJE43EHL008Vpnef-XLBrEudqCInmHkY3eTtnTqImmImBloiQyGa8N7MgjT_ufcFwQuWBQN9bdo9_gC6R-Zjp4glHNNbhv_NuHtZXuHEaFqqq_pkk6vaA-xBY8EuBmF_XII_BjelUtD4acwM9fmpbIA3AxWG11qzam5yt22gkDLEB930WG-1Z18qfrJiMhGthfainoNxXfxRVFdvnrf5YNr6xOtjHIdeF_lGK4e8ZTahrL4mRWGdqnpUPvP4I_7XOfytNlpfWL-DB9SzXB822EupaUML_jGh-CkyKnrYYvDbmh57ptQx3dwmFjFKEKuEJbB7ez1Gzh6D_ysYy0LtGwdOdwfpLvW286F7Gt35vL_ATsAOIZ79Qn7cOf0Qbnmo7Q8XP7vvpE7fy7DywVF8LnpkYdqMIuTO9q6pJg1Mi8nZEwkgKkH2EVvIeVHD6p-i-irZmv7Bugcm7xvSSFtEiYG_8HgeBJEusc-vpO4cwxkjYkWG29lCOqjRK285AZ1FhyyXx-LqXqXXlipmZWvWN9BPFQccQh5bfiUNz064JbowLvGGVjGN06cTFvzHKzvT2cSv-idHH5sXRF1kl0wWuw.kCV5oHHuLVRrABAsxe3PFg/__results___files/__results___11_1.png\" alt=\"figure 4\"></p>\n<ul>\n<li><strong>Figures 3 and 4</strong> show <strong>RegNet</strong> results:  <ul>\n<li>These curves look quite “clean”, suggesting more stable learning behavior.  </li>\n<li>Although we achieved around 0.9300 on the public LB with limited time, I firmly believe that with an appropriate number of epochs, RegNet can surpass the 0.95 mark and potentially outperform EfficientNet.</li></ul></li>\n</ul>\n<p>Finally, I joined the competition only 9 days before its end, so I didn’t really have time to make plenty of submissions. I also chose to <strong>respect</strong> the Kaggle guideline:</p>\n<blockquote>\n  <p>“You cannot sign up to Kaggle from multiple accounts and therefore you cannot enter or submit from multiple accounts.”</p>\n</blockquote>\n<p>…unlike certain others in the Top 10 🥸. Nonetheless, had I been able to iterate a bit more on RegNet (e.g., tuning hyperparameters, adjusting the epoch count), I’m convinced it would have achieved even better performance like +0.95.</p>\n<h2>5. <strong>A Challenge with the Leaderboard</strong></h2>\n<p>One key issue with this competition was the absence of a <strong>split between the public and private leaderboard</strong>, making <strong>brute force</strong> submissions a highly effective strategy. By learning from the leaderboard itself, participants could iteratively fine-tune predictions rather than genuinely optimizing the model.</p>\n<p>This is apparent in many Top 10 solutions. For instance, <strong>bestwater</strong> (ranked 1st) openly admits to this approach in their post (<a href=\"https://www.kaggle.com/competitions/cidaut-ai-fake-scene-classification-2024/discussion/557589#3101028\" target=\"_blank\">link here</a>). Additionally, it's almost certain that <strong>solosid69</strong> (top 2, 4, 5, 6, 7) used the same technique—leveraging <strong>five different accounts</strong> 😶‍🌫️ to maximize submissions and brute force his way up the leaderboard.</p>\n<p>It’s worth noting that <strong>bestwater's honesty</strong> in admitting this method is commendable, as it underscores the bigger problem: the <strong>competition design</strong> itself. With <strong>no private leaderboard</strong>, brute-forcing overshadowed more rigorous model optimization efforts.  </p>\n<p>Even with thorough hyperparameter tuning, the results presented here are likely close to the best achievable <strong>without brute-forcing</strong>. Nevertheless, I <strong>enjoyed</strong> this competition a lot; it was a fun and rewarding experience that allowed me to <strong>discover new models</strong> and gain deeper insights into their performance on real-world data.</p>\n<h2>6. <strong>Sources</strong></h2>\n<ul>\n<li><p><strong>Reference Papers</strong>  </p>\n<ul>\n<li><a href=\"https://arxiv.org/abs/2010.11929\" target=\"_blank\">Vision Transformer (ViT)</a>  </li>\n<li><a href=\"https://arxiv.org/abs/2104.00298\" target=\"_blank\">EfficientNet V2</a>  </li>\n<li><a href=\"https://arxiv.org/abs/2003.13678\" target=\"_blank\">RegNet (Designing Network Design Spaces)</a></li></ul></li>\n<li><p><strong>Kaggle Notebooks</strong>  </p>\n<ul>\n<li><a href=\"https://www.kaggle.com/code/quentinducoulombier/top-10-vit-efficientnet-regnet-cidaut-ai\" target=\"_blank\">Notebook showcasing ViT, EfficientNet, and RegNet</a> ← <em>Most important notebook</em>  </li>\n<li><a href=\"https://www.kaggle.com/code/quentinducoulombier/cidaut-regnet\" target=\"_blank\">RegNet (3-way split) Notebook</a>  </li>\n<li><a href=\"https://www.kaggle.com/code/quentinducoulombier/cidaut-efficientnetv2\" target=\"_blank\">EfficientNet V2 (3-way split) Notebook</a>  </li>\n<li><a href=\"https://www.kaggle.com/code/quentinducoulombier/cidaut-vit\" target=\"_blank\">ViT (3-way split) Notebook</a></li></ul></li>\n</ul>",
      "rawMarkdown": "# Top 10th Place Solution for the CIDAUT AI Fake Scene Classification 2024 Competition\n\n---\n\n## 1. **Context**\n\n- **Business context**: [Competition Overview](https://www.kaggle.com/competitions/cidaut-ai-fake-scene-classification-2024/overview)  \n- **Data context**: [Competition Data](https://www.kaggle.com/competitions/cidaut-ai-fake-scene-classification-2024/data)\n\nIn this competition, the task was to classify images into two categories:  \n- **editada** (i.e., “fake” or retouched)  \n- **real** (i.e., an authentic, unedited image)\n\n---\n\n## 2. **Overview of the Approach**\n\n### 2.1 Models and algorithms used\n\nTo address this problem, we trained and compared **three image classification models** from the `torchvision.models` library:\n\n1. **Vision Transformer (ViT)**\n   - Model based on the paper [\"An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale\"](https://arxiv.org/abs/2010.11929).  \n   - Public score around **0.9263**.\n\n2. **EfficientNet V2**\n   - A variant of EfficientNet described in [EfficientNetV2: Smaller Models and Faster Training](https://arxiv.org/abs/2104.00298).  \n   - Best public score of **0.9476** (this placed us in the Top 10 on the leaderboard).\n\n3. **RegNet**\n   - A family of models introduced in the paper [\"Designing Network Design Spaces\"](https://arxiv.org/abs/2003.13678).  \n   - Public score of **0.9300** (though I suspect with proper tuning it could surpass EfficientNet).\n\nWe imported the official pretrained weights from `torchvision`, then replaced the last layer (`head` or `classifier`) to output 2 classes (one for the *editada* class and one for the *real* class).\n\n---\n\n### 2.2 Data preprocessing, feature engineering, and/or feature selection\n\n- **Image size**:  \n  We standardized all images to `224x224` (or `256x256` with a *CenterCrop(224)*).\n\n- **Augmentations**:  \n  - `RandomHorizontalFlip`, `RandomResizedCrop(224)`, etc. to enrich the dataset and reduce overfitting.\n  - The mean and std for normalization are the usual ImageNet values (`[0.485, 0.456, 0.406]` / `[0.229, 0.224, 0.225]`).\n\n- **No complex feature engineering** (the features are automatically learned by the CNNs/Transformers).  \n- **No manual feature elimination** (we used all channels and layers provided by the pretrained weights).\n\n---\n\n### 2.3 Validation strategy\n\nTo evaluate our models, we primarily used a **train/validation split**:\n\n- **In our final notebooks**:  \n  - A simple split (e.g., 95% / 5% or 85% / 15% depending on the iteration).  \n  - We tracked the `AUC` on the validation set and the Kaggle public leaderboard.\n\n- **Before making official submissions** (to test more strategies, e.g., a “three-way split”):  \n  - 70% / 15% / 15%, which gave us a mini local test set.  \n  - This helped us verify overfitting risks.  \n  - With EfficientNetV2 and RegNet, we repeatedly reached a train AUROC of 1.0, demonstrating that the models were powerful enough to achieve very strong results.\n\nIn the end, the best final validation approach mirroring the final LB was a 95% / 5% split, despite some risk of overfitting.\n\n---\n\n## 3. **Details of the Submission**\n\n### 3.1 Important/impactful strategies/decisions\n\n1. **Comparing three model families**:  \n   We knew that ViT (Vision Transformer), EfficientNet, and RegNet are all competitive for image classification.  \n   - The idea was to explore all three in parallel to find a balance among convergence speed, overfitting, and final score.\n\n2. **Learning rate and Scheduler**:  \n   - We fixed the `learning rate` at `5e-5` and applied a `StepLR(gamma=0.7)` to reduce the LR every epoch.  \n   - This played a crucial role in preventing overfitting (especially for RegNet).\n\n3. **Data augmentation**:  \n   - Horizontal flip, random crop\n\n4. **Choice of batch size**:  \n   - `batch_size=8` achieved the best results for each model.\n\n5. **EfficientNet V2**:  \n   - Clearly the top-performing model on this dataset, reaching **0.9476** on the leaderboard.  \n   - Lighter than RegNet, converges quickly, and seems to generalize better.\n\n### 3.2 Creative or non-obvious strategies/decisions\n\n- **Small test-time augmentation (TTA)**:  \n  - In a few runs, we averaged predictions from the horizontally flipped image + the original.  \n  - Very slight improvement on the LB, so we left it out in the final version to keep the code shorter.\n\n- **Comparison of a “three-way split” locally**:  \n  - With a mini local test set to estimate generalization.  \n  - This confirmed that RegNet (with more epochs) easily overfits (train AUC=1.0) while EfficientNet V2 was better at generalizing.\n\n### 3.3 What didn’t work well\n\n- **Aggressive augmentations** (e.g., extreme rotations, strong color jitter):  \n  - Paradoxically, this worsened the AUC. The dataset seemed too “straightforward” to benefit from heavy augmentations.\n\n- **Increasing input size to 384x384**:  \n  - No major improvement in our runs (and more expensive training).\n\n- **Stacking more final layers** or heavier *fine-tuning* of intermediate layers**:  \n  - We mostly froze the pretrained *backbones* in the first blocks and “unfroze” the last portion.  \n  - For ViT, fully fine-tuning didn’t significantly improve the final score.\n\n---\n\n## 4. **Personal Reflections**\n\nBelow are some sample plots of training and validation curves for each model tested:\n\n![figure 1](https://www.kaggleusercontent.com/kf/218507867/eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..X8A_sbwng6grYb4Ff3xORw.jSu0TAkCoVwuhrW_adjEBYdB5fpsA_GiNgcA4Y8tfJ5XiQjsWIPYScsypAHxFequwg10jYFioa0-GXLqr0QCUWtAFdaD3phCl7FGiYPFqkSEvve7FYS_Q3muwGYjCsoICawjqAM7-0O_U_RiVGyOz450e_t7F-OrurcwfGpa5lV-UaEDwlch5kcV1BoTdDdTvx7z6-fljtH8X_MxIAuBP_QnzA_7TQiriy2A7YTzviNuUaDkmvJAxe25ucOjVhtduuobbl4Dugxhr1JuLfJQMqJxnoOJKYwT-KfDQTmz__ZKA-WhEZOXGPHU83yadGOA4bhGei4ga6VhknVUH--ZFHatlTDukyEKBYf4YEJ5skp8woFS1txmyylW0rv5-V51nDS-dQfjrw2_WHi377bea5tkzG7lm6ry8KhjJrBK7gH8--dhM0RPajfHhJAZtb2B0l3TOyzt6XFSsprarGQi8XvJ-UEheXAxZfhmiCNIA9FHHT21RgyYKBwHpQC-rvm6aDF1bob8KrfTnw0y2m77QaHUUCZdo_5pa-a8YDnAb14qIbU2Ux8E00UN_pHylMzlc15JXssiJCjhdlU4_pkkRpaex-_IiYpK3r5XWGLBTXt_E0dAAP_40bv8sLYMyhb0g1qLLjllsB02LnHZMc-aEhhvL_QTknsWXOGgsHd3zo1ZrkzLLZ4246nyVW6HHzoC.w16zKoj8Bo80Ong-gFK15w/__results___files/__results___35_0.png)\n\n![figure 2](https://www.kaggleusercontent.com/kf/218507867/eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..X8A_sbwng6grYb4Ff3xORw.jSu0TAkCoVwuhrW_adjEBYdB5fpsA_GiNgcA4Y8tfJ5XiQjsWIPYScsypAHxFequwg10jYFioa0-GXLqr0QCUWtAFdaD3phCl7FGiYPFqkSEvve7FYS_Q3muwGYjCsoICawjqAM7-0O_U_RiVGyOz450e_t7F-OrurcwfGpa5lV-UaEDwlch5kcV1BoTdDdTvx7z6-fljtH8X_MxIAuBP_QnzA_7TQiriy2A7YTzviNuUaDkmvJAxe25ucOjVhtduuobbl4Dugxhr1JuLfJQMqJxnoOJKYwT-KfDQTmz__ZKA-WhEZOXGPHU83yadGOA4bhGei4ga6VhknVUH--ZFHatlTDukyEKBYf4YEJ5skp8woFS1txmyylW0rv5-V51nDS-dQfjrw2_WHi377bea5tkzG7lm6ry8KhjJrBK7gH8--dhM0RPajfHhJAZtb2B0l3TOyzt6XFSsprarGQi8XvJ-UEheXAxZfhmiCNIA9FHHT21RgyYKBwHpQC-rvm6aDF1bob8KrfTnw0y2m77QaHUUCZdo_5pa-a8YDnAb14qIbU2Ux8E00UN_pHylMzlc15JXssiJCjhdlU4_pkkRpaex-_IiYpK3r5XWGLBTXt_E0dAAP_40bv8sLYMyhb0g1qLLjllsB02LnHZMc-aEhhvL_QTknsWXOGgsHd3zo1ZrkzLLZ4246nyVW6HHzoC.w16zKoj8Bo80Ong-gFK15w/__results___files/__results___35_1.png)\n\n- **Figures 1 and 2** show **EfficientNet** results:  \n  - We notice decent generalization but some fluctuations in validation accuracy and loss from epoch to epoch.  \n  - The best public leaderboard score reached about 0.9476.\n\n![figure 3](https://www.kaggleusercontent.com/kf/218364683/eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..W4ne8TOi7psjitxhBUJb-w.ztPc5SZr3OT3ZlQ08JLJzzYsEYmQlcvx6c9jwHVSsVS7Z-D1ueftooQ_kqOTlWTrFJE43EHL008Vpnef-XLBrEudqCInmHkY3eTtnTqImmImBloiQyGa8N7MgjT_ufcFwQuWBQN9bdo9_gC6R-Zjp4glHNNbhv_NuHtZXuHEaFqqq_pkk6vaA-xBY8EuBmF_XII_BjelUtD4acwM9fmpbIA3AxWG11qzam5yt22gkDLEB930WG-1Z18qfrJiMhGthfainoNxXfxRVFdvnrf5YNr6xOtjHIdeF_lGK4e8ZTahrL4mRWGdqnpUPvP4I_7XOfytNlpfWL-DB9SzXB822EupaUML_jGh-CkyKnrYYvDbmh57ptQx3dwmFjFKEKuEJbB7ez1Gzh6D_ysYy0LtGwdOdwfpLvW286F7Gt35vL_ATsAOIZ79Qn7cOf0Qbnmo7Q8XP7vvpE7fy7DywVF8LnpkYdqMIuTO9q6pJg1Mi8nZEwkgKkH2EVvIeVHD6p-i-irZmv7Bugcm7xvSSFtEiYG_8HgeBJEusc-vpO4cwxkjYkWG29lCOqjRK285AZ1FhyyXx-LqXqXXlipmZWvWN9BPFQccQh5bfiUNz064JbowLvGGVjGN06cTFvzHKzvT2cSv-idHH5sXRF1kl0wWuw.kCV5oHHuLVRrABAsxe3PFg/__results___files/__results___11_0.png)\n\n![figure 4](https://www.kaggleusercontent.com/kf/218364683/eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..W4ne8TOi7psjitxhBUJb-w.ztPc5SZr3OT3ZlQ08JLJzzYsEYmQlcvx6c9jwHVSsVS7Z-D1ueftooQ_kqOTlWTrFJE43EHL008Vpnef-XLBrEudqCInmHkY3eTtnTqImmImBloiQyGa8N7MgjT_ufcFwQuWBQN9bdo9_gC6R-Zjp4glHNNbhv_NuHtZXuHEaFqqq_pkk6vaA-xBY8EuBmF_XII_BjelUtD4acwM9fmpbIA3AxWG11qzam5yt22gkDLEB930WG-1Z18qfrJiMhGthfainoNxXfxRVFdvnrf5YNr6xOtjHIdeF_lGK4e8ZTahrL4mRWGdqnpUPvP4I_7XOfytNlpfWL-DB9SzXB822EupaUML_jGh-CkyKnrYYvDbmh57ptQx3dwmFjFKEKuEJbB7ez1Gzh6D_ysYy0LtGwdOdwfpLvW286F7Gt35vL_ATsAOIZ79Qn7cOf0Qbnmo7Q8XP7vvpE7fy7DywVF8LnpkYdqMIuTO9q6pJg1Mi8nZEwkgKkH2EVvIeVHD6p-i-irZmv7Bugcm7xvSSFtEiYG_8HgeBJEusc-vpO4cwxkjYkWG29lCOqjRK285AZ1FhyyXx-LqXqXXlipmZWvWN9BPFQccQh5bfiUNz064JbowLvGGVjGN06cTFvzHKzvT2cSv-idHH5sXRF1kl0wWuw.kCV5oHHuLVRrABAsxe3PFg/__results___files/__results___11_1.png)\n\n- **Figures 3 and 4** show **RegNet** results:  \n  - These curves look quite “clean”, suggesting more stable learning behavior.  \n  - Although we achieved around 0.9300 on the public LB with limited time, I firmly believe that with an appropriate number of epochs, RegNet can surpass the 0.95 mark and potentially outperform EfficientNet.\n\nFinally, I joined the competition only 9 days before its end, so I didn’t really have time to make plenty of submissions. I also chose to **respect** the Kaggle guideline:\n\n> “You cannot sign up to Kaggle from multiple accounts and therefore you cannot enter or submit from multiple accounts.”\n\n...unlike certain others in the Top 10 🥸. Nonetheless, had I been able to iterate a bit more on RegNet (e.g., tuning hyperparameters, adjusting the epoch count), I’m convinced it would have achieved even better performance like +0.95.\n\n## 5. **A Challenge with the Leaderboard**\n\nOne key issue with this competition was the absence of a **split between the public and private leaderboard**, making **brute force** submissions a highly effective strategy. By learning from the leaderboard itself, participants could iteratively fine-tune predictions rather than genuinely optimizing the model.\n\nThis is apparent in many Top 10 solutions. For instance, **bestwater** (ranked 1st) openly admits to this approach in their post ([link here](https://www.kaggle.com/competitions/cidaut-ai-fake-scene-classification-2024/discussion/557589#3101028)). Additionally, it's almost certain that **solosid69** (top 2, 4, 5, 6, 7) used the same technique—leveraging **five different accounts** 😶‍🌫️ to maximize submissions and brute force his way up the leaderboard.\n\nIt’s worth noting that **bestwater's honesty** in admitting this method is commendable, as it underscores the bigger problem: the **competition design** itself. With **no private leaderboard**, brute-forcing overshadowed more rigorous model optimization efforts.  \n\nEven with thorough hyperparameter tuning, the results presented here are likely close to the best achievable **without brute-forcing**. Nevertheless, I **enjoyed** this competition a lot; it was a fun and rewarding experience that allowed me to **discover new models** and gain deeper insights into their performance on real-world data.\n\n## 6. **Sources**\n\n- **Reference Papers**  \n  - [Vision Transformer (ViT)](https://arxiv.org/abs/2010.11929)  \n  - [EfficientNet V2](https://arxiv.org/abs/2104.00298)  \n  - [RegNet (Designing Network Design Spaces)](https://arxiv.org/abs/2003.13678)\n\n- **Kaggle Notebooks**  \n  - [Notebook showcasing ViT, EfficientNet, and RegNet](https://www.kaggle.com/code/quentinducoulombier/top-10-vit-efficientnet-regnet-cidaut-ai) ← *Most important notebook*  \n  - [RegNet (3-way split) Notebook](https://www.kaggle.com/code/quentinducoulombier/cidaut-regnet)  \n  - [EfficientNet V2 (3-way split) Notebook](https://www.kaggle.com/code/quentinducoulombier/cidaut-efficientnetv2)  \n  - [ViT (3-way split) Notebook](https://www.kaggle.com/code/quentinducoulombier/cidaut-vit)\n\n",
      "votes": 2
    }
  ],
  "complete": true,
  "source": "live",
  "fetched_at": "2026-10-22T15:37:53Z",
  "competition_id": 87323,
  "competition_slug": "cidaut-ai-fake-scene-classification-2024",
  "team_id": 13200895,
  "solution_url": "/competitions/cidaut-ai-fake-scene-classification-2024/writeups/prepaucessing-10th-place-solution"
}