{
  "id": 117293,
  "title": "7th place outline",
  "url": "/competitions/rsna-intracranial-hemorrhage-detection/discussion/117293",
  "author_name": "Guanshuo Xu",
  "post_date": "2019-11-14T13:50:55.788000",
  "votes": 31,
  "comment_count": 7,
  "views": 0,
  "content": "<p>I make it short because there is almost no novelty in my solution.</p>\n\n<p><strong>Overall Strategy:</strong>\n1. Train a image-level CNN and save to hard drive its GAP features.\n2. Recover the original CT sequence by sorting the z-position in the meta data, and input the saved GAP features to train a scan(study)-level RNN model. \nThis strategy is inspired from <a href=\"https://rd.springer.com/content/pdf/10.1007%2Fs00330-019-06163-2.pdf\">https://rd.springer.com/content/pdf/10.1007%2Fs00330-019-06163-2.pdf</a> </p>\n\n<p><strong>Preprocessing for CNN:</strong>\nI used Appian's windowing. Spent some efforts to tweak it but results are all similar.</p>\n\n<p><strong>Augmentation for CNN:</strong>\nHeavy augmentation including crop and resize back, affine (360 degree rotation), contrast and brightness, gamma correction, blurring and sharpening, mirroring, optical distortion, grid distortion, elastic transform ...</p>\n\n<p><strong>CNN models:</strong>\nefficientnet_b5\nefficientnet_b6\ninception_resnet_v2\ninception_v4\nsenet154\nseresnext50\nseresnext101\nTotally 7 models, all trained on a different 80-20 training-validation split. The input resolution varied between 384x384 and 512x512 depending on the size of the model.</p>\n\n<p><strong>RNN models:</strong>\nTwo bidirectional GRU layers. Length of sequence fixed to 72. Padding and loss masking used.</p>",
  "messages": [
    {
      "id": 673081,
      "postDate": "2019-11-14T13:50:55.787Z",
      "content": "<p>I make it short because there is almost no novelty in my solution.</p>\n\n<p><strong>Overall Strategy:</strong>\n1. Train a image-level CNN and save to hard drive its GAP features.\n2. Recover the original CT sequence by sorting the z-position in the meta data, and input the saved GAP features to train a scan(study)-level RNN model. \nThis strategy is inspired from <a href=\"https://rd.springer.com/content/pdf/10.1007%2Fs00330-019-06163-2.pdf\">https://rd.springer.com/content/pdf/10.1007%2Fs00330-019-06163-2.pdf</a> </p>\n\n<p><strong>Preprocessing for CNN:</strong>\nI used Appian's windowing. Spent some efforts to tweak it but results are all similar.</p>\n\n<p><strong>Augmentation for CNN:</strong>\nHeavy augmentation including crop and resize back, affine (360 degree rotation), contrast and brightness, gamma correction, blurring and sharpening, mirroring, optical distortion, grid distortion, elastic transform ...</p>\n\n<p><strong>CNN models:</strong>\nefficientnet_b5\nefficientnet_b6\ninception_resnet_v2\ninception_v4\nsenet154\nseresnext50\nseresnext101\nTotally 7 models, all trained on a different 80-20 training-validation split. The input resolution varied between 384x384 and 512x512 depending on the size of the model.</p>\n\n<p><strong>RNN models:</strong>\nTwo bidirectional GRU layers. Length of sequence fixed to 72. Padding and loss masking used.</p>",
      "rawMarkdown": "I make it short because there is almost no novelty in my solution.\n\n**Overall Strategy:**\n1. Train a image-level CNN and save to hard drive its GAP features.\n2. Recover the original CT sequence by sorting the z-position in the meta data, and input the saved GAP features to train a scan(study)-level RNN model. \nThis strategy is inspired from https://rd.springer.com/content/pdf/10.1007%2Fs00330-019-06163-2.pdf \n\n**Preprocessing for CNN:**\nI used Appian's windowing. Spent some efforts to tweak it but results are all similar.\n\n**Augmentation for CNN:**\nHeavy augmentation including crop and resize back, affine (360 degree rotation), contrast and brightness, gamma correction, blurring and sharpening, mirroring, optical distortion, grid distortion, elastic transform ...\n\n**CNN models:**\nefficientnet_b5\nefficientnet_b6\ninception_resnet_v2\ninception_v4\nsenet154\nseresnext50\nseresnext101\nTotally 7 models, all trained on a different 80-20 training-validation split. The input resolution varied between 384x384 and 512x512 depending on the size of the model.\n\n**RNN models:**\nTwo bidirectional GRU layers. Length of sequence fixed to 72. Padding and loss masking used.",
      "votes": 31
    },
    {
      "id": 673102,
      "postDate": "2019-11-14T14:16:46.130Z",
      "content": "<p>Awesome <a href=\"/wowfattie\">@wowfattie</a>, congrats! I see that you're repeatedly successful with your heavy augmentation (also APTOS if I recall correctly). Something that I will adopt in the future :-)</p>",
      "rawMarkdown": "Awesome @wowfattie, congrats! I see that you're repeatedly successful with your heavy augmentation (also APTOS if I recall correctly). Something that I will adopt in the future :-)",
      "votes": 1
    },
    {
      "id": 674542,
      "postDate": "2019-11-16T17:13:52.127Z",
      "content": "<p><a href=\"/wowfattie\">@wowfattie</a>  thanks for giving summary and congrats for solution.\ncould tell me what is this z position. \nI find so far usage of Image position2,studyinstanceid,seriesinstanceUID usage in building the sequence .</p>",
      "rawMarkdown": "@wowfattie  thanks for giving summary and congrats for solution.\ncould tell me what is this z position. \nI find so far usage of Image position2,studyinstanceid,seriesinstanceUID usage in building the sequence .",
      "replies": [
        {
          "id": 674580,
          "postDate": "2019-11-16T18:24:36.673Z",
          "content": "<p>From this kernel <a href=\"https://www.kaggle.com/marcovasquez/basic-eda-data-visualization\">https://www.kaggle.com/marcovasquez/basic-eda-data-visualization</a>\n(0020, 0032) Image Position (Patient)            DS: ['-125', '-46', '73.7000732']</p>\n\n<p>'73.7000732' is the z position I meant</p>",
          "rawMarkdown": "From this kernel https://www.kaggle.com/marcovasquez/basic-eda-data-visualization\n(0020, 0032) Image Position (Patient)            DS: ['-125', '-46', '73.7000732']\n\n'73.7000732' is the z position I meant"
        },
        {
          "id": 674843,
          "postDate": "2019-11-17T06:24:28.053Z",
          "content": "<p>thanks <a href=\"/wowfattie\">@wowfattie</a> \n1) so what should be the sorting order and no of sorting fields. I saw variety of those. Common is Zposition alias ImagePatientPosition2  . </p>\n\n<p>Is this only sufficient,as I saw some other fields also to arrive at right chronological order of CT slices.\nLike PatientID,SeriesInstanceUID..\nM yet to understand significance of sorting by these fields.. what  happens when we sequence them</p>\n\n<p>2) how did u build 3 channel image ?</p>",
          "rawMarkdown": "thanks @wowfattie \n1) so what should be the sorting order and no of sorting fields. I saw variety of those. Common is Zposition alias ImagePatientPosition2  . \n\nIs this only sufficient,as I saw some other fields also to arrive at right chronological order of CT slices.\nLike PatientID,SeriesInstanceUID..\nM yet to understand significance of sorting by these fields.. what  happens when we sequence them\n\n2) how did u build 3 channel image ?"
        }
      ]
    },
    {
      "id": 673132,
      "postDate": "2019-11-14T14:56:36.823Z",
      "content": "<p>Congrats <a href=\"/wowfattie\">@wowfattie</a>  and thanks for sharing.</p>",
      "rawMarkdown": "Congrats @wowfattie  and thanks for sharing."
    },
    {
      "id": 673114,
      "postDate": "2019-11-14T14:37:15.050Z",
      "rawMarkdown": "",
      "isDeleted": true
    },
    {
      "id": 673436,
      "postDate": "2019-11-15T00:48:48.730Z",
      "content": "<p>Congrats and thanks for sharing</p>",
      "rawMarkdown": "Congrats and thanks for sharing"
    }
  ],
  "comments": [
    {
      "id": 673102,
      "author_name": "Alex",
      "author_url": "",
      "post_date": "2019-11-14T14:16:46.130000",
      "content": "<p>Awesome <a href=\"/wowfattie\">@wowfattie</a>, congrats! I see that you're repeatedly successful with your heavy augmentation (also APTOS if I recall correctly). Something that I will adopt in the future :-)</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 674542,
      "author_name": "Jaideep",
      "author_url": "",
      "post_date": "2019-11-16T17:13:52.127000",
      "content": "<p><a href=\"/wowfattie\">@wowfattie</a>  thanks for giving summary and congrats for solution.\ncould tell me what is this z position. \nI find so far usage of Image position2,studyinstanceid,seriesinstanceUID usage in building the sequence .</p>",
      "votes": 0,
      "replies": [
        {
          "id": 674580,
          "author_name": "Guanshuo Xu",
          "author_url": "",
          "post_date": "2019-11-16T18:24:36.673000",
          "content": "<p>From this kernel <a href=\"https://www.kaggle.com/marcovasquez/basic-eda-data-visualization\">https://www.kaggle.com/marcovasquez/basic-eda-data-visualization</a>\n(0020, 0032) Image Position (Patient)            DS: ['-125', '-46', '73.7000732']</p>\n\n<p>'73.7000732' is the z position I meant</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 674843,
          "author_name": "Jaideep",
          "author_url": "",
          "post_date": "2019-11-17T06:24:28.053000",
          "content": "<p>thanks <a href=\"/wowfattie\">@wowfattie</a> \n1) so what should be the sorting order and no of sorting fields. I saw variety of those. Common is Zposition alias ImagePatientPosition2  . </p>\n\n<p>Is this only sufficient,as I saw some other fields also to arrive at right chronological order of CT slices.\nLike PatientID,SeriesInstanceUID..\nM yet to understand significance of sorting by these fields.. what  happens when we sequence them</p>\n\n<p>2) how did u build 3 channel image ?</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 673132,
      "author_name": "YaGana Sheriff-Hussaini",
      "author_url": "",
      "post_date": "2019-11-14T14:56:36.823000",
      "content": "<p>Congrats <a href=\"/wowfattie\">@wowfattie</a>  and thanks for sharing.</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 673114,
      "author_name": "",
      "author_url": "",
      "post_date": "2019-11-14T14:37:15.050000",
      "content": "",
      "votes": 0,
      "replies": []
    },
    {
      "id": 673436,
      "author_name": "corochann",
      "author_url": "",
      "post_date": "2019-11-15T00:48:48.730000",
      "content": "<p>Congrats and thanks for sharing</p>",
      "votes": 0,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "673081": "I make it short because there is almost no novelty in my solution.\n\n**Overall Strategy:**\n1. Train a image-level CNN and save to hard drive its GAP features.\n2. Recover the original CT sequence by sorting the z-position in the meta data, and input the saved GAP features to train a scan(study)-level RNN model. \nThis strategy is inspired from https://rd.springer.com/content/pdf/10.1007%2Fs00330-019-06163-2.pdf \n\n**Preprocessing for CNN:**\nI used Appian's windowing. Spent some efforts to tweak it but results are all similar.\n\n**Augmentation for CNN:**\nHeavy augmentation including crop and resize back, affine (360 degree rotation), contrast and brightness, gamma correction, blurring and sharpening, mirroring, optical distortion, grid distortion, elastic transform ...\n\n**CNN models:**\nefficientnet_b5\nefficientnet_b6\ninception_resnet_v2\ninception_v4\nsenet154\nseresnext50\nseresnext101\nTotally 7 models, all trained on a different 80-20 training-validation split. The input resolution varied between 384x384 and 512x512 depending on the size of the model.\n\n**RNN models:**\nTwo bidirectional GRU layers. Length of sequence fixed to 72. Padding and loss masking used.",
    "673102": "Awesome @wowfattie, congrats! I see that you're repeatedly successful with your heavy augmentation (also APTOS if I recall correctly). Something that I will adopt in the future :-)",
    "674542": "@wowfattie  thanks for giving summary and congrats for solution.\ncould tell me what is this z position. \nI find so far usage of Image position2,studyinstanceid,seriesinstanceUID usage in building the sequence .",
    "673132": "Congrats @wowfattie  and thanks for sharing.",
    "673114": "",
    "673436": "Congrats and thanks for sharing"
  }
}