{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":71549,"databundleVersionId":8561470,"sourceType":"competition"}],"dockerImageVersionId":30761,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\n#for dirname, _, filenames in os.walk('/kaggle/input'):\n#    for filename in filenames:\n#        pass\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-09-20T12:36:48.088923Z","iopub.execute_input":"2024-09-20T12:36:48.089548Z","iopub.status.idle":"2024-09-20T12:36:48.098672Z","shell.execute_reply.started":"2024-09-20T12:36:48.089486Z","shell.execute_reply":"2024-09-20T12:36:48.097052Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Instalando a pydicom\n!pip install pydicom pillow numpy","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:36:48.101433Z","iopub.execute_input":"2024-09-20T12:36:48.102025Z","iopub.status.idle":"2024-09-20T12:37:24.519261Z","shell.execute_reply.started":"2024-09-20T12:36:48.101963Z","shell.execute_reply":"2024-09-20T12:37:24.517381Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport torch\nimport torch.nn.functional as F\nfrom torch import nn\nfrom torch.utils.data import DataLoader, Dataset\nfrom torch.optim import Adam\nfrom torchvision import datasets, models, transforms","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:24.521239Z","iopub.execute_input":"2024-09-20T12:37:24.521831Z","iopub.status.idle":"2024-09-20T12:37:24.531098Z","shell.execute_reply.started":"2024-09-20T12:37:24.521760Z","shell.execute_reply":"2024-09-20T12:37:24.529658Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport time\nimport os\nfrom PIL import Image","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:24.534658Z","iopub.execute_input":"2024-09-20T12:37:24.535181Z","iopub.status.idle":"2024-09-20T12:37:24.555629Z","shell.execute_reply.started":"2024-09-20T12:37:24.535124Z","shell.execute_reply":"2024-09-20T12:37:24.553088Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pydicom\nfrom PIL import Image\ndicom_image = pydicom.dcmread('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images/100206310/2092806862/6.dcm')","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:24.557302Z","iopub.execute_input":"2024-09-20T12:37:24.557837Z","iopub.status.idle":"2024-09-20T12:37:24.571452Z","shell.execute_reply.started":"2024-09-20T12:37:24.557777Z","shell.execute_reply":"2024-09-20T12:37:24.569771Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import cv2\n#def load_dicom_image(path):\n#  dicom = pydicom.dcmread(path)\n#  image = dicom.pixel_array\n#  if image.dtype != np.uint8:\n#     image = cv2.normalize(image, None, 0, 255, cv2.NORM_MINMAX).astype(np.uint8)\n # return image","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:24.573877Z","iopub.execute_input":"2024-09-20T12:37:24.574489Z","iopub.status.idle":"2024-09-20T12:37:24.582507Z","shell.execute_reply.started":"2024-09-20T12:37:24.574429Z","shell.execute_reply":"2024-09-20T12:37:24.580575Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def load_dicom_image(file_path):\n    if os.path.exists(file_path):\n        ds = pydicom.dcmread(file_path)\n    else:\n        print(f\"File {file_path} not found.\")\n    img = ds.pixel_array\n    if img.ndim == 2:\n      img =cv2.normalize(img, None, 0, 255, cv2.NORM_MINMAX).astype(np.uint8)\n      pil_image = Image.fromarray(img)\n    else:\n      img = inputzin = cv2.normalize(img, None, 0, 255, cv2.NORM_MINMAX).astype(np.uint8)\n      pil_image = Image.fromarray(img)\n    return pil_image","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:24.584748Z","iopub.execute_input":"2024-09-20T12:37:24.585422Z","iopub.status.idle":"2024-09-20T12:37:24.601794Z","shell.execute_reply.started":"2024-09-20T12:37:24.585362Z","shell.execute_reply":"2024-09-20T12:37:24.599512Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"im = load_dicom_image('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images/100206310/1012284084/15.dcm')\nim2 = load_dicom_image('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images/100206310/1792451510/11.dcm')\nim3 = load_dicom_image('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images/100206310/2092806862/14.dcm')\nfig,axs = plt.subplots(1,3)\naxs[0].imshow(im,cmap='gray')\naxs[0].axis('off')\naxs[1].imshow(im2,cmap='gray')\naxs[1].axis('off')\naxs[2].imshow(im3,cmap='gray')\naxs[2].axis('off')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:24.604932Z","iopub.execute_input":"2024-09-20T12:37:24.606163Z","iopub.status.idle":"2024-09-20T12:37:24.912977Z","shell.execute_reply.started":"2024-09-20T12:37:24.606072Z","shell.execute_reply":"2024-09-20T12:37:24.911257Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Análise Exploratória","metadata":{}},{"cell_type":"code","source":"# Imagens de Treino\ndf_train= pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train.csv')\ndf_train","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:24.919324Z","iopub.execute_input":"2024-09-20T12:37:24.920472Z","iopub.status.idle":"2024-09-20T12:37:24.972343Z","shell.execute_reply.started":"2024-09-20T12:37:24.920420Z","shell.execute_reply":"2024-09-20T12:37:24.970926Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"coordenates_train = pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_label_coordinates.csv')\ndescription_train = pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_series_descriptions.csv')\ndescription_train.head(25)","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:24.973718Z","iopub.execute_input":"2024-09-20T12:37:24.974096Z","iopub.status.idle":"2024-09-20T12:37:25.089672Z","shell.execute_reply.started":"2024-09-20T12:37:24.974058Z","shell.execute_reply":"2024-09-20T12:37:25.087889Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_merge =coordenates_train.merge(description_train[['series_id','series_description']],on='series_id',how='left')\ntrain_merge.head()\n#train_merge['severity_levels'] = train_merge['study_id']*0\ntrain_merge","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:25.091619Z","iopub.execute_input":"2024-09-20T12:37:25.092083Z","iopub.status.idle":"2024-09-20T12:37:25.126555Z","shell.execute_reply.started":"2024-09-20T12:37:25.092036Z","shell.execute_reply":"2024-09-20T12:37:25.124945Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"severity =[]\nfor idx, row in train_merge.iterrows():\n    study = row['study_id']\n    col = row['condition'].replace(' ','_').lower()+'_'+row['level'].replace('/','_').lower()\n    label = df_train[df_train.study_id==study][col].values[0]\n    severity.append(label)\ntrain_merge['severity_levels'] =severity\ntrain_merge.head()","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:25.128185Z","iopub.execute_input":"2024-09-20T12:37:25.128811Z","iopub.status.idle":"2024-09-20T12:37:49.950311Z","shell.execute_reply.started":"2024-09-20T12:37:25.128759Z","shell.execute_reply":"2024-09-20T12:37:49.948897Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_merge.fillna({'severity_levels':'Normal/Mild'},inplace=True)","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:49.952124Z","iopub.execute_input":"2024-09-20T12:37:49.952548Z","iopub.status.idle":"2024-09-20T12:37:49.967921Z","shell.execute_reply.started":"2024-09-20T12:37:49.952504Z","shell.execute_reply":"2024-09-20T12:37:49.966618Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_merge.isnull().sum()","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:49.969557Z","iopub.execute_input":"2024-09-20T12:37:49.970486Z","iopub.status.idle":"2024-09-20T12:37:50.008741Z","shell.execute_reply.started":"2024-09-20T12:37:49.970433Z","shell.execute_reply":"2024-09-20T12:37:50.007506Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tes_des = pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/test_series_descriptions.csv')\ntes_des","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:50.010179Z","iopub.execute_input":"2024-09-20T12:37:50.010571Z","iopub.status.idle":"2024-09-20T12:37:50.027050Z","shell.execute_reply.started":"2024-09-20T12:37:50.010533Z","shell.execute_reply":"2024-09-20T12:37:50.025699Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Qual diretório pegar as imagens?\n### Baseado nas condições escolher um diretório\n","metadata":{}},{"cell_type":"code","source":"for condition in train_merge['condition'].unique():\n    print(condition)\n    dir_ser = train_merge[train_merge['condition']==condition]['series_description'].unique()\n    print(f'Diretório/Série:{dir_ser}')\n   ","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:50.028570Z","iopub.execute_input":"2024-09-20T12:37:50.029056Z","iopub.status.idle":"2024-09-20T12:37:50.104702Z","shell.execute_reply.started":"2024-09-20T12:37:50.029001Z","shell.execute_reply":"2024-09-20T12:37:50.103357Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_merge[(train_merge['condition']=='Spinal Canal Stenosis') & \n            (train_merge['series_description']== 'Sagittal T1')]","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:50.106110Z","iopub.execute_input":"2024-09-20T12:37:50.106495Z","iopub.status.idle":"2024-09-20T12:37:50.145476Z","shell.execute_reply.started":"2024-09-20T12:37:50.106456Z","shell.execute_reply":"2024-09-20T12:37:50.144127Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(train_merge.instance_number.unique())","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:50.147061Z","iopub.execute_input":"2024-09-20T12:37:50.147484Z","iopub.status.idle":"2024-09-20T12:37:50.157164Z","shell.execute_reply.started":"2024-09-20T12:37:50.147442Z","shell.execute_reply":"2024-09-20T12:37:50.155872Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub = pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/sample_submission.csv')\ntest_input = sub.copy()\ntest_input","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:50.159081Z","iopub.execute_input":"2024-09-20T12:37:50.159617Z","iopub.status.idle":"2024-09-20T12:37:50.183163Z","shell.execute_reply.started":"2024-09-20T12:37:50.159552Z","shell.execute_reply":"2024-09-20T12:37:50.181898Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Dados de Teste\ntest1 = load_dicom_image('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/test_images/44036939/2828203845/19.dcm')\ntest2 = load_dicom_image('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/test_images/44036939/3481971518/38.dcm')\ntest3 = load_dicom_image('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/test_images/44036939/3844393089/19.dcm')\nfig,axs = plt.subplots(1,3)\naxs[0].imshow(test1,cmap='gray')\naxs[0].set_title('Sagittal T1')\naxs[0].axis('off')\naxs[1].imshow(test2,cmap='gray')\naxs[1].set_title('Axial T2')\naxs[1].axis('off')\naxs[2].imshow(test3,cmap='gray')\naxs[2].axis('off')\naxs[2].set_title('Sagittal T2/STIR')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:53:00.229799Z","iopub.execute_input":"2024-09-20T12:53:00.230273Z","iopub.status.idle":"2024-09-20T12:53:00.702047Z","shell.execute_reply.started":"2024-09-20T12:53:00.230229Z","shell.execute_reply":"2024-09-20T12:53:00.700765Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_merge.shape[0]\nos.path.join(str(train_merge.study_id[0]),str(train_merge.series_id[0]),str(train_merge.instance_number[0])+'.dcm')","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:50.867260Z","iopub.execute_input":"2024-09-20T12:37:50.867707Z","iopub.status.idle":"2024-09-20T12:37:50.877131Z","shell.execute_reply.started":"2024-09-20T12:37:50.867665Z","shell.execute_reply":"2024-09-20T12:37:50.875830Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class RSNA_Dataset(Dataset):\n    def __init__(self,dataframe,image_dir,transform=None):\n        super().__init__()\n        self.dataframe=dataframe\n        self.transform = transform\n        self.size = dataframe.shape[0]\n        self.path = '/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images'\n    def __len__(self):\n        return self.size\n\n    def __getitem__(self,idx): \n        dir_path = str(self.dataframe.study_id[idx])\n        serie_path =str(self.dataframe.series_id[idx])\n        img_id = str(self.dataframe.instance_number[idx])+'.dcm'\n        image_path = os.path.join(self.path,dir_path,serie_path,\n                                 img_id)\n        label = self.dataframe.severity_levels[idx]\n        \n        ","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:50.878805Z","iopub.execute_input":"2024-09-20T12:37:50.879690Z","iopub.status.idle":"2024-09-20T12:37:50.890132Z","shell.execute_reply.started":"2024-09-20T12:37:50.879641Z","shell.execute_reply":"2024-09-20T12:37:50.888816Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"coordenates_train.info()","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:50.892157Z","iopub.execute_input":"2024-09-20T12:37:50.892586Z","iopub.status.idle":"2024-09-20T12:37:50.924924Z","shell.execute_reply.started":"2024-09-20T12:37:50.892546Z","shell.execute_reply":"2024-09-20T12:37:50.923545Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_description=pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/test_series_descriptions.csv')\ntest_description[test_description.series_description=='Sagittal T1'].series_id.values[0]","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:50.932575Z","iopub.execute_input":"2024-09-20T12:37:50.933016Z","iopub.status.idle":"2024-09-20T12:37:50.945098Z","shell.execute_reply.started":"2024-09-20T12:37:50.932973Z","shell.execute_reply":"2024-09-20T12:37:50.943653Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_description","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:50.946733Z","iopub.execute_input":"2024-09-20T12:37:50.947388Z","iopub.status.idle":"2024-09-20T12:37:50.961831Z","shell.execute_reply.started":"2024-09-20T12:37:50.947309Z","shell.execute_reply":"2024-09-20T12:37:50.960616Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Condição/Série\n\nSpinal Canal Stenosis\n\nDiretório/Série: Sagittal T2/STIR\n\nRight Neural Foraminal Narrowing\n\nDiretório/Série: Sagittal T1\n\nLeft Neural Foraminal Narrowing\n\nDiretório/Série: Sagittal T1\n\nLeft Subarticular Stenosis\n\nDiretório/Série: 'Axial T2'\n\nRight Subarticular Stenosis\n\nDiretório/Série:'Axial T2'","metadata":{}},{"cell_type":"code","source":"# Data Transformer\ntransforms_image = transforms.Compose([\n    transforms.Resize((64, 64)),\n    transforms.RandomHorizontalFlip(),\n    transforms.ToTensor(),\n    #transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),\n])\n","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:50.963473Z","iopub.execute_input":"2024-09-20T12:37:50.963993Z","iopub.status.idle":"2024-09-20T12:37:50.971770Z","shell.execute_reply.started":"2024-09-20T12:37:50.963935Z","shell.execute_reply":"2024-09-20T12:37:50.970331Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Modelo Teste\nclass Classificador(nn.Module):\n    def __init__(self, num_classes=3):\n        super(Classificador, self).__init__()\n        self.features = nn.Sequential(\n            nn.Conv2d(1, 64, kernel_size=3, padding=1),  # Camada convolucional para imagens em escala de cinza\n            nn.ReLU(inplace=True),\n            nn.Conv2d(64, 128, kernel_size=3, padding=1),\n            nn.ReLU(inplace=True),\n            nn.MaxPool2d(kernel_size=2, stride=2)\n        )\n        self.avgpool = nn.AdaptiveAvgPool2d((1, 1))\n        self.classifier = nn.Sequential(\n            nn.Linear(128 * 1 * 1, 256),\n            nn.BatchNorm1d(256),\n            nn.ReLU(inplace=True),\n            nn.Dropout(),\n            nn.Linear(256, 128),\n            nn.ReLU(inplace=True),\n            nn.Dropout(),\n            nn.Linear(128, num_classes),\n            nn.Softmax(dim=1)\n        )\n\n    def forward(self, x):\n        x = self.features(x)\n        x = self.avgpool(x)\n        x = torch.flatten(x, 1)\n        x = self.classifier(x)\n        return x\n","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:50.973427Z","iopub.execute_input":"2024-09-20T12:37:50.973842Z","iopub.status.idle":"2024-09-20T12:37:50.987268Z","shell.execute_reply.started":"2024-09-20T12:37:50.973794Z","shell.execute_reply":"2024-09-20T12:37:50.985927Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"modelo = Classificador()\ndevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\nmodelo = modelo.to(device)","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:50.988915Z","iopub.execute_input":"2024-09-20T12:37:50.989448Z","iopub.status.idle":"2024-09-20T12:37:51.009379Z","shell.execute_reply.started":"2024-09-20T12:37:50.989372Z","shell.execute_reply":"2024-09-20T12:37:51.007979Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import torch\nimport torch.nn as nn\nimport torch.optim as optim\n\n# Definindo o modelo da rede neural\nclass SpineClassificationModel(nn.Module):\n    def __init__(self):\n        super(SpineClassificationModel, self).__init__()\n        self.flatten = nn.Flatten()\n        self.fc1 = nn.Linear(4096, 512)  # Camada totalmente conectada\n        self.fc2 = nn.Linear(512, 128)\n        self.fc3 = nn.Linear(128, 3)     # 3 classes de saída (normal_mild, moderate, severe)\n        self.relu = nn.ReLU()\n        self.softmax = nn.Softmax(dim=1)\n        \n    def forward(self, x):\n        x = self.flatten(x)\n        x = self.relu(self.fc1(x))\n        x = self.relu(self.fc2(x))\n        logits = self.fc3(x)\n        output = self.softmax(logits)\n        return output\n\n# Instanciando o modelo\nmodel = SpineClassificationModel()\n\n# Função de perda e otimizador\ncriterion = nn.CrossEntropyLoss()\noptimizer = optim.Adam(model.parameters(), lr=0.001)\n\n# Se estiver treinando, adicione uma função de treino:\ndef train(model, train_loader, criterion, optimizer, num_epochs=10):\n    model.train()\n    for epoch in range(num_epochs):\n        running_loss = 0.0\n        for images, labels in train_loader:\n            optimizer.zero_grad()\n            outputs = model(images)\n            loss = criterion(outputs, labels)\n            loss.backward()\n            optimizer.step()\n            running_loss += loss.item()\n        print(f\"Epoch [{epoch+1}/{num_epochs}], Loss: {running_loss/len(train_loader)}\")\n\n","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:37:51.011269Z","iopub.execute_input":"2024-09-20T12:37:51.011817Z","iopub.status.idle":"2024-09-20T12:37:51.053102Z","shell.execute_reply.started":"2024-09-20T12:37:51.011756Z","shell.execute_reply":"2024-09-20T12:37:51.051913Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import random\nimport pandas as pd\nimport os\nimport glob\nimport pydicom\nimport torchvision.transforms as transforms\nimport numpy as np\n\n# Definir as classes e um intervalo para previsões aleatórias\nnum_classes = 3\nrandom.seed(42)  # Para garantir que os resultados aleatórios sejam reprodutíveis\n\n# Leitura do arquivo de submissão\nsubmission = pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/sample_submission.csv')\n\n# Define as transformações para as imagens\ntransform = transforms.Compose([\n    transforms.Resize((256, 256)),  # ajuste o tamanho conforme necessário\n    transforms.ToTensor(),\n])\n\n# Entrada\noutputs = []\ntest_dir = '/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/test_images/44036939'\n\n# Itera sobre a submissão para gerar previsões\nfor idx, row in submission.iterrows():\n    diagnostic = row['row_id']\n    \n    # Assumindo que a estrutura de pastas e arquivos é conhecida\n    img_path_pattern = os.path.join(test_dir, '*', f\"{idx + 1}.dcm\")  # Assumindo que as imagens são numeradas de 1 a 25\n    \n    # Obter o primeiro caminho correspondente\n    img_paths = glob.glob(img_path_pattern)\n    \n    if img_paths:\n        # Carregar a imagem DICOM\n        dicom_file = pydicom.dcmread(img_paths[0])\n        img_input = dicom_file.pixel_array  # Obter a matriz de pixels\n        img_input = np.interp(img_input, (img_input.min(), img_input.max()), (0, 255)).astype(np.uint8)  # Normalizar\n        \n        img_input = Image.fromarray(img_input)  # Converter para imagem PIL\n\n        # Prepara a imagem para o modelo\n        img_input = transform(img_input)  # Aplicar as transformações\n        img_input = img_input.unsqueeze(0)  # Adiciona a dimensão do batch\n\n        # Em vez de inferência do modelo, geramos previsões aleatórias\n        random_prediction = [random.random() for _ in range(num_classes)]  # 3 classes\n        total = sum(random_prediction)\n        random_prediction = [p / total for p in random_prediction]  # Normalizar para que a soma seja 1\n        \n        # Adiciona o resultado aleatório à lista de outputs\n        outputs.append(random_prediction)\n    else:\n        print(f\"Imagem não encontrada para: {diagnostic}\")\n\n# Gerando o DataFrame de submissão com os resultados aleatórios\nfor idx, value in enumerate(outputs):\n    submission.at[idx, 'normal_mild'] = value[0]\n    submission.at[idx, 'moderate'] = value[1]\n    submission.at[idx, 'severe'] = value[2]\n\n\n","metadata":{"execution":{"iopub.status.busy":"2024-09-20T13:12:18.881243Z","iopub.execute_input":"2024-09-20T13:12:18.882376Z","iopub.status.idle":"2024-09-20T13:12:20.664916Z","shell.execute_reply.started":"2024-09-20T13:12:18.882321Z","shell.execute_reply":"2024-09-20T13:12:20.663615Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.to_csv('/kaggle/working/submission.csv',index=False)\n","metadata":{"execution":{"iopub.status.busy":"2024-09-20T13:12:23.754405Z","iopub.execute_input":"2024-09-20T13:12:23.754895Z","iopub.status.idle":"2024-09-20T13:12:23.762903Z","shell.execute_reply.started":"2024-09-20T13:12:23.754851Z","shell.execute_reply":"2024-09-20T13:12:23.761363Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission1 = pd.read_csv('/kaggle/working/submission.csv')","metadata":{"execution":{"iopub.status.busy":"2024-09-20T13:12:25.990931Z","iopub.execute_input":"2024-09-20T13:12:25.991419Z","iopub.status.idle":"2024-09-20T13:12:26.002103Z","shell.execute_reply.started":"2024-09-20T13:12:25.991374Z","shell.execute_reply":"2024-09-20T13:12:26.000396Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission1","metadata":{"execution":{"iopub.status.busy":"2024-09-20T13:12:29.118483Z","iopub.execute_input":"2024-09-20T13:12:29.119006Z","iopub.status.idle":"2024-09-20T13:12:29.137835Z","shell.execute_reply.started":"2024-09-20T13:12:29.118957Z","shell.execute_reply":"2024-09-20T13:12:29.136553Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission","metadata":{"execution":{"iopub.status.busy":"2024-09-20T12:48:06.343215Z","iopub.execute_input":"2024-09-20T12:48:06.343974Z","iopub.status.idle":"2024-09-20T12:48:06.364056Z","shell.execute_reply.started":"2024-09-20T12:48:06.343923Z","shell.execute_reply":"2024-09-20T12:48:06.362681Z"},"trusted":true},"execution_count":null,"outputs":[]}]}