{"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,"isSourceIdPinned":false,"sourceType":"competition"},{"sourceId":25383,"databundleVersionId":2684322,"isSourceIdPinned":false,"sourceType":"competition"},{"sourceId":9797223,"sourceType":"datasetVersion","datasetId":982170},{"sourceId":261002435,"sourceType":"kernelVersion"},{"sourceId":267324574,"sourceType":"kernelVersion"},{"sourceId":574351,"sourceType":"modelInstanceVersion","isSourceIdPinned":false,"modelInstanceId":429902,"modelId":446851},{"sourceId":574363,"sourceType":"modelInstanceVersion","isSourceIdPinned":false,"modelInstanceId":429911,"modelId":446860},{"sourceId":604839,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":453609,"modelId":469894}],"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/\")","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-10-11T19:34:11.75919Z","iopub.execute_input":"2025-10-11T19:34:11.759553Z","iopub.status.idle":"2025-10-11T19:34:11.763739Z","shell.execute_reply.started":"2025-10-11T19:34:11.759523Z","shell.execute_reply":"2025-10-11T19:34:11.763026Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os\nimport cv2\nimport numpy as np\nimport pandas as pd\nfrom tqdm import tqdm\nfrom torch.utils.data import Dataset\nfrom tez import Tez\nimport albumentations as A\nfrom albumentations.pytorch import ToTensorV2\nfrom torchvision.models import resnet50","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-11T19:34:11.764994Z","iopub.execute_input":"2025-10-11T19:34:11.765188Z","iopub.status.idle":"2025-10-11T19:34:11.778571Z","shell.execute_reply.started":"2025-10-11T19:34:11.765174Z","shell.execute_reply":"2025-10-11T19:34:11.777996Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"class CustomModel(nn.Module):\n    def __init__(self, n_classes=1):\n        super().__init__()\n        self.model = resnet50(pretrained=False)  # keep fc as default (1000)\n        self.out = nn.Linear(1000, n_classes)   # match checkpoint\n        \n    def forward(self, image, dense=None, **kwargs):\n        x = self.model(image)\n        x = self.out(x)\n        return x, None, {} ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-11T19:34:11.779327Z","iopub.execute_input":"2025-10-11T19:34:11.779928Z","iopub.status.idle":"2025-10-11T19:34:11.791875Z","shell.execute_reply.started":"2025-10-11T19:34:11.779905Z","shell.execute_reply":"2025-10-11T19:34:11.791396Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test_aug = A.Compose([\n    A.Resize(224, 224),\n    A.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)),\n    ToTensorV2(),\n])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-11T19:34:11.793468Z","iopub.execute_input":"2025-10-11T19:34:11.793693Z","iopub.status.idle":"2025-10-11T19:34:11.807471Z","shell.execute_reply.started":"2025-10-11T19:34:11.793676Z","shell.execute_reply":"2025-10-11T19:34:11.806825Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model = CustomModel()\nmodel = Tez(model)\nmodel.load(\"/kaggle/input/mele_model_2/pytorch/default/1/model_f0 (1).bin\", weights_only=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-11T19:34:11.808177Z","iopub.execute_input":"2025-10-11T19:34:11.808599Z","iopub.status.idle":"2025-10-11T19:34:12.287409Z","shell.execute_reply.started":"2025-10-11T19:34:11.808583Z","shell.execute_reply":"2025-10-11T19:34:12.286633Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_test = pd.read_csv(\"/kaggle/input/siim-isic-melanoma-classification/test.csv\")\ntest_img_paths = [\n    f\"/kaggle/input/siim-isic-melanoma-classification/jpeg/test/{x}.jpg\"\n    for x in df_test[\"image_name\"].values\n]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-11T19:34:12.288463Z","iopub.execute_input":"2025-10-11T19:34:12.288769Z","iopub.status.idle":"2025-10-11T19:34:12.306835Z","shell.execute_reply.started":"2025-10-11T19:34:12.288739Z","shell.execute_reply":"2025-10-11T19:34:12.306123Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"missing_images = [p for p in test_img_paths if not os.path.exists(p)]\nif missing_images:\n    print(f\"[Warning] {len(missing_images)} images are missing!\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-11T19:34:12.307601Z","iopub.execute_input":"2025-10-11T19:34:12.307813Z","iopub.status.idle":"2025-10-11T19:34:20.839206Z","shell.execute_reply.started":"2025-10-11T19:34:12.307798Z","shell.execute_reply":"2025-10-11T19:34:20.838653Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test_dataset = CustomDataset(\n    image_paths=test_img_paths,\n    dense_features=np.zeros((len(df_test), 0)),  # empty dense features\n    targets=np.ones(len(df_test)),\n    augmentations=test_aug\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-11T19:34:20.840011Z","iopub.execute_input":"2025-10-11T19:34:20.840271Z","iopub.status.idle":"2025-10-11T19:34:20.845123Z","shell.execute_reply.started":"2025-10-11T19:34:20.840247Z","shell.execute_reply":"2025-10-11T19:34:20.84436Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test_predictions = model.predict(test_dataset, batch_size=64, n_jobs=2)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-11T19:34:20.845774Z","iopub.execute_input":"2025-10-11T19:34:20.846012Z","iopub.status.idle":"2025-10-11T19:34:20.861225Z","shell.execute_reply.started":"2025-10-11T19:34:20.845991Z","shell.execute_reply":"2025-10-11T19:34:20.860479Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"super_final_predictions = np.concatenate([p.ravel() for p in test_predictions])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-11T19:34:20.86283Z","iopub.execute_input":"2025-10-11T19:34:20.863445Z","iopub.status.idle":"2025-10-11T19:38:32.730221Z","shell.execute_reply.started":"2025-10-11T19:34:20.863421Z","shell.execute_reply":"2025-10-11T19:38:32.729393Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_test[\"target\"] = super_final_predictions\ndf_test[[\"image_name\", \"target\"]].to_csv(\"submission.csv\", index=False)\n\nprint(\"Submission saved to submission.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-11T19:38:32.731459Z","iopub.execute_input":"2025-10-11T19:38:32.731771Z","iopub.status.idle":"2025-10-11T19:38:32.760403Z","shell.execute_reply.started":"2025-10-11T19:38:32.731739Z","shell.execute_reply":"2025-10-11T19:38:32.759887Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission_path = \"/kaggle/working/submission.csv\"\ndf_test[[\"image_name\", \"target\"]].to_csv(submission_path, index=False)\nprint(f\"Submission saved to {submission_path}\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-11T19:44:03.580519Z","iopub.execute_input":"2025-10-11T19:44:03.58127Z","iopub.status.idle":"2025-10-11T19:44:03.608561Z","shell.execute_reply.started":"2025-10-11T19:44:03.581235Z","shell.execute_reply":"2025-10-11T19:44:03.607911Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}