{
  "id": 391979,
  "title": "5th place solution ",
  "url": "/competitions/rsna-breast-cancer-detection/discussion/391979",
  "author_name": "NguyenThanhNhan",
  "post_date": "2023-03-03T09:54:36.401000",
  "votes": 23,
  "comment_count": 11,
  "views": 0,
  "content": "<p>Congratulations to all the winners and new competition GMs. Thank you to Kaggle team, the competition hosts and all other Kagglers who actively participated in the forum discussions. Part of our team solution was inspired by reading your generously shared ideas 💯</p>\n<p>I'm really impressed with other winning teams' solutions, in particular ones using multi-image, multi-view models. Our team failed to obtain good score with those architectures and just went with a simpler route.<br>\nOur final submission was mean-aggregation of 10 single-image models (5 folds x 2 backbones, efficientnetv2_s and efficientnet_b5_ns).</p>\n<p>There were 2 stages in the training process.</p>\n<ol>\n<li>Pre-train on VinDR data</li>\n<li>Finetune on Kaggle + DDSM</li>\n</ol>\n<p><strong>Pre-processing</strong></p>\n<p>All Kaggle and external data were pre-processed similarly.</p>\n<ul>\n<li>Original images resized to 1536 longest edge</li>\n<li>YOLOX trained at 640x640 to infer breast bounding boxes</li>\n<li>Cropped breast regions, then resized to 1536x1024</li>\n</ul>\n<p><strong>Pre-training</strong></p>\n<p>We converted VinDR lesion bounding box annotations to multiple lesion labels per image while discarded the coordinates. The two backbones were then multi-task pre-trained with BIRADS classification, breast density classification and lesions classification for 20 epochs.</p>\n<pre><code>model = timm.create_model(backbone_name)\nmodel.reset_classifier(0, \"\")\nmodel.birads_fc = nn.Linear(model.num_features, 5)\nmodel.density_fc = nn.Linear(model.num_features, 4)\nmodel.lesions_fc = nn.Linear(model.num_features,  11)\n\n...\n\nloss = cross_entropy(birads_logits, birads_labels) + cross_entropy(density_logits, density_labels) + binary_cross_entropy(lesions_logits, lesions_labels)\n</code></pre>\n<p><strong>Finetune</strong></p>\n<p>We loaded the last epoch checkpoints from first stage and continued fine-tuning the models for 10 epochs on Kaggle+DDSM data. The exact architecture can be found in our inference notebook ( <a href=\"https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble\" target=\"_blank\">https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble</a> ). It was a deep-supervision model with auxiliary losses on early blocks of effnet.</p>\n<p>There were many important tricks which greatly helped the fine-tuning part since the data was extremely imbalanced.</p>\n<ul>\n<li><p>Balanced batch sampler. Optimal ratios also varied greatly between models.</p>\n<ul>\n<li>1 positive - 7 negatives for effnetv2_s.</li>\n<li>1 positive - 3 negatives for effnet_b5.</li></ul></li>\n<li><p>Data augmentation</p>\n<ul>\n<li>Shift scale rotate breast regions</li>\n<li>Hflip/ Vflip/ BrightnessContrast</li>\n<li>CoarseDropout</li></ul></li>\n<li><p>Simple BCE loss worked best. Weighted BCE and focal loss were much worse or led to divergence.</p></li>\n</ul>\n<p><strong>Things that didn't work for us</strong></p>\n<ul>\n<li>Per breast side, we aggregated the image probabilities by different models and computed mean, min, max probs. Concatenating those with images' embeddings and feeding to xgboost/ MLP.</li>\n<li>Multi-image transformer</li>\n<li>MVCCL model (<a href=\"https://www.kaggle.com/code/hengck23/mvccl-model-for-admani-dataset\" target=\"_blank\">https://www.kaggle.com/code/hengck23/mvccl-model-for-admani-dataset</a><br>\n)</li>\n</ul>\n<p><strong>Links</strong><br>\nTraining: <a href=\"https://github.com/nhannguyen2709/rsna-breast\" target=\"_blank\">https://github.com/nhannguyen2709/rsna-breast</a><br>\nInference: <a href=\"https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble\" target=\"_blank\">https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble</a> </p>",
  "messages": [
    {
      "id": 2167152,
      "postDate": "2023-03-03T09:54:36.403Z",
      "content": "<p>Congratulations to all the winners and new competition GMs. Thank you to Kaggle team, the competition hosts and all other Kagglers who actively participated in the forum discussions. Part of our team solution was inspired by reading your generously shared ideas 💯</p>\n<p>I'm really impressed with other winning teams' solutions, in particular ones using multi-image, multi-view models. Our team failed to obtain good score with those architectures and just went with a simpler route.<br>\nOur final submission was mean-aggregation of 10 single-image models (5 folds x 2 backbones, efficientnetv2_s and efficientnet_b5_ns).</p>\n<p>There were 2 stages in the training process.</p>\n<ol>\n<li>Pre-train on VinDR data</li>\n<li>Finetune on Kaggle + DDSM</li>\n</ol>\n<p><strong>Pre-processing</strong></p>\n<p>All Kaggle and external data were pre-processed similarly.</p>\n<ul>\n<li>Original images resized to 1536 longest edge</li>\n<li>YOLOX trained at 640x640 to infer breast bounding boxes</li>\n<li>Cropped breast regions, then resized to 1536x1024</li>\n</ul>\n<p><strong>Pre-training</strong></p>\n<p>We converted VinDR lesion bounding box annotations to multiple lesion labels per image while discarded the coordinates. The two backbones were then multi-task pre-trained with BIRADS classification, breast density classification and lesions classification for 20 epochs.</p>\n<pre><code>model = timm.create_model(backbone_name)\nmodel.reset_classifier(0, \"\")\nmodel.birads_fc = nn.Linear(model.num_features, 5)\nmodel.density_fc = nn.Linear(model.num_features, 4)\nmodel.lesions_fc = nn.Linear(model.num_features,  11)\n\n...\n\nloss = cross_entropy(birads_logits, birads_labels) + cross_entropy(density_logits, density_labels) + binary_cross_entropy(lesions_logits, lesions_labels)\n</code></pre>\n<p><strong>Finetune</strong></p>\n<p>We loaded the last epoch checkpoints from first stage and continued fine-tuning the models for 10 epochs on Kaggle+DDSM data. The exact architecture can be found in our inference notebook ( <a href=\"https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble\" target=\"_blank\">https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble</a> ). It was a deep-supervision model with auxiliary losses on early blocks of effnet.</p>\n<p>There were many important tricks which greatly helped the fine-tuning part since the data was extremely imbalanced.</p>\n<ul>\n<li><p>Balanced batch sampler. Optimal ratios also varied greatly between models.</p>\n<ul>\n<li>1 positive - 7 negatives for effnetv2_s.</li>\n<li>1 positive - 3 negatives for effnet_b5.</li></ul></li>\n<li><p>Data augmentation</p>\n<ul>\n<li>Shift scale rotate breast regions</li>\n<li>Hflip/ Vflip/ BrightnessContrast</li>\n<li>CoarseDropout</li></ul></li>\n<li><p>Simple BCE loss worked best. Weighted BCE and focal loss were much worse or led to divergence.</p></li>\n</ul>\n<p><strong>Things that didn't work for us</strong></p>\n<ul>\n<li>Per breast side, we aggregated the image probabilities by different models and computed mean, min, max probs. Concatenating those with images' embeddings and feeding to xgboost/ MLP.</li>\n<li>Multi-image transformer</li>\n<li>MVCCL model (<a href=\"https://www.kaggle.com/code/hengck23/mvccl-model-for-admani-dataset\" target=\"_blank\">https://www.kaggle.com/code/hengck23/mvccl-model-for-admani-dataset</a><br>\n)</li>\n</ul>\n<p><strong>Links</strong><br>\nTraining: <a href=\"https://github.com/nhannguyen2709/rsna-breast\" target=\"_blank\">https://github.com/nhannguyen2709/rsna-breast</a><br>\nInference: <a href=\"https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble\" target=\"_blank\">https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble</a> </p>",
      "rawMarkdown": "Congratulations to all the winners and new competition GMs. Thank you to Kaggle team, the competition hosts and all other Kagglers who actively participated in the forum discussions. Part of our team solution was inspired by reading your generously shared ideas 💯\n\nI'm really impressed with other winning teams' solutions, in particular ones using multi-image, multi-view models. Our team failed to obtain good score with those architectures and just went with a simpler route.\nOur final submission was mean-aggregation of 10 single-image models (5 folds x 2 backbones, efficientnetv2_s and efficientnet_b5_ns).\n\nThere were 2 stages in the training process.\n1. Pre-train on VinDR data\n2. Finetune on Kaggle + DDSM\n\n**Pre-processing**\n\nAll Kaggle and external data were pre-processed similarly.\n* Original images resized to 1536 longest edge\n* YOLOX trained at 640x640 to infer breast bounding boxes\n* Cropped breast regions, then resized to 1536x1024\n\n\n**Pre-training**\n\nWe converted VinDR lesion bounding box annotations to multiple lesion labels per image while discarded the coordinates. The two backbones were then multi-task pre-trained with BIRADS classification, breast density classification and lesions classification for 20 epochs.\n\n```\nmodel = timm.create_model(backbone_name)\nmodel.reset_classifier(0, \"\")\nmodel.birads_fc = nn.Linear(model.num_features, 5)\nmodel.density_fc = nn.Linear(model.num_features, 4)\nmodel.lesions_fc = nn.Linear(model.num_features,  11)\n\n...\n\nloss = cross_entropy(birads_logits, birads_labels) + cross_entropy(density_logits, density_labels) + binary_cross_entropy(lesions_logits, lesions_labels)\n```\n\n**Finetune**\n\nWe loaded the last epoch checkpoints from first stage and continued fine-tuning the models for 10 epochs on Kaggle+DDSM data. The exact architecture can be found in our inference notebook ( https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble ). It was a deep-supervision model with auxiliary losses on early blocks of effnet.\n\nThere were many important tricks which greatly helped the fine-tuning part since the data was extremely imbalanced.\n* Balanced batch sampler. Optimal ratios also varied greatly between models.\n    * 1 positive - 7 negatives for effnetv2_s.\n    * 1 positive - 3 negatives for effnet_b5.\n* Data augmentation\n    * Shift scale rotate breast regions\n    * Hflip/ Vflip/ BrightnessContrast\n    * CoarseDropout\n\n* Simple BCE loss worked best. Weighted BCE and focal loss were much worse or led to divergence.\n\n**Things that didn't work for us**\n* Per breast side, we aggregated the image probabilities by different models and computed mean, min, max probs. Concatenating those with images' embeddings and feeding to xgboost/ MLP.\n* Multi-image transformer\n* MVCCL model (https://www.kaggle.com/code/hengck23/mvccl-model-for-admani-dataset\n)\n\n**Links**\nTraining: https://github.com/nhannguyen2709/rsna-breast\nInference: https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble ",
      "votes": 23
    },
    {
      "id": 2167279,
      "postDate": "2023-03-03T11:35:26.777Z",
      "content": "<blockquote>\n  <p>Balanced batch sampler. Optimal ratios also varied greatly between models.</p>\n</blockquote>\n<p>Yet another hyperparameter to tune. 😃 Its not easy to be in the deep learning business. Congratulations! 👍</p>",
      "rawMarkdown": ">Balanced batch sampler. Optimal ratios also varied greatly between models.\n\nYet another hyperparameter to tune. 😃 Its not easy to be in the deep learning business. Congratulations! 👍",
      "votes": 2
    },
    {
      "id": 2263362,
      "postDate": "2023-05-17T14:27:47.193Z",
      "content": "<p>Hello <a href=\"https://www.kaggle.com/andy2709\" target=\"_blank\">@andy2709</a> i was going through your code and try to replicate the results. The readme file is still incomplete with pretraining and validation steps missing. I ha e the following two questions:</p>\n<ol>\n<li>So for pretraining, is running the pretraining.py file sufficient?</li>\n<li>For training train.py or train_multi.py file is necessary?</li>\n</ol>\n<p>I emailed you from my official email about these questions. Thanks in advance </p>",
      "rawMarkdown": "Hello @andy2709 i was going through your code and try to replicate the results. The readme file is still incomplete with pretraining and validation steps missing. I ha e the following two questions:\n\n1. So for pretraining, is running the pretraining.py file sufficient?\n2. For training train.py or train_multi.py file is necessary?\n\nI emailed you from my official email about these questions. Thanks in advance "
    },
    {
      "id": 2171343,
      "postDate": "2023-03-06T17:52:37.710Z",
      "content": "<p>Congrats!!!, would you be so kind to share the Pre-training model code?. </p>\n<p>Thank in advance.</p>",
      "rawMarkdown": "Congrats!!!, would you be so kind to share the Pre-training model code?. \n\nThank in advance."
    },
    {
      "id": 2171149,
      "postDate": "2023-03-06T14:49:45.767Z",
      "content": "<p>Congratulations on being among the top.<br>\nThe link is broken: <a href=\"https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble)\" target=\"_blank\">https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble)</a>. <br>\nAlso could you kindly release the training pipeline. It is good to learn in detail</p>",
      "rawMarkdown": "Congratulations on being among the top.\nThe link is broken: https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble). \nAlso could you kindly release the training pipeline. It is good to learn in detail",
      "replies": [
        {
          "id": 2171529,
          "postDate": "2023-03-06T21:29:23.530Z",
          "content": "<p><a href=\"https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble\" target=\"_blank\">https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble</a></p>",
          "rawMarkdown": "https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble\n",
          "votes": 2
        },
        {
          "id": 2172058,
          "postDate": "2023-03-07T09:26:22.227Z",
          "content": "<p><a href=\"https://www.kaggle.com/namgalielei\" target=\"_blank\">@namgalielei</a> We might release training code after LECR ends 😅</p>",
          "rawMarkdown": "@namgalielei We might release training code after LECR ends 😅",
          "replies": [
            {
              "id": 2172455,
              "postDate": "2023-03-07T14:43:22.220Z",
              "content": "<p>Sure. Hope to see your team at the high place</p>",
              "rawMarkdown": "Sure. Hope to see your team at the high place"
            },
            {
              "id": 2186886,
              "postDate": "2023-03-18T07:56:13.640Z",
              "content": "<p>Now LECR has ended. Would you be kindly release the training code ? <a href=\"https://www.kaggle.com/andy2709\" target=\"_blank\">@andy2709</a> </p>",
              "rawMarkdown": "Now LECR has ended. Would you be kindly release the training code ? @andy2709 "
            }
          ]
        }
      ]
    },
    {
      "id": 2167651,
      "postDate": "2023-03-03T16:23:17.013Z",
      "content": "<p>Thank you for sharing and congratulations. What is the input for first (pre-train) stage? <br>\nAs far as I understand: </p>\n<ul>\n<li>input image</li>\n<li>output - 3 classifier</li>\n</ul>\n<p>Is it correct?</p>\n<p>Can you share model class for this stage? Thank you!</p>",
      "rawMarkdown": "Thank you for sharing and congratulations. What is the input for first (pre-train) stage? \nAs far as I understand: \n- input image\n- output - 3 classifier\n\nIs it correct?\n\nCan you share model class for this stage? Thank you!",
      "replies": [
        {
          "id": 2168364,
          "postDate": "2023-03-04T07:07:41.093Z",
          "content": "<p>Hey Remek, I put the model + loss compute code in my post. You can take a look at Vindr dataset. It has 5000 patient ids, each patient has 4 images (left and right MLO/ CC), and each image has BIRADS labels (from 1-5), density labels ( A-D) and bounding boxes of lesions. After pre-training, I only kept the backbone for fine-tuning and removed the three Linear heads.</p>",
          "rawMarkdown": "Hey Remek, I put the model + loss compute code in my post. You can take a look at Vindr dataset. It has 5000 patient ids, each patient has 4 images (left and right MLO/ CC), and each image has BIRADS labels (from 1-5), density labels ( A-D) and bounding boxes of lesions. After pre-training, I only kept the backbone for fine-tuning and removed the three Linear heads.",
          "votes": 2,
          "replies": [
            {
              "id": 2168381,
              "postDate": "2023-03-04T07:30:36.513Z",
              "content": "<p>I understand. Thank you for explenations. 👍</p>",
              "rawMarkdown": "I understand. Thank you for explenations. 👍"
            }
          ]
        }
      ]
    }
  ],
  "comments": [
    {
      "id": 2167279,
      "author_name": "Antti Isosalo",
      "author_url": "",
      "post_date": "2023-03-03T11:35:26.777000",
      "content": "<blockquote>\n  <p>Balanced batch sampler. Optimal ratios also varied greatly between models.</p>\n</blockquote>\n<p>Yet another hyperparameter to tune. 😃 Its not easy to be in the deep learning business. Congratulations! 👍</p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 2263362,
      "author_name": "Shantanu Ghosh",
      "author_url": "",
      "post_date": "2023-05-17T14:27:47.193000",
      "content": "<p>Hello <a href=\"https://www.kaggle.com/andy2709\" target=\"_blank\">@andy2709</a> i was going through your code and try to replicate the results. The readme file is still incomplete with pretraining and validation steps missing. I ha e the following two questions:</p>\n<ol>\n<li>So for pretraining, is running the pretraining.py file sufficient?</li>\n<li>For training train.py or train_multi.py file is necessary?</li>\n</ol>\n<p>I emailed you from my official email about these questions. Thanks in advance </p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 2171343,
      "author_name": "Pablo Larrosa",
      "author_url": "",
      "post_date": "2023-03-06T17:52:37.710000",
      "content": "<p>Congrats!!!, would you be so kind to share the Pre-training model code?. </p>\n<p>Thank in advance.</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 2171149,
      "author_name": "Liam Nguyen",
      "author_url": "",
      "post_date": "2023-03-06T14:49:45.767000",
      "content": "<p>Congratulations on being among the top.<br>\nThe link is broken: <a href=\"https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble)\" target=\"_blank\">https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble)</a>. <br>\nAlso could you kindly release the training pipeline. It is good to learn in detail</p>",
      "votes": 0,
      "replies": [
        {
          "id": 2171529,
          "author_name": "Remek Kinas",
          "author_url": "",
          "post_date": "2023-03-06T21:29:23.530000",
          "content": "<p><a href=\"https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble\" target=\"_blank\">https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble</a></p>",
          "votes": 2,
          "replies": []
        },
        {
          "id": 2172058,
          "author_name": "NguyenThanhNhan",
          "author_url": "",
          "post_date": "2023-03-07T09:26:22.227000",
          "content": "<p><a href=\"https://www.kaggle.com/namgalielei\" target=\"_blank\">@namgalielei</a> We might release training code after LECR ends 😅</p>",
          "votes": 0,
          "replies": [
            {
              "id": 2172455,
              "author_name": "Liam Nguyen",
              "author_url": "",
              "post_date": "2023-03-07T14:43:22.220000",
              "content": "<p>Sure. Hope to see your team at the high place</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 2186886,
              "author_name": "Liam Nguyen",
              "author_url": "",
              "post_date": "2023-03-18T07:56:13.640000",
              "content": "<p>Now LECR has ended. Would you be kindly release the training code ? <a href=\"https://www.kaggle.com/andy2709\" target=\"_blank\">@andy2709</a> </p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 2167651,
      "author_name": "Remek Kinas",
      "author_url": "",
      "post_date": "2023-03-03T16:23:17.013000",
      "content": "<p>Thank you for sharing and congratulations. What is the input for first (pre-train) stage? <br>\nAs far as I understand: </p>\n<ul>\n<li>input image</li>\n<li>output - 3 classifier</li>\n</ul>\n<p>Is it correct?</p>\n<p>Can you share model class for this stage? Thank you!</p>",
      "votes": 0,
      "replies": [
        {
          "id": 2168364,
          "author_name": "NguyenThanhNhan",
          "author_url": "",
          "post_date": "2023-03-04T07:07:41.093000",
          "content": "<p>Hey Remek, I put the model + loss compute code in my post. You can take a look at Vindr dataset. It has 5000 patient ids, each patient has 4 images (left and right MLO/ CC), and each image has BIRADS labels (from 1-5), density labels ( A-D) and bounding boxes of lesions. After pre-training, I only kept the backbone for fine-tuning and removed the three Linear heads.</p>",
          "votes": 2,
          "replies": [
            {
              "id": 2168381,
              "author_name": "Remek Kinas",
              "author_url": "",
              "post_date": "2023-03-04T07:30:36.513000",
              "content": "<p>I understand. Thank you for explenations. 👍</p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "2167152": "Congratulations to all the winners and new competition GMs. Thank you to Kaggle team, the competition hosts and all other Kagglers who actively participated in the forum discussions. Part of our team solution was inspired by reading your generously shared ideas 💯\n\nI'm really impressed with other winning teams' solutions, in particular ones using multi-image, multi-view models. Our team failed to obtain good score with those architectures and just went with a simpler route.\nOur final submission was mean-aggregation of 10 single-image models (5 folds x 2 backbones, efficientnetv2_s and efficientnet_b5_ns).\n\nThere were 2 stages in the training process.\n1. Pre-train on VinDR data\n2. Finetune on Kaggle + DDSM\n\n**Pre-processing**\n\nAll Kaggle and external data were pre-processed similarly.\n* Original images resized to 1536 longest edge\n* YOLOX trained at 640x640 to infer breast bounding boxes\n* Cropped breast regions, then resized to 1536x1024\n\n\n**Pre-training**\n\nWe converted VinDR lesion bounding box annotations to multiple lesion labels per image while discarded the coordinates. The two backbones were then multi-task pre-trained with BIRADS classification, breast density classification and lesions classification for 20 epochs.\n\n```\nmodel = timm.create_model(backbone_name)\nmodel.reset_classifier(0, \"\")\nmodel.birads_fc = nn.Linear(model.num_features, 5)\nmodel.density_fc = nn.Linear(model.num_features, 4)\nmodel.lesions_fc = nn.Linear(model.num_features,  11)\n\n...\n\nloss = cross_entropy(birads_logits, birads_labels) + cross_entropy(density_logits, density_labels) + binary_cross_entropy(lesions_logits, lesions_labels)\n```\n\n**Finetune**\n\nWe loaded the last epoch checkpoints from first stage and continued fine-tuning the models for 10 epochs on Kaggle+DDSM data. The exact architecture can be found in our inference notebook ( https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble ). It was a deep-supervision model with auxiliary losses on early blocks of effnet.\n\nThere were many important tricks which greatly helped the fine-tuning part since the data was extremely imbalanced.\n* Balanced batch sampler. Optimal ratios also varied greatly between models.\n    * 1 positive - 7 negatives for effnetv2_s.\n    * 1 positive - 3 negatives for effnet_b5.\n* Data augmentation\n    * Shift scale rotate breast regions\n    * Hflip/ Vflip/ BrightnessContrast\n    * CoarseDropout\n\n* Simple BCE loss worked best. Weighted BCE and focal loss were much worse or led to divergence.\n\n**Things that didn't work for us**\n* Per breast side, we aggregated the image probabilities by different models and computed mean, min, max probs. Concatenating those with images' embeddings and feeding to xgboost/ MLP.\n* Multi-image transformer\n* MVCCL model (https://www.kaggle.com/code/hengck23/mvccl-model-for-admani-dataset\n)\n\n**Links**\nTraining: https://github.com/nhannguyen2709/rsna-breast\nInference: https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble ",
    "2167279": ">Balanced batch sampler. Optimal ratios also varied greatly between models.\n\nYet another hyperparameter to tune. 😃 Its not easy to be in the deep learning business. Congratulations! 👍",
    "2263362": "Hello @andy2709 i was going through your code and try to replicate the results. The readme file is still incomplete with pretraining and validation steps missing. I ha e the following two questions:\n\n1. So for pretraining, is running the pretraining.py file sufficient?\n2. For training train.py or train_multi.py file is necessary?\n\nI emailed you from my official email about these questions. Thanks in advance ",
    "2171343": "Congrats!!!, would you be so kind to share the Pre-training model code?. \n\nThank in advance.",
    "2171149": "Congratulations on being among the top.\nThe link is broken: https://www.kaggle.com/code/hoanganhpham/fork-of-rsna-bcd-ensemble). \nAlso could you kindly release the training pipeline. It is good to learn in detail",
    "2167651": "Thank you for sharing and congratulations. What is the input for first (pre-train) stage? \nAs far as I understand: \n- input image\n- output - 3 classifier\n\nIs it correct?\n\nCan you share model class for this stage? Thank you!"
  }
}