{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":14774,"databundleVersionId":875431,"sourceType":"competition"},{"sourceId":2812287,"sourceType":"datasetVersion","datasetId":1719146},{"sourceId":3242401,"sourceType":"datasetVersion","datasetId":1965297},{"sourceId":5203002,"sourceType":"datasetVersion","datasetId":3025918},{"sourceId":848739,"sourceType":"datasetVersion","datasetId":251095},{"sourceId":18900850,"sourceType":"kernelVersion"},{"sourceId":222017548,"sourceType":"kernelVersion"},{"sourceId":222155719,"sourceType":"kernelVersion"},{"sourceId":227642656,"sourceType":"kernelVersion"}],"dockerImageVersionId":30919,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"**ApTos**","metadata":{}},{"cell_type":"code","source":"import os\nimport torch\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom torchvision import datasets, transforms\nfrom torch.utils.data import DataLoader, random_split\nfrom PIL import Image\n\n# Set the seed for all libraries\nseed = 42\ntorch.manual_seed(seed)\ntorch.cuda.manual_seed_all(seed)  # For multi-GPU setup\nnp.random.seed(seed)\n\n# Set deterministic behavior for cuDNN\ntorch.backends.cudnn.deterministic = True\ntorch.backends.cudnn.benchmark = False\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:33:03.106949Z","iopub.execute_input":"2025-03-15T22:33:03.10727Z","iopub.status.idle":"2025-03-15T22:33:03.114209Z","shell.execute_reply.started":"2025-03-15T22:33:03.107246Z","shell.execute_reply":"2025-03-15T22:33:03.113312Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#Global Variables\nbatch_size = 64\nimbalance_approach = True","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:33:03.262525Z","iopub.execute_input":"2025-03-15T22:33:03.262756Z","iopub.status.idle":"2025-03-15T22:33:03.266017Z","shell.execute_reply.started":"2025-03-15T22:33:03.262736Z","shell.execute_reply":"2025-03-15T22:33:03.26504Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\nfrom sklearn.model_selection import train_test_split\n\n# # Map non-class 0 to a single binary class\n# labels_df['binary_label'] = labels_df['diagnosis'].apply(lambda x: 0 if x == '0' else 1)\n\n# # Split into Class 0 and Other Classes\n# class0_data = labels_df[labels_df['binary_label'] == 0]\n# other_data = labels_df[labels_df['binary_label'] == 1]\n\n# print(len(class0_data),len(other_data))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:33:06.165973Z","iopub.execute_input":"2025-03-15T22:33:06.166256Z","iopub.status.idle":"2025-03-15T22:33:06.170064Z","shell.execute_reply.started":"2025-03-15T22:33:06.166236Z","shell.execute_reply":"2025-03-15T22:33:06.169174Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import torch\nimport torch.nn as nn\nimport torchvision.models as models\nfrom sklearn.metrics import f1_score, cohen_kappa_score,confusion_matrix","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:33:06.395395Z","iopub.execute_input":"2025-03-15T22:33:06.395617Z","iopub.status.idle":"2025-03-15T22:33:06.399114Z","shell.execute_reply.started":"2025-03-15T22:33:06.395598Z","shell.execute_reply":"2025-03-15T22:33:06.398331Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import torch\nimport torch.nn as nn","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:33:06.744986Z","iopub.execute_input":"2025-03-15T22:33:06.745195Z","iopub.status.idle":"2025-03-15T22:33:06.748542Z","shell.execute_reply.started":"2025-03-15T22:33:06.745178Z","shell.execute_reply":"2025-03-15T22:33:06.747691Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"class ResNetModel(nn.Module):\n    def __init__(self, pretrained=True):\n        super(ResNetModel, self).__init__()\n        self.resnet = models.resnet18(pretrained=pretrained)  # Load ResNet18\n        \n        # Modify the final fully connected layer for binary classification\n        num_ftrs = self.resnet.fc.in_features\n        self.resnet.fc = nn.Linear(num_ftrs, 1)\n\n    def forward(self, x):\n        return self.resnet(x)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:33:07.335608Z","iopub.execute_input":"2025-03-15T22:33:07.335908Z","iopub.status.idle":"2025-03-15T22:33:07.340564Z","shell.execute_reply.started":"2025-03-15T22:33:07.335882Z","shell.execute_reply":"2025-03-15T22:33:07.339661Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n\nmodel = ResNetModel(pretrained=False).to(device)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:33:07.998622Z","iopub.execute_input":"2025-03-15T22:33:07.998928Z","iopub.status.idle":"2025-03-15T22:33:08.185982Z","shell.execute_reply.started":"2025-03-15T22:33:07.998903Z","shell.execute_reply":"2025-03-15T22:33:08.184996Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import torch.optim as optim\n\n# optimizer = optim.Adam(model.parameters(), lr=0.0001)\n\n# # Handle class imbalance\n# class_weights = len(train_data) / (2.0 * train_data['binary_label'].value_counts().to_numpy())\n# pos_weight = torch.tensor(np.float64(class_weights[1] / class_weights[0])).to(device)\n\n# criterion = nn.BCEWithLogitsLoss(pos_weight=pos_weight)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:33:10.494183Z","iopub.execute_input":"2025-03-15T22:33:10.494461Z","iopub.status.idle":"2025-03-15T22:33:10.498276Z","shell.execute_reply.started":"2025-03-15T22:33:10.49444Z","shell.execute_reply":"2025-03-15T22:33:10.497345Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Messidor1_Data**","metadata":{}},{"cell_type":"code","source":"import os\nimport torch\nimport torch.nn as nn\nimport torch.optim as optim\nimport torchvision.transforms as transforms\nimport torchvision.models as models\nfrom torch.utils.data import DataLoader, Dataset\nfrom PIL import Image\nimport numpy as np\nfrom sklearn.metrics import cohen_kappa_score, accuracy_score,classification_report\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:33:13.459871Z","iopub.execute_input":"2025-03-15T22:33:13.460237Z","iopub.status.idle":"2025-03-15T22:33:13.46442Z","shell.execute_reply.started":"2025-03-15T22:33:13.460199Z","shell.execute_reply":"2025-03-15T22:33:13.463477Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from PIL import Image, ImageChops\n\ndef crop_to_object(img):\n\n\n    # Convert to grayscale\n    gray_im = img.convert(\"L\")\n\n    # Set your threshold value\n    threshold = 10  # Adjust this value as needed\n\n    # Create a binary image: pixels > threshold become 255 (white), else 0 (black)\n    binary_im = gray_im.point(lambda x: 255 if x > threshold else 0)\n\n    # Get the bounding box of the white regions (non-background)\n    bbox = binary_im.getbbox()\n\n    if bbox:\n        # Crop the image to the bounding box and save it\n        cropped_img = img.crop(bbox)\n        #cropped_img.save(output_path)\n        #print(f\"Cropped image saved as '{output_path}'\")\n        return cropped_img\n        \n# Demo usage:\n# if __name__ == \"__main__\":\n#     input_image_path = \"retina_image.png\"   # Path to your retina image\n#     output_image_path = \"cropped_retina.png\"  # Desired path for the cropped image\n\n#     # Crop the image and show the result if available\n#     cropped = crop_to_object(input_image_path, output_image_path)\n#     if cropped:\n#         cropped.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:33:13.618427Z","iopub.execute_input":"2025-03-15T22:33:13.618645Z","iopub.status.idle":"2025-03-15T22:33:13.62306Z","shell.execute_reply.started":"2025-03-15T22:33:13.618627Z","shell.execute_reply":"2025-03-15T22:33:13.622261Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# ============================\n# Custom Dataset for Messidor1 (Handles .tif images)\n# ============================\nclass MessidorDataset(Dataset):\n    def __init__(self, root_dir, transform=None):\n        self.root_dir = root_dir\n        self.transform = transform\n        self.image_paths = []\n        self.labels = []\n\n        # Iterate over folders (0, 1, 2, 3) and collect image paths\n        for label in range(4):  # Labels: 0, 1, 2, 3\n            folder_path = os.path.join(root_dir, str(label))\n            for filename in os.listdir(folder_path):\n                if filename.endswith(\".tif\"):\n                    self.image_paths.append(os.path.join(folder_path, filename))\n                    self.labels.append(label)\n\n    def __len__(self):\n        return len(self.image_paths)\n\n    def __getitem__(self, idx):\n        img_path = self.image_paths[idx]\n        if self.labels[idx] == 0:\n            label = 0\n        else:\n            label = 1\n\n        # Open the image and apply transformations\n        image = Image.open(img_path).convert(\"RGB\")\n        image = crop_to_object(image)\n        if self.transform:\n            image = self.transform(image)\n\n        return image, label","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:33:13.866608Z","iopub.execute_input":"2025-03-15T22:33:13.866901Z","iopub.status.idle":"2025-03-15T22:33:13.873039Z","shell.execute_reply.started":"2025-03-15T22:33:13.866878Z","shell.execute_reply":"2025-03-15T22:33:13.872217Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"crop_to_object(Image.open(\"/kaggle/input/messifor2/messidor2/IMAGES/20051020_43808_0100_PP.png\"))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:33:16.00486Z","iopub.execute_input":"2025-03-15T22:33:16.005145Z","iopub.status.idle":"2025-03-15T22:33:16.356929Z","shell.execute_reply.started":"2025-03-15T22:33:16.005125Z","shell.execute_reply":"2025-03-15T22:33:16.354584Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# ============================\n# Data Transformations & Dataloaders\n# ============================\ntransform = transforms.Compose([\n    transforms.Resize((224, 224)),  # Resizing for ResNet\n    transforms.ToTensor(),\n    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])\n])\n\ntest_dir = \"/kaggle/input/messidor1-data/P_Data/Test\"\n\ntest_dataset = MessidorDataset(test_dir, transform=transform)\n\ntest_loader = DataLoader(test_dataset, batch_size=16, shuffle=False)\n\nprint(f\"Testing samples: {len(test_dataset)}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:33:20.248866Z","iopub.execute_input":"2025-03-15T22:33:20.249182Z","iopub.status.idle":"2025-03-15T22:33:20.27114Z","shell.execute_reply.started":"2025-03-15T22:33:20.249154Z","shell.execute_reply":"2025-03-15T22:33:20.270474Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# ============================\n# Evaluation Function (QWK & Accuracy)\n# ============================\ndef evaluate(model, test_loader):\n    model.eval()\n    y_true = []\n    y_pred = []\n\n    with torch.no_grad():\n        for images, labels in test_loader:\n            images, labels = images.to(device), labels.to(device)\n\n            outputs = model(images)\n            preds = (torch.sigmoid(outputs) > 0.5).float()\n\n            y_true.extend(labels.cpu().numpy())\n            y_pred.extend(preds.cpu().numpy())\n\n    # Compute Accuracy & Quadratic Weighted Kappa (QWK)\n    accuracy = accuracy_score(y_true, y_pred)\n\n    print(f\"✅ Test Accuracy: {accuracy:.4f}\")\n    \n    print(classification_report(y_true,y_pred))\n    print(confusion_matrix(y_true,y_pred))\n    return y_true ,y_pred\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:33:29.337103Z","iopub.execute_input":"2025-03-15T22:33:29.337376Z","iopub.status.idle":"2025-03-15T22:33:29.342827Z","shell.execute_reply.started":"2025-03-15T22:33:29.337356Z","shell.execute_reply":"2025-03-15T22:33:29.341836Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model.load_state_dict(torch.load(\"/kaggle/input/eyepacs-resnet/EyePacs_best_resnet_model_qwk.pth\"))\nmodel.eval()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:33:32.555614Z","iopub.execute_input":"2025-03-15T22:33:32.55595Z","iopub.status.idle":"2025-03-15T22:33:32.615135Z","shell.execute_reply.started":"2025-03-15T22:33:32.555921Z","shell.execute_reply":"2025-03-15T22:33:32.614244Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# ============================\n# Run Evaluation\n# ============================\ny_true ,y_pred = evaluate(model, test_loader)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:33:36.6917Z","iopub.execute_input":"2025-03-15T22:33:36.692055Z","iopub.status.idle":"2025-03-15T22:33:54.83054Z","shell.execute_reply.started":"2025-03-15T22:33:36.692027Z","shell.execute_reply":"2025-03-15T22:33:54.829747Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**IDRiD: Diabetic Retinopathy – Grading**","metadata":{}},{"cell_type":"code","source":"# Define dataset paths\nimage_dir = \"/kaggle/input/idrid-dataset/Imagenes/Imagenes\"\ncsv_file = \"/kaggle/input/idrid-dataset/idrid_labels.csv\"","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:35:22.915661Z","iopub.execute_input":"2025-03-15T22:35:22.916015Z","iopub.status.idle":"2025-03-15T22:35:22.91956Z","shell.execute_reply.started":"2025-03-15T22:35:22.915989Z","shell.execute_reply":"2025-03-15T22:35:22.918625Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Define image transformations\ntransform = transforms.Compose([\n    transforms.Resize((224, 224)),  # Resize images to match model input\n    transforms.ToTensor(),\n    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])\n])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:35:23.214909Z","iopub.execute_input":"2025-03-15T22:35:23.215131Z","iopub.status.idle":"2025-03-15T22:35:23.219137Z","shell.execute_reply.started":"2025-03-15T22:35:23.215112Z","shell.execute_reply":"2025-03-15T22:35:23.218154Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Define dataset class\nclass IDRiDDataset(Dataset):\n    def __init__(self, image_dir, csv_file, transform=None):\n        self.image_dir = image_dir\n        self.transform = transform\n        self.df = pd.read_csv(csv_file)\n\n        # Ensure column names are correctly read\n        self.df.columns = self.df.columns.str.strip()\n\n    def __len__(self):\n        return len(self.df)\n\n    def __getitem__(self, idx):\n        # Extract image ID and label\n        img_id = self.df.iloc[idx][\"id_code\"]\n\n        if self.df.iloc[idx][\"diagnosis\"] == 0:\n            label = 0\n        else:\n            label = 1\n        #label = self.df.iloc[idx][\"diagnosis\"]\n\n        # Load image\n        img_path = os.path.join(self.image_dir, img_id + \".jpg\")\n        image = Image.open(img_path).convert(\"RGB\")\n\n        # Apply transformations\n        if self.transform:\n            image = self.transform(image)\n\n        return image, label","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:35:23.570174Z","iopub.execute_input":"2025-03-15T22:35:23.570394Z","iopub.status.idle":"2025-03-15T22:35:23.575637Z","shell.execute_reply.started":"2025-03-15T22:35:23.570374Z","shell.execute_reply":"2025-03-15T22:35:23.57487Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Create dataset and dataloader\nbatch_size = 64\ntest_dataset = IDRiDDataset(image_dir=image_dir, csv_file=csv_file, transform=transform)\ntest_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False, num_workers=2)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:35:26.142394Z","iopub.execute_input":"2025-03-15T22:35:26.142671Z","iopub.status.idle":"2025-03-15T22:35:26.152116Z","shell.execute_reply.started":"2025-03-15T22:35:26.142648Z","shell.execute_reply":"2025-03-15T22:35:26.151227Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Load trained model\ndevice = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\nmodel.to(device)\nmodel.eval()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:35:28.755255Z","iopub.execute_input":"2025-03-15T22:35:28.755559Z","iopub.status.idle":"2025-03-15T22:35:28.764192Z","shell.execute_reply.started":"2025-03-15T22:35:28.755532Z","shell.execute_reply":"2025-03-15T22:35:28.763327Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import torch.nn.functional as F\n\n# Evaluation function\ndef evaluate_model(model, dataloader):\n    all_preds = []\n    all_labels = []\n\n    with torch.no_grad():\n        for images, labels in dataloader:\n            images, labels = images.to(device), labels.to(device)\n            \n            # Forward pass\n            outputs = model(images)\n            preds = (torch.sigmoid(outputs) > 0.5).float()\n\n            # Store predictions and true labels\n            all_preds.extend(preds.cpu().numpy())\n            all_labels.extend(labels.cpu().numpy())\n\n    # Compute evaluation metrics\n    accuracy = accuracy_score(all_labels, all_preds)\n    \n\n    print(f\"Accuracy: {accuracy:.4f}\")\n    \n    print(classification_report(all_labels, all_preds))\n\n    print(confusion_matrix(all_labels, all_preds))\n    return all_labels, all_preds\n\n# Run evaluation\nall_labels, all_preds = evaluate_model(model, test_loader)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:35:33.926275Z","iopub.execute_input":"2025-03-15T22:35:33.926548Z","iopub.status.idle":"2025-03-15T22:36:15.599534Z","shell.execute_reply.started":"2025-03-15T22:35:33.926528Z","shell.execute_reply":"2025-03-15T22:36:15.598449Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Aptos\n","metadata":{}},{"cell_type":"code","source":"# Define dataset paths\nimage_dir = \"/kaggle/input/aptos2019-blindness-detection/train_images\"\ncsv_file = \"/kaggle/input/aptos2019-blindness-detection/train.csv\"","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:36:36.211843Z","iopub.execute_input":"2025-03-15T22:36:36.212194Z","iopub.status.idle":"2025-03-15T22:36:36.21635Z","shell.execute_reply.started":"2025-03-15T22:36:36.212165Z","shell.execute_reply":"2025-03-15T22:36:36.215332Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Define image transformations\ntransform = transforms.Compose([\n    transforms.Resize((224, 224)),  # Resize images to match model input\n    transforms.ToTensor(),\n    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])\n])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:36:36.7605Z","iopub.execute_input":"2025-03-15T22:36:36.760794Z","iopub.status.idle":"2025-03-15T22:36:36.765037Z","shell.execute_reply.started":"2025-03-15T22:36:36.760746Z","shell.execute_reply":"2025-03-15T22:36:36.764127Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Define dataset class\nclass APTOSDataset(Dataset):\n    def __init__(self, image_dir, csv_file, transform=None):\n        self.image_dir = image_dir\n        self.transform = transform\n        self.df = pd.read_csv(csv_file)\n\n        # Ensure column names are correctly read\n        self.df.columns = self.df.columns.str.strip()\n\n    def __len__(self):\n        return len(self.df)\n\n    def __getitem__(self, idx):\n        # Extract image ID and label\n        img_id = self.df.iloc[idx][\"id_code\"]\n\n        if self.df.iloc[idx][\"diagnosis\"] == 0:\n            label = 0\n        else:\n            label = 1\n        #label = self.df.iloc[idx][\"diagnosis\"]\n\n        # Load image\n        img_path = os.path.join(self.image_dir, img_id + \".png\")\n        image = Image.open(img_path).convert(\"RGB\")\n\n        # Apply transformations\n        if self.transform:\n            image = self.transform(image)\n\n        return image, label","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:36:39.706378Z","iopub.execute_input":"2025-03-15T22:36:39.706683Z","iopub.status.idle":"2025-03-15T22:36:39.712575Z","shell.execute_reply.started":"2025-03-15T22:36:39.70666Z","shell.execute_reply":"2025-03-15T22:36:39.711668Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Create dataset and dataloader\nbatch_size = 64\ntest_dataset = APTOSDataset(image_dir=image_dir, csv_file=csv_file, transform=transform)\ntest_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False, num_workers=2)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:36:40.005544Z","iopub.execute_input":"2025-03-15T22:36:40.005824Z","iopub.status.idle":"2025-03-15T22:36:40.016808Z","shell.execute_reply.started":"2025-03-15T22:36:40.005798Z","shell.execute_reply":"2025-03-15T22:36:40.015996Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Run evaluation\nall_labels, all_preds = evaluate_model(model, test_loader)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:36:42.564886Z","iopub.execute_input":"2025-03-15T22:36:42.565168Z","iopub.status.idle":"2025-03-15T22:40:33.305194Z","shell.execute_reply.started":"2025-03-15T22:36:42.565148Z","shell.execute_reply":"2025-03-15T22:40:33.304179Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"- APTOS\n- EyePacs\n\n1- split Aptos train 0.8 val 0.1 test 0.1\n2- split Eyepacs train 0.8 val 0.1 test 0.1\n\n3- balance Eyepacs train - down sampling- \n\n4- concat datasets\n\n5- augmentation\n\n6- evaluation","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:41:36.98742Z","iopub.execute_input":"2025-03-15T22:41:36.987718Z","iopub.status.idle":"2025-03-15T22:41:36.992813Z","shell.execute_reply.started":"2025-03-15T22:41:36.987695Z","shell.execute_reply":"2025-03-15T22:41:36.991621Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!pip install efficientnet_pytorch","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:02:05.316715Z","iopub.execute_input":"2025-03-15T22:02:05.317045Z","iopub.status.idle":"2025-03-15T22:02:11.338348Z","shell.execute_reply.started":"2025-03-15T22:02:05.31702Z","shell.execute_reply":"2025-03-15T22:02:11.337501Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from efficientnet_pytorch import EfficientNet","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:05:36.470084Z","iopub.execute_input":"2025-03-15T22:05:36.470376Z","iopub.status.idle":"2025-03-15T22:05:36.474146Z","shell.execute_reply.started":"2025-03-15T22:05:36.47035Z","shell.execute_reply":"2025-03-15T22:05:36.473265Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model = EfficientNet.from_name('efficientnet-b0')\nin_features = model._fc.in_features\nmodel._fc = nn.Linear(in_features, 1)\nmodel.cuda()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:05:36.728668Z","iopub.execute_input":"2025-03-15T22:05:36.72893Z","iopub.status.idle":"2025-03-15T22:05:36.814145Z","shell.execute_reply.started":"2025-03-15T22:05:36.728909Z","shell.execute_reply":"2025-03-15T22:05:36.813346Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model.load_state_dict(torch.load('/kaggle/input/eye-efficientnet-pytorch-lb-0-777/weight_best.pt'))\nmodel.eval()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-15T22:05:37.379297Z","iopub.execute_input":"2025-03-15T22:05:37.379541Z","iopub.status.idle":"2025-03-15T22:05:37.457607Z","shell.execute_reply.started":"2025-03-15T22:05:37.379521Z","shell.execute_reply":"2025-03-15T22:05:37.456802Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def regression_evaluate_model(model, dataloader):\n    all_preds = []\n    all_labels = []\n\n    with torch.no_grad():\n        for images, labels in dataloader:\n            images, labels = images.to(device), labels.to(device)\n            \n            # Forward pass\n            outputs = model(images)\n            preds = (torch.sigmoid(outputs) > 0.5).float()\n\n            # Store predictions and true labels\n            all_preds.extend(preds.cpu().numpy())\n            all_labels.extend(labels.cpu().numpy())\n\n    # Compute evaluation metrics\n    accuracy = accuracy_score(all_labels, all_preds)\n    qwk = cohen_kappa_score(all_labels, all_preds, weights=\"quadratic\")\n\n    print(f\"Accuracy: {accuracy:.4f}\")\n    print(f\"Quadratic Weighted Kappa (QWK): {qwk:.4f}\")\n    print(classification_report(all_labels, all_preds))\n    return all_labels, all_preds","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}