{
  "id": 243947,
  "title": "CV scores for Augmentations for this competition",
  "url": "/competitions/siim-covid19-detection/discussion/243947",
  "author_name": "Varun Dutt",
  "post_date": "2021-06-04T15:21:30.155000",
  "votes": 63,
  "comment_count": 49,
  "views": 0,
  "content": "<p>This competition seems to be very sensitive to augmentation being applied so I just experimented with common augmentations and recorded their CV scores</p>\n<p>Stratified 5 Folds<br>\nModel: EfficientNet B6<br>\nImage Size: 512</p>\n<p>Augmentations || CV Scores</p>\n<ol>\n<li><p>H Flip + V Flip || 34.55</p></li>\n<li><p>Flips + rotate || 35.2</p></li>\n<li><p>Flips + zoom || 34.87</p></li>\n<li><p>Flips  + shear || 33.89</p></li>\n<li><p>Flips  +  shift|| 34.23</p></li>\n<li><p>Flips  + brightness || 35.66</p></li>\n<li><p>Flips  + contrast || 34.71</p></li>\n<li><p>Flips  + hue || 31.9</p></li>\n<li><p>Flips  + saturation || 34.14</p></li>\n<li><p>Flips  + rotate + zoom + brightness || 36.8</p></li>\n<li><p>Flips  + rotate + zoom + brightness + cutout || (37.1/38.5) - CV/LB</p></li>\n</ol>\n<p>Update</p>\n<ol>\n<li>H Flip + rotate + zoom + brightness + cutout || (38.1/38.7) - CV/LB</li>\n</ol>",
  "messages": [
    {
      "id": 1336004,
      "postDate": "2021-06-04T15:21:30.157Z",
      "content": "<p>This competition seems to be very sensitive to augmentation being applied so I just experimented with common augmentations and recorded their CV scores</p>\n<p>Stratified 5 Folds<br>\nModel: EfficientNet B6<br>\nImage Size: 512</p>\n<p>Augmentations || CV Scores</p>\n<ol>\n<li><p>H Flip + V Flip || 34.55</p></li>\n<li><p>Flips + rotate || 35.2</p></li>\n<li><p>Flips + zoom || 34.87</p></li>\n<li><p>Flips  + shear || 33.89</p></li>\n<li><p>Flips  +  shift|| 34.23</p></li>\n<li><p>Flips  + brightness || 35.66</p></li>\n<li><p>Flips  + contrast || 34.71</p></li>\n<li><p>Flips  + hue || 31.9</p></li>\n<li><p>Flips  + saturation || 34.14</p></li>\n<li><p>Flips  + rotate + zoom + brightness || 36.8</p></li>\n<li><p>Flips  + rotate + zoom + brightness + cutout || (37.1/38.5) - CV/LB</p></li>\n</ol>\n<p>Update</p>\n<ol>\n<li>H Flip + rotate + zoom + brightness + cutout || (38.1/38.7) - CV/LB</li>\n</ol>",
      "rawMarkdown": "This competition seems to be very sensitive to augmentation being applied so I just experimented with common augmentations and recorded their CV scores\n\nStratified 5 Folds\nModel: EfficientNet B6\nImage Size: 512\n\nAugmentations || CV Scores\n\n1. H Flip + V Flip || 34.55\n2. Flips + rotate || 35.2\n3. Flips + zoom || 34.87\n4. Flips  + shear || 33.89\n5. Flips  +  shift|| 34.23\n6. Flips  + brightness || 35.66\n7. Flips  + contrast || 34.71\n8. Flips  + hue || 31.9\n9. Flips  + saturation || 34.14\n\n10. Flips  + rotate + zoom + brightness || 36.8\n11. Flips  + rotate + zoom + brightness + cutout || (37.1/38.5) - CV/LB\n\nUpdate\n\n1. H Flip + rotate + zoom + brightness + cutout || (38.1/38.7) - CV/LB",
      "votes": 63
    },
    {
      "id": 1374234,
      "postDate": "2021-07-03T06:25:18.700Z",
      "content": "<p>Thanks for sharing your great experimental results. Thanks a lot!</p>",
      "rawMarkdown": "Thanks for sharing your great experimental results. Thanks a lot!",
      "votes": 1,
      "replies": [
        {
          "id": 1374299,
          "postDate": "2021-07-03T07:33:16.823Z",
          "content": "<p>My pleasure! Hope it helps!</p>",
          "rawMarkdown": "My pleasure! Hope it helps!",
          "votes": 1
        }
      ]
    },
    {
      "id": 1372602,
      "postDate": "2021-07-01T22:03:04.497Z",
      "content": "<p>Thanks for sharing your experiments. I have a question about the terms you use. What is \"H Flip\"?</p>",
      "rawMarkdown": "Thanks for sharing your experiments. I have a question about the terms you use. What is \"H Flip\"?",
      "votes": 1,
      "replies": [
        {
          "id": 1372606,
          "postDate": "2021-07-01T22:06:59.383Z",
          "content": "<p>\"H Flip\" : Horizontal Flip, \"V Flip\": Vertical Flip</p>",
          "rawMarkdown": "\"H Flip\" : Horizontal Flip, \"V Flip\": Vertical Flip",
          "votes": 1
        },
        {
          "id": 1372629,
          "postDate": "2021-07-01T22:24:12.723Z",
          "content": "<p>Oh, I see. So is it tf.image.flip_left_right? I acutally have a second question. It would be great if you could answer. \" cutout\" means tfa.image.cutout right? <br>\ntfa.image.cutout(<br>\n    images: tfa.types.TensorLike,<br>\n    mask_size: tfa.types.TensorLike,<br>\n    offset: tfa.types.TensorLike = (0, 0),<br>\n    constant_values: tfa.types.Number = 0<br>\n) -&gt; tf.Tensor</p>\n<p>I see that the parameters in the function are complicated to me. Could you give me an example how I should use it? For example, tfa.image.cutout(my_image,  and what parameters I should put) if the input image size is 512? Thanks!</p>",
          "rawMarkdown": "Oh, I see. So is it tf.image.flip_left_right? I acutally have a second question. It would be great if you could answer. \" cutout\" means tfa.image.cutout right? \ntfa.image.cutout(\n    images: tfa.types.TensorLike,\n    mask_size: tfa.types.TensorLike,\n    offset: tfa.types.TensorLike = (0, 0),\n    constant_values: tfa.types.Number = 0\n) -> tf.Tensor\n\n\nI see that the parameters in the function are complicated to me. Could you give me an example how I should use it? For example, tfa.image.cutout(my_image,  and what parameters I should put) if the input image size is 512? Thanks!",
          "votes": 1
        },
        {
          "id": 1373584,
          "postDate": "2021-07-02T15:48:16.053Z",
          "content": "<p>Yes, \"H flip\" is equivalent to tf.image.flip_left_right. About cutout, <a href=\"https://www.kaggle.com/varundutt9213\" target=\"_blank\">@varundutt9213</a> can confirm that as cutout has slight variants. I don't use TensorFlow so I can not particularly tell about this function. </p>",
          "rawMarkdown": "Yes, \"H flip\" is equivalent to tf.image.flip_left_right. About cutout, @varundutt9213 can confirm that as cutout has slight variants. I don't use TensorFlow so I can not particularly tell about this function. \n",
          "votes": 1
        },
        {
          "id": 1373811,
          "postDate": "2021-07-02T18:13:36.960Z",
          "content": "<p><a href=\"https://www.kaggle.com/yus002\" target=\"_blank\">@yus002</a> Even i use pytorch and not TF, but it should have two main parameters: the length and breadth of the cutouts and the number of cutouts.</p>",
          "rawMarkdown": "@yus002 Even i use pytorch and not TF, but it should have two main parameters: the length and breadth of the cutouts and the number of cutouts.",
          "votes": 1
        },
        {
          "id": 1373877,
          "postDate": "2021-07-02T19:18:01.187Z",
          "content": "<p>I see. Thanks!    😃       </p>",
          "rawMarkdown": "I see. Thanks!    😃       "
        }
      ]
    },
    {
      "id": 1346074,
      "postDate": "2021-06-12T05:22:35.510Z",
      "content": "<p>Hello, did you do only <strong>Stratified K Fold</strong> or <strong>GroupKFold + Stratified K Fold</strong>?</p>",
      "rawMarkdown": "Hello, did you do only **Stratified K Fold** or **GroupKFold + Stratified K Fold**?",
      "votes": 1,
      "replies": [
        {
          "id": 1346950,
          "postDate": "2021-06-12T19:11:44.210Z",
          "content": "<p>The closest thing to GroupKFold + StratifiedKFold I found is <a href=\"https://www.kaggle.com/cdeotte/triple-stratified-kfold-with-tfrecords\" target=\"_blank\">Triple Stratified KFold</a><br>\nSplitting by group is necessary to avoid leaking, so one way is to apply GroupKFold and manually inspect fold_df.label.value_counts() in each fold to make sure the split is roughly equal</p>",
          "rawMarkdown": "The closest thing to GroupKFold + StratifiedKFold I found is [Triple Stratified KFold](https://www.kaggle.com/cdeotte/triple-stratified-kfold-with-tfrecords)\nSplitting by group is necessary to avoid leaking, so one way is to apply GroupKFold and manually inspect fold_df.label.value_counts() in each fold to make sure the split is roughly equal\n ",
          "votes": 1
        },
        {
          "id": 1346956,
          "postDate": "2021-06-12T19:16:17.077Z",
          "content": "<p>I tried both, these scores are with stratified k fold, stratified worked better for me, what are you using?</p>",
          "rawMarkdown": "I tried both, these scores are with stratified k fold, stratified worked better for me, what are you using?",
          "votes": 1
        },
        {
          "id": 1346959,
          "postDate": "2021-06-12T19:18:39.210Z",
          "content": "<p>There are implementations in stack overflow that roughly simulate GroupKFold + Stratified K Fold.  Most of them are pretty complex as they are dependent on minimizing some cost function or randomness.   </p>",
          "rawMarkdown": "There are implementations in stack overflow that roughly simulate GroupKFold + Stratified K Fold.  Most of them are pretty complex as they are dependent on minimizing some cost function or randomness.   "
        },
        {
          "id": 1346961,
          "postDate": "2021-06-12T19:19:35.417Z",
          "content": "<p>In this comp I think groupKfold is the best bet. As there are less than 10 labels and 6000+ data points, group k fold gives approximately stratified resuts</p>",
          "rawMarkdown": "In this comp I think groupKfold is the best bet. As there are less than 10 labels and 6000+ data points, group k fold gives approximately stratified resuts"
        },
        {
          "id": 1346963,
          "postDate": "2021-06-12T19:21:17.913Z",
          "content": "<p><a href=\"https://www.kaggle.com/varundutt9213\" target=\"_blank\">@varundutt9213</a> StratifiedKFold worked better for you because your data is leaking. It will give better CV because there are some common groups in train and validation set. </p>",
          "rawMarkdown": "@varundutt9213 StratifiedKFold worked better for you because your data is leaking. It will give better CV because there are some common groups in train and validation set. ",
          "votes": 2
        },
        {
          "id": 1346974,
          "postDate": "2021-06-12T19:26:55.973Z",
          "content": "<pre><code>train['stratify'] = train['label']\nprint('Expected values for stratify column')\nnum_folds = train.fold.nunique()\ntrain.stratify.apply(str).value_counts() / num_folds\n\nfold_dfs = []\nfor fold in range(num_folds): \n    fold_df = train[train.fold == fold]\n    print(f'\\n--- Fold {fold} ---')\n    fold_df.stratify.apply(str).value_counts()\n    print('--------------')\n    fold_dfs.append(fold_df)\n</code></pre>",
          "rawMarkdown": "```\ntrain['stratify'] = train['label']\nprint('Expected values for stratify column')\nnum_folds = train.fold.nunique()\ntrain.stratify.apply(str).value_counts() / num_folds\n\nfold_dfs = []\nfor fold in range(num_folds): \n    fold_df = train[train.fold == fold]\n    print(f'\\n--- Fold {fold} ---')\n    fold_df.stratify.apply(str).value_counts()\n    print('--------------')\n    fold_dfs.append(fold_df)\n```"
        },
        {
          "id": 1347086,
          "postDate": "2021-06-12T23:01:56.857Z",
          "content": "<p>I'll check for leakage but CV scores with multilabel stratified k fold match very well with LB scores with k=5, so if there is some leakage it will be very minimal.</p>",
          "rawMarkdown": "I'll check for leakage but CV scores with multilabel stratified k fold match very well with LB scores with k=5, so if there is some leakage it will be very minimal."
        }
      ]
    },
    {
      "id": 1340486,
      "postDate": "2021-06-08T03:00:33.207Z",
      "content": "<p>How are you computing CV? I mean can you share the code of the metric</p>",
      "rawMarkdown": "How are you computing CV? I mean can you share the code of the metric",
      "votes": 1,
      "replies": [
        {
          "id": 1340576,
          "postDate": "2021-06-08T05:48:42.883Z",
          "content": "<p>You can use this for 4 class classification model. For detection you can use pycocotools</p>\n<pre><code>from sklearn.metrics import average_precision_score\ndef sklearn_mean_ap(preds, targs):\n    \"\"\"\n    Difference from COCO is precision is not interpolated\n    targs: (n), preds: (nx4) \n    \"\"\"\n    return np.mean([average_precision_score(targs==i,preds[:,i]) for i in range(4)])*2/3\n</code></pre>",
          "rawMarkdown": "You can use this for 4 class classification model. For detection you can use pycocotools\n\n```\nfrom sklearn.metrics import average_precision_score\ndef sklearn_mean_ap(preds, targs):\n    \"\"\"\n    Difference from COCO is precision is not interpolated\n    targs: (n), preds: (nx4) \n    \"\"\"\n    return np.mean([average_precision_score(targs==i,preds[:,i]) for i in range(4)])*2/3\n```",
          "votes": 13
        },
        {
          "id": 1341719,
          "postDate": "2021-06-08T23:09:28.283Z",
          "content": "<p>Thank you for sharing evaluation method. I have a question. What does Factor 2/3 mean?</p>",
          "rawMarkdown": "Thank you for sharing evaluation method. I have a question. What does Factor 2/3 mean?"
        },
        {
          "id": 1341773,
          "postDate": "2021-06-09T01:48:14.933Z",
          "content": "<p>mAP is mean average precision, for each class AP is calculated and their average is taken. Here in this competition we have 6 classes: (negative, typical, atypical, indeterminate, none, opacity). Each contribute equally to the final score, and since current approaches separate classification and detection: e.g. train a classifier for <strong>negative, typical, atypical, indeterminate</strong> and a detector for <strong>none, opacity</strong> 2/3 comes from 4/6.</p>",
          "rawMarkdown": "mAP is mean average precision, for each class AP is calculated and their average is taken. Here in this competition we have 6 classes: (negative, typical, atypical, indeterminate, none, opacity). Each contribute equally to the final score, and since current approaches separate classification and detection: e.g. train a classifier for **negative, typical, atypical, indeterminate** and a detector for **none, opacity** 2/3 comes from 4/6.",
          "votes": 7
        },
        {
          "id": 1342458,
          "postDate": "2021-06-09T13:22:44.690Z",
          "content": "<p>Thank you for replying.</p>\n<p>I clearly understood the factor, 2/3.</p>",
          "rawMarkdown": "Thank you for replying.\n\nI clearly understood the factor, 2/3."
        },
        {
          "id": 1344513,
          "postDate": "2021-06-11T01:17:37.143Z",
          "content": "<p>Hello,what is the format of preds and targets?</p>",
          "rawMarkdown": "Hello,what is the format of preds and targets?"
        },
        {
          "id": 1344539,
          "postDate": "2021-06-11T02:11:01.607Z",
          "content": "<p>You can check the documentation: <a href=\"https://scikit-learn.org/stable/modules/generated/sklearn.metrics.average_precision_score.html\" target=\"_blank\">https://scikit-learn.org/stable/modules/generated/sklearn.metrics.average_precision_score.html</a>. For each target class we create a 1-d binary array by <code>targs==i</code> and <code>preds[:,i]</code> is the indexed probability for that same class again 1-d array.</p>",
          "rawMarkdown": "You can check the documentation: https://scikit-learn.org/stable/modules/generated/sklearn.metrics.average_precision_score.html. For each target class we create a 1-d binary array by `targs==i` and `preds[:,i]` is the indexed probability for that same class again 1-d array.",
          "votes": 1
        },
        {
          "id": 1344552,
          "postDate": "2021-06-11T02:34:24.367Z",
          "content": "<p>Thanks,I got it.</p>",
          "rawMarkdown": "Thanks,I got it."
        },
        {
          "id": 1359926,
          "postDate": "2021-06-21T16:54:08.037Z",
          "content": "<p><a href=\"https://www.kaggle.com/keremt\" target=\"_blank\">@keremt</a> Thanks for your explanations. I still have trouble understanding one part of calculating the metric: how to approach the background class ('none' class in this case) for computing the mAP @ some IoU? I mean when there is only background, we don't have any bboxes so how to compute the IoU in the first place? Sorry if my question is too trivial.</p>",
          "rawMarkdown": "@keremt Thanks for your explanations. I still have trouble understanding one part of calculating the metric: how to approach the background class ('none' class in this case) for computing the mAP @ some IoU? I mean when there is only background, we don't have any bboxes so how to compute the IoU in the first place? Sorry if my question is too trivial."
        }
      ]
    },
    {
      "id": 1402982,
      "postDate": "2021-07-28T17:29:10.053Z",
      "content": "<p>Hi, I implemented Coarse dropout  (first time I work with it), nevertheless it does not improve my results, do you have any recommendation how to choose Coarse dropout  hyperparameters?<br>\nCoarse dropout  Size<br>\nCoarse dropout  number of squares<br>\nProbability for Coarse dropout </p>\n<p>Thanks a lot!</p>",
      "rawMarkdown": "Hi, I implemented Coarse dropout  (first time I work with it), nevertheless it does not improve my results, do you have any recommendation how to choose Coarse dropout  hyperparameters?\nCoarse dropout  Size\nCoarse dropout  number of squares\nProbability for Coarse dropout \n\nThanks a lot!"
    },
    {
      "id": 1345579,
      "postDate": "2021-06-11T17:15:03.027Z",
      "content": "<p>Did we need to compute class mAP rather than bbox mAP? I'm confused. Could you please explain me?</p>",
      "rawMarkdown": "Did we need to compute class mAP rather than bbox mAP? I'm confused. Could you please explain me?",
      "replies": [
        {
          "id": 1346071,
          "postDate": "2021-06-12T05:19:15.493Z",
          "content": "<p>There is some issue with object detection scoring of the competition so these scores are for just for the classification task. I used sklearn to get mAP and then multiplied it by 2/3 as we are leaving the two object detection labels. You can check the comments of this discussion to explore it further</p>",
          "rawMarkdown": "There is some issue with object detection scoring of the competition so these scores are for just for the classification task. I used sklearn to get mAP and then multiplied it by 2/3 as we are leaving the two object detection labels. You can check the comments of this discussion to explore it further",
          "votes": 1
        }
      ]
    },
    {
      "id": 1344821,
      "postDate": "2021-06-11T06:51:24.480Z",
      "content": "<p>what are zoom and cutout meaning of?</p>",
      "rawMarkdown": "what are zoom and cutout meaning of?",
      "replies": [
        {
          "id": 1345547,
          "postDate": "2021-06-11T16:29:26.023Z",
          "content": "<p>zoom is scaling, cutout is removing small patches at random from the image, you can check albumentations library for more details</p>",
          "rawMarkdown": "zoom is scaling, cutout is removing small patches at random from the image, you can check albumentations library for more details",
          "votes": 1
        }
      ]
    },
    {
      "id": 1343897,
      "postDate": "2021-06-10T14:00:27.680Z",
      "content": "<p>Hello,how did you calculate your cv?</p>",
      "rawMarkdown": "Hello,how did you calculate your cv?",
      "replies": [
        {
          "id": 1345544,
          "postDate": "2021-06-11T16:28:21.233Z",
          "content": "<p>mAP using sklearn</p>",
          "rawMarkdown": "mAP using sklearn"
        }
      ]
    },
    {
      "id": 1343446,
      "postDate": "2021-06-10T07:59:18.783Z",
      "content": "<p>Is rotate ShiftScaleRotate or RandomRotate90?</p>",
      "rawMarkdown": "Is rotate ShiftScaleRotate or RandomRotate90?",
      "replies": [
        {
          "id": 1343549,
          "postDate": "2021-06-10T09:13:03.010Z",
          "content": "<p>ShiftScaleRotate with shift being 0.</p>",
          "rawMarkdown": "ShiftScaleRotate with shift being 0."
        }
      ]
    },
    {
      "id": 1338987,
      "postDate": "2021-06-06T23:36:38.837Z",
      "content": "<p>Are LB scores from 5 fold average predictions and no TTA?</p>",
      "rawMarkdown": "Are LB scores from 5 fold average predictions and no TTA?",
      "replies": [
        {
          "id": 1338989,
          "postDate": "2021-06-06T23:40:56.553Z",
          "content": "<p>Yes, it's 5 fold average with no TTA, single-fold overfits ill update single-fold LB scores once my submissions get refreshed.</p>",
          "rawMarkdown": "Yes, it's 5 fold average with no TTA, single-fold overfits ill update single-fold LB scores once my submissions get refreshed.",
          "votes": 1
        },
        {
          "id": 1338995,
          "postDate": "2021-06-06T23:53:20.520Z",
          "content": "<p>Thanks. I just submitted a single fold without TTA, scored 0.324 another fold scored 0.337. There is some sensitivity to single fold probably due to low data samples. However, 5 fold CV average (stratified kfold shuffle grouped by study ids) scores 0.35 in CV. Now, I will check with 5 fold average predictions as submission to see if LB is similar to what you have, which is always above the CV.</p>",
          "rawMarkdown": "Thanks. I just submitted a single fold without TTA, scored 0.324 another fold scored 0.337. There is some sensitivity to single fold probably due to low data samples. However, 5 fold CV average (stratified kfold shuffle grouped by study ids) scores 0.35 in CV. Now, I will check with 5 fold average predictions as submission to see if LB is similar to what you have, which is always above the CV.",
          "votes": 1
        },
        {
          "id": 1339318,
          "postDate": "2021-06-07T07:20:45.023Z",
          "content": "<p>Yeah in my earlier models there was a huge difference in CV and LB scores which was very concerning as the models were almost certainly overfitting LB but for the later models, the gap has decreased.</p>",
          "rawMarkdown": "Yeah in my earlier models there was a huge difference in CV and LB scores which was very concerning as the models were almost certainly overfitting LB but for the later models, the gap has decreased.",
          "votes": 1
        },
        {
          "id": 1346969,
          "postDate": "2021-06-12T19:24:00.757Z",
          "content": "<p><a href=\"https://www.kaggle.com/varundutt9213\" target=\"_blank\">@varundutt9213</a> Use GroupKFold</p>",
          "rawMarkdown": "@varundutt9213 Use GroupKFold"
        }
      ]
    },
    {
      "id": 1338697,
      "postDate": "2021-06-06T16:39:11.077Z",
      "content": "<p>Thank you for sharing the results of your wonderful experiment!!</p>\n<p>Are all these results based on applying Augmentation to training data only?</p>\n<p>I also think that this is an Augmentation sensitive competition.<br>\nI applied AdjustSaturation on both the training and inference data, and the LB score was greatly improved compared to the other model without it. (0.347 to 0.383)<br>\n(This is no longer Augmentation, but rather preprocessing.)</p>\n<p>I haven't done any parameter tuning yet, but I think that some Augmentations may be more effective when applied to training data only, while others(mainly, Augmentations to change the color of an image) may be more effective when applied to both training data and inference data.</p>",
      "rawMarkdown": "Thank you for sharing the results of your wonderful experiment!!\n\nAre all these results based on applying Augmentation to training data only?\n\nI also think that this is an Augmentation sensitive competition.\nI applied AdjustSaturation on both the training and inference data, and the LB score was greatly improved compared to the other model without it. (0.347 to 0.383)\n(This is no longer Augmentation, but rather preprocessing.)\n\nI haven't done any parameter tuning yet, but I think that some Augmentations may be more effective when applied to training data only, while others(mainly, Augmentations to change the color of an image) may be more effective when applied to both training data and inference data.",
      "votes": 1,
      "isDeleted": true,
      "replies": [
        {
          "id": 1338751,
          "postDate": "2021-06-06T17:40:12.823Z",
          "content": "<p>Thank You, </p>\n<p>Yes, these augmentations are only applied on the training set, all geometrical transformations I think should be only applied to the training set. But as you mention color pre-processing should work better if it's applied in both test and train time. I'll experiment with it thanks for pointing it out.</p>\n<p>Adjusting saturation is very interesting now I think about it, it should work well ill definitely give it a try, thanks for sharing the information. </p>\n<p>I have started tuning the parameters, model architecture and depth doesn't seem to be very important parameter tuning and preprocessing and augmentation seems to be a lot more impactful.<br>\nIll keep updating scores for more augmentations I experiment with.</p>",
          "rawMarkdown": "Thank You, \n\nYes, these augmentations are only applied on the training set, all geometrical transformations I think should be only applied to the training set. But as you mention color pre-processing should work better if it's applied in both test and train time. I'll experiment with it thanks for pointing it out.\n\nAdjusting saturation is very interesting now I think about it, it should work well ill definitely give it a try, thanks for sharing the information. \n\nI have started tuning the parameters, model architecture and depth doesn't seem to be very important parameter tuning and preprocessing and augmentation seems to be a lot more impactful.\nIll keep updating scores for more augmentations I experiment with.\n"
        },
        {
          "id": 1339015,
          "postDate": "2021-06-07T00:27:16.330Z",
          "content": "<p>Very helpful!!</p>\n<blockquote>\n  <p>parameter tuning and preprocessing and augmentation seems to be a lot more impactful.</p>\n</blockquote>\n<p>I think so. Thank you!</p>",
          "rawMarkdown": "Very helpful!!\n> parameter tuning and preprocessing and augmentation seems to be a lot more impactful.\n\nI think so. Thank you!",
          "votes": 1,
          "isDeleted": true
        },
        {
          "id": 1340560,
          "postDate": "2021-06-08T05:19:35.703Z",
          "content": "<p>Hello , is this single model?</p>",
          "rawMarkdown": "Hello , is this single model?"
        },
        {
          "id": 1340826,
          "postDate": "2021-06-08T09:35:41.613Z",
          "content": "<p>Applying AdjustSaturation to a black and white (or single channel) image doesn't change at all the image.</p>",
          "rawMarkdown": "Applying AdjustSaturation to a black and white (or single channel) image doesn't change at all the image."
        },
        {
          "id": 1341096,
          "postDate": "2021-06-08T12:29:09.097Z",
          "content": "<p>Yes, Efficient B6 with 512 image size</p>",
          "rawMarkdown": "Yes, Efficient B6 with 512 image size"
        },
        {
          "id": 1341116,
          "postDate": "2021-06-08T12:41:06.817Z",
          "content": "<p>It seems to increase the exposure of the image i think saturation is <code>S = [(MaxColor - MinColor) / (MaxColor + MinColor)]</code> ill look into it.</p>",
          "rawMarkdown": "It seems to increase the exposure of the image i think saturation is `S = [(MaxColor - MinColor) / (MaxColor + MinColor)]` ill look into it."
        },
        {
          "id": 1341202,
          "postDate": "2021-06-08T13:54:53.007Z",
          "content": "<p>Thanks…..By the way, what is zoom?</p>",
          "rawMarkdown": "Thanks.....By the way, what is zoom?"
        },
        {
          "id": 1341471,
          "postDate": "2021-06-08T16:54:01.337Z",
          "content": "<p>scaling the image,  you can use random or center crop for it.</p>",
          "rawMarkdown": "scaling the image,  you can use random or center crop for it."
        },
        {
          "id": 1341775,
          "postDate": "2021-06-09T01:52:32.723Z",
          "content": "<p>Oh,it is similar with crop and resize hhh.</p>",
          "rawMarkdown": "Oh,it is similar with crop and resize hhh."
        }
      ]
    }
  ],
  "comments": [
    {
      "id": 1374234,
      "author_name": "kaggler",
      "author_url": "",
      "post_date": "2021-07-03T06:25:18.700000",
      "content": "<p>Thanks for sharing your great experimental results. Thanks a lot!</p>",
      "votes": 1,
      "replies": [
        {
          "id": 1374299,
          "author_name": "Varun Dutt",
          "author_url": "",
          "post_date": "2021-07-03T07:33:16.823000",
          "content": "<p>My pleasure! Hope it helps!</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 1372602,
      "author_name": "Yue Sun",
      "author_url": "",
      "post_date": "2021-07-01T22:03:04.497000",
      "content": "<p>Thanks for sharing your experiments. I have a question about the terms you use. What is \"H Flip\"?</p>",
      "votes": 1,
      "replies": [
        {
          "id": 1372606,
          "author_name": "Mohammad Zunaed",
          "author_url": "",
          "post_date": "2021-07-01T22:06:59.383000",
          "content": "<p>\"H Flip\" : Horizontal Flip, \"V Flip\": Vertical Flip</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 1372629,
          "author_name": "Yue Sun",
          "author_url": "",
          "post_date": "2021-07-01T22:24:12.723000",
          "content": "<p>Oh, I see. So is it tf.image.flip_left_right? I acutally have a second question. It would be great if you could answer. \" cutout\" means tfa.image.cutout right? <br>\ntfa.image.cutout(<br>\n    images: tfa.types.TensorLike,<br>\n    mask_size: tfa.types.TensorLike,<br>\n    offset: tfa.types.TensorLike = (0, 0),<br>\n    constant_values: tfa.types.Number = 0<br>\n) -&gt; tf.Tensor</p>\n<p>I see that the parameters in the function are complicated to me. Could you give me an example how I should use it? For example, tfa.image.cutout(my_image,  and what parameters I should put) if the input image size is 512? Thanks!</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 1373584,
          "author_name": "Mohammad Zunaed",
          "author_url": "",
          "post_date": "2021-07-02T15:48:16.053000",
          "content": "<p>Yes, \"H flip\" is equivalent to tf.image.flip_left_right. About cutout, <a href=\"https://www.kaggle.com/varundutt9213\" target=\"_blank\">@varundutt9213</a> can confirm that as cutout has slight variants. I don't use TensorFlow so I can not particularly tell about this function. </p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 1373811,
          "author_name": "Varun Dutt",
          "author_url": "",
          "post_date": "2021-07-02T18:13:36.960000",
          "content": "<p><a href=\"https://www.kaggle.com/yus002\" target=\"_blank\">@yus002</a> Even i use pytorch and not TF, but it should have two main parameters: the length and breadth of the cutouts and the number of cutouts.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 1373877,
          "author_name": "Yue Sun",
          "author_url": "",
          "post_date": "2021-07-02T19:18:01.187000",
          "content": "<p>I see. Thanks!    😃       </p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 1346074,
      "author_name": "Awsaf",
      "author_url": "",
      "post_date": "2021-06-12T05:22:35.510000",
      "content": "<p>Hello, did you do only <strong>Stratified K Fold</strong> or <strong>GroupKFold + Stratified K Fold</strong>?</p>",
      "votes": 1,
      "replies": [
        {
          "id": 1346950,
          "author_name": "Sarthak Bhatt",
          "author_url": "",
          "post_date": "2021-06-12T19:11:44.210000",
          "content": "<p>The closest thing to GroupKFold + StratifiedKFold I found is <a href=\"https://www.kaggle.com/cdeotte/triple-stratified-kfold-with-tfrecords\" target=\"_blank\">Triple Stratified KFold</a><br>\nSplitting by group is necessary to avoid leaking, so one way is to apply GroupKFold and manually inspect fold_df.label.value_counts() in each fold to make sure the split is roughly equal</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 1346956,
          "author_name": "Varun Dutt",
          "author_url": "",
          "post_date": "2021-06-12T19:16:17.077000",
          "content": "<p>I tried both, these scores are with stratified k fold, stratified worked better for me, what are you using?</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 1346959,
          "author_name": "Sarthak Bhatt",
          "author_url": "",
          "post_date": "2021-06-12T19:18:39.210000",
          "content": "<p>There are implementations in stack overflow that roughly simulate GroupKFold + Stratified K Fold.  Most of them are pretty complex as they are dependent on minimizing some cost function or randomness.   </p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1346961,
          "author_name": "Sarthak Bhatt",
          "author_url": "",
          "post_date": "2021-06-12T19:19:35.417000",
          "content": "<p>In this comp I think groupKfold is the best bet. As there are less than 10 labels and 6000+ data points, group k fold gives approximately stratified resuts</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1346963,
          "author_name": "Sarthak Bhatt",
          "author_url": "",
          "post_date": "2021-06-12T19:21:17.913000",
          "content": "<p><a href=\"https://www.kaggle.com/varundutt9213\" target=\"_blank\">@varundutt9213</a> StratifiedKFold worked better for you because your data is leaking. It will give better CV because there are some common groups in train and validation set. </p>",
          "votes": 2,
          "replies": []
        },
        {
          "id": 1346974,
          "author_name": "Sarthak Bhatt",
          "author_url": "",
          "post_date": "2021-06-12T19:26:55.973000",
          "content": "<pre><code>train['stratify'] = train['label']\nprint('Expected values for stratify column')\nnum_folds = train.fold.nunique()\ntrain.stratify.apply(str).value_counts() / num_folds\n\nfold_dfs = []\nfor fold in range(num_folds): \n    fold_df = train[train.fold == fold]\n    print(f'\\n--- Fold {fold} ---')\n    fold_df.stratify.apply(str).value_counts()\n    print('--------------')\n    fold_dfs.append(fold_df)\n</code></pre>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1347086,
          "author_name": "Varun Dutt",
          "author_url": "",
          "post_date": "2021-06-12T23:01:56.857000",
          "content": "<p>I'll check for leakage but CV scores with multilabel stratified k fold match very well with LB scores with k=5, so if there is some leakage it will be very minimal.</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 1340486,
      "author_name": "DeepUnderstanding",
      "author_url": "",
      "post_date": "2021-06-08T03:00:33.207000",
      "content": "<p>How are you computing CV? I mean can you share the code of the metric</p>",
      "votes": 1,
      "replies": [
        {
          "id": 1340576,
          "author_name": "Kerem Turgutlu",
          "author_url": "",
          "post_date": "2021-06-08T05:48:42.883000",
          "content": "<p>You can use this for 4 class classification model. For detection you can use pycocotools</p>\n<pre><code>from sklearn.metrics import average_precision_score\ndef sklearn_mean_ap(preds, targs):\n    \"\"\"\n    Difference from COCO is precision is not interpolated\n    targs: (n), preds: (nx4) \n    \"\"\"\n    return np.mean([average_precision_score(targs==i,preds[:,i]) for i in range(4)])*2/3\n</code></pre>",
          "votes": 13,
          "replies": []
        },
        {
          "id": 1341719,
          "author_name": "furu-nag",
          "author_url": "",
          "post_date": "2021-06-08T23:09:28.283000",
          "content": "<p>Thank you for sharing evaluation method. I have a question. What does Factor 2/3 mean?</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1341773,
          "author_name": "Kerem Turgutlu",
          "author_url": "",
          "post_date": "2021-06-09T01:48:14.933000",
          "content": "<p>mAP is mean average precision, for each class AP is calculated and their average is taken. Here in this competition we have 6 classes: (negative, typical, atypical, indeterminate, none, opacity). Each contribute equally to the final score, and since current approaches separate classification and detection: e.g. train a classifier for <strong>negative, typical, atypical, indeterminate</strong> and a detector for <strong>none, opacity</strong> 2/3 comes from 4/6.</p>",
          "votes": 7,
          "replies": []
        },
        {
          "id": 1342458,
          "author_name": "furu-nag",
          "author_url": "",
          "post_date": "2021-06-09T13:22:44.690000",
          "content": "<p>Thank you for replying.</p>\n<p>I clearly understood the factor, 2/3.</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1344513,
          "author_name": "Zekun",
          "author_url": "",
          "post_date": "2021-06-11T01:17:37.143000",
          "content": "<p>Hello,what is the format of preds and targets?</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1344539,
          "author_name": "Kerem Turgutlu",
          "author_url": "",
          "post_date": "2021-06-11T02:11:01.607000",
          "content": "<p>You can check the documentation: <a href=\"https://scikit-learn.org/stable/modules/generated/sklearn.metrics.average_precision_score.html\" target=\"_blank\">https://scikit-learn.org/stable/modules/generated/sklearn.metrics.average_precision_score.html</a>. For each target class we create a 1-d binary array by <code>targs==i</code> and <code>preds[:,i]</code> is the indexed probability for that same class again 1-d array.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 1344552,
          "author_name": "Zekun",
          "author_url": "",
          "post_date": "2021-06-11T02:34:24.367000",
          "content": "<p>Thanks,I got it.</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1359926,
          "author_name": "Moein",
          "author_url": "",
          "post_date": "2021-06-21T16:54:08.037000",
          "content": "<p><a href=\"https://www.kaggle.com/keremt\" target=\"_blank\">@keremt</a> Thanks for your explanations. I still have trouble understanding one part of calculating the metric: how to approach the background class ('none' class in this case) for computing the mAP @ some IoU? I mean when there is only background, we don't have any bboxes so how to compute the IoU in the first place? Sorry if my question is too trivial.</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 1402982,
      "author_name": "OmarArias86",
      "author_url": "",
      "post_date": "2021-07-28T17:29:10.053000",
      "content": "<p>Hi, I implemented Coarse dropout  (first time I work with it), nevertheless it does not improve my results, do you have any recommendation how to choose Coarse dropout  hyperparameters?<br>\nCoarse dropout  Size<br>\nCoarse dropout  number of squares<br>\nProbability for Coarse dropout </p>\n<p>Thanks a lot!</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 1345579,
      "author_name": "Ichimaru Gin",
      "author_url": "",
      "post_date": "2021-06-11T17:15:03.027000",
      "content": "<p>Did we need to compute class mAP rather than bbox mAP? I'm confused. Could you please explain me?</p>",
      "votes": 0,
      "replies": [
        {
          "id": 1346071,
          "author_name": "Varun Dutt",
          "author_url": "",
          "post_date": "2021-06-12T05:19:15.493000",
          "content": "<p>There is some issue with object detection scoring of the competition so these scores are for just for the classification task. I used sklearn to get mAP and then multiplied it by 2/3 as we are leaving the two object detection labels. You can check the comments of this discussion to explore it further</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 1344821,
      "author_name": "mingtai",
      "author_url": "",
      "post_date": "2021-06-11T06:51:24.480000",
      "content": "<p>what are zoom and cutout meaning of?</p>",
      "votes": 0,
      "replies": [
        {
          "id": 1345547,
          "author_name": "Varun Dutt",
          "author_url": "",
          "post_date": "2021-06-11T16:29:26.023000",
          "content": "<p>zoom is scaling, cutout is removing small patches at random from the image, you can check albumentations library for more details</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 1343897,
      "author_name": "Zekun",
      "author_url": "",
      "post_date": "2021-06-10T14:00:27.680000",
      "content": "<p>Hello,how did you calculate your cv?</p>",
      "votes": 0,
      "replies": [
        {
          "id": 1345544,
          "author_name": "Varun Dutt",
          "author_url": "",
          "post_date": "2021-06-11T16:28:21.233000",
          "content": "<p>mAP using sklearn</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 1343446,
      "author_name": "Shichang Liu",
      "author_url": "",
      "post_date": "2021-06-10T07:59:18.783000",
      "content": "<p>Is rotate ShiftScaleRotate or RandomRotate90?</p>",
      "votes": 0,
      "replies": [
        {
          "id": 1343549,
          "author_name": "Varun Dutt",
          "author_url": "",
          "post_date": "2021-06-10T09:13:03.010000",
          "content": "<p>ShiftScaleRotate with shift being 0.</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 1338987,
      "author_name": "Kerem Turgutlu",
      "author_url": "",
      "post_date": "2021-06-06T23:36:38.837000",
      "content": "<p>Are LB scores from 5 fold average predictions and no TTA?</p>",
      "votes": 0,
      "replies": [
        {
          "id": 1338989,
          "author_name": "Varun Dutt",
          "author_url": "",
          "post_date": "2021-06-06T23:40:56.553000",
          "content": "<p>Yes, it's 5 fold average with no TTA, single-fold overfits ill update single-fold LB scores once my submissions get refreshed.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 1338995,
          "author_name": "Kerem Turgutlu",
          "author_url": "",
          "post_date": "2021-06-06T23:53:20.520000",
          "content": "<p>Thanks. I just submitted a single fold without TTA, scored 0.324 another fold scored 0.337. There is some sensitivity to single fold probably due to low data samples. However, 5 fold CV average (stratified kfold shuffle grouped by study ids) scores 0.35 in CV. Now, I will check with 5 fold average predictions as submission to see if LB is similar to what you have, which is always above the CV.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 1339318,
          "author_name": "Varun Dutt",
          "author_url": "",
          "post_date": "2021-06-07T07:20:45.023000",
          "content": "<p>Yeah in my earlier models there was a huge difference in CV and LB scores which was very concerning as the models were almost certainly overfitting LB but for the later models, the gap has decreased.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 1346969,
          "author_name": "Sarthak Bhatt",
          "author_url": "",
          "post_date": "2021-06-12T19:24:00.757000",
          "content": "<p><a href=\"https://www.kaggle.com/varundutt9213\" target=\"_blank\">@varundutt9213</a> Use GroupKFold</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 1338697,
      "author_name": "",
      "author_url": "",
      "post_date": "2021-06-06T16:39:11.077000",
      "content": "<p>Thank you for sharing the results of your wonderful experiment!!</p>\n<p>Are all these results based on applying Augmentation to training data only?</p>\n<p>I also think that this is an Augmentation sensitive competition.<br>\nI applied AdjustSaturation on both the training and inference data, and the LB score was greatly improved compared to the other model without it. (0.347 to 0.383)<br>\n(This is no longer Augmentation, but rather preprocessing.)</p>\n<p>I haven't done any parameter tuning yet, but I think that some Augmentations may be more effective when applied to training data only, while others(mainly, Augmentations to change the color of an image) may be more effective when applied to both training data and inference data.</p>",
      "votes": 1,
      "replies": [
        {
          "id": 1338751,
          "author_name": "Varun Dutt",
          "author_url": "",
          "post_date": "2021-06-06T17:40:12.823000",
          "content": "<p>Thank You, </p>\n<p>Yes, these augmentations are only applied on the training set, all geometrical transformations I think should be only applied to the training set. But as you mention color pre-processing should work better if it's applied in both test and train time. I'll experiment with it thanks for pointing it out.</p>\n<p>Adjusting saturation is very interesting now I think about it, it should work well ill definitely give it a try, thanks for sharing the information. </p>\n<p>I have started tuning the parameters, model architecture and depth doesn't seem to be very important parameter tuning and preprocessing and augmentation seems to be a lot more impactful.<br>\nIll keep updating scores for more augmentations I experiment with.</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1339015,
          "author_name": "",
          "author_url": "",
          "post_date": "2021-06-07T00:27:16.330000",
          "content": "<p>Very helpful!!</p>\n<blockquote>\n  <p>parameter tuning and preprocessing and augmentation seems to be a lot more impactful.</p>\n</blockquote>\n<p>I think so. Thank you!</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 1340560,
          "author_name": "Zekun",
          "author_url": "",
          "post_date": "2021-06-08T05:19:35.703000",
          "content": "<p>Hello , is this single model?</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1340826,
          "author_name": "Joseph AMIGO",
          "author_url": "",
          "post_date": "2021-06-08T09:35:41.613000",
          "content": "<p>Applying AdjustSaturation to a black and white (or single channel) image doesn't change at all the image.</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1341096,
          "author_name": "Varun Dutt",
          "author_url": "",
          "post_date": "2021-06-08T12:29:09.097000",
          "content": "<p>Yes, Efficient B6 with 512 image size</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1341116,
          "author_name": "Varun Dutt",
          "author_url": "",
          "post_date": "2021-06-08T12:41:06.817000",
          "content": "<p>It seems to increase the exposure of the image i think saturation is <code>S = [(MaxColor - MinColor) / (MaxColor + MinColor)]</code> ill look into it.</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1341202,
          "author_name": "Zekun",
          "author_url": "",
          "post_date": "2021-06-08T13:54:53.007000",
          "content": "<p>Thanks…..By the way, what is zoom?</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1341471,
          "author_name": "Varun Dutt",
          "author_url": "",
          "post_date": "2021-06-08T16:54:01.337000",
          "content": "<p>scaling the image,  you can use random or center crop for it.</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1341775,
          "author_name": "Zekun",
          "author_url": "",
          "post_date": "2021-06-09T01:52:32.723000",
          "content": "<p>Oh,it is similar with crop and resize hhh.</p>",
          "votes": 0,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "1336004": "This competition seems to be very sensitive to augmentation being applied so I just experimented with common augmentations and recorded their CV scores\n\nStratified 5 Folds\nModel: EfficientNet B6\nImage Size: 512\n\nAugmentations || CV Scores\n\n1. H Flip + V Flip || 34.55\n2. Flips + rotate || 35.2\n3. Flips + zoom || 34.87\n4. Flips  + shear || 33.89\n5. Flips  +  shift|| 34.23\n6. Flips  + brightness || 35.66\n7. Flips  + contrast || 34.71\n8. Flips  + hue || 31.9\n9. Flips  + saturation || 34.14\n\n10. Flips  + rotate + zoom + brightness || 36.8\n11. Flips  + rotate + zoom + brightness + cutout || (37.1/38.5) - CV/LB\n\nUpdate\n\n1. H Flip + rotate + zoom + brightness + cutout || (38.1/38.7) - CV/LB",
    "1374234": "Thanks for sharing your great experimental results. Thanks a lot!",
    "1372602": "Thanks for sharing your experiments. I have a question about the terms you use. What is \"H Flip\"?",
    "1346074": "Hello, did you do only **Stratified K Fold** or **GroupKFold + Stratified K Fold**?",
    "1340486": "How are you computing CV? I mean can you share the code of the metric",
    "1402982": "Hi, I implemented Coarse dropout  (first time I work with it), nevertheless it does not improve my results, do you have any recommendation how to choose Coarse dropout  hyperparameters?\nCoarse dropout  Size\nCoarse dropout  number of squares\nProbability for Coarse dropout \n\nThanks a lot!",
    "1345579": "Did we need to compute class mAP rather than bbox mAP? I'm confused. Could you please explain me?",
    "1344821": "what are zoom and cutout meaning of?",
    "1343897": "Hello,how did you calculate your cv?",
    "1343446": "Is rotate ShiftScaleRotate or RandomRotate90?",
    "1338987": "Are LB scores from 5 fold average predictions and no TTA?",
    "1338697": "Thank you for sharing the results of your wonderful experiment!!\n\nAre all these results based on applying Augmentation to training data only?\n\nI also think that this is an Augmentation sensitive competition.\nI applied AdjustSaturation on both the training and inference data, and the LB score was greatly improved compared to the other model without it. (0.347 to 0.383)\n(This is no longer Augmentation, but rather preprocessing.)\n\nI haven't done any parameter tuning yet, but I think that some Augmentations may be more effective when applied to training data only, while others(mainly, Augmentations to change the color of an image) may be more effective when applied to both training data and inference data."
  }
}