{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.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":52279,"databundleVersionId":5822112,"sourceType":"competition"},{"sourceId":7588779,"sourceType":"datasetVersion","datasetId":4416915,"isSourceIdPinned":true},{"sourceId":7735671,"sourceType":"datasetVersion","datasetId":4520770},{"sourceId":7610327,"sourceType":"datasetVersion","datasetId":4431349},{"sourceId":7684761,"sourceType":"datasetVersion","datasetId":4484027}],"dockerImageVersionId":30648,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"print(\"helow\")","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:11:46.158158Z","iopub.execute_input":"2024-03-13T11:11:46.158479Z","iopub.status.idle":"2024-03-13T11:11:46.171409Z","shell.execute_reply.started":"2024-03-13T11:11:46.158452Z","shell.execute_reply":"2024-03-13T11:11:46.170426Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"!pip install segformer-pytorch\n!pip install evaluate","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:12:21.607083Z","iopub.execute_input":"2024-03-13T11:12:21.608194Z","iopub.status.idle":"2024-03-13T11:12:47.872356Z","shell.execute_reply.started":"2024-03-13T11:12:21.608151Z","shell.execute_reply":"2024-03-13T11:12:47.871093Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import cv2\nimport tifffile\nfrom pathlib import Path\nimport shutil\nimport concurrent.futures\nfrom sklearn.model_selection import train_test_split\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.utils.data as data\nfrom transformers import (\n    SegformerForSemanticSegmentation, \n    TrainingArguments, Trainer, \n    SegformerImageProcessor)\nfrom datasets import Dataset, Image\nimport evaluate\nimport matplotlib.pyplot as plt\nimport os","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:12:47.874489Z","iopub.execute_input":"2024-03-13T11:12:47.874817Z","iopub.status.idle":"2024-03-13T11:13:09.399063Z","shell.execute_reply.started":"2024-03-13T11:12:47.874787Z","shell.execute_reply":"2024-03-13T11:13:09.398240Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from transformers import AutoImageProcessor, AutoModelForSemanticSegmentation","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:13:09.400142Z","iopub.execute_input":"2024-03-13T11:13:09.400730Z","iopub.status.idle":"2024-03-13T11:13:09.405105Z","shell.execute_reply.started":"2024-03-13T11:13:09.400702Z","shell.execute_reply":"2024-03-13T11:13:09.404197Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from torchvision.transforms import ToTensor\nimport rasterio\nfrom rasterio.plot import show\nimport numpy as np\n\npath = \"/kaggle/input/custom-dataset-augmented/2_custom_new_data_aug/train/image/0_0_0.png\"\n\nwith rasterio.open(path) as image:\n    image_array = image.read()\n\nshow(image_array)\n\n\ntorch_image = ToTensor()(image_array)\nprint(torch_image.shape)\n\nimport cv2\ncv2_img = cv2.imread(path)\n","metadata":{"execution":{"iopub.status.busy":"2024-03-07T17:49:33.171533Z","iopub.execute_input":"2024-03-07T17:49:33.171899Z","iopub.status.idle":"2024-03-07T17:49:34.538115Z","shell.execute_reply.started":"2024-03-07T17:49:33.171869Z","shell.execute_reply":"2024-03-07T17:49:34.537188Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Pre-trained models\n# MODEL_CHECKPOINT = 'nvidia/mit-b0'\n# MODEL_CHECKPOINT = 'nvidia/mit-b1'\n# MODEL_CHECKPOINT = 'nvidia/mit-b2'\n# MODEL_CHECKPOINT = 'nvidia/mit-b3' \nMODEL_CHECKPOINT = 'nvidia/mit-b4'\n# MODEL_CHECKPOINT = 'facebook/sam-vit-huge'\n# MODEL_CHECKPOINT = 'nvidia/mit-b5'\n# MODEL_CHECKPOINT = 'nvidia/segformer-b4-finetuned-cityscapes-1024-1024'\n# MODEL_CHECKPOINT = 'pamixsun/segformer_for_optic_disc_cup_segmentation'\n# MODEL_CHECKPOINT = 'coralexbadea/Segformer_OCT_Retina'\n\nVAL_SIZE = 0.1\nBATCH_SIZE = 2\nEPOCHS = 20\nLR = 1e-3\n\nIMG_SIZE = 512\n\n\nDATA_DIR = Path(\"/kaggle/input/custom-dataset-augmented/2_custom_new_data_aug\")","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:13:50.288109Z","iopub.execute_input":"2024-03-13T11:13:50.288752Z","iopub.status.idle":"2024-03-13T11:13:50.295334Z","shell.execute_reply.started":"2024-03-13T11:13:50.288719Z","shell.execute_reply":"2024-03-13T11:13:50.294018Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"images_path = list(DATA_DIR.glob('./train/image/*png'))\nmask_path = list(DATA_DIR.glob('./train/mask/*png'))\n\nimages_path = [str(path) for path in images_path]\nmask_path = [str(path) for path in mask_path]\n\nprint(len(images_path))\nprint(len(mask_path))\n\n\n\n\ntrain_images, val_images, train_masks, val_masks = train_test_split(images_path, mask_path, test_size=0.1, random_state=0, shuffle=True)\nprint(len(train_images))\nprint(len(val_images))\n","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:13:52.559588Z","iopub.execute_input":"2024-03-13T11:13:52.560224Z","iopub.status.idle":"2024-03-13T11:13:53.547583Z","shell.execute_reply.started":"2024-03-13T11:13:52.560193Z","shell.execute_reply":"2024-03-13T11:13:53.546606Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(images_path[0])","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:14:22.102542Z","iopub.execute_input":"2024-03-13T11:14:22.102914Z","iopub.status.idle":"2024-03-13T11:14:22.108006Z","shell.execute_reply.started":"2024-03-13T11:14:22.102886Z","shell.execute_reply":"2024-03-13T11:14:22.107040Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def create_dataset(image_paths, mask_paths):\n    dataset = Dataset.from_dict({'pixel_values': images_path, \n                                 'label': mask_path})\n    dataset = dataset.cast_column('pixel_values', Image())\n    \n    dataset = dataset.cast_column('label', Image())\n#     print(\"Dataset\", dataset)\n    return dataset\n\ntrain_dataset = create_dataset(train_images, train_masks)\nval_dataset = create_dataset(val_images, val_masks)\n\nprint(\"Number of samples in train_dataset:\", len(train_dataset))\nprint(\"Number of samples in val_dataset:\", len(val_dataset))","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:14:35.022193Z","iopub.execute_input":"2024-03-13T11:14:35.023072Z","iopub.status.idle":"2024-03-13T11:14:35.089753Z","shell.execute_reply.started":"2024-03-13T11:14:35.023037Z","shell.execute_reply":"2024-03-13T11:14:35.088785Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(val_dataset[0])","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:14:35.687198Z","iopub.execute_input":"2024-03-13T11:14:35.687594Z","iopub.status.idle":"2024-03-13T11:14:35.728768Z","shell.execute_reply.started":"2024-03-13T11:14:35.687564Z","shell.execute_reply":"2024-03-13T11:14:35.727654Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"feature_extractor = SegformerImageProcessor.from_pretrained(MODEL_CHECKPOINT)\n\n","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:19:16.866226Z","iopub.execute_input":"2024-03-13T11:19:16.867239Z","iopub.status.idle":"2024-03-13T11:19:16.962424Z","shell.execute_reply.started":"2024-03-13T11:19:16.867203Z","shell.execute_reply":"2024-03-13T11:19:16.961676Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def apply_transforms(batch):\n#     print(\"batch\",batch)\n    images = [x for x in batch['pixel_values']]\n    labels = [x for x in batch['label']]\n    inputs = feature_extractor(images)\n    return inputs\n\ntrain_dataset.set_transform(apply_transforms)\nval_dataset.set_transform(apply_transforms)","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:19:17.777201Z","iopub.execute_input":"2024-03-13T11:19:17.778296Z","iopub.status.idle":"2024-03-13T11:19:17.786541Z","shell.execute_reply.started":"2024-03-13T11:19:17.778238Z","shell.execute_reply":"2024-03-13T11:19:17.785564Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def binarize_labels(batch):\n    images = batch['pixel_values']\n    labels = batch['label']\n    binarized_labels = [label.point(lambda p: p > 0, mode='1') for label in labels]\n    inputs = feature_extractor(images, binarized_labels)\n    return inputs\n\ntrain_dataset.set_transform(binarize_labels)\nval_dataset.set_transform(binarize_labels)\n\n\nid2label = {0: 'background', 1: 'vessel'}\nlabel2id = {label: id for id, label in id2label.items()}\nnum_labels = len(id2label)","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:19:21.625691Z","iopub.execute_input":"2024-03-13T11:19:21.626032Z","iopub.status.idle":"2024-03-13T11:19:21.635227Z","shell.execute_reply.started":"2024-03-13T11:19:21.626007Z","shell.execute_reply":"2024-03-13T11:19:21.634228Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# dataloader \n\nfrom torch.utils.data import DataLoader\n\ntrain_loader = DataLoader(train_dataset , batch_size = 5 , shuffle = True)\nval_loader = DataLoader(val_dataset , batch_size = 5 )","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:48:08.795076Z","iopub.execute_input":"2024-03-13T11:48:08.795347Z","iopub.status.idle":"2024-03-13T11:48:08.800728Z","shell.execute_reply.started":"2024-03-13T11:48:08.795323Z","shell.execute_reply":"2024-03-13T11:48:08.799675Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# only a portion of dataset for testing new parameters\n\ndef create_dataset_sub(image_paths, mask_paths, num_samples):\n    image_subset = image_paths[:num_samples]\n    mask_subset = mask_paths[:num_samples]\n    \n    dataset = Dataset.from_dict({'pixel_values': image_subset, \n                                 'label': mask_subset})\n    dataset = dataset.cast_column('pixel_values', Image())\n    dataset = dataset.cast_column('label', Image())\n    \n    return dataset\n\nnum_train_samples = 500\nnum_val_samples = 50\n\ntrain_dataset_sub = create_dataset_sub(train_images, train_masks, num_train_samples)\nval_dataset_sub = create_dataset_sub(val_images, val_masks, num_val_samples)\n\nprint(\"Number of samples in train_dataset_SUB:\", len(train_dataset_sub))\nprint(\"Number of samples in val_dataset_SUB:\", len(val_dataset_sub))\n\n\ndef apply_transforms(batch):\n#     print(\"batch\",batch)\n    images = [x for x in batch['pixel_values']]\n    labels = [x for x in batch['label']]\n    inputs = feature_extractor(images)\n    return inputs\n\ntrain_dataset_sub.set_transform(apply_transforms)\nval_dataset_sub.set_transform(apply_transforms)\n\n\ndef binarize_labels(batch):\n    images = batch['pixel_values']\n    labels = batch['label']\n    binarized_labels = [label.point(lambda p: p > 0, mode='1') for label in labels]\n    inputs = feature_extractor(images, binarized_labels)\n    return inputs\n\ntrain_dataset_sub.set_transform(binarize_labels)\nval_dataset_sub.set_transform(binarize_labels)\n\n\nid2label = {0: 'background', 1: 'vessel'}\nlabel2id = {label: id for id, label in id2label.items()}\nnum_labels = len(id2label)","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:14:39.484669Z","iopub.execute_input":"2024-03-13T11:14:39.485387Z","iopub.status.idle":"2024-03-13T11:14:39.512929Z","shell.execute_reply.started":"2024-03-13T11:14:39.485353Z","shell.execute_reply":"2024-03-13T11:14:39.511912Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(train_dataset)","metadata":{"execution":{"iopub.status.busy":"2024-03-07T05:55:54.902599Z","iopub.execute_input":"2024-03-07T05:55:54.903406Z","iopub.status.idle":"2024-03-07T05:55:54.909478Z","shell.execute_reply.started":"2024-03-07T05:55:54.903371Z","shell.execute_reply":"2024-03-07T05:55:54.908500Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = SegformerForSemanticSegmentation.from_pretrained(\n    MODEL_CHECKPOINT,\n#     '/kaggle/working/segformer_blood_vessel',\n    num_labels=num_labels,\n    id2label=id2label,\n    label2id=label2id,\n    ignore_mismatched_sizes=True,\n)\n","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:19:27.908093Z","iopub.execute_input":"2024-03-13T11:19:27.908775Z","iopub.status.idle":"2024-03-13T11:19:32.677900Z","shell.execute_reply.started":"2024-03-13T11:19:27.908741Z","shell.execute_reply":"2024-03-13T11:19:32.676949Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#custom IOU metric\n\nmetric = evaluate.load('mean_iou')\n\ndef compute_metrics(eval_pred):\n    with torch.no_grad():\n        logits, labels = eval_pred\n        logits_tensor = torch.from_numpy(logits)\n        # scale the logits to the size of the label\n        logits_tensor = nn.functional.interpolate(\n            logits_tensor,\n            size=labels.shape[-2:],\n            mode='bilinear',\n            align_corners=False,\n        ).argmax(dim=1)\n\n        pred_labels = logits_tensor.detach().cpu().numpy()\n        item_index = 1\n        item1 = pred_labels[item_index]\n        item2 = labels[item_index]\n        \n        non_zero_count = (labels != 0).sum()\n        zero_count = (labels == 0).sum()\n\n        print(\"Number of non-zero pixels (label):\", non_zero_count)\n        print(\"Number of zero pixels (label):\", zero_count)\n        \n        non_zero_count = (pred_labels != 0).sum()\n        zero_count = (pred_labels == 0).sum()\n\n        print(\"Number of non-zero pixels (pred):\", non_zero_count)\n        print(\"Number of zero pixels (pred):\", zero_count)\n\n        plt.subplot(1,2,1)\n        plt.imshow(item1, cmap='gray') \n        plt.title('Pred Label Image')\n        plt.axis('off')\n        plt.subplot(1,2,2)\n        plt.imshow(item2, cmap='gray') \n        plt.title('Label Image')\n        plt.axis('off')\n        plt.show()\n        \n        metrics = metric._compute(\n                predictions=pred_labels,\n                references=labels,\n                num_labels=len(id2label),\n                ignore_index= None,\n                reduce_labels=feature_extractor.do_reduce_labels,\n            )\n\n        per_category_accuracy = metrics.pop(\"per_category_accuracy\").tolist()\n        per_category_iou = metrics.pop(\"per_category_iou\").tolist()\n\n        metrics.update({f\"accuracy_{id2label[i]}\": v for i, v in enumerate(per_category_accuracy)})\n        metrics.update({f\"iou_{id2label[i]}\": v for i, v in enumerate(per_category_iou)})\n\n        return metrics","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:19:36.139885Z","iopub.execute_input":"2024-03-13T11:19:36.140271Z","iopub.status.idle":"2024-03-13T11:19:36.708323Z","shell.execute_reply.started":"2024-03-13T11:19:36.140239Z","shell.execute_reply":"2024-03-13T11:19:36.707544Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"hi","metadata":{}},{"cell_type":"code","source":"training_args = TrainingArguments(\n    output_dir='sam',\n    learning_rate=LR,\n    num_train_epochs=30,\n    per_device_train_batch_size=5,\n    per_device_eval_batch_size=5,\n    save_total_limit=3,\n    evaluation_strategy='epoch',\n    save_strategy='epoch',\n    save_steps=1,\n    eval_steps=1,\n    logging_steps=1,\n    eval_accumulation_steps=5,\n    load_best_model_at_end=True,\n    push_to_hub=False,\n    lr_scheduler_type='linear',  # Assuming you want to use linear schedule\n    report_to='none'\n)\n\nprint(training_args)","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:19:37.476117Z","iopub.execute_input":"2024-03-13T11:19:37.476822Z","iopub.status.idle":"2024-03-13T11:19:37.551239Z","shell.execute_reply.started":"2024-03-13T11:19:37.476787Z","shell.execute_reply":"2024-03-13T11:19:37.550162Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"hi","metadata":{}},{"cell_type":"code","source":"from transformers import EarlyStoppingCallback\nearly_stop = EarlyStoppingCallback(5, 0.001)\n\nfrom transformers import TrainingArguments, Trainer, get_linear_schedule_with_warmup , get_polynomial_decay_schedule_with_warmup , get_inverse_sqrt_schedule , get_cosine_with_hard_restarts_schedule_with_warmup\nimport torch\n\n\n# Define your learning rate and other training arguments\nLR = 1e-3  \ntotal_training_steps = len(train_dataset) // training_args.per_device_train_batch_size * training_args.num_train_epochs\n\noptimizer = torch.optim.AdamW(model.parameters(), lr=LR)\n\n# Set up the learning rate scheduler\n# lr_scheduler = get_linear_schedule_with_warmup(\n#     optimizer=optimizer,\n#     num_warmup_steps=1000,  # Adjust as needed\n#     num_training_steps=total_training_steps\n# )\n\nlr_scheduler = get_polynomial_decay_schedule_with_warmup(\n    optimizer=optimizer,\n    num_warmup_steps=1000,  # Adjust as needed\n    num_training_steps=total_training_steps,\n    lr_end = 1e-7,\n    power = 1.0,\n    last_epoch = -1 \n)\nnum_warmup_steps = 1000\n\n# lr_scheduler = get_inverse_sqrt_schedule(\n#     optimizer=optimizer,\n#     num_warmup_steps=1000,  # Adjust as needed\n#     timescale = num_warmup_steps , # defaults to num_warmup_steps\n#     last_epoch = -1 \n# )\n\n# lr_scheduler = get_cosine_with_hard_restarts_schedule_with_warmup(\n#     optimizer=optimizer,\n#     num_warmup_steps=1000,  # Adjust as needed\n#     num_training_steps=total_training_steps,\n#     num_cycles = 3  , # defaults to num_warmup_steps\n#     last_epoch = -1 \n# )\n\n\n# def print_learning_rate(trainer, model, optimizer, epoch, step):\n#     print(f\"Epoch {epoch}, Step {step}, Learning Rate: {optimizer.param_groups[0]['lr']}\")\n\n\nfrom transformers import TrainerCallback\n\nclass PrintLearningRateCallback(TrainerCallback):\n    def on_epoch_end(self, args, state, control, **kwargs):\n        epoch = state.epoch\n        optimizer = kwargs.get(\"optimizer\", None)\n        if optimizer is not None:\n            learning_rate = optimizer.param_groups[0]['lr']\n            print(f\"Epoch {epoch}, Learning Rate: {learning_rate}\")\n\n# Create an instance of the callback\nprint_lr_callback = PrintLearningRateCallback()\n\n\ntrainer = Trainer(\n    model=model,\n    args=training_args,\n    train_dataset=train_dataset,\n    eval_dataset=val_dataset,\n#     optimizers=(optimizer, lr_scheduler),\n    compute_metrics=compute_metrics,\n#     callbacks=[print_lr_callback, early_stop]\n)\n    \n\n\n\n# print(trainer)","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:19:39.233584Z","iopub.execute_input":"2024-03-13T11:19:39.234024Z","iopub.status.idle":"2024-03-13T11:19:39.513267Z","shell.execute_reply.started":"2024-03-13T11:19:39.233982Z","shell.execute_reply":"2024-03-13T11:19:39.512433Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"trainer.train()\n","metadata":{"execution":{"iopub.status.busy":"2024-03-07T06:01:24.073086Z","iopub.execute_input":"2024-03-07T06:01:24.073899Z","iopub.status.idle":"2024-03-07T14:51:33.134343Z","shell.execute_reply.started":"2024-03-07T06:01:24.073865Z","shell.execute_reply":"2024-03-07T14:51:33.133254Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Saving the model ","metadata":{}},{"cell_type":"code","source":"model.save_pretrained('segformer_model_')","metadata":{"execution":{"iopub.status.busy":"2024-03-07T14:51:33.611732Z","iopub.execute_input":"2024-03-07T14:51:33.612048Z","iopub.status.idle":"2024-03-07T14:51:34.227721Z","shell.execute_reply.started":"2024-03-07T14:51:33.612023Z","shell.execute_reply":"2024-03-07T14:51:34.226661Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"id2label = {0: 'background', 1: 'vessel'}\nlabel2id = {label: id for id, label in id2label.items()}\nnum_labels = len(id2label)\n\nmodel = SegformerForSemanticSegmentation.from_pretrained(\n    '/kaggle/input/segformers-model-nvidia-mit-b4-segformer-model/segformer_blood_vessel',\n    num_labels=num_labels,\n    id2label=id2label,\n    label2id=label2id,\n    ignore_mismatched_sizes=True,\n)\n\nfeature_extractor = SegformerImageProcessor.from_pretrained(MODEL_CHECKPOINT)","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:26:53.812864Z","iopub.execute_input":"2024-03-13T11:26:53.813548Z","iopub.status.idle":"2024-03-13T11:26:57.841323Z","shell.execute_reply.started":"2024-03-13T11:26:53.813514Z","shell.execute_reply":"2024-03-13T11:26:57.840414Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(len(train_images))\ntrain_images = train_images\n\nprint(len(train_images))","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:15:38.395390Z","iopub.execute_input":"2024-03-13T11:15:38.396318Z","iopub.status.idle":"2024-03-13T11:15:38.401487Z","shell.execute_reply.started":"2024-03-13T11:15:38.396285Z","shell.execute_reply":"2024-03-13T11:15:38.400449Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(len(val_images)):\n    image_path = val_images[i]\n    mask_path = val_masks[i]\n    \n    image = cv2.imread(image_path)\n    mask = cv2.imread(mask_path, cv2.IMREAD_UNCHANGED)\n    print(f'Validation image #{i + 1}')\n    \n    inputs = np.moveaxis(image, -1, 0)\n    inputs = feature_extractor(images=image, return_tensors='pt')\n\n    outputs = model(**inputs)\n    logits = outputs.logits\n    \n    # Rescale logits to original image size\n    upsampled_logits = nn.functional.interpolate(\n        logits,\n        size=image.shape[:-1], # (height, width)\n        mode='bilinear',\n        align_corners=False\n    )\n\n    # Apply argmax on the class dimension\n    pred_mask = upsampled_logits.argmax(dim=1)[0]\n    \n    \n    fig, (ax1, ax2, ax3) = plt.subplots(nrows=1, ncols=3)\n    \n    ax1.imshow(image)\n    ax1.set_title('Image')\n    ax1.axis('Off')\n    \n    ax2.imshow(mask)\n    ax2.set_title('True mask')\n    ax2.axis('Off')\n    \n    ax3.imshow(pred_mask)\n    ax3.set_title('Predicted mask')\n    ax3.axis('Off')\n    plt.show()","metadata":{"scrolled":true,"execution":{"iopub.status.busy":"2024-03-13T11:15:42.220530Z","iopub.execute_input":"2024-03-13T11:15:42.221226Z","iopub.status.idle":"2024-03-13T11:19:12.506060Z","shell.execute_reply.started":"2024-03-13T11:15:42.221195Z","shell.execute_reply":"2024-03-13T11:19:12.504424Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import shutil\n\nshutil.rmtree('/kaggle/working/segformer_blood_vessel_results')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\neval_model = SegformerForSemanticSegmentation.from_pretrained(\n    '/kaggle/input/segformers-model-nvidia-mit-b4-segformer-model/segformer_model',\n    num_labels=num_labels,\n    id2label=id2label,\n    label2id=label2id,\n    ignore_mismatched_sizes=True,\n)\n\neval_trainer = Trainer(\n    model=eval_model,\n    args=training_args,\n    train_dataset=train_dataset,\n    eval_dataset=val_dataset,\n#     optimizers=(optimizer, lr_scheduler),\n    compute_metrics=compute_metrics,\n#     callbacks=[print_lr_callback, early_stop]\n)\n\n\n","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:43:03.214981Z","iopub.execute_input":"2024-03-13T11:43:03.215420Z","iopub.status.idle":"2024-03-13T11:43:07.143833Z","shell.execute_reply.started":"2024-03-13T11:43:03.215367Z","shell.execute_reply":"2024-03-13T11:43:07.143020Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"eval_trainer.predict(train_dataset) \n#    '/kaggle/input/segformers-model-nvidia-mit-b4-segformer-model/segformer_blood_vessel',","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:30:25.312004Z","iopub.execute_input":"2024-03-13T11:30:25.312380Z","iopub.status.idle":"2024-03-13T11:35:12.881540Z","shell.execute_reply.started":"2024-03-13T11:30:25.312348Z","shell.execute_reply":"2024-03-13T11:35:12.880452Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"eval_trainer.predict(train_dataset) \n","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:43:12.579665Z","iopub.execute_input":"2024-03-13T11:43:12.580289Z","iopub.status.idle":"2024-03-13T11:48:08.793342Z","shell.execute_reply.started":"2024-03-13T11:43:12.580255Z","shell.execute_reply":"2024-03-13T11:48:08.792337Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"eval_trainer.evaluate(train_loader) \n","metadata":{"execution":{"iopub.status.busy":"2024-03-13T11:50:14.483271Z","iopub.execute_input":"2024-03-13T11:50:14.483679Z","iopub.status.idle":"2024-03-13T11:50:14.707985Z","shell.execute_reply.started":"2024-03-13T11:50:14.483647Z","shell.execute_reply":"2024-03-13T11:50:14.706463Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}