{"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":"gpu","dataSources":[{"sourceId":45867,"databundleVersionId":6924515,"sourceType":"competition"},{"sourceId":2859225,"sourceType":"datasetVersion","datasetId":1750588},{"sourceId":6640479,"sourceType":"datasetVersion","datasetId":3833517},{"sourceId":6827935,"sourceType":"datasetVersion","datasetId":3926155},{"sourceId":7326653,"sourceType":"datasetVersion","datasetId":4252548},{"sourceId":145733747,"sourceType":"kernelVersion"},{"sourceId":3741,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":2668}],"dockerImageVersionId":30559,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"delete code, rewrite. use datasets and models. new version","metadata":{}},{"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\nimport torch\nimport torch.nn as nn\nfrom torch.utils.data import Dataset, DataLoader\nimport timm\nimport albumentations as A\nfrom albumentations.pytorch import ToTensorV2\nimport cv2\nfrom tqdm import tqdm\nimport joblib\n\n# Configuration\nCONFIG = {\n    \"seed\": 42,\n    \"img_size\": 475,\n    \"device\": torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\"),\n    \"batch_size\": 4\n}\n\n# Seed for reproducibility\ndef set_seed(seed=42):\n    np.random.seed(seed)\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed(seed)\n    torch.backends.cudnn.deterministic = True\n    torch.backends.cudnn.benchmark = False\n    os.environ['PYTHONHASHSEED'] = str(seed)\n\nset_seed(CONFIG['seed'])\n\n# Data Loading\nROOT_DIR = '/kaggle/input/UBC-OCEAN'\nTEST_DIR = '/kaggle/input/UBC-OCEAN/test_thumbnails'\n\ndef get_test_file_path(image_id):\n    return f\"{TEST_DIR}/{image_id}_thumbnail.png\"\n\ndf = pd.read_csv(f\"{ROOT_DIR}/test.csv\")\ndf['file_path'] = df['image_id'].apply(get_test_file_path)\n\n# Dataset\nclass UBCDataset(Dataset):\n    def __init__(self, df, transforms=None):\n        self.df = df\n        self.file_names = df['file_path'].values\n        self.transforms = transforms\n\n    def __len__(self):\n        return len(self.df)\n\n    def __getitem__(self, index):\n        img_path = self.file_names[index]\n        img = cv2.imread(img_path)\n        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n\n        if self.transforms:\n            img = self.transforms(image=img)[\"image\"]\n\n        return img\n\n# Transforms\ntransforms = A.Compose([\n    A.Resize(CONFIG['img_size'], CONFIG['img_size']),\n    A.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225], max_pixel_value=255.0),\n    ToTensorV2()\n])\n\nclass UBCModel(nn.Module):\n    def __init__(self, model_name, num_classes, pretrained=False):\n        super(UBCModel, self).__init__()\n        self.model = timm.create_model(model_name, pretrained=pretrained, num_classes=num_classes)\n\n    def forward(self, x):\n        return self.model(x)\n\n# Load Models\nmodel_efficientnetv2 = UBCModel('tf_efficientnetv2_s_in21ft1k', num_classes=5, pretrained=False)\nmodel_efficientnetb0 = UBCModel('tf_efficientnet_b0_ns', num_classes=5, pretrained=False)\nmodel_resnet50 = UBCModel('resnet50', num_classes=5, pretrained=False)\n\n# Load model weights\ndef load_model_weights(model, file_path):\n    if os.path.exists(file_path):\n        state_dict = torch.load(file_path, map_location=CONFIG['device'])\n        model.load_state_dict(state_dict, strict=False)\n    else:\n        print(f\"Weight file not found: {file_path}\")\n\n# Correct the file paths based on your directory structure\nefficientnetb0_weights_path = '/kaggle/input/ubcpytorchwith-classweights-training-fold1of5/ubc-efficienetnetb0-fold1of10-2048pix-thumbnails/Recall0.9178_Acc0.9437_Loss0.1685_epoch9.bin'\nefficientnetv2_weights_path = '/kaggle/input/baseline-0-36/Acc0.70_Loss1.0140_epoch29_tf_efficientnetv2_s_in21ft1k_0.36.bin'\nresnet50_weights_path = '/kaggle/input/ubcpytorchwith-classweights-training-fold1of5/resnet50/rn50-Acc0.75_Loss0.9691_epoch50.bin'\n\n# Load model weights\nload_model_weights(model_efficientnetv2, efficientnetv2_weights_path)\nload_model_weights(model_efficientnetb0, efficientnetb0_weights_path)\nload_model_weights(model_resnet50, resnet50_weights_path)\n\nmodel_efficientnetv2.to(CONFIG['device'])\nmodel_efficientnetb0.to(CONFIG['device'])\nmodel_resnet50.to(CONFIG['device'])\n\n# Test DataLoader\ntest_dataset = UBCDataset(df, transforms=transforms)\ntest_loader = DataLoader(test_dataset, batch_size=CONFIG['batch_size'], shuffle=False, num_workers=2)\n\n# Inference\ndef inference(model, test_loader):\n    model.eval()\n    preds = []\n    with torch.no_grad():\n        for images in tqdm(test_loader):\n            images = images.to(CONFIG['device'])\n            outputs = model(images)\n            preds.append(outputs.cpu().numpy())\n    return np.concatenate(preds)\n\npreds_efficientnetv2 = inference(model_efficientnetv2, test_loader)\npreds_efficientnetb0 = inference(model_efficientnetb0, test_loader)\npreds_resnet50 = inference(model_resnet50, test_loader)\n\n# Ensemble (average predictions)\nfinal_preds = (preds_efficientnetv2 + preds_efficientnetb0 + preds_resnet50) / 3\nfinal_preds = np.argmax(final_preds, axis=1)\n\n# Label Encoder\nencoder = joblib.load('/kaggle/input/ubcpytorchwith-classweights-training-fold1of5/label_encoder.pkl')\npred_labels = encoder.inverse_transform(final_preds)\n\n# Create Submission File\nsubmission = pd.DataFrame({'image_id': df['image_id'], 'label': pred_labels})\nsubmission.to_csv('submission.csv', index=False)\n","metadata":{"execution":{"iopub.status.busy":"2024-01-03T09:24:46.934712Z","iopub.execute_input":"2024-01-03T09:24:46.93508Z","iopub.status.idle":"2024-01-03T09:25:03.920337Z","shell.execute_reply.started":"2024-01-03T09:24:46.935047Z","shell.execute_reply":"2024-01-03T09:25:03.919291Z"},"trusted":true},"execution_count":null,"outputs":[]}]}