{
  "id": 340612,
  "title": "Explaining Data and Submission in detail",
  "url": "/competitions/rsna-2022-cervical-spine-fracture-detection/discussion/340612",
  "author_name": "Harshit Sheoran",
  "post_date": "2022-07-30T03:53:43.547000",
  "votes": 179,
  "comment_count": 35,
  "views": 0,
  "content": "<p>Let's start with understanding the features and the targets.</p>\n<p>For features used in training, we have 2 folders, 'train_images' and 'segmentations'<br>\nIn folder 'train_images' there are 2019 more folders, each folder is named after a patient study id<br>\neg. 1.2.826.0.1.3680043.10001</p>\n<p>In each one of these 2019 folders exists a number of dicom files (.dcm extension), the number of dicom files in folders varies.</p>\n<p>I won't go over the details of dicom files, you can find that on kaggle or google, but I will go over the useful resource of dicom for this dataset.</p>\n<p>Dicom file on this dataset have 2 uses, one is the data it possess, we can get this by doing a dcmread from pydicom library onto a file, then printing it, there are 4 data values which we can get, which are 'ImageOrientationPatient', 'ImagePositionPatient', 'PatientID', 'PatientName'.<br>\nEg. <code>pydicom.dcmread('rsna_spine/train_images/1.2.826.0.1.3680043.20981/1.dcm').ImagePositionPatient</code></p>\n<p>'PatientID' gives us the id of the patient, for this data, 'PatientName' is the same as 'PatientID'<br>\n'ImagePositionPatient' gives us the position on the patient, more on this later<br>\n'ImageOrientationPatient' gives us the orientation of the patient. (I did not find anything useful in this)</p>\n<p>'ImagePositionPatient' outputs a list of 3 values, the first one indicates the position of Patient on x-axis, the second indicates the position on y-axis and the third value on the z-axis, the z-axis is the most important one to understand.</p>\n<p>Z-axis in this competition is unlike other competition with CT Scans, normally a Z-axis tells us the timestamp, this time, Z-axis tells us the position in sagittal plane.</p>\n<p>The images in this dataset is in axial plane, meaning we will only be able to observe one bone at a time, but where in the world are we, the reference can be obtained from this z-axis value.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1794509%2F62dc74f51c453f0e74961b92404c84b7%2FScreenshot%20from%202022-07-30%2008-39-52.png?generation=1659150707469954&amp;alt=media\" alt=\"\"></p>\n<p>In the image above, on the left side, we can see sagittal view of the bone, in the middle we can see Axial view of tissues, Axial view of tissues is not provided in the dataset of this competition, on the right side of the image, we can see axial view of bone paticularly 2.5mm deep, the data in this competition is lower than 1mm deep, which means our dataset is more sharp.</p>\n<p>The next thing to take notice at is the thin line in sagittal view (Sag bone, leftmost image), that thin line is what is indicating what we are currently seeing in the axial view, and the Z-axis previously mentioned tells us where that thin line is and where  our axial plane is currently looking at in correspondance to the sagittal view.</p>\n<p>But here comes the biggest problem, we don't have sagittal view… and we need this view to know which dicom file is referencing to which bone</p>\n<p>The solution comes in the folder 'segmentations' where we have 87 files, these files are named with the reference to patient id, the format of these files is nifti, which can be read with the library nibabel, after reading 1 patient file, we will get an array of (height, width, num_images) (num_images here will be the same as the number of diccom files in that particular patient subfolder in the folder 'train_images')</p>\n<p>When we have got the array out of nifti files, we will see that array are kinda weird, well the reason for that is, and I quote</p>\n<blockquote>\n  <p>Please be aware that the NIFTI files consist of segmentation in the sagittal plane, while the DICOM files are in the axial plane. Please use the NIFTI header information to determine the appropriate orientation such that the DICOM images and segmentation match. Otherwise, you run the risk of having the segmentations flipped in the Z axis and mirrored in the X axis.</p>\n</blockquote>\n<p>Which can be done with something like this:<br>\n<code>segmentations = nib.load(f\"segmentations/1.2.826.0.1.3680043.10921.nii\").get_fdata()[:, ::-1, ::-1].transpose(2, 1, 0)</code></p>\n<p>Now after loading the segmentations like this, the shape of segmentations will be (num_images, height, width) and now the data will make a lot more sense.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1794509%2F9208e350550593b9c2b209747fe20895%2Fdownload.png?generation=1659151517170533&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1794509%2Fc33edf394a2c664aef455df101fe5a62%2Fdownload%20(1).png?generation=1659151546577377&amp;alt=media\" alt=\"\"></p>\n<p>The 2 images above, the first one is a dicom reading, the second one is one of the slice of segmentations (reference to segmentations is defined above in a code block)</p>\n<p>What was the problem again? Oh yeah, we don't have the sagittal view, and we don't know which image is referencing to which bone.. well, now we kinda do, how?</p>\n<p>This segmentations numpy array which we have just created and visualized actually have one more use, the unique values of a particular slice will tell us which bone we are working on, for instance the image and  segmentation slice mask we see above, let's find out which bone we are seeing in that.</p>\n<p>I will just write <code>np.unique(segmentations[199])</code> (199 in this case is the slice number, which means this image is 200.dcm)</p>\n<p>The output of this small line is array([0., 6.]), where 0 is the background and 6 is the reference to which bone we are talking about, in this case, bone C6.</p>\n<p>Am I done? Oh no, we still have to understand the variables, which in this case is that there are more than 7 bones in the base (obviously), but we only have labels for C1-C7, but as seen in the image below it is seen that there are way more than that.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1794509%2F2bccacfc06bc3537a15b5911d348e056%2FGray_111_-_Vertebral_column-coloured.png?generation=1659152307732067&amp;alt=media\" alt=\"\"></p>\n<p>So, for some slices we will see unique values going beyond 7, values like 9 or 10, these refer to the bones in the image above, eg. unique value 8 refer to bone Th1</p>\n<p>But, do we need these values to train models? No, not necessarily as our target is only (C1-C7)</p>\n<p>So, lets analyse the current situation, we have 87 patients studies for segmentation, we will have to learn from these patients, which bone is presented in which image, BUT, why is knowing which image is which bone so important? Answering this question takes us to the last part of this discussion, which is, Submission.</p>\n<p>Now, normally, we don't have to talk about submission files, it is simple, but in this competition sample submission file does not tell us the correct submission format, and this format is the reason why we need to classify C1-C7 before training or rather, submitting.</p>\n<p>The submission file will in the format where each patient will have 8 rows, and 8 predictions, 7 rows for C1-C7 and the last row for overall, overall refers to weather the patient have a fracture in any one of the vertibrates are fractured.</p>\n<p>Eg.</p>\n<table>\n<thead>\n<tr>\n<th>row_id</th>\n<th>fractured</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>20981_C1</td>\n<td>0.01</td>\n</tr>\n<tr>\n<td>20981_C2</td>\n<td>0.02</td>\n</tr>\n<tr>\n<td>20981_C3</td>\n<td>0.005</td>\n</tr>\n<tr>\n<td>20981_C4</td>\n<td>0.03</td>\n</tr>\n<tr>\n<td>20981_C5</td>\n<td>0.2</td>\n</tr>\n<tr>\n<td>20981_C6</td>\n<td>0.002</td>\n</tr>\n<tr>\n<td>20981_C7</td>\n<td>0.012</td>\n</tr>\n<tr>\n<td>20981_patient_overall</td>\n<td>0.4</td>\n</tr>\n</tbody>\n</table>\n<p>[NOTE]: I have done some mistakes here such as not realizing that sagittal view is available… which changes a lot of things, but this particular discussion is still one way to look at it. </p>\n<p>Please Upvote this topic if it helped you, if any notebooks wants to use any of the code, please provide reference link to this discussion, this is my first post in a long time, and my very first post for explaining a dataset. I might have made some mistakes, thank you for your suggestions in the comments.</p>",
  "messages": [
    {
      "id": 1876735,
      "postDate": "2022-07-30T03:53:43.547Z",
      "content": "<p>Let's start with understanding the features and the targets.</p>\n<p>For features used in training, we have 2 folders, 'train_images' and 'segmentations'<br>\nIn folder 'train_images' there are 2019 more folders, each folder is named after a patient study id<br>\neg. 1.2.826.0.1.3680043.10001</p>\n<p>In each one of these 2019 folders exists a number of dicom files (.dcm extension), the number of dicom files in folders varies.</p>\n<p>I won't go over the details of dicom files, you can find that on kaggle or google, but I will go over the useful resource of dicom for this dataset.</p>\n<p>Dicom file on this dataset have 2 uses, one is the data it possess, we can get this by doing a dcmread from pydicom library onto a file, then printing it, there are 4 data values which we can get, which are 'ImageOrientationPatient', 'ImagePositionPatient', 'PatientID', 'PatientName'.<br>\nEg. <code>pydicom.dcmread('rsna_spine/train_images/1.2.826.0.1.3680043.20981/1.dcm').ImagePositionPatient</code></p>\n<p>'PatientID' gives us the id of the patient, for this data, 'PatientName' is the same as 'PatientID'<br>\n'ImagePositionPatient' gives us the position on the patient, more on this later<br>\n'ImageOrientationPatient' gives us the orientation of the patient. (I did not find anything useful in this)</p>\n<p>'ImagePositionPatient' outputs a list of 3 values, the first one indicates the position of Patient on x-axis, the second indicates the position on y-axis and the third value on the z-axis, the z-axis is the most important one to understand.</p>\n<p>Z-axis in this competition is unlike other competition with CT Scans, normally a Z-axis tells us the timestamp, this time, Z-axis tells us the position in sagittal plane.</p>\n<p>The images in this dataset is in axial plane, meaning we will only be able to observe one bone at a time, but where in the world are we, the reference can be obtained from this z-axis value.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1794509%2F62dc74f51c453f0e74961b92404c84b7%2FScreenshot%20from%202022-07-30%2008-39-52.png?generation=1659150707469954&amp;alt=media\" alt=\"\"></p>\n<p>In the image above, on the left side, we can see sagittal view of the bone, in the middle we can see Axial view of tissues, Axial view of tissues is not provided in the dataset of this competition, on the right side of the image, we can see axial view of bone paticularly 2.5mm deep, the data in this competition is lower than 1mm deep, which means our dataset is more sharp.</p>\n<p>The next thing to take notice at is the thin line in sagittal view (Sag bone, leftmost image), that thin line is what is indicating what we are currently seeing in the axial view, and the Z-axis previously mentioned tells us where that thin line is and where  our axial plane is currently looking at in correspondance to the sagittal view.</p>\n<p>But here comes the biggest problem, we don't have sagittal view… and we need this view to know which dicom file is referencing to which bone</p>\n<p>The solution comes in the folder 'segmentations' where we have 87 files, these files are named with the reference to patient id, the format of these files is nifti, which can be read with the library nibabel, after reading 1 patient file, we will get an array of (height, width, num_images) (num_images here will be the same as the number of diccom files in that particular patient subfolder in the folder 'train_images')</p>\n<p>When we have got the array out of nifti files, we will see that array are kinda weird, well the reason for that is, and I quote</p>\n<blockquote>\n  <p>Please be aware that the NIFTI files consist of segmentation in the sagittal plane, while the DICOM files are in the axial plane. Please use the NIFTI header information to determine the appropriate orientation such that the DICOM images and segmentation match. Otherwise, you run the risk of having the segmentations flipped in the Z axis and mirrored in the X axis.</p>\n</blockquote>\n<p>Which can be done with something like this:<br>\n<code>segmentations = nib.load(f\"segmentations/1.2.826.0.1.3680043.10921.nii\").get_fdata()[:, ::-1, ::-1].transpose(2, 1, 0)</code></p>\n<p>Now after loading the segmentations like this, the shape of segmentations will be (num_images, height, width) and now the data will make a lot more sense.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1794509%2F9208e350550593b9c2b209747fe20895%2Fdownload.png?generation=1659151517170533&amp;alt=media\" alt=\"\"></p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1794509%2Fc33edf394a2c664aef455df101fe5a62%2Fdownload%20(1).png?generation=1659151546577377&amp;alt=media\" alt=\"\"></p>\n<p>The 2 images above, the first one is a dicom reading, the second one is one of the slice of segmentations (reference to segmentations is defined above in a code block)</p>\n<p>What was the problem again? Oh yeah, we don't have the sagittal view, and we don't know which image is referencing to which bone.. well, now we kinda do, how?</p>\n<p>This segmentations numpy array which we have just created and visualized actually have one more use, the unique values of a particular slice will tell us which bone we are working on, for instance the image and  segmentation slice mask we see above, let's find out which bone we are seeing in that.</p>\n<p>I will just write <code>np.unique(segmentations[199])</code> (199 in this case is the slice number, which means this image is 200.dcm)</p>\n<p>The output of this small line is array([0., 6.]), where 0 is the background and 6 is the reference to which bone we are talking about, in this case, bone C6.</p>\n<p>Am I done? Oh no, we still have to understand the variables, which in this case is that there are more than 7 bones in the base (obviously), but we only have labels for C1-C7, but as seen in the image below it is seen that there are way more than that.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1794509%2F2bccacfc06bc3537a15b5911d348e056%2FGray_111_-_Vertebral_column-coloured.png?generation=1659152307732067&amp;alt=media\" alt=\"\"></p>\n<p>So, for some slices we will see unique values going beyond 7, values like 9 or 10, these refer to the bones in the image above, eg. unique value 8 refer to bone Th1</p>\n<p>But, do we need these values to train models? No, not necessarily as our target is only (C1-C7)</p>\n<p>So, lets analyse the current situation, we have 87 patients studies for segmentation, we will have to learn from these patients, which bone is presented in which image, BUT, why is knowing which image is which bone so important? Answering this question takes us to the last part of this discussion, which is, Submission.</p>\n<p>Now, normally, we don't have to talk about submission files, it is simple, but in this competition sample submission file does not tell us the correct submission format, and this format is the reason why we need to classify C1-C7 before training or rather, submitting.</p>\n<p>The submission file will in the format where each patient will have 8 rows, and 8 predictions, 7 rows for C1-C7 and the last row for overall, overall refers to weather the patient have a fracture in any one of the vertibrates are fractured.</p>\n<p>Eg.</p>\n<table>\n<thead>\n<tr>\n<th>row_id</th>\n<th>fractured</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>20981_C1</td>\n<td>0.01</td>\n</tr>\n<tr>\n<td>20981_C2</td>\n<td>0.02</td>\n</tr>\n<tr>\n<td>20981_C3</td>\n<td>0.005</td>\n</tr>\n<tr>\n<td>20981_C4</td>\n<td>0.03</td>\n</tr>\n<tr>\n<td>20981_C5</td>\n<td>0.2</td>\n</tr>\n<tr>\n<td>20981_C6</td>\n<td>0.002</td>\n</tr>\n<tr>\n<td>20981_C7</td>\n<td>0.012</td>\n</tr>\n<tr>\n<td>20981_patient_overall</td>\n<td>0.4</td>\n</tr>\n</tbody>\n</table>\n<p>[NOTE]: I have done some mistakes here such as not realizing that sagittal view is available… which changes a lot of things, but this particular discussion is still one way to look at it. </p>\n<p>Please Upvote this topic if it helped you, if any notebooks wants to use any of the code, please provide reference link to this discussion, this is my first post in a long time, and my very first post for explaining a dataset. I might have made some mistakes, thank you for your suggestions in the comments.</p>",
      "rawMarkdown": "Let's start with understanding the features and the targets.\n\nFor features used in training, we have 2 folders, 'train_images' and 'segmentations'\nIn folder 'train_images' there are 2019 more folders, each folder is named after a patient study id\neg. 1.2.826.0.1.3680043.10001\n\nIn each one of these 2019 folders exists a number of dicom files (.dcm extension), the number of dicom files in folders varies.\n\nI won't go over the details of dicom files, you can find that on kaggle or google, but I will go over the useful resource of dicom for this dataset.\n\nDicom file on this dataset have 2 uses, one is the data it possess, we can get this by doing a dcmread from pydicom library onto a file, then printing it, there are 4 data values which we can get, which are 'ImageOrientationPatient', 'ImagePositionPatient', 'PatientID', 'PatientName'.\nEg. `pydicom.dcmread('rsna_spine/train_images/1.2.826.0.1.3680043.20981/1.dcm').ImagePositionPatient`\n\n'PatientID' gives us the id of the patient, for this data, 'PatientName' is the same as 'PatientID'\n'ImagePositionPatient' gives us the position on the patient, more on this later\n'ImageOrientationPatient' gives us the orientation of the patient. (I did not find anything useful in this)\n\n'ImagePositionPatient' outputs a list of 3 values, the first one indicates the position of Patient on x-axis, the second indicates the position on y-axis and the third value on the z-axis, the z-axis is the most important one to understand.\n\nZ-axis in this competition is unlike other competition with CT Scans, normally a Z-axis tells us the timestamp, this time, Z-axis tells us the position in sagittal plane.\n\nThe images in this dataset is in axial plane, meaning we will only be able to observe one bone at a time, but where in the world are we, the reference can be obtained from this z-axis value.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1794509%2F62dc74f51c453f0e74961b92404c84b7%2FScreenshot%20from%202022-07-30%2008-39-52.png?generation=1659150707469954&alt=media)\n\nIn the image above, on the left side, we can see sagittal view of the bone, in the middle we can see Axial view of tissues, Axial view of tissues is not provided in the dataset of this competition, on the right side of the image, we can see axial view of bone paticularly 2.5mm deep, the data in this competition is lower than 1mm deep, which means our dataset is more sharp.\n\nThe next thing to take notice at is the thin line in sagittal view (Sag bone, leftmost image), that thin line is what is indicating what we are currently seeing in the axial view, and the Z-axis previously mentioned tells us where that thin line is and where  our axial plane is currently looking at in correspondance to the sagittal view.\n\nBut here comes the biggest problem, we don't have sagittal view... and we need this view to know which dicom file is referencing to which bone\n\nThe solution comes in the folder 'segmentations' where we have 87 files, these files are named with the reference to patient id, the format of these files is nifti, which can be read with the library nibabel, after reading 1 patient file, we will get an array of (height, width, num_images) (num_images here will be the same as the number of diccom files in that particular patient subfolder in the folder 'train_images')\n\nWhen we have got the array out of nifti files, we will see that array are kinda weird, well the reason for that is, and I quote\n> Please be aware that the NIFTI files consist of segmentation in the sagittal plane, while the DICOM files are in the axial plane. Please use the NIFTI header information to determine the appropriate orientation such that the DICOM images and segmentation match. Otherwise, you run the risk of having the segmentations flipped in the Z axis and mirrored in the X axis.\n\nWhich can be done with something like this:\n`segmentations = nib.load(f\"segmentations/1.2.826.0.1.3680043.10921.nii\").get_fdata()[:, ::-1, ::-1].transpose(2, 1, 0)`\n\nNow after loading the segmentations like this, the shape of segmentations will be (num_images, height, width) and now the data will make a lot more sense.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1794509%2F9208e350550593b9c2b209747fe20895%2Fdownload.png?generation=1659151517170533&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1794509%2Fc33edf394a2c664aef455df101fe5a62%2Fdownload%20(1).png?generation=1659151546577377&alt=media)\n\nThe 2 images above, the first one is a dicom reading, the second one is one of the slice of segmentations (reference to segmentations is defined above in a code block)\n\nWhat was the problem again? Oh yeah, we don't have the sagittal view, and we don't know which image is referencing to which bone.. well, now we kinda do, how?\n\nThis segmentations numpy array which we have just created and visualized actually have one more use, the unique values of a particular slice will tell us which bone we are working on, for instance the image and  segmentation slice mask we see above, let's find out which bone we are seeing in that.\n\nI will just write `np.unique(segmentations[199])` (199 in this case is the slice number, which means this image is 200.dcm)\n\nThe output of this small line is array([0., 6.]), where 0 is the background and 6 is the reference to which bone we are talking about, in this case, bone C6.\n\nAm I done? Oh no, we still have to understand the variables, which in this case is that there are more than 7 bones in the base (obviously), but we only have labels for C1-C7, but as seen in the image below it is seen that there are way more than that.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1794509%2F2bccacfc06bc3537a15b5911d348e056%2FGray_111_-_Vertebral_column-coloured.png?generation=1659152307732067&alt=media)\n\nSo, for some slices we will see unique values going beyond 7, values like 9 or 10, these refer to the bones in the image above, eg. unique value 8 refer to bone Th1\n\nBut, do we need these values to train models? No, not necessarily as our target is only (C1-C7)\n\nSo, lets analyse the current situation, we have 87 patients studies for segmentation, we will have to learn from these patients, which bone is presented in which image, BUT, why is knowing which image is which bone so important? Answering this question takes us to the last part of this discussion, which is, Submission.\n\nNow, normally, we don't have to talk about submission files, it is simple, but in this competition sample submission file does not tell us the correct submission format, and this format is the reason why we need to classify C1-C7 before training or rather, submitting.\n\nThe submission file will in the format where each patient will have 8 rows, and 8 predictions, 7 rows for C1-C7 and the last row for overall, overall refers to weather the patient have a fracture in any one of the vertibrates are fractured.\n\nEg.\n\n| row_id | fractured |\n| --- | --- |\n| 20981_C1 | 0.01 |\n| 20981_C2 | 0.02 |\n| 20981_C3 | 0.005 |\n| 20981_C4 | 0.03 |\n| 20981_C5 | 0.2 |\n| 20981_C6 | 0.002 |\n| 20981_C7 | 0.012 |\n| 20981_patient_overall | 0.4 |\n\n[NOTE]: I have done some mistakes here such as not realizing that sagittal view is available... which changes a lot of things, but this particular discussion is still one way to look at it. \n\nPlease Upvote this topic if it helped you, if any notebooks wants to use any of the code, please provide reference link to this discussion, this is my first post in a long time, and my very first post for explaining a dataset. I might have made some mistakes, thank you for your suggestions in the comments.",
      "votes": 179
    },
    {
      "id": 1931589,
      "postDate": "2022-09-08T20:13:23.983Z",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F11418184%2Fd704b91b50bf0f388643487318cf654f%2Fplanes.jpg?generation=1662668125116664&amp;alt=media\" alt=\"\"></p>\n<p>If anyone like me with 0 medical background, feels the planes going over the head. The figure might help. Reading the post with this figure reference helps in a little better understanding.<br>\nThe axial plane mentioned in post is same as transverse plane in the pic</p>",
      "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F11418184%2Fd704b91b50bf0f388643487318cf654f%2Fplanes.jpg?generation=1662668125116664&alt=media)\n\nIf anyone like me with 0 medical background, feels the planes going over the head. The figure might help. Reading the post with this figure reference helps in a little better understanding.\nThe axial plane mentioned in post is same as transverse plane in the pic\n",
      "votes": 14
    },
    {
      "id": 1880266,
      "postDate": "2022-08-01T15:14:47.453Z",
      "content": "<p>This is very helpful to those without medical background. Thank you very much!</p>",
      "rawMarkdown": "This is very helpful to those without medical background. Thank you very much!",
      "votes": 4
    },
    {
      "id": 1911268,
      "postDate": "2022-08-24T01:59:42.773Z",
      "content": "<p>This may also help. </p>\n<p>paper:<a href=\"https://arxiv.org/pdf/2208.05868.pdf\" target=\"_blank\">https://arxiv.org/pdf/2208.05868.pdf</a><br>\ncode: <a href=\"https://github.com/wasserth/TotalSegmentator\" target=\"_blank\">https://github.com/wasserth/TotalSegmentator</a><br>\ndataset: <a href=\"https://zenodo.org/record/6802614#.YwWGAXZByHs\" target=\"_blank\">https://zenodo.org/record/6802614#.YwWGAXZByHs</a></p>\n<p><img src=\"https://user-images.githubusercontent.com/17668390/186300879-68303faa-f999-46f9-9088-a7bd6f1ba847.png\" alt=\"overview_classes\"></p>",
      "rawMarkdown": "This may also help. \n\npaper:https://arxiv.org/pdf/2208.05868.pdf\ncode: https://github.com/wasserth/TotalSegmentator\ndataset: https://zenodo.org/record/6802614#.YwWGAXZByHs\n\n![overview_classes](https://user-images.githubusercontent.com/17668390/186300879-68303faa-f999-46f9-9088-a7bd6f1ba847.png)",
      "votes": 2
    },
    {
      "id": 1877038,
      "postDate": "2022-07-30T09:36:22.350Z",
      "content": "<p>This is a great explanation for the data! Superb work! Keep it up! Thanks for sharing and kudos for the effort thereby!</p>",
      "rawMarkdown": "This is a great explanation for the data! Superb work! Keep it up! Thanks for sharing and kudos for the effort thereby!",
      "votes": 2
    },
    {
      "id": 1979287,
      "postDate": "2022-10-09T09:43:27.370Z",
      "content": "<p>Very nice work! thx</p>",
      "rawMarkdown": "Very nice work! thx"
    },
    {
      "id": 1979022,
      "postDate": "2022-10-09T05:33:52.990Z",
      "content": "<p>Excellent explanations and information. Very helpful . Initially I decided not to join this competition because of lack of domain knowledge but then I thought nothing to loose in trying. At least I will get some experience in different domain and different way of looking at problem. Thank god that I joined. I have been reading all discussion posts during last two days and this one is absolutely spot on. Thanks for all you are doing . Keep it up. </p>",
      "rawMarkdown": "Excellent explanations and information. Very helpful . Initially I decided not to join this competition because of lack of domain knowledge but then I thought nothing to loose in trying. At least I will get some experience in different domain and different way of looking at problem. Thank god that I joined. I have been reading all discussion posts during last two days and this one is absolutely spot on. Thanks for all you are doing . Keep it up. "
    },
    {
      "id": 1960365,
      "postDate": "2022-09-28T15:17:03.630Z",
      "content": "<p><a href=\"https://www.kaggle.com/harshitsheoran\" target=\"_blank\">@harshitsheoran</a>,  do you mean the submission file shape should be 24 rows (3 patients * 8 predictions)and 2 columns?<br>\nwhat about row_ids?  <br>\nlike this?<br>\n1.2.826.0.1.3680043.10197_C1<br>\n1.2.826.0.1.3680043.10197_C2<br>\n1.2.826.0.1.3680043.10197_C3<br>\n1.2.826.0.1.3680043.10197_C4<br>\n1.2.826.0.1.3680043.10197_C5<br>\n1.2.826.0.1.3680043.10197_C6<br>\n1.2.826.0.1.3680043.10197_C7<br>\n1.2.826.0.1.3680043.10197_overall<br>\n………….<br>\nplease let me know thanks.</p>",
      "rawMarkdown": "@harshitsheoran,  do you mean the submission file shape should be 24 rows (3 patients * 8 predictions)and 2 columns?\nwhat about row_ids?  \nlike this?\n1.2.826.0.1.3680043.10197_C1\n1.2.826.0.1.3680043.10197_C2\n1.2.826.0.1.3680043.10197_C3\n1.2.826.0.1.3680043.10197_C4\n1.2.826.0.1.3680043.10197_C5\n1.2.826.0.1.3680043.10197_C6\n1.2.826.0.1.3680043.10197_C7\n1.2.826.0.1.3680043.10197_overall\n.............\nplease let me know thanks.",
      "replies": [
        {
          "id": 1960775,
          "postDate": "2022-09-28T18:55:07.640Z",
          "content": "<p>It should be \"1.2.826.0.1.3680043.10197_patient_overall\" instead of \"1.2.826.0.1.3680043.10197_overall\"</p>",
          "rawMarkdown": "It should be \"1.2.826.0.1.3680043.10197_patient_overall\" instead of \"1.2.826.0.1.3680043.10197_overall\"",
          "votes": 1
        },
        {
          "id": 1970629,
          "postDate": "2022-10-04T07:14:43.887Z",
          "content": "<p>Sorry for my delayed response.<br>\n still no luck with the subission file.☹️</p>",
          "rawMarkdown": "Sorry for my delayed response.\n still no luck with the subission file.☹️"
        },
        {
          "id": 1970637,
          "postDate": "2022-10-04T07:24:59.990Z",
          "content": "<p>You should try using a format from public notebook</p>",
          "rawMarkdown": "You should try using a format from public notebook"
        },
        {
          "id": 1970806,
          "postDate": "2022-10-04T09:43:26.313Z",
          "content": "<p>Yes, did that(around 3 different notebooks just copy-pasted their code without any changes only my model which I trained)tried around 30+ different combinations .with ids in image files ,ids of submission/test_csv file names and most important changes as you said which makes more sense.<br>\n It looks like there is something I am missing in my notebook environment apart from disabling <br>\nInternet, as it runs for seconds and says scoring failed giving  same reason \"Notebook threw exception \".<br>\nThe notebook runs successfully without any bugs tho and made sure no internet is required to run like downloading pre-trained models.<br>\nwhat does this mean in conditions for submission?<br>\nCPU Notebook &lt;= 9 hours run-time<br>\nGPU Notebook &lt;= 9 hours run-time<br>\nThank you for taking your valuable time😊.</p>",
          "rawMarkdown": "Yes, did that(around 3 different notebooks just copy-pasted their code without any changes only my model which I trained)tried around 30+ different combinations .with ids in image files ,ids of submission/test_csv file names and most important changes as you said which makes more sense.\n It looks like there is something I am missing in my notebook environment apart from disabling \nInternet, as it runs for seconds and says scoring failed giving  same reason \"Notebook threw exception \".\nThe notebook runs successfully without any bugs tho and made sure no internet is required to run like downloading pre-trained models.\nwhat does this mean in conditions for submission?\nCPU Notebook <= 9 hours run-time\nGPU Notebook <= 9 hours run-time\nThank you for taking your valuable time😊."
        },
        {
          "id": 1970834,
          "postDate": "2022-10-04T10:12:19.060Z",
          "content": "<p>These numbers means that your notebook should only take 9 hours to submit, if it takes more than 9 hours, you will see notebook timeout error</p>",
          "rawMarkdown": "These numbers means that your notebook should only take 9 hours to submit, if it takes more than 9 hours, you will see notebook timeout error"
        },
        {
          "id": 1970875,
          "postDate": "2022-10-04T10:40:23.233Z",
          "content": "<p>Ok, Thanks for clarifying.<br>\nTip for you, hope this works:<br>\nwhen you submit for leaderboard your best models for competition(here you are allowed 2) make sure you submit 1st with the best score and the second with the scores in between 10 to 15th positions. As I saw in most competitions positions 15th moves to the 1st and the 1st moves in between 10 to the 15th postion when the private leadbord is evaluated. In this competition public score is evaluated just for 28%(it's very little), so you don't know how will your best model behaves when it sees rest 72% of the data.<br>\nAll the best.👍</p>",
          "rawMarkdown": "Ok, Thanks for clarifying.\nTip for you, hope this works:\nwhen you submit for leaderboard your best models for competition(here you are allowed 2) make sure you submit 1st with the best score and the second with the scores in between 10 to 15th positions. As I saw in most competitions positions 15th moves to the 1st and the 1st moves in between 10 to the 15th postion when the private leadbord is evaluated. In this competition public score is evaluated just for 28%(it's very little), so you don't know how will your best model behaves when it sees rest 72% of the data.\nAll the best.👍\n",
          "votes": 1
        },
        {
          "id": 1979000,
          "postDate": "2022-10-09T05:26:04.880Z",
          "content": "<p>Well said. I also experienced same in other competitions. Specially when public data is less , there are more chances of leaderboard shuffle on all data.</p>",
          "rawMarkdown": "Well said. I also experienced same in other competitions. Specially when public data is less , there are more chances of leaderboard shuffle on all data."
        }
      ]
    },
    {
      "id": 1942288,
      "postDate": "2022-09-16T15:02:40.903Z",
      "content": "<p>Thanks !! This is very helpful for my first works~~ </p>",
      "rawMarkdown": "Thanks !! This is very helpful for my first works~~ "
    },
    {
      "id": 1938196,
      "postDate": "2022-09-14T03:06:45.200Z",
      "content": "<p>segmentations = nib.load(\"../input/rsna-2022-cervical-spine-fracture-detection/segmentations/1.2.826.0.1.3680043.10921.nii\").get_fdata()[:, ::-1, ::-1].transpose(2, 1, 0)</p>\n<p>np.unique(segmentations[72])</p>\n<p>Could you explain why the 73.dcm has two bones C1 and C2 like below?<br>\narray([0., 1., 2.])</p>",
      "rawMarkdown": "segmentations = nib.load(\"../input/rsna-2022-cervical-spine-fracture-detection/segmentations/1.2.826.0.1.3680043.10921.nii\").get_fdata()[:, ::-1, ::-1].transpose(2, 1, 0)\n\nnp.unique(segmentations[72])\n\nCould you explain why the 73.dcm has two bones C1 and C2 like below?\narray([0., 1., 2.])",
      "replies": [
        {
          "id": 1938377,
          "postDate": "2022-09-14T05:53:16.893Z",
          "content": "<p>In an axial view, there are many times when a part of adjacent bones are visible</p>",
          "rawMarkdown": "In an axial view, there are many times when a part of adjacent bones are visible",
          "votes": 1
        }
      ]
    },
    {
      "id": 1929880,
      "postDate": "2022-09-07T12:13:26.267Z",
      "content": "<p>you can imagine you are doing position z encoding.<br>\nthen image = image + pos</p>",
      "rawMarkdown": "you can imagine you are doing position z encoding.\nthen image = image + pos",
      "replies": [
        {
          "id": 1929917,
          "postDate": "2022-09-07T12:32:03.203Z",
          "content": "<p>Sorry, I did not get that?</p>",
          "rawMarkdown": "Sorry, I did not get that?"
        },
        {
          "id": 1929933,
          "postDate": "2022-09-07T12:41:33.070Z",
          "content": "<p>let 3d scan be scan[1,H,W,D]<br>\n1 is single channel.</p>\n<p>say if you retrieve the first and fifth slide:<br>\ns1 = scan[1,H,W,D,1]  <br>\ns5 = scan[1,H,W,D,5]  </p>\n<p>you have a 2d image model net()</p>\n<p>if s1 and s5 are similar, you have no way to differentiate them.<br>\ni.e net(s1) is similar to net(s5)</p>\n<p>you can think of a z encoding function pos(z).<br>\nthen you have<br>\nnet(s1+ pos(1)) <br>\nnet(s5+ pos(5)) </p>",
          "rawMarkdown": "let 3d scan be scan[1,H,W,D]\n1 is single channel.\n\nsay if you retrieve the first and fifth slide:\ns1 = scan[1,H,W,D,1]  \ns5 = scan[1,H,W,D,5]  \n\nyou have a 2d image model net()\n\nif s1 and s5 are similar, you have no way to differentiate them.\ni.e net(s1) is similar to net(s5)\n\nyou can think of a z encoding function pos(z).\nthen you have\nnet(s1+ pos(1)) \nnet(s5+ pos(5)) "
        },
        {
          "id": 1929952,
          "postDate": "2022-09-07T12:56:16.613Z",
          "content": "<p>What is the pos function exactly? like is it just a shift in position while feeding in the model?</p>",
          "rawMarkdown": "What is the pos function exactly? like is it just a shift in position while feeding in the model?"
        },
        {
          "id": 1929962,
          "postDate": "2022-09-07T13:05:59.930Z",
          "content": "<p>you can have  nn.Embedding or sinuous encoding.</p>\n<p>it is not really a shift but information about location in z.</p>\n<p>assume <br>\ns1  = [10,20,30]<br>\ns5  = [10,20,30]</p>\n<p>s1+pos(1)   = [11,20,31]<br>\ns5+pos(5)  = [15,20,35]</p>\n<p>location information is embedded into the original vector, without destroying the original information.<br>\nit is the same as transformer position encoding.</p>",
          "rawMarkdown": "you can have  nn.Embedding or sinuous encoding.\n\nit is not really a shift but information about location in z.\n\nassume \ns1  = [10,20,30]\ns5  = [10,20,30]\n\ns1+pos(1)   = [11,20,31]\ns5+pos(5)  = [15,20,35]\n \nlocation information is embedded into the original vector, without destroying the original information.\nit is the same as transformer position encoding.",
          "votes": 3
        }
      ]
    },
    {
      "id": 1917159,
      "postDate": "2022-08-28T13:24:57.847Z",
      "content": "<p>Thanks for the very helpful post, <a href=\"https://www.kaggle.com/harshitsheoran\" target=\"_blank\">@harshitsheoran</a>! Now I know what I need to do. Thanks a lot!!!</p>",
      "rawMarkdown": "Thanks for the very helpful post, @harshitsheoran! Now I know what I need to do. Thanks a lot!!!"
    },
    {
      "id": 1913005,
      "postDate": "2022-08-25T05:05:33.687Z",
      "content": "<p>very deep explanation, it seems you are very well versed in this field. Thank you.</p>",
      "rawMarkdown": "very deep explanation, it seems you are very well versed in this field. Thank you."
    },
    {
      "id": 1895281,
      "postDate": "2022-08-12T04:04:34.447Z",
      "content": "<p>Well explained, I've actually been working on a way to classify by positioning on the Z axis, in other words, 2 cm from the head is probably C1, 4cm probably is C2, and so on. This might help.</p>",
      "rawMarkdown": "Well explained, I've actually been working on a way to classify by positioning on the Z axis, in other words, 2 cm from the head is probably C1, 4cm probably is C2, and so on. This might help."
    },
    {
      "id": 1891042,
      "postDate": "2022-08-09T08:00:18.157Z",
      "content": "<p>Thanks for the great post, <a href=\"https://www.kaggle.com/harshitsheoran\" target=\"_blank\">@harshitsheoran</a>! Can you please elaborate on what you mean by \"sagittal view is available\"? </p>",
      "rawMarkdown": "Thanks for the great post, @harshitsheoran! Can you please elaborate on what you mean by \"sagittal view is available\"? ",
      "replies": [
        {
          "id": 1891123,
          "postDate": "2022-08-09T08:38:45.373Z",
          "content": "<p>Means, that it is possible to acquire sagittal view, by first stacking images in format of (n, h, w) and then using<br>\n<code>images[:, :, 256]</code> would provide a decent sagittal view…</p>",
          "rawMarkdown": "Means, that it is possible to acquire sagittal view, by first stacking images in format of (n, h, w) and then using\n` images[:, :, 256]` would provide a decent sagittal view...",
          "votes": 7
        },
        {
          "id": 1931736,
          "postDate": "2022-09-09T01:31:36.317Z",
          "content": "<p><a href=\"https://www.kaggle.com/harshitsheoran\" target=\"_blank\">@harshitsheoran</a> Could you elaborate on why we should index with 256? does this apply to all studies? Thank you!</p>",
          "rawMarkdown": "@harshitsheoran Could you elaborate on why we should index with 256? does this apply to all studies? Thank you!"
        },
        {
          "id": 1931746,
          "postDate": "2022-09-09T02:01:50.507Z",
          "content": "<p>256 is the middle point of sagittal view for most images, in my eda, 256 is the most static number for a stable sagittal view, although not for all images.</p>",
          "rawMarkdown": "256 is the middle point of sagittal view for most images, in my eda, 256 is the most static number for a stable sagittal view, although not for all images.",
          "votes": 1
        },
        {
          "id": 1973121,
          "postDate": "2022-10-05T13:37:39.667Z",
          "content": "<p>I am trying this approach to get sagittal view but I am getting something like this, can you please help me with this?<br>\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1546959%2F6ea90befcd07fe0cb7a740bacfae4136%2FScreenshot%202022-10-05%20190559.png?generation=1664977022643144&amp;alt=media\" alt=\"\"></p>",
          "rawMarkdown": "I am trying this approach to get sagittal view but I am getting something like this, can you please help me with this?\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1546959%2F6ea90befcd07fe0cb7a740bacfae4136%2FScreenshot%202022-10-05%20190559.png?generation=1664977022643144&alt=media)"
        }
      ]
    },
    {
      "id": 1890744,
      "postDate": "2022-08-09T03:21:07.313Z",
      "content": "<p>row_id,fractured<br>\n25399_patient_overall,0.008981745<br>\n25399_C1,0.0044939793<br>\n25399_C2,0.00068586576<br>\n25399_C3,0.00024188017<br>\n25399_C4,0.0023683738<br>\n25399_C5,0.0009676772<br>\n25399_C6,0.00360832<br>\n25399_C7,0.0024134389<br>\n…</p>\n<p>Hi,<br>\nI followed your guidance and produced a submission.csv above, but the score failed.</p>\n<p>I have no idea where I made a mistake.</p>\n<p>Should the row_id be like '1.2.826.0.1.3680043.10197_C1' ?</p>\n<p>Should we test the images in 'test_images'?</p>\n<p>Since each id in test_images contains multiple images, should I average the outputs of all of the images as the output of each ID?</p>",
      "rawMarkdown": "row_id,fractured\n25399_patient_overall,0.008981745\n25399_C1,0.0044939793\n25399_C2,0.00068586576\n25399_C3,0.00024188017\n25399_C4,0.0023683738\n25399_C5,0.0009676772\n25399_C6,0.00360832\n25399_C7,0.0024134389\n...\n\nHi,\nI followed your guidance and produced a submission.csv above, but the score failed.\n\nI have no idea where I made a mistake.\n\nShould the row_id be like '1.2.826.0.1.3680043.10197_C1' ?\n\nShould we test the images in 'test_images'?\n\nSince each id in test_images contains multiple images, should I average the outputs of all of the images as the output of each ID?\n",
      "replies": [
        {
          "id": 1890808,
          "postDate": "2022-08-09T04:35:38.583Z",
          "content": "<p>I am sorry to hear that, but yes, the row_id should be like that, and ofcourse you should test only the images in 'test_images', You will have to figure out what to do with the last question yourself, it depends on the modeling weather you want to take average or maximum or minimum, or a mix of those 3</p>\n<p>You are referring to multiple images in 'test_images' folder as in each subfolder in 'test_images' have 100's of dicom files images. Right?</p>",
          "rawMarkdown": "I am sorry to hear that, but yes, the row_id should be like that, and ofcourse you should test only the images in 'test_images', You will have to figure out what to do with the last question yourself, it depends on the modeling weather you want to take average or maximum or minimum, or a mix of those 3\n\nYou are referring to multiple images in 'test_images' folder as in each subfolder in 'test_images' have 100's of dicom files images. Right?"
        },
        {
          "id": 1956302,
          "postDate": "2022-09-26T11:38:34.850Z",
          "content": "<p>Me too, it's strange I am trying every possible way to predict, row_ids like in submission files and also  row_id like in test_images. Nothing works it just says \"Notebook Threw Exception\". The only thing is I changed test_images Dicom files to jpg images and testing and for those results, I have taken C1 vertebrate (not overall)mean and submitted them. <br>\nTrained 3 models for almost 20 hrs(spent 1 week) and I am stuck submitting.☹️<br>\n usually, unsuccessful submissions are not counted in your daily quote of submission but in this competition, they count.<br>\nless room for experimenting.😧</p>\n<p>when I submitted results taking competitions weights average without any model training or predictions it passed<br>\n and scored successfully. This seemed more dangerous to me.<br>\nsuccessful one:<br>\n<a href=\"https://www.kaggle.com/code/drrajkulkarni/rsna-competition-weights/notebook\" target=\"_blank\">https://www.kaggle.com/code/drrajkulkarni/rsna-competition-weights/notebook</a></p>\n<p>failed one:<br>\n<a href=\"https://www.kaggle.com/code/drrajkulkarni/rsnaesnet50-2l7-rsna/notebook?scriptVersionId=106559038\" target=\"_blank\">https://www.kaggle.com/code/drrajkulkarni/rsnaesnet50-2l7-rsna/notebook?scriptVersionId=106559038</a></p>\n<p>By the way, congrats <a href=\"https://www.kaggle.com/harshitsheoran\" target=\"_blank\">@harshitsheoran</a>  being 1st on the leaderboard. Great work.👍</p>",
          "rawMarkdown": "Me too, it's strange I am trying every possible way to predict, row_ids like in submission files and also  row_id like in test_images. Nothing works it just says \"Notebook Threw Exception\". The only thing is I changed test_images Dicom files to jpg images and testing and for those results, I have taken C1 vertebrate (not overall)mean and submitted them. \nTrained 3 models for almost 20 hrs(spent 1 week) and I am stuck submitting.☹️\n usually, unsuccessful submissions are not counted in your daily quote of submission but in this competition, they count.\nless room for experimenting.😧\n\nwhen I submitted results taking competitions weights average without any model training or predictions it passed\n and scored successfully. This seemed more dangerous to me.\nsuccessful one:\nhttps://www.kaggle.com/code/drrajkulkarni/rsna-competition-weights/notebook\n\nfailed one:\nhttps://www.kaggle.com/code/drrajkulkarni/rsnaesnet50-2l7-rsna/notebook?scriptVersionId=106559038\n\n\n\nBy the way, congrats @harshitsheoran  being 1st on the leaderboard. Great work.👍"
        }
      ]
    },
    {
      "id": 1877728,
      "postDate": "2022-07-31T01:12:33.540Z",
      "content": "<p>Wow…Thanks for the detailed explanation!</p>",
      "rawMarkdown": "Wow...Thanks for the detailed explanation!"
    },
    {
      "id": 1927152,
      "postDate": "2022-09-05T12:11:37.050Z",
      "rawMarkdown": "",
      "isDeleted": true
    }
  ],
  "comments": [
    {
      "id": 1931589,
      "author_name": "boi-doingthings",
      "author_url": "",
      "post_date": "2022-09-08T20:13:23.983000",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F11418184%2Fd704b91b50bf0f388643487318cf654f%2Fplanes.jpg?generation=1662668125116664&amp;alt=media\" alt=\"\"></p>\n<p>If anyone like me with 0 medical background, feels the planes going over the head. The figure might help. Reading the post with this figure reference helps in a little better understanding.<br>\nThe axial plane mentioned in post is same as transverse plane in the pic</p>",
      "votes": 14,
      "replies": []
    },
    {
      "id": 1880266,
      "author_name": "Gary.l.Tang",
      "author_url": "",
      "post_date": "2022-08-01T15:14:47.453000",
      "content": "<p>This is very helpful to those without medical background. Thank you very much!</p>",
      "votes": 4,
      "replies": []
    },
    {
      "id": 1911268,
      "author_name": "Innat",
      "author_url": "",
      "post_date": "2022-08-24T01:59:42.773000",
      "content": "<p>This may also help. </p>\n<p>paper:<a href=\"https://arxiv.org/pdf/2208.05868.pdf\" target=\"_blank\">https://arxiv.org/pdf/2208.05868.pdf</a><br>\ncode: <a href=\"https://github.com/wasserth/TotalSegmentator\" target=\"_blank\">https://github.com/wasserth/TotalSegmentator</a><br>\ndataset: <a href=\"https://zenodo.org/record/6802614#.YwWGAXZByHs\" target=\"_blank\">https://zenodo.org/record/6802614#.YwWGAXZByHs</a></p>\n<p><img src=\"https://user-images.githubusercontent.com/17668390/186300879-68303faa-f999-46f9-9088-a7bd6f1ba847.png\" alt=\"overview_classes\"></p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 1877038,
      "author_name": "Ravi Ramakrishnan",
      "author_url": "",
      "post_date": "2022-07-30T09:36:22.350000",
      "content": "<p>This is a great explanation for the data! Superb work! Keep it up! Thanks for sharing and kudos for the effort thereby!</p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 1979287,
      "author_name": "Yiting Song",
      "author_url": "",
      "post_date": "2022-10-09T09:43:27.370000",
      "content": "<p>Very nice work! thx</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 1979022,
      "author_name": "Chirag Desai",
      "author_url": "",
      "post_date": "2022-10-09T05:33:52.990000",
      "content": "<p>Excellent explanations and information. Very helpful . Initially I decided not to join this competition because of lack of domain knowledge but then I thought nothing to loose in trying. At least I will get some experience in different domain and different way of looking at problem. Thank god that I joined. I have been reading all discussion posts during last two days and this one is absolutely spot on. Thanks for all you are doing . Keep it up. </p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 1960365,
      "author_name": "Raj Kulkarni",
      "author_url": "",
      "post_date": "2022-09-28T15:17:03.630000",
      "content": "<p><a href=\"https://www.kaggle.com/harshitsheoran\" target=\"_blank\">@harshitsheoran</a>,  do you mean the submission file shape should be 24 rows (3 patients * 8 predictions)and 2 columns?<br>\nwhat about row_ids?  <br>\nlike this?<br>\n1.2.826.0.1.3680043.10197_C1<br>\n1.2.826.0.1.3680043.10197_C2<br>\n1.2.826.0.1.3680043.10197_C3<br>\n1.2.826.0.1.3680043.10197_C4<br>\n1.2.826.0.1.3680043.10197_C5<br>\n1.2.826.0.1.3680043.10197_C6<br>\n1.2.826.0.1.3680043.10197_C7<br>\n1.2.826.0.1.3680043.10197_overall<br>\n………….<br>\nplease let me know thanks.</p>",
      "votes": 0,
      "replies": [
        {
          "id": 1960775,
          "author_name": "Harshit Sheoran",
          "author_url": "",
          "post_date": "2022-09-28T18:55:07.640000",
          "content": "<p>It should be \"1.2.826.0.1.3680043.10197_patient_overall\" instead of \"1.2.826.0.1.3680043.10197_overall\"</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 1970629,
          "author_name": "Raj Kulkarni",
          "author_url": "",
          "post_date": "2022-10-04T07:14:43.887000",
          "content": "<p>Sorry for my delayed response.<br>\n still no luck with the subission file.☹️</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1970637,
          "author_name": "Harshit Sheoran",
          "author_url": "",
          "post_date": "2022-10-04T07:24:59.990000",
          "content": "<p>You should try using a format from public notebook</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1970806,
          "author_name": "Raj Kulkarni",
          "author_url": "",
          "post_date": "2022-10-04T09:43:26.313000",
          "content": "<p>Yes, did that(around 3 different notebooks just copy-pasted their code without any changes only my model which I trained)tried around 30+ different combinations .with ids in image files ,ids of submission/test_csv file names and most important changes as you said which makes more sense.<br>\n It looks like there is something I am missing in my notebook environment apart from disabling <br>\nInternet, as it runs for seconds and says scoring failed giving  same reason \"Notebook threw exception \".<br>\nThe notebook runs successfully without any bugs tho and made sure no internet is required to run like downloading pre-trained models.<br>\nwhat does this mean in conditions for submission?<br>\nCPU Notebook &lt;= 9 hours run-time<br>\nGPU Notebook &lt;= 9 hours run-time<br>\nThank you for taking your valuable time😊.</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1970834,
          "author_name": "Harshit Sheoran",
          "author_url": "",
          "post_date": "2022-10-04T10:12:19.060000",
          "content": "<p>These numbers means that your notebook should only take 9 hours to submit, if it takes more than 9 hours, you will see notebook timeout error</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1970875,
          "author_name": "Raj Kulkarni",
          "author_url": "",
          "post_date": "2022-10-04T10:40:23.233000",
          "content": "<p>Ok, Thanks for clarifying.<br>\nTip for you, hope this works:<br>\nwhen you submit for leaderboard your best models for competition(here you are allowed 2) make sure you submit 1st with the best score and the second with the scores in between 10 to 15th positions. As I saw in most competitions positions 15th moves to the 1st and the 1st moves in between 10 to the 15th postion when the private leadbord is evaluated. In this competition public score is evaluated just for 28%(it's very little), so you don't know how will your best model behaves when it sees rest 72% of the data.<br>\nAll the best.👍</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 1979000,
          "author_name": "Chirag Desai",
          "author_url": "",
          "post_date": "2022-10-09T05:26:04.880000",
          "content": "<p>Well said. I also experienced same in other competitions. Specially when public data is less , there are more chances of leaderboard shuffle on all data.</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 1942288,
      "author_name": "Bo-Wei, Yu",
      "author_url": "",
      "post_date": "2022-09-16T15:02:40.903000",
      "content": "<p>Thanks !! This is very helpful for my first works~~ </p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 1938196,
      "author_name": "jialin hou",
      "author_url": "",
      "post_date": "2022-09-14T03:06:45.200000",
      "content": "<p>segmentations = nib.load(\"../input/rsna-2022-cervical-spine-fracture-detection/segmentations/1.2.826.0.1.3680043.10921.nii\").get_fdata()[:, ::-1, ::-1].transpose(2, 1, 0)</p>\n<p>np.unique(segmentations[72])</p>\n<p>Could you explain why the 73.dcm has two bones C1 and C2 like below?<br>\narray([0., 1., 2.])</p>",
      "votes": 0,
      "replies": [
        {
          "id": 1938377,
          "author_name": "Harshit Sheoran",
          "author_url": "",
          "post_date": "2022-09-14T05:53:16.893000",
          "content": "<p>In an axial view, there are many times when a part of adjacent bones are visible</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 1929880,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2022-09-07T12:13:26.267000",
      "content": "<p>you can imagine you are doing position z encoding.<br>\nthen image = image + pos</p>",
      "votes": 0,
      "replies": [
        {
          "id": 1929917,
          "author_name": "Harshit Sheoran",
          "author_url": "",
          "post_date": "2022-09-07T12:32:03.203000",
          "content": "<p>Sorry, I did not get that?</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1929933,
          "author_name": "hengck23",
          "author_url": "",
          "post_date": "2022-09-07T12:41:33.070000",
          "content": "<p>let 3d scan be scan[1,H,W,D]<br>\n1 is single channel.</p>\n<p>say if you retrieve the first and fifth slide:<br>\ns1 = scan[1,H,W,D,1]  <br>\ns5 = scan[1,H,W,D,5]  </p>\n<p>you have a 2d image model net()</p>\n<p>if s1 and s5 are similar, you have no way to differentiate them.<br>\ni.e net(s1) is similar to net(s5)</p>\n<p>you can think of a z encoding function pos(z).<br>\nthen you have<br>\nnet(s1+ pos(1)) <br>\nnet(s5+ pos(5)) </p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1929952,
          "author_name": "Harshit Sheoran",
          "author_url": "",
          "post_date": "2022-09-07T12:56:16.613000",
          "content": "<p>What is the pos function exactly? like is it just a shift in position while feeding in the model?</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1929962,
          "author_name": "hengck23",
          "author_url": "",
          "post_date": "2022-09-07T13:05:59.930000",
          "content": "<p>you can have  nn.Embedding or sinuous encoding.</p>\n<p>it is not really a shift but information about location in z.</p>\n<p>assume <br>\ns1  = [10,20,30]<br>\ns5  = [10,20,30]</p>\n<p>s1+pos(1)   = [11,20,31]<br>\ns5+pos(5)  = [15,20,35]</p>\n<p>location information is embedded into the original vector, without destroying the original information.<br>\nit is the same as transformer position encoding.</p>",
          "votes": 3,
          "replies": []
        }
      ]
    },
    {
      "id": 1917159,
      "author_name": "Denise Sodero Vinhas Portugal",
      "author_url": "",
      "post_date": "2022-08-28T13:24:57.847000",
      "content": "<p>Thanks for the very helpful post, <a href=\"https://www.kaggle.com/harshitsheoran\" target=\"_blank\">@harshitsheoran</a>! Now I know what I need to do. Thanks a lot!!!</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 1913005,
      "author_name": "sys-f",
      "author_url": "",
      "post_date": "2022-08-25T05:05:33.687000",
      "content": "<p>very deep explanation, it seems you are very well versed in this field. Thank you.</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 1895281,
      "author_name": "Iuryck Santos",
      "author_url": "",
      "post_date": "2022-08-12T04:04:34.447000",
      "content": "<p>Well explained, I've actually been working on a way to classify by positioning on the Z axis, in other words, 2 cm from the head is probably C1, 4cm probably is C2, and so on. This might help.</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 1891042,
      "author_name": "_lev_lipinski",
      "author_url": "",
      "post_date": "2022-08-09T08:00:18.157000",
      "content": "<p>Thanks for the great post, <a href=\"https://www.kaggle.com/harshitsheoran\" target=\"_blank\">@harshitsheoran</a>! Can you please elaborate on what you mean by \"sagittal view is available\"? </p>",
      "votes": 0,
      "replies": [
        {
          "id": 1891123,
          "author_name": "Harshit Sheoran",
          "author_url": "",
          "post_date": "2022-08-09T08:38:45.373000",
          "content": "<p>Means, that it is possible to acquire sagittal view, by first stacking images in format of (n, h, w) and then using<br>\n<code>images[:, :, 256]</code> would provide a decent sagittal view…</p>",
          "votes": 7,
          "replies": []
        },
        {
          "id": 1931736,
          "author_name": "Jebriel Abdul",
          "author_url": "",
          "post_date": "2022-09-09T01:31:36.317000",
          "content": "<p><a href=\"https://www.kaggle.com/harshitsheoran\" target=\"_blank\">@harshitsheoran</a> Could you elaborate on why we should index with 256? does this apply to all studies? Thank you!</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1931746,
          "author_name": "Harshit Sheoran",
          "author_url": "",
          "post_date": "2022-09-09T02:01:50.507000",
          "content": "<p>256 is the middle point of sagittal view for most images, in my eda, 256 is the most static number for a stable sagittal view, although not for all images.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 1973121,
          "author_name": "Aniket Thomas",
          "author_url": "",
          "post_date": "2022-10-05T13:37:39.667000",
          "content": "<p>I am trying this approach to get sagittal view but I am getting something like this, can you please help me with this?<br>\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1546959%2F6ea90befcd07fe0cb7a740bacfae4136%2FScreenshot%202022-10-05%20190559.png?generation=1664977022643144&amp;alt=media\" alt=\"\"></p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 1890744,
      "author_name": "nuptsww",
      "author_url": "",
      "post_date": "2022-08-09T03:21:07.313000",
      "content": "<p>row_id,fractured<br>\n25399_patient_overall,0.008981745<br>\n25399_C1,0.0044939793<br>\n25399_C2,0.00068586576<br>\n25399_C3,0.00024188017<br>\n25399_C4,0.0023683738<br>\n25399_C5,0.0009676772<br>\n25399_C6,0.00360832<br>\n25399_C7,0.0024134389<br>\n…</p>\n<p>Hi,<br>\nI followed your guidance and produced a submission.csv above, but the score failed.</p>\n<p>I have no idea where I made a mistake.</p>\n<p>Should the row_id be like '1.2.826.0.1.3680043.10197_C1' ?</p>\n<p>Should we test the images in 'test_images'?</p>\n<p>Since each id in test_images contains multiple images, should I average the outputs of all of the images as the output of each ID?</p>",
      "votes": 0,
      "replies": [
        {
          "id": 1890808,
          "author_name": "Harshit Sheoran",
          "author_url": "",
          "post_date": "2022-08-09T04:35:38.583000",
          "content": "<p>I am sorry to hear that, but yes, the row_id should be like that, and ofcourse you should test only the images in 'test_images', You will have to figure out what to do with the last question yourself, it depends on the modeling weather you want to take average or maximum or minimum, or a mix of those 3</p>\n<p>You are referring to multiple images in 'test_images' folder as in each subfolder in 'test_images' have 100's of dicom files images. Right?</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 1956302,
          "author_name": "Raj Kulkarni",
          "author_url": "",
          "post_date": "2022-09-26T11:38:34.850000",
          "content": "<p>Me too, it's strange I am trying every possible way to predict, row_ids like in submission files and also  row_id like in test_images. Nothing works it just says \"Notebook Threw Exception\". The only thing is I changed test_images Dicom files to jpg images and testing and for those results, I have taken C1 vertebrate (not overall)mean and submitted them. <br>\nTrained 3 models for almost 20 hrs(spent 1 week) and I am stuck submitting.☹️<br>\n usually, unsuccessful submissions are not counted in your daily quote of submission but in this competition, they count.<br>\nless room for experimenting.😧</p>\n<p>when I submitted results taking competitions weights average without any model training or predictions it passed<br>\n and scored successfully. This seemed more dangerous to me.<br>\nsuccessful one:<br>\n<a href=\"https://www.kaggle.com/code/drrajkulkarni/rsna-competition-weights/notebook\" target=\"_blank\">https://www.kaggle.com/code/drrajkulkarni/rsna-competition-weights/notebook</a></p>\n<p>failed one:<br>\n<a href=\"https://www.kaggle.com/code/drrajkulkarni/rsnaesnet50-2l7-rsna/notebook?scriptVersionId=106559038\" target=\"_blank\">https://www.kaggle.com/code/drrajkulkarni/rsnaesnet50-2l7-rsna/notebook?scriptVersionId=106559038</a></p>\n<p>By the way, congrats <a href=\"https://www.kaggle.com/harshitsheoran\" target=\"_blank\">@harshitsheoran</a>  being 1st on the leaderboard. Great work.👍</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 1877728,
      "author_name": "Ronaldo S.A. Batista",
      "author_url": "",
      "post_date": "2022-07-31T01:12:33.540000",
      "content": "<p>Wow…Thanks for the detailed explanation!</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 1927152,
      "author_name": "",
      "author_url": "",
      "post_date": "2022-09-05T12:11:37.050000",
      "content": "",
      "votes": 0,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "1876735": "Let's start with understanding the features and the targets.\n\nFor features used in training, we have 2 folders, 'train_images' and 'segmentations'\nIn folder 'train_images' there are 2019 more folders, each folder is named after a patient study id\neg. 1.2.826.0.1.3680043.10001\n\nIn each one of these 2019 folders exists a number of dicom files (.dcm extension), the number of dicom files in folders varies.\n\nI won't go over the details of dicom files, you can find that on kaggle or google, but I will go over the useful resource of dicom for this dataset.\n\nDicom file on this dataset have 2 uses, one is the data it possess, we can get this by doing a dcmread from pydicom library onto a file, then printing it, there are 4 data values which we can get, which are 'ImageOrientationPatient', 'ImagePositionPatient', 'PatientID', 'PatientName'.\nEg. `pydicom.dcmread('rsna_spine/train_images/1.2.826.0.1.3680043.20981/1.dcm').ImagePositionPatient`\n\n'PatientID' gives us the id of the patient, for this data, 'PatientName' is the same as 'PatientID'\n'ImagePositionPatient' gives us the position on the patient, more on this later\n'ImageOrientationPatient' gives us the orientation of the patient. (I did not find anything useful in this)\n\n'ImagePositionPatient' outputs a list of 3 values, the first one indicates the position of Patient on x-axis, the second indicates the position on y-axis and the third value on the z-axis, the z-axis is the most important one to understand.\n\nZ-axis in this competition is unlike other competition with CT Scans, normally a Z-axis tells us the timestamp, this time, Z-axis tells us the position in sagittal plane.\n\nThe images in this dataset is in axial plane, meaning we will only be able to observe one bone at a time, but where in the world are we, the reference can be obtained from this z-axis value.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1794509%2F62dc74f51c453f0e74961b92404c84b7%2FScreenshot%20from%202022-07-30%2008-39-52.png?generation=1659150707469954&alt=media)\n\nIn the image above, on the left side, we can see sagittal view of the bone, in the middle we can see Axial view of tissues, Axial view of tissues is not provided in the dataset of this competition, on the right side of the image, we can see axial view of bone paticularly 2.5mm deep, the data in this competition is lower than 1mm deep, which means our dataset is more sharp.\n\nThe next thing to take notice at is the thin line in sagittal view (Sag bone, leftmost image), that thin line is what is indicating what we are currently seeing in the axial view, and the Z-axis previously mentioned tells us where that thin line is and where  our axial plane is currently looking at in correspondance to the sagittal view.\n\nBut here comes the biggest problem, we don't have sagittal view... and we need this view to know which dicom file is referencing to which bone\n\nThe solution comes in the folder 'segmentations' where we have 87 files, these files are named with the reference to patient id, the format of these files is nifti, which can be read with the library nibabel, after reading 1 patient file, we will get an array of (height, width, num_images) (num_images here will be the same as the number of diccom files in that particular patient subfolder in the folder 'train_images')\n\nWhen we have got the array out of nifti files, we will see that array are kinda weird, well the reason for that is, and I quote\n> Please be aware that the NIFTI files consist of segmentation in the sagittal plane, while the DICOM files are in the axial plane. Please use the NIFTI header information to determine the appropriate orientation such that the DICOM images and segmentation match. Otherwise, you run the risk of having the segmentations flipped in the Z axis and mirrored in the X axis.\n\nWhich can be done with something like this:\n`segmentations = nib.load(f\"segmentations/1.2.826.0.1.3680043.10921.nii\").get_fdata()[:, ::-1, ::-1].transpose(2, 1, 0)`\n\nNow after loading the segmentations like this, the shape of segmentations will be (num_images, height, width) and now the data will make a lot more sense.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1794509%2F9208e350550593b9c2b209747fe20895%2Fdownload.png?generation=1659151517170533&alt=media)\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1794509%2Fc33edf394a2c664aef455df101fe5a62%2Fdownload%20(1).png?generation=1659151546577377&alt=media)\n\nThe 2 images above, the first one is a dicom reading, the second one is one of the slice of segmentations (reference to segmentations is defined above in a code block)\n\nWhat was the problem again? Oh yeah, we don't have the sagittal view, and we don't know which image is referencing to which bone.. well, now we kinda do, how?\n\nThis segmentations numpy array which we have just created and visualized actually have one more use, the unique values of a particular slice will tell us which bone we are working on, for instance the image and  segmentation slice mask we see above, let's find out which bone we are seeing in that.\n\nI will just write `np.unique(segmentations[199])` (199 in this case is the slice number, which means this image is 200.dcm)\n\nThe output of this small line is array([0., 6.]), where 0 is the background and 6 is the reference to which bone we are talking about, in this case, bone C6.\n\nAm I done? Oh no, we still have to understand the variables, which in this case is that there are more than 7 bones in the base (obviously), but we only have labels for C1-C7, but as seen in the image below it is seen that there are way more than that.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F1794509%2F2bccacfc06bc3537a15b5911d348e056%2FGray_111_-_Vertebral_column-coloured.png?generation=1659152307732067&alt=media)\n\nSo, for some slices we will see unique values going beyond 7, values like 9 or 10, these refer to the bones in the image above, eg. unique value 8 refer to bone Th1\n\nBut, do we need these values to train models? No, not necessarily as our target is only (C1-C7)\n\nSo, lets analyse the current situation, we have 87 patients studies for segmentation, we will have to learn from these patients, which bone is presented in which image, BUT, why is knowing which image is which bone so important? Answering this question takes us to the last part of this discussion, which is, Submission.\n\nNow, normally, we don't have to talk about submission files, it is simple, but in this competition sample submission file does not tell us the correct submission format, and this format is the reason why we need to classify C1-C7 before training or rather, submitting.\n\nThe submission file will in the format where each patient will have 8 rows, and 8 predictions, 7 rows for C1-C7 and the last row for overall, overall refers to weather the patient have a fracture in any one of the vertibrates are fractured.\n\nEg.\n\n| row_id | fractured |\n| --- | --- |\n| 20981_C1 | 0.01 |\n| 20981_C2 | 0.02 |\n| 20981_C3 | 0.005 |\n| 20981_C4 | 0.03 |\n| 20981_C5 | 0.2 |\n| 20981_C6 | 0.002 |\n| 20981_C7 | 0.012 |\n| 20981_patient_overall | 0.4 |\n\n[NOTE]: I have done some mistakes here such as not realizing that sagittal view is available... which changes a lot of things, but this particular discussion is still one way to look at it. \n\nPlease Upvote this topic if it helped you, if any notebooks wants to use any of the code, please provide reference link to this discussion, this is my first post in a long time, and my very first post for explaining a dataset. I might have made some mistakes, thank you for your suggestions in the comments.",
    "1931589": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F11418184%2Fd704b91b50bf0f388643487318cf654f%2Fplanes.jpg?generation=1662668125116664&alt=media)\n\nIf anyone like me with 0 medical background, feels the planes going over the head. The figure might help. Reading the post with this figure reference helps in a little better understanding.\nThe axial plane mentioned in post is same as transverse plane in the pic\n",
    "1880266": "This is very helpful to those without medical background. Thank you very much!",
    "1911268": "This may also help. \n\npaper:https://arxiv.org/pdf/2208.05868.pdf\ncode: https://github.com/wasserth/TotalSegmentator\ndataset: https://zenodo.org/record/6802614#.YwWGAXZByHs\n\n![overview_classes](https://user-images.githubusercontent.com/17668390/186300879-68303faa-f999-46f9-9088-a7bd6f1ba847.png)",
    "1877038": "This is a great explanation for the data! Superb work! Keep it up! Thanks for sharing and kudos for the effort thereby!",
    "1979287": "Very nice work! thx",
    "1979022": "Excellent explanations and information. Very helpful . Initially I decided not to join this competition because of lack of domain knowledge but then I thought nothing to loose in trying. At least I will get some experience in different domain and different way of looking at problem. Thank god that I joined. I have been reading all discussion posts during last two days and this one is absolutely spot on. Thanks for all you are doing . Keep it up. ",
    "1960365": "@harshitsheoran,  do you mean the submission file shape should be 24 rows (3 patients * 8 predictions)and 2 columns?\nwhat about row_ids?  \nlike this?\n1.2.826.0.1.3680043.10197_C1\n1.2.826.0.1.3680043.10197_C2\n1.2.826.0.1.3680043.10197_C3\n1.2.826.0.1.3680043.10197_C4\n1.2.826.0.1.3680043.10197_C5\n1.2.826.0.1.3680043.10197_C6\n1.2.826.0.1.3680043.10197_C7\n1.2.826.0.1.3680043.10197_overall\n.............\nplease let me know thanks.",
    "1942288": "Thanks !! This is very helpful for my first works~~ ",
    "1938196": "segmentations = nib.load(\"../input/rsna-2022-cervical-spine-fracture-detection/segmentations/1.2.826.0.1.3680043.10921.nii\").get_fdata()[:, ::-1, ::-1].transpose(2, 1, 0)\n\nnp.unique(segmentations[72])\n\nCould you explain why the 73.dcm has two bones C1 and C2 like below?\narray([0., 1., 2.])",
    "1929880": "you can imagine you are doing position z encoding.\nthen image = image + pos",
    "1917159": "Thanks for the very helpful post, @harshitsheoran! Now I know what I need to do. Thanks a lot!!!",
    "1913005": "very deep explanation, it seems you are very well versed in this field. Thank you.",
    "1895281": "Well explained, I've actually been working on a way to classify by positioning on the Z axis, in other words, 2 cm from the head is probably C1, 4cm probably is C2, and so on. This might help.",
    "1891042": "Thanks for the great post, @harshitsheoran! Can you please elaborate on what you mean by \"sagittal view is available\"? ",
    "1890744": "row_id,fractured\n25399_patient_overall,0.008981745\n25399_C1,0.0044939793\n25399_C2,0.00068586576\n25399_C3,0.00024188017\n25399_C4,0.0023683738\n25399_C5,0.0009676772\n25399_C6,0.00360832\n25399_C7,0.0024134389\n...\n\nHi,\nI followed your guidance and produced a submission.csv above, but the score failed.\n\nI have no idea where I made a mistake.\n\nShould the row_id be like '1.2.826.0.1.3680043.10197_C1' ?\n\nShould we test the images in 'test_images'?\n\nSince each id in test_images contains multiple images, should I average the outputs of all of the images as the output of each ID?\n",
    "1877728": "Wow...Thanks for the detailed explanation!",
    "1927152": ""
  }
}