{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":20270,"databundleVersionId":1222630,"sourceType":"competition"},{"sourceId":9797223,"sourceType":"datasetVersion","datasetId":982170},{"sourceId":265636816,"sourceType":"kernelVersion"},{"sourceId":267233110,"sourceType":"kernelVersion"},{"sourceId":574351,"sourceType":"modelInstanceVersion","modelInstanceId":429902,"modelId":446851},{"sourceId":574363,"sourceType":"modelInstanceVersion","modelInstanceId":429911,"modelId":446860}],"dockerImageVersionId":31090,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import sys\nsys.path.append(\"../input/tez-lib/\")\nimport tez\nfrom tez import Tez, TezConfig\nimport albumentations\nimport pandas as pd\nimport cv2\nimport numpy as np\nimport timm\nimport torch\nimport torch.nn as nn\nfrom tqdm import tqdm\nclass args:\n    batch_size = 64\n    image_size = 384\nBEST_MODEL_NAME = \"resnet50\"\nINFERENCE_FOLD = 0\nBASE_IMAGE_PATH = \"/kaggle/input/siim-isic-melanoma-classification/jpeg/test/\"\nclass targetDataset:\n    def __init__(self, image_paths, dense_features, targets, augmentations):\n        self.image_paths = image_paths\n        self.dense_features = dense_features\n        self.targets = targets \n        self.augmentations = augmentations\n        \n    def __len__(self):\n        return len(self.image_paths)\n    \n    def __getitem__(self, item):\n        image_path = self.image_paths[item]\n        image = cv2.imread(image_path)\n        \n       \n        if image is None:\n            raise FileNotFoundError(f\"Could not read image file: {image_path}. Please check the path.\")\n            \n        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n        \n        if self.augmentations is not None:\n            augmented = self.augmentations(image=image)\n            image = augmented[\"image\"]\n            \n        image = np.transpose(image, (2, 0, 1)).astype(np.float32)\n        features = self.dense_features[item, :]\n        \n        \n        return {\n            \"image\": torch.tensor(image, dtype=torch.float),\n            \"features\": torch.tensor(features, dtype=torch.float),\n        }\nclass targetModel(nn.Module):\n    def __init__(self, model_name=\"resnet50\", dense_dim=12, pretrained=False):\n        super().__init__()\n        self.model = timm.create_model(model_name, pretrained=pretrained, in_chans=3)\n        n_features = self.model.get_classifier().in_features\n        self.model.reset_classifier(0)\n        self.out = nn.Linear(n_features + dense_dim, 1)\n\n    def forward(self, image, features, targets=None):\n        image_features = self.model(image)\n        x = torch.cat([image_features, features], dim=1)\n        output = self.out(x)\n        return output, 0, {}\ntest_aug = albumentations.Compose([\n    albumentations.LongestMaxSize(args.image_size, p=1),\n    albumentations.PadIfNeeded(args.image_size, args.image_size, p=1, border_mode=cv2.BORDER_CONSTANT),\n    albumentations.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225], max_pixel_value=255.0, p=1.0),\n])\ndf_train = pd.read_csv(\"/kaggle/input/siim-isic-melanoma-classification/train.csv\")\ndf_test = pd.read_csv(\"/kaggle/input/siim-isic-melanoma-classification/test.csv\")\ncategorical_features = ['sex', 'anatom_site_general_challenge']\ndf_train = pd.get_dummies(df_train, columns=categorical_features, dummy_na=False)\ndf_test = pd.get_dummies(df_test, columns=categorical_features, dummy_na=False)\none_hot_cols = [col for col in df_train.columns if any(f\"_{cat}\" in col for cat in categorical_features)]\nnumerical_features = ['age_approx']\ndense_features_list = numerical_features + one_hot_cols\ntrain_cols = set(df_train.columns)\nfor col in dense_features_list:\n    if col not in df_test.columns:\n        df_test[col] = 0\ndf_test = df_test[df_train.columns.intersection(df_test.columns)]\nprint(f\"Final dense features being used ({len(dense_features_list)}): {dense_features_list}\")","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(f\"\\n--- Getting predictions for the best model: {BEST_MODEL_NAME.upper()} ---\")\n\nmodel = targetModel(model_name=BEST_MODEL_NAME, dense_dim=len(dense_features_list), pretrained=False)\nmodel = Tez(model)\n\n\nmodel_path = f\"/kaggle/input/23-bcs10187-riyabhurse-training-siim-isic/model_resnet50_f0.bin\"\nmodel.load(model_path, weights_only=True)\n\n\ntest_img_paths = [f\"{BASE_IMAGE_PATH}{x}.jpg\" for x in df_test[\"image_name\"].values]\ntest_dataset = targetDataset(\n    image_paths=test_img_paths,\n    dense_features=df_test[dense_features_list].values,\n    targets=np.ones(len(test_img_paths)),\n    augmentations=test_aug,\n)\n\n\npredictions_generator = model.predict(test_dataset, batch_size=2*args.batch_size, n_jobs=-1)\n\n\nfinal_predictions_logits = []\nfor preds in tqdm(predictions_generator):\n    final_predictions_logits.extend(preds.ravel().tolist())","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(\"\\nCreating submission file from best model...\")\n\ndef sigmoid(x):\n    return 1 / (1 + np.exp(-x))\n\nfinal_predictions_logits = np.array(final_predictions_logits)\nfinal_predictions_prob = sigmoid(final_predictions_logits)\n\ndf_test[\"target\"] = final_predictions_prob\nsubmission_df = df_test[[\"image_name\", \"target\"]]\nsubmission_df.to_csv(\"submission.csv\", index=False)\n\nprint(\"Submission file created successfully!\")\nsubmission_df.head()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}