{
  "id": 390974,
  "title": "6th Place Solution: Multi-view Multi-lateral Multi-stage Approach ",
  "url": "/competitions/rsna-breast-cancer-detection/discussion/390974",
  "author_name": "RabotniKuma",
  "post_date": "2023-02-28T02:16:14.507000",
  "votes": 101,
  "comment_count": 33,
  "views": 0,
  "content": "<p>First of all, I would like to express deep gratitude to the competition organisers and the Kaggle team. The competition dataset is of very high quality, and we would be happy if our solution could contribute to improve the quality of breast cancer screening. I would also like to thank my teammates who struggled together with me throughout the competition.<br>\nFinally, big congratulations to all the winners (and to ourselves, three new competitions Grandmasters)! </p>\n<h1>Preprocessing</h1>\n<ul>\n<li>Original image arrays were resized into 2048 x 2048 x 1</li>\n<li>VOI-LUT was applied to all images</li>\n<li>Images were then cropped to exclude blank space<ul>\n<li>YOLOX model was trained to generate breast bbox</li>\n<li>Compared to simple rule-based breast extraction, YOLOX cropped images usually have a smaller region, which seemed to prevent our models from overfitting</li>\n<li>In order to shorten inference time, we used simple rule-based crop during inference</li>\n<li>Images were cropped with a random margin during training as augmentation</li>\n<li>Bbox mix (YOLOX crop + rule-based crop) were also used as augmentation</li>\n<li>Cropped images are resized to an aspect ratio of 2:1 (1024 x 512 or 1536 x 768)</li></ul></li>\n<li>A wide range of augmentations were used <ul>\n<li>Affine transform, V/H flip, brightness/contrast, blur, CLAHE, distortion, dropout</li></ul></li>\n</ul>\n<h1>Model architectures</h1>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1973217%2Fd4438a7bcbaf552a03df881ade23a0de%2FRSNA-Mammo-3.svg?generation=1677551759021366&amp;alt=media\" alt=\"\"><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1973217%2F5702736cffb022faafcd9fe8b04b9edc%2FRSNA-Mammo.svg?generation=1677551773315924&amp;alt=media\" alt=\"\"><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1973217%2Fbe83f5153c2966c8ad8a8a986fdbc569%2FRSNA-Mammo-2.svg?generation=1677551796605732&amp;alt=media\" alt=\"\"></p>\n<h2>Some key results</h2>\n<table>\n<thead>\n<tr>\n<th>Model name</th>\n<th>Description</th>\n<th>CV</th>\n<th>Public LB</th>\n<th>Private LB</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Aug07lr0</td>\n<td>MV, 1024x512</td>\n<td>0.493</td>\n<td>0.64</td>\n<td>0.46</td>\n</tr>\n<tr>\n<td>Res02lr0</td>\n<td>MV, 1536x768</td>\n<td>0.488</td>\n<td>0.59</td>\n<td>0.46</td>\n</tr>\n<tr>\n<td>Res02mod2</td>\n<td>MVF, 1536x768</td>\n<td>0.516</td>\n<td>-</td>\n<td>-</td>\n</tr>\n<tr>\n<td>Res02mod3</td>\n<td>MVF, 1536x768</td>\n<td>0.525</td>\n<td>0.63</td>\n<td>0.48</td>\n</tr>\n<tr>\n<td>charm_convnext_small_multi_lat</td>\n<td>MVL, 1024x512</td>\n<td>0.498</td>\n<td>0.60</td>\n<td>0.50</td>\n</tr>\n</tbody>\n</table>\n<h1>Some tricks for training</h1>\n<ul>\n<li>Due to the unstable nature of PF1 metric, area under precision recall curve (AUCPR) worked well as a surrogate metric<ul>\n<li>AUCPRLoss (<a href=\"https://github.com/Shlomix/global_objectives_pytorch\" target=\"_blank\">https://github.com/Shlomix/global_objectives_pytorch</a>)</li></ul></li>\n<li>The model performance is still unstable! We used exponential moving average (EMA), simple average weights</li>\n<li>Using auxiliary loss (age, biopsy, etc.) improved the performance</li>\n<li>Convnext (v1) was the best backbone for this task</li>\n</ul>\n<h1>Ensemble</h1>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1973217%2F355889cbe156ce03999e4ea891ba30d4%2FRSNA-Mammo-4.svg?generation=1677551811042501&amp;alt=media\" alt=\"\"><br>\nAlso, our best submission scored private LB 0.53, but it was not chosen because it has lower CV and public LB than our selected submissions.</p>\n<h1>Things did not work</h1>\n<ul>\n<li>Positive weight, oversampling, weighted samplers, etc. did not work<ul>\n<li>They seemed to work when you have a weak model, but not no longer once you have a good enough model</li></ul></li>\n<li>Focal loss and label smoothing did not improve CV</li>\n<li>Vanilla BCE is all you need</li>\n<li>Mixup did not work</li>\n<li>We tried pseudo-labeling and pretraining on external datasets (VINDR and DDSM), but there was no clear improvement in both CV and LB</li>\n</ul>\n<h1>Code</h1>\n<ul>\n<li>Submission notebook -&gt; <a href=\"https://www.kaggle.com/code/amanatsu/rsna-mammo-rejection-ensemble-v2-ishikei?scriptVersionId=120432251\" target=\"_blank\">https://www.kaggle.com/code/amanatsu/rsna-mammo-rejection-ensemble-v2-ishikei?scriptVersionId=120432251</a></li>\n<li>RabotniKuma part -&gt; <a href=\"https://github.com/analokmaus/kaggle-rsna-breast-cancer\" target=\"_blank\">https://github.com/analokmaus/kaggle-rsna-breast-cancer</a></li>\n<li>YOLOX(ishikei) part -&gt; <a href=\"https://github.com/ishikei14k/RSNA_Screening_Mammography_Breast_Cancer_Detection\" target=\"_blank\">https://github.com/ishikei14k/RSNA_Screening_Mammography_Breast_Cancer_Detection</a></li>\n<li>Charmq part -&gt; <a href=\"https://github.com/tyamaguchi17/rsna_mammo\" target=\"_blank\">https://github.com/tyamaguchi17/rsna_mammo</a></li>\n</ul>",
  "messages": [
    {
      "id": 2162113,
      "postDate": "2023-02-28T02:16:14.507Z",
      "content": "<p>First of all, I would like to express deep gratitude to the competition organisers and the Kaggle team. The competition dataset is of very high quality, and we would be happy if our solution could contribute to improve the quality of breast cancer screening. I would also like to thank my teammates who struggled together with me throughout the competition.<br>\nFinally, big congratulations to all the winners (and to ourselves, three new competitions Grandmasters)! </p>\n<h1>Preprocessing</h1>\n<ul>\n<li>Original image arrays were resized into 2048 x 2048 x 1</li>\n<li>VOI-LUT was applied to all images</li>\n<li>Images were then cropped to exclude blank space<ul>\n<li>YOLOX model was trained to generate breast bbox</li>\n<li>Compared to simple rule-based breast extraction, YOLOX cropped images usually have a smaller region, which seemed to prevent our models from overfitting</li>\n<li>In order to shorten inference time, we used simple rule-based crop during inference</li>\n<li>Images were cropped with a random margin during training as augmentation</li>\n<li>Bbox mix (YOLOX crop + rule-based crop) were also used as augmentation</li>\n<li>Cropped images are resized to an aspect ratio of 2:1 (1024 x 512 or 1536 x 768)</li></ul></li>\n<li>A wide range of augmentations were used <ul>\n<li>Affine transform, V/H flip, brightness/contrast, blur, CLAHE, distortion, dropout</li></ul></li>\n</ul>\n<h1>Model architectures</h1>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1973217%2Fd4438a7bcbaf552a03df881ade23a0de%2FRSNA-Mammo-3.svg?generation=1677551759021366&amp;alt=media\" alt=\"\"><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1973217%2F5702736cffb022faafcd9fe8b04b9edc%2FRSNA-Mammo.svg?generation=1677551773315924&amp;alt=media\" alt=\"\"><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1973217%2Fbe83f5153c2966c8ad8a8a986fdbc569%2FRSNA-Mammo-2.svg?generation=1677551796605732&amp;alt=media\" alt=\"\"></p>\n<h2>Some key results</h2>\n<table>\n<thead>\n<tr>\n<th>Model name</th>\n<th>Description</th>\n<th>CV</th>\n<th>Public LB</th>\n<th>Private LB</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Aug07lr0</td>\n<td>MV, 1024x512</td>\n<td>0.493</td>\n<td>0.64</td>\n<td>0.46</td>\n</tr>\n<tr>\n<td>Res02lr0</td>\n<td>MV, 1536x768</td>\n<td>0.488</td>\n<td>0.59</td>\n<td>0.46</td>\n</tr>\n<tr>\n<td>Res02mod2</td>\n<td>MVF, 1536x768</td>\n<td>0.516</td>\n<td>-</td>\n<td>-</td>\n</tr>\n<tr>\n<td>Res02mod3</td>\n<td>MVF, 1536x768</td>\n<td>0.525</td>\n<td>0.63</td>\n<td>0.48</td>\n</tr>\n<tr>\n<td>charm_convnext_small_multi_lat</td>\n<td>MVL, 1024x512</td>\n<td>0.498</td>\n<td>0.60</td>\n<td>0.50</td>\n</tr>\n</tbody>\n</table>\n<h1>Some tricks for training</h1>\n<ul>\n<li>Due to the unstable nature of PF1 metric, area under precision recall curve (AUCPR) worked well as a surrogate metric<ul>\n<li>AUCPRLoss (<a href=\"https://github.com/Shlomix/global_objectives_pytorch\" target=\"_blank\">https://github.com/Shlomix/global_objectives_pytorch</a>)</li></ul></li>\n<li>The model performance is still unstable! We used exponential moving average (EMA), simple average weights</li>\n<li>Using auxiliary loss (age, biopsy, etc.) improved the performance</li>\n<li>Convnext (v1) was the best backbone for this task</li>\n</ul>\n<h1>Ensemble</h1>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1973217%2F355889cbe156ce03999e4ea891ba30d4%2FRSNA-Mammo-4.svg?generation=1677551811042501&amp;alt=media\" alt=\"\"><br>\nAlso, our best submission scored private LB 0.53, but it was not chosen because it has lower CV and public LB than our selected submissions.</p>\n<h1>Things did not work</h1>\n<ul>\n<li>Positive weight, oversampling, weighted samplers, etc. did not work<ul>\n<li>They seemed to work when you have a weak model, but not no longer once you have a good enough model</li></ul></li>\n<li>Focal loss and label smoothing did not improve CV</li>\n<li>Vanilla BCE is all you need</li>\n<li>Mixup did not work</li>\n<li>We tried pseudo-labeling and pretraining on external datasets (VINDR and DDSM), but there was no clear improvement in both CV and LB</li>\n</ul>\n<h1>Code</h1>\n<ul>\n<li>Submission notebook -&gt; <a href=\"https://www.kaggle.com/code/amanatsu/rsna-mammo-rejection-ensemble-v2-ishikei?scriptVersionId=120432251\" target=\"_blank\">https://www.kaggle.com/code/amanatsu/rsna-mammo-rejection-ensemble-v2-ishikei?scriptVersionId=120432251</a></li>\n<li>RabotniKuma part -&gt; <a href=\"https://github.com/analokmaus/kaggle-rsna-breast-cancer\" target=\"_blank\">https://github.com/analokmaus/kaggle-rsna-breast-cancer</a></li>\n<li>YOLOX(ishikei) part -&gt; <a href=\"https://github.com/ishikei14k/RSNA_Screening_Mammography_Breast_Cancer_Detection\" target=\"_blank\">https://github.com/ishikei14k/RSNA_Screening_Mammography_Breast_Cancer_Detection</a></li>\n<li>Charmq part -&gt; <a href=\"https://github.com/tyamaguchi17/rsna_mammo\" target=\"_blank\">https://github.com/tyamaguchi17/rsna_mammo</a></li>\n</ul>",
      "rawMarkdown": "First of all, I would like to express deep gratitude to the competition organisers and the Kaggle team. The competition dataset is of very high quality, and we would be happy if our solution could contribute to improve the quality of breast cancer screening. I would also like to thank my teammates who struggled together with me throughout the competition.\nFinally, big congratulations to all the winners (and to ourselves, three new competitions Grandmasters)! \n\n\n# Preprocessing\n- Original image arrays were resized into 2048 x 2048 x 1\n- VOI-LUT was applied to all images\n- Images were then cropped to exclude blank space\n - YOLOX model was trained to generate breast bbox\n - Compared to simple rule-based breast extraction, YOLOX cropped images usually have a smaller region, which seemed to prevent our models from overfitting\n - In order to shorten inference time, we used simple rule-based crop during inference\n - Images were cropped with a random margin during training as augmentation\n - Bbox mix (YOLOX crop + rule-based crop) were also used as augmentation\n - Cropped images are resized to an aspect ratio of 2:1 (1024 x 512 or 1536 x 768)\n- A wide range of augmentations were used \n - Affine transform, V/H flip, brightness/contrast, blur, CLAHE, distortion, dropout\n\n# Model architectures\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1973217%2Fd4438a7bcbaf552a03df881ade23a0de%2FRSNA-Mammo-3.svg?generation=1677551759021366&alt=media)![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1973217%2F5702736cffb022faafcd9fe8b04b9edc%2FRSNA-Mammo.svg?generation=1677551773315924&alt=media)![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1973217%2Fbe83f5153c2966c8ad8a8a986fdbc569%2FRSNA-Mammo-2.svg?generation=1677551796605732&alt=media)\n## Some key results\n| Model name | Description                       | CV    | Public LB | Private LB |\n|-------------|-----------------------------------|-------|-----------|------------|\n| Aug07lr0    | MV, 1024x512        | 0.493 | 0.64      | 0.46       |\n| Res02lr0    | MV, 1536x768        | 0.488 | 0.59      | 0.46       |\n| Res02mod2   | MVF, 1536x768 | 0.516 | -         | -          |\n| Res02mod3   | MVF, 1536x768 | 0.525 | 0.63      | 0.48       |\n| charm_convnext_small_multi_lat  | MVL, 1024x512 | 0.498 | 0.60      | 0.50     |\n\n\n# Some tricks for training\n- Due to the unstable nature of PF1 metric, area under precision recall curve (AUCPR) worked well as a surrogate metric\n - AUCPRLoss (https://github.com/Shlomix/global_objectives_pytorch)\n- The model performance is still unstable! We used exponential moving average (EMA), simple average weights\n- Using auxiliary loss (age, biopsy, etc.) improved the performance\n- Convnext (v1) was the best backbone for this task\n\n# Ensemble\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1973217%2F355889cbe156ce03999e4ea891ba30d4%2FRSNA-Mammo-4.svg?generation=1677551811042501&alt=media)\nAlso, our best submission scored private LB 0.53, but it was not chosen because it has lower CV and public LB than our selected submissions.\n\n# Things did not work\n- Positive weight, oversampling, weighted samplers, etc. did not work\n - They seemed to work when you have a weak model, but not no longer once you have a good enough model\n- Focal loss and label smoothing did not improve CV\n- Vanilla BCE is all you need\n- Mixup did not work\n- We tried pseudo-labeling and pretraining on external datasets (VINDR and DDSM), but there was no clear improvement in both CV and LB\n\n# Code\n- Submission notebook -> https://www.kaggle.com/code/amanatsu/rsna-mammo-rejection-ensemble-v2-ishikei?scriptVersionId=120432251\n- RabotniKuma part -> https://github.com/analokmaus/kaggle-rsna-breast-cancer\n- YOLOX(ishikei) part -> https://github.com/ishikei14k/RSNA_Screening_Mammography_Breast_Cancer_Detection\n- Charmq part -> https://github.com/tyamaguchi17/rsna_mammo",
      "votes": 101
    },
    {
      "id": 2163523,
      "postDate": "2023-02-28T22:07:15.377Z",
      "content": "<p>Congratulations! You have great solution, great score …. but … I looked into your github - masterpiece of code module management. Configs management - brilliant. I downloaded this code to learn from you how to write great competition code. Guys - you are great! Looking in such repository is the best takeaway and learning from me. Thank you for sharing such things.</p>",
      "rawMarkdown": "Congratulations! You have great solution, great score …. but … I looked into your github - masterpiece of code module management. Configs management - brilliant. I downloaded this code to learn from you how to write great competition code. Guys - you are great! Looking in such repository is the best takeaway and learning from me. Thank you for sharing such things.",
      "votes": 5
    },
    {
      "id": 2162709,
      "postDate": "2023-02-28T11:27:45.363Z",
      "content": "<p>Great write-up. Thanks for sharing your approach. </p>",
      "rawMarkdown": "Great write-up. Thanks for sharing your approach. ",
      "votes": 3
    },
    {
      "id": 2162201,
      "postDate": "2023-02-28T03:43:14.157Z",
      "content": "<p>Thanks for sharing! I'm curious how you dealt with studies with multiple images per view. </p>",
      "rawMarkdown": "Thanks for sharing! I'm curious how you dealt with studies with multiple images per view. ",
      "votes": 3,
      "replies": [
        {
          "id": 2162251,
          "postDate": "2023-02-28T04:40:38.523Z",
          "content": "<p><a href=\"https://www.kaggle.com/vaillant\" target=\"_blank\">@vaillant</a> Good question! We randomly sampled an image per view during training, and sampled the image with most valid pixels (valid pixel is defined as pixel with value ⊂ [16, 160]) during inference. So actually we didn't use all images in the test dataset.</p>",
          "rawMarkdown": "@vaillant Good question! We randomly sampled an image per view during training, and sampled the image with most valid pixels (valid pixel is defined as pixel with value ⊂ [16, 160]) during inference. So actually we didn't use all images in the test dataset.",
          "votes": 8
        }
      ]
    },
    {
      "id": 2165535,
      "postDate": "2023-03-02T09:05:45.243Z",
      "content": "<p>Congrates on the winning and many thanks for sharing the solusion.</p>\n<p>I'm impressed of how you utilze the CAM, very brilliant method! </p>",
      "rawMarkdown": "Congrates on the winning and many thanks for sharing the solusion.\n\nI'm impressed of how you utilze the CAM, very brilliant method! ",
      "votes": 1
    },
    {
      "id": 2162884,
      "postDate": "2023-02-28T13:14:30.253Z",
      "content": "<p>Congratulations <a href=\"https://www.kaggle.com/analokamus\" target=\"_blank\">@analokamus</a>. I have one question, if I remember correctly, there are patients with varying numbers of images and also other lateralities than MLO and CC. </p>\n<p>How did you manage to always input the images shown in the models? Did you use some rules on the Dataset definition for loading the input or some custom DataLoader sampler?</p>\n<p>I look forward to see the models implementations!</p>",
      "rawMarkdown": "Congratulations @analokamus. I have one question, if I remember correctly, there are patients with varying numbers of images and also other lateralities than MLO and CC. \n\nHow did you manage to always input the images shown in the models? Did you use some rules on the Dataset definition for loading the input or some custom DataLoader sampler?\n\nI look forward to see the models implementations!",
      "votes": 1,
      "replies": [
        {
          "id": 2163224,
          "postDate": "2023-02-28T17:09:09.273Z",
          "content": "<p>I would add an additional column, \"projection\". Then I would device a dictionary, where I would have 'L-MLO, R-MLO,… as keys: <a href=\"https://www.kaggle.com/code/anttiisosalo/birads-classification-rsna-bc-detection?scriptVersionId=119512630&amp;cellId=42\" target=\"_blank\">https://www.kaggle.com/code/anttiisosalo/birads-classification-rsna-bc-detection</a> 😀 Perhaps there could also be a vector of filenames for each key to not discard any files without consideration.</p>",
          "rawMarkdown": "I would add an additional column, \"projection\". Then I would device a dictionary, where I would have 'L-MLO, R-MLO,... as keys: [https://www.kaggle.com/code/anttiisosalo/birads-classification-rsna-bc-detection](https://www.kaggle.com/code/anttiisosalo/birads-classification-rsna-bc-detection?scriptVersionId=119512630&cellId=42) 😀 Perhaps there could also be a vector of filenames for each key to not discard any files without consideration.",
          "votes": 1
        },
        {
          "id": 2163897,
          "postDate": "2023-03-01T06:41:05.807Z",
          "content": "<p>Thank you! Please refer to this thread: <a href=\"https://www.kaggle.com/competitions/rsna-breast-cancer-detection/discussion/390974#2162251\" target=\"_blank\">https://www.kaggle.com/competitions/rsna-breast-cancer-detection/discussion/390974#2162251</a></p>",
          "rawMarkdown": "Thank you! Please refer to this thread: https://www.kaggle.com/competitions/rsna-breast-cancer-detection/discussion/390974#2162251"
        }
      ]
    },
    {
      "id": 2162554,
      "postDate": "2023-02-28T09:38:11.037Z",
      "content": "<p>Big congratulations on becoming a grandmaster! 🎉🎉🎉</p>",
      "rawMarkdown": "Big congratulations on becoming a grandmaster! 🎉🎉🎉",
      "votes": 1
    },
    {
      "id": 2162477,
      "postDate": "2023-02-28T08:24:13.490Z",
      "content": "<p>Nice work team, we were thinking of something like the stepwise rejection but got to it too late. <br>\nMVF model looks very cool. Well deserved new grandmasters &gt;&gt; <a href=\"https://www.kaggle.com/amanatsu\" target=\"_blank\">@amanatsu</a> <a href=\"https://www.kaggle.com/analokamus\" target=\"_blank\">@analokamus</a> <a href=\"https://www.kaggle.com/yujiariyasu\" target=\"_blank\">@yujiariyasu</a> 💪🚀</p>",
      "rawMarkdown": "Nice work team, we were thinking of something like the stepwise rejection but got to it too late. \nMVF model looks very cool. Well deserved new grandmasters >> @amanatsu @analokamus @yujiariyasu 💪🚀",
      "votes": 1
    },
    {
      "id": 2162369,
      "postDate": "2023-02-28T06:48:20.640Z",
      "content": "<p>Great! I tried a bit similar thing, but could not get it working. I used Quasi-Hyberbolic Adam optimizer. What was your optimizer of choice if I may ask? Or was it mentioned?</p>",
      "rawMarkdown": "Great! I tried a bit similar thing, but could not get it working. I used Quasi-Hyberbolic Adam optimizer. What was your optimizer of choice if I may ask? Or was it mentioned?",
      "votes": 1,
      "replies": [
        {
          "id": 2162417,
          "postDate": "2023-02-28T07:29:20.410Z",
          "content": "<p>I used AdamW optimizer, cosine annealing with warm restarts scheduler, and initial learning rate of 1e-5 for batch size 16. </p>",
          "rawMarkdown": "I used AdamW optimizer, cosine annealing with warm restarts scheduler, and initial learning rate of 1e-5 for batch size 16. ",
          "votes": 2
        }
      ]
    },
    {
      "id": 2162185,
      "postDate": "2023-02-28T03:29:50.220Z",
      "content": "<p>i am curious about multi-view training.<br>\ndid it not over fit in training?</p>\n<p>(or is my transformer encoder too strong)?</p>",
      "rawMarkdown": "i am curious about multi-view training.\ndid it not over fit in training?\n\n(or is my transformer encoder too strong)?",
      "votes": 1,
      "replies": [
        {
          "id": 2162265,
          "postDate": "2023-02-28T04:48:00.487Z",
          "content": "<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> Thank your for the question! We learnt a lot from your discussion topics (as usual 😊).<br>\nWith regard to multi-view training, we tried efficientnet, convnext, seresnext, nextvit, and some other backbones, and none of them significantly overfitted. Compared to fusion models with stronger spatial regularization, normal multi-view models usually were slightly overfitted after the same training epochs, but we did not observe big differences.</p>",
          "rawMarkdown": "@hengck23 Thank your for the question! We learnt a lot from your discussion topics (as usual 😊).\nWith regard to multi-view training, we tried efficientnet, convnext, seresnext, nextvit, and some other backbones, and none of them significantly overfitted. Compared to fusion models with stronger spatial regularization, normal multi-view models usually were slightly overfitted after the same training epochs, but we did not observe big differences.",
          "votes": 1
        }
      ]
    },
    {
      "id": 2162139,
      "postDate": "2023-02-28T02:49:06.070Z",
      "content": "<p>Congratulations and Thank you for sharing your solution.  Looking forward to the github code. </p>\n<p>I'm trying to understand Stepwise Rejection Ensemble - <br>\nYou start with predictions for Model 1 and Model 2 and bottom 25% probability samples will not be predicted by Model 3 and Model 4 ? Is that correct or did I misunderstand ? </p>",
      "rawMarkdown": "Congratulations and Thank you for sharing your solution.  Looking forward to the github code. \n\nI'm trying to understand Stepwise Rejection Ensemble - \nYou start with predictions for Model 1 and Model 2 and bottom 25% probability samples will not be predicted by Model 3 and Model 4 ? Is that correct or did I misunderstand ? ",
      "votes": 1,
      "replies": [
        {
          "id": 2162271,
          "postDate": "2023-02-28T04:56:29.890Z",
          "content": "<p>Thank you for the question, let me clarify:</p>\n<pre><code>[1st stage] [100% test data] x [model 1, model 2]\n-&gt; bottom 25% were removed and labelled as 0\n[2nd stage] [75% test data] x ([model 1, model 2] from 1st stage + [model 3])\n-&gt; bottom 40% (x 75%) were removed and labelled as 0\n[3rd stage] [45% test data] x ([model 1, model 2, model 3] from 2nd stage + [model 4])\n</code></pre>\n<p>In this way, additional models are run only on suspicious data.</p>",
          "rawMarkdown": "Thank you for the question, let me clarify:\n```\n[1st stage] [100% test data] x [model 1, model 2]\n-> bottom 25% were removed and labelled as 0\n[2nd stage] [75% test data] x ([model 1, model 2] from 1st stage + [model 3])\n-> bottom 40% (x 75%) were removed and labelled as 0\n[3rd stage] [45% test data] x ([model 1, model 2, model 3] from 2nd stage + [model 4])\n```\nIn this way, additional models are run only on suspicious data.",
          "votes": 4
        }
      ]
    },
    {
      "id": 2162175,
      "postDate": "2023-02-28T03:27:52.200Z",
      "content": "<p>Thanks for the write up. good job!</p>\n<p>\" it has lower CV and public LB \"<br>\n… sometimes it is a bit of luck :;</p>",
      "rawMarkdown": "Thanks for the write up. good job!\n\n\" it has lower CV and public LB \"\n... sometimes it is a bit of luck :;",
      "votes": 2
    },
    {
      "id": 2162116,
      "postDate": "2023-02-28T02:20:38.893Z",
      "content": "<p>Great solution! Thanks for your sharing!</p>",
      "rawMarkdown": "Great solution! Thanks for your sharing!",
      "votes": 2
    },
    {
      "id": 2272989,
      "postDate": "2023-05-24T23:45:16.853Z",
      "content": "<p>Hi, Thanks for sharing the solution. I want to replicate your solution. Can you please tell me the order in which i will replicate your code. My understanding is follows:</p>\n<ol>\n<li>[YOLOX(ishikei) part] <a href=\"https://github.com/ishikei14k/RSNA_Screening_Mammography_Breast_Cancer_Detection\" target=\"_blank\">https://github.com/ishikei14k/RSNA_Screening_Mammography_Breast_Cancer_Detection</a> </li>\n<li>[RabotniKuma part]<a href=\"https://github.com/analokmaus/kaggle-rsna-breast-cancer\" target=\"_blank\">https://github.com/analokmaus/kaggle-rsna-breast-cancer</a> </li>\n<li>[Charmq part] <a href=\"https://github.com/tyamaguchi17/rsna_mammo\" target=\"_blank\">https://github.com/tyamaguchi17/rsna_mammo</a> </li>\n</ol>",
      "rawMarkdown": "Hi, Thanks for sharing the solution. I want to replicate your solution. Can you please tell me the order in which i will replicate your code. My understanding is follows:\n1. [YOLOX(ishikei) part] https://github.com/ishikei14k/RSNA_Screening_Mammography_Breast_Cancer_Detection \n2. [RabotniKuma part]https://github.com/analokmaus/kaggle-rsna-breast-cancer \n3. [Charmq part] https://github.com/tyamaguchi17/rsna_mammo "
    },
    {
      "id": 2215411,
      "postDate": "2023-04-09T09:21:08.633Z",
      "content": "<p>Thanks for sharing your approach. This notebook is so useful 👍</p>",
      "rawMarkdown": "Thanks for sharing your approach. This notebook is so useful 👍"
    },
    {
      "id": 2170899,
      "postDate": "2023-03-06T11:22:41.497Z",
      "content": "<p>Hi <a href=\"https://www.kaggle.com/analokamus\" target=\"_blank\">@analokamus</a> , congratulations on becoming a grandmaster. It's a brilliant solution. May you describe more about how you trained the local encoder? </p>",
      "rawMarkdown": "Hi @analokamus , congratulations on becoming a grandmaster. It's a brilliant solution. May you describe more about how you trained the local encoder? "
    },
    {
      "id": 2165574,
      "postDate": "2023-03-02T09:35:19.600Z",
      "content": "<p>Thanks, i got learn so much after read this Discussion. Good job u guys </p>",
      "rawMarkdown": "Thanks, i got learn so much after read this Discussion. Good job u guys "
    },
    {
      "id": 2164793,
      "postDate": "2023-03-01T19:53:46.163Z",
      "content": "<p>Congratulations and thanks for the great summary! </p>",
      "rawMarkdown": "Congratulations and thanks for the great summary! "
    },
    {
      "id": 2163197,
      "postDate": "2023-02-28T16:43:39.340Z",
      "content": "<p>Thank you, i find many useful techniques that i can apply for future competitions.</p>",
      "rawMarkdown": "Thank you, i find many useful techniques that i can apply for future competitions."
    },
    {
      "id": 2163015,
      "postDate": "2023-02-28T14:34:21.110Z",
      "content": "<p>congratulation…thanks for sharing detailed documentation.</p>",
      "rawMarkdown": "congratulation...thanks for sharing detailed documentation."
    },
    {
      "id": 2162926,
      "postDate": "2023-02-28T13:31:31.260Z",
      "content": "<p>Big congratulations on becoming a grandmaster! </p>",
      "rawMarkdown": "Big congratulations on becoming a grandmaster! "
    },
    {
      "id": 2162500,
      "postDate": "2023-02-28T08:41:06.343Z",
      "content": "<blockquote>\n  <p>Mixup did not work</p>\n</blockquote>\n<p>Can you elaborate? How was the mixup performed, in more detail?<br>\nAnd Congratulations on the amazing performance.</p>",
      "rawMarkdown": ">Mixup did not work\n\nCan you elaborate? How was the mixup performed, in more detail?\nAnd Congratulations on the amazing performance.",
      "replies": [
        {
          "id": 2162858,
          "postDate": "2023-02-28T12:59:28.610Z",
          "content": "<p>Using mixup usually making training very slow to converge, and the final results are not always better than without mixup.</p>",
          "rawMarkdown": "Using mixup usually making training very slow to converge, and the final results are not always better than without mixup."
        }
      ]
    },
    {
      "id": 2162171,
      "postDate": "2023-02-28T03:22:14.853Z",
      "content": "<p>thx for sharing.  Again,  good hardware seems a necessary for good score.</p>",
      "rawMarkdown": "thx for sharing.  Again,  good hardware seems a necessary for good score."
    },
    {
      "id": 2162135,
      "postDate": "2023-02-28T02:43:33.560Z",
      "content": "<p>Very nice models and  illustrations.  Thanks and congrats.  </p>",
      "rawMarkdown": "Very nice models and  illustrations.  Thanks and congrats.  "
    },
    {
      "id": 2162125,
      "postDate": "2023-02-28T02:31:05.980Z",
      "content": "<p>Amazing Solution!</p>",
      "rawMarkdown": "Amazing Solution!"
    },
    {
      "id": 2162505,
      "postDate": "2023-02-28T08:45:12.817Z",
      "content": "<p>Thanks for sharing! Well deserved 💯</p>",
      "rawMarkdown": "Thanks for sharing! Well deserved 💯"
    },
    {
      "id": 2162358,
      "postDate": "2023-02-28T06:40:04.443Z",
      "content": "<p>Thanks for sharing！</p>",
      "rawMarkdown": "Thanks for sharing！"
    }
  ],
  "comments": [
    {
      "id": 2163523,
      "author_name": "Remek Kinas",
      "author_url": "",
      "post_date": "2023-02-28T22:07:15.377000",
      "content": "<p>Congratulations! You have great solution, great score …. but … I looked into your github - masterpiece of code module management. Configs management - brilliant. I downloaded this code to learn from you how to write great competition code. Guys - you are great! Looking in such repository is the best takeaway and learning from me. Thank you for sharing such things.</p>",
      "votes": 5,
      "replies": []
    },
    {
      "id": 2162709,
      "author_name": "Dieter",
      "author_url": "",
      "post_date": "2023-02-28T11:27:45.363000",
      "content": "<p>Great write-up. Thanks for sharing your approach. </p>",
      "votes": 3,
      "replies": []
    },
    {
      "id": 2162201,
      "author_name": "Ian Pan",
      "author_url": "",
      "post_date": "2023-02-28T03:43:14.157000",
      "content": "<p>Thanks for sharing! I'm curious how you dealt with studies with multiple images per view. </p>",
      "votes": 3,
      "replies": [
        {
          "id": 2162251,
          "author_name": "RabotniKuma",
          "author_url": "",
          "post_date": "2023-02-28T04:40:38.523000",
          "content": "<p><a href=\"https://www.kaggle.com/vaillant\" target=\"_blank\">@vaillant</a> Good question! We randomly sampled an image per view during training, and sampled the image with most valid pixels (valid pixel is defined as pixel with value ⊂ [16, 160]) during inference. So actually we didn't use all images in the test dataset.</p>",
          "votes": 8,
          "replies": []
        }
      ]
    },
    {
      "id": 2165535,
      "author_name": "Chenglu",
      "author_url": "",
      "post_date": "2023-03-02T09:05:45.243000",
      "content": "<p>Congrates on the winning and many thanks for sharing the solusion.</p>\n<p>I'm impressed of how you utilze the CAM, very brilliant method! </p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 2162884,
      "author_name": "moth",
      "author_url": "",
      "post_date": "2023-02-28T13:14:30.253000",
      "content": "<p>Congratulations <a href=\"https://www.kaggle.com/analokamus\" target=\"_blank\">@analokamus</a>. I have one question, if I remember correctly, there are patients with varying numbers of images and also other lateralities than MLO and CC. </p>\n<p>How did you manage to always input the images shown in the models? Did you use some rules on the Dataset definition for loading the input or some custom DataLoader sampler?</p>\n<p>I look forward to see the models implementations!</p>",
      "votes": 1,
      "replies": [
        {
          "id": 2163224,
          "author_name": "Antti Isosalo",
          "author_url": "",
          "post_date": "2023-02-28T17:09:09.273000",
          "content": "<p>I would add an additional column, \"projection\". Then I would device a dictionary, where I would have 'L-MLO, R-MLO,… as keys: <a href=\"https://www.kaggle.com/code/anttiisosalo/birads-classification-rsna-bc-detection?scriptVersionId=119512630&amp;cellId=42\" target=\"_blank\">https://www.kaggle.com/code/anttiisosalo/birads-classification-rsna-bc-detection</a> 😀 Perhaps there could also be a vector of filenames for each key to not discard any files without consideration.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 2163897,
          "author_name": "RabotniKuma",
          "author_url": "",
          "post_date": "2023-03-01T06:41:05.807000",
          "content": "<p>Thank you! Please refer to this thread: <a href=\"https://www.kaggle.com/competitions/rsna-breast-cancer-detection/discussion/390974#2162251\" target=\"_blank\">https://www.kaggle.com/competitions/rsna-breast-cancer-detection/discussion/390974#2162251</a></p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 2162554,
      "author_name": "Quan H. Cap",
      "author_url": "",
      "post_date": "2023-02-28T09:38:11.037000",
      "content": "<p>Big congratulations on becoming a grandmaster! 🎉🎉🎉</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 2162477,
      "author_name": "Darragh",
      "author_url": "",
      "post_date": "2023-02-28T08:24:13.490000",
      "content": "<p>Nice work team, we were thinking of something like the stepwise rejection but got to it too late. <br>\nMVF model looks very cool. Well deserved new grandmasters &gt;&gt; <a href=\"https://www.kaggle.com/amanatsu\" target=\"_blank\">@amanatsu</a> <a href=\"https://www.kaggle.com/analokamus\" target=\"_blank\">@analokamus</a> <a href=\"https://www.kaggle.com/yujiariyasu\" target=\"_blank\">@yujiariyasu</a> 💪🚀</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 2162369,
      "author_name": "Antti Isosalo",
      "author_url": "",
      "post_date": "2023-02-28T06:48:20.640000",
      "content": "<p>Great! I tried a bit similar thing, but could not get it working. I used Quasi-Hyberbolic Adam optimizer. What was your optimizer of choice if I may ask? Or was it mentioned?</p>",
      "votes": 1,
      "replies": [
        {
          "id": 2162417,
          "author_name": "RabotniKuma",
          "author_url": "",
          "post_date": "2023-02-28T07:29:20.410000",
          "content": "<p>I used AdamW optimizer, cosine annealing with warm restarts scheduler, and initial learning rate of 1e-5 for batch size 16. </p>",
          "votes": 2,
          "replies": []
        }
      ]
    },
    {
      "id": 2162185,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2023-02-28T03:29:50.220000",
      "content": "<p>i am curious about multi-view training.<br>\ndid it not over fit in training?</p>\n<p>(or is my transformer encoder too strong)?</p>",
      "votes": 1,
      "replies": [
        {
          "id": 2162265,
          "author_name": "RabotniKuma",
          "author_url": "",
          "post_date": "2023-02-28T04:48:00.487000",
          "content": "<p><a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> Thank your for the question! We learnt a lot from your discussion topics (as usual 😊).<br>\nWith regard to multi-view training, we tried efficientnet, convnext, seresnext, nextvit, and some other backbones, and none of them significantly overfitted. Compared to fusion models with stronger spatial regularization, normal multi-view models usually were slightly overfitted after the same training epochs, but we did not observe big differences.</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 2162139,
      "author_name": "RB",
      "author_url": "",
      "post_date": "2023-02-28T02:49:06.070000",
      "content": "<p>Congratulations and Thank you for sharing your solution.  Looking forward to the github code. </p>\n<p>I'm trying to understand Stepwise Rejection Ensemble - <br>\nYou start with predictions for Model 1 and Model 2 and bottom 25% probability samples will not be predicted by Model 3 and Model 4 ? Is that correct or did I misunderstand ? </p>",
      "votes": 1,
      "replies": [
        {
          "id": 2162271,
          "author_name": "RabotniKuma",
          "author_url": "",
          "post_date": "2023-02-28T04:56:29.890000",
          "content": "<p>Thank you for the question, let me clarify:</p>\n<pre><code>[1st stage] [100% test data] x [model 1, model 2]\n-&gt; bottom 25% were removed and labelled as 0\n[2nd stage] [75% test data] x ([model 1, model 2] from 1st stage + [model 3])\n-&gt; bottom 40% (x 75%) were removed and labelled as 0\n[3rd stage] [45% test data] x ([model 1, model 2, model 3] from 2nd stage + [model 4])\n</code></pre>\n<p>In this way, additional models are run only on suspicious data.</p>",
          "votes": 4,
          "replies": []
        }
      ]
    },
    {
      "id": 2162175,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2023-02-28T03:27:52.200000",
      "content": "<p>Thanks for the write up. good job!</p>\n<p>\" it has lower CV and public LB \"<br>\n… sometimes it is a bit of luck :;</p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 2162116,
      "author_name": "BarryZhou",
      "author_url": "",
      "post_date": "2023-02-28T02:20:38.893000",
      "content": "<p>Great solution! Thanks for your sharing!</p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 2272989,
      "author_name": "Shantanu Ghosh",
      "author_url": "",
      "post_date": "2023-05-24T23:45:16.853000",
      "content": "<p>Hi, Thanks for sharing the solution. I want to replicate your solution. Can you please tell me the order in which i will replicate your code. My understanding is follows:</p>\n<ol>\n<li>[YOLOX(ishikei) part] <a href=\"https://github.com/ishikei14k/RSNA_Screening_Mammography_Breast_Cancer_Detection\" target=\"_blank\">https://github.com/ishikei14k/RSNA_Screening_Mammography_Breast_Cancer_Detection</a> </li>\n<li>[RabotniKuma part]<a href=\"https://github.com/analokmaus/kaggle-rsna-breast-cancer\" target=\"_blank\">https://github.com/analokmaus/kaggle-rsna-breast-cancer</a> </li>\n<li>[Charmq part] <a href=\"https://github.com/tyamaguchi17/rsna_mammo\" target=\"_blank\">https://github.com/tyamaguchi17/rsna_mammo</a> </li>\n</ol>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 2215411,
      "author_name": "LYLY123",
      "author_url": "",
      "post_date": "2023-04-09T09:21:08.633000",
      "content": "<p>Thanks for sharing your approach. This notebook is so useful 👍</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 2170899,
      "author_name": "ForcewithMe",
      "author_url": "",
      "post_date": "2023-03-06T11:22:41.497000",
      "content": "<p>Hi <a href=\"https://www.kaggle.com/analokamus\" target=\"_blank\">@analokamus</a> , congratulations on becoming a grandmaster. It's a brilliant solution. May you describe more about how you trained the local encoder? </p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 2165574,
      "author_name": "Lê Thành Nghĩa",
      "author_url": "",
      "post_date": "2023-03-02T09:35:19.600000",
      "content": "<p>Thanks, i got learn so much after read this Discussion. Good job u guys </p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 2164793,
      "author_name": "Ali Abdin",
      "author_url": "",
      "post_date": "2023-03-01T19:53:46.163000",
      "content": "<p>Congratulations and thanks for the great summary! </p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 2163197,
      "author_name": "i_love_huyen_tran",
      "author_url": "",
      "post_date": "2023-02-28T16:43:39.340000",
      "content": "<p>Thank you, i find many useful techniques that i can apply for future competitions.</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 2163015,
      "author_name": "K Pradyumna",
      "author_url": "",
      "post_date": "2023-02-28T14:34:21.110000",
      "content": "<p>congratulation…thanks for sharing detailed documentation.</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 2162926,
      "author_name": "Hammad khan2412",
      "author_url": "",
      "post_date": "2023-02-28T13:31:31.260000",
      "content": "<p>Big congratulations on becoming a grandmaster! </p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 2162500,
      "author_name": "TheStrugglingEngineer",
      "author_url": "",
      "post_date": "2023-02-28T08:41:06.343000",
      "content": "<blockquote>\n  <p>Mixup did not work</p>\n</blockquote>\n<p>Can you elaborate? How was the mixup performed, in more detail?<br>\nAnd Congratulations on the amazing performance.</p>",
      "votes": 0,
      "replies": [
        {
          "id": 2162858,
          "author_name": "RabotniKuma",
          "author_url": "",
          "post_date": "2023-02-28T12:59:28.610000",
          "content": "<p>Using mixup usually making training very slow to converge, and the final results are not always better than without mixup.</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 2162171,
      "author_name": "dragon zhang",
      "author_url": "",
      "post_date": "2023-02-28T03:22:14.853000",
      "content": "<p>thx for sharing.  Again,  good hardware seems a necessary for good score.</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 2162135,
      "author_name": "joejeo1",
      "author_url": "",
      "post_date": "2023-02-28T02:43:33.560000",
      "content": "<p>Very nice models and  illustrations.  Thanks and congrats.  </p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 2162125,
      "author_name": "Feng Qilong",
      "author_url": "",
      "post_date": "2023-02-28T02:31:05.980000",
      "content": "<p>Amazing Solution!</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 2162505,
      "author_name": "Khang Duong",
      "author_url": "",
      "post_date": "2023-02-28T08:45:12.817000",
      "content": "<p>Thanks for sharing! Well deserved 💯</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 2162358,
      "author_name": "leumon",
      "author_url": "",
      "post_date": "2023-02-28T06:40:04.443000",
      "content": "<p>Thanks for sharing！</p>",
      "votes": 0,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "2162113": "First of all, I would like to express deep gratitude to the competition organisers and the Kaggle team. The competition dataset is of very high quality, and we would be happy if our solution could contribute to improve the quality of breast cancer screening. I would also like to thank my teammates who struggled together with me throughout the competition.\nFinally, big congratulations to all the winners (and to ourselves, three new competitions Grandmasters)! \n\n\n# Preprocessing\n- Original image arrays were resized into 2048 x 2048 x 1\n- VOI-LUT was applied to all images\n- Images were then cropped to exclude blank space\n - YOLOX model was trained to generate breast bbox\n - Compared to simple rule-based breast extraction, YOLOX cropped images usually have a smaller region, which seemed to prevent our models from overfitting\n - In order to shorten inference time, we used simple rule-based crop during inference\n - Images were cropped with a random margin during training as augmentation\n - Bbox mix (YOLOX crop + rule-based crop) were also used as augmentation\n - Cropped images are resized to an aspect ratio of 2:1 (1024 x 512 or 1536 x 768)\n- A wide range of augmentations were used \n - Affine transform, V/H flip, brightness/contrast, blur, CLAHE, distortion, dropout\n\n# Model architectures\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1973217%2Fd4438a7bcbaf552a03df881ade23a0de%2FRSNA-Mammo-3.svg?generation=1677551759021366&alt=media)![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1973217%2F5702736cffb022faafcd9fe8b04b9edc%2FRSNA-Mammo.svg?generation=1677551773315924&alt=media)![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1973217%2Fbe83f5153c2966c8ad8a8a986fdbc569%2FRSNA-Mammo-2.svg?generation=1677551796605732&alt=media)\n## Some key results\n| Model name | Description                       | CV    | Public LB | Private LB |\n|-------------|-----------------------------------|-------|-----------|------------|\n| Aug07lr0    | MV, 1024x512        | 0.493 | 0.64      | 0.46       |\n| Res02lr0    | MV, 1536x768        | 0.488 | 0.59      | 0.46       |\n| Res02mod2   | MVF, 1536x768 | 0.516 | -         | -          |\n| Res02mod3   | MVF, 1536x768 | 0.525 | 0.63      | 0.48       |\n| charm_convnext_small_multi_lat  | MVL, 1024x512 | 0.498 | 0.60      | 0.50     |\n\n\n# Some tricks for training\n- Due to the unstable nature of PF1 metric, area under precision recall curve (AUCPR) worked well as a surrogate metric\n - AUCPRLoss (https://github.com/Shlomix/global_objectives_pytorch)\n- The model performance is still unstable! We used exponential moving average (EMA), simple average weights\n- Using auxiliary loss (age, biopsy, etc.) improved the performance\n- Convnext (v1) was the best backbone for this task\n\n# Ensemble\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1973217%2F355889cbe156ce03999e4ea891ba30d4%2FRSNA-Mammo-4.svg?generation=1677551811042501&alt=media)\nAlso, our best submission scored private LB 0.53, but it was not chosen because it has lower CV and public LB than our selected submissions.\n\n# Things did not work\n- Positive weight, oversampling, weighted samplers, etc. did not work\n - They seemed to work when you have a weak model, but not no longer once you have a good enough model\n- Focal loss and label smoothing did not improve CV\n- Vanilla BCE is all you need\n- Mixup did not work\n- We tried pseudo-labeling and pretraining on external datasets (VINDR and DDSM), but there was no clear improvement in both CV and LB\n\n# Code\n- Submission notebook -> https://www.kaggle.com/code/amanatsu/rsna-mammo-rejection-ensemble-v2-ishikei?scriptVersionId=120432251\n- RabotniKuma part -> https://github.com/analokmaus/kaggle-rsna-breast-cancer\n- YOLOX(ishikei) part -> https://github.com/ishikei14k/RSNA_Screening_Mammography_Breast_Cancer_Detection\n- Charmq part -> https://github.com/tyamaguchi17/rsna_mammo",
    "2163523": "Congratulations! You have great solution, great score …. but … I looked into your github - masterpiece of code module management. Configs management - brilliant. I downloaded this code to learn from you how to write great competition code. Guys - you are great! Looking in such repository is the best takeaway and learning from me. Thank you for sharing such things.",
    "2162709": "Great write-up. Thanks for sharing your approach. ",
    "2162201": "Thanks for sharing! I'm curious how you dealt with studies with multiple images per view. ",
    "2165535": "Congrates on the winning and many thanks for sharing the solusion.\n\nI'm impressed of how you utilze the CAM, very brilliant method! ",
    "2162884": "Congratulations @analokamus. I have one question, if I remember correctly, there are patients with varying numbers of images and also other lateralities than MLO and CC. \n\nHow did you manage to always input the images shown in the models? Did you use some rules on the Dataset definition for loading the input or some custom DataLoader sampler?\n\nI look forward to see the models implementations!",
    "2162554": "Big congratulations on becoming a grandmaster! 🎉🎉🎉",
    "2162477": "Nice work team, we were thinking of something like the stepwise rejection but got to it too late. \nMVF model looks very cool. Well deserved new grandmasters >> @amanatsu @analokamus @yujiariyasu 💪🚀",
    "2162369": "Great! I tried a bit similar thing, but could not get it working. I used Quasi-Hyberbolic Adam optimizer. What was your optimizer of choice if I may ask? Or was it mentioned?",
    "2162185": "i am curious about multi-view training.\ndid it not over fit in training?\n\n(or is my transformer encoder too strong)?",
    "2162139": "Congratulations and Thank you for sharing your solution.  Looking forward to the github code. \n\nI'm trying to understand Stepwise Rejection Ensemble - \nYou start with predictions for Model 1 and Model 2 and bottom 25% probability samples will not be predicted by Model 3 and Model 4 ? Is that correct or did I misunderstand ? ",
    "2162175": "Thanks for the write up. good job!\n\n\" it has lower CV and public LB \"\n... sometimes it is a bit of luck :;",
    "2162116": "Great solution! Thanks for your sharing!",
    "2272989": "Hi, Thanks for sharing the solution. I want to replicate your solution. Can you please tell me the order in which i will replicate your code. My understanding is follows:\n1. [YOLOX(ishikei) part] https://github.com/ishikei14k/RSNA_Screening_Mammography_Breast_Cancer_Detection \n2. [RabotniKuma part]https://github.com/analokmaus/kaggle-rsna-breast-cancer \n3. [Charmq part] https://github.com/tyamaguchi17/rsna_mammo ",
    "2215411": "Thanks for sharing your approach. This notebook is so useful 👍",
    "2170899": "Hi @analokamus , congratulations on becoming a grandmaster. It's a brilliant solution. May you describe more about how you trained the local encoder? ",
    "2165574": "Thanks, i got learn so much after read this Discussion. Good job u guys ",
    "2164793": "Congratulations and thanks for the great summary! ",
    "2163197": "Thank you, i find many useful techniques that i can apply for future competitions.",
    "2163015": "congratulation...thanks for sharing detailed documentation.",
    "2162926": "Big congratulations on becoming a grandmaster! ",
    "2162500": ">Mixup did not work\n\nCan you elaborate? How was the mixup performed, in more detail?\nAnd Congratulations on the amazing performance.",
    "2162171": "thx for sharing.  Again,  good hardware seems a necessary for good score.",
    "2162135": "Very nice models and  illustrations.  Thanks and congrats.  ",
    "2162125": "Amazing Solution!",
    "2162505": "Thanks for sharing! Well deserved 💯",
    "2162358": "Thanks for sharing！"
  }
}