{"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":9988,"databundleVersionId":868324,"sourceType":"competition"},{"sourceId":301280,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":257249,"modelId":278545}],"dockerImageVersionId":30919,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import sys\nsys.path.append('/kaggle/input/classfication_stage_code/pytorch/updated_version/9')","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-03-25T11:19:21.005553Z","iopub.execute_input":"2025-03-25T11:19:21.005859Z","iopub.status.idle":"2025-03-25T11:19:21.009732Z","shell.execute_reply.started":"2025-03-25T11:19:21.005831Z","shell.execute_reply":"2025-03-25T11:19:21.008971Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from data.classification_stage.data_processor import DataProcessor\nfrom data.classification_stage.dataset import ClassificationDataset\nfrom evaluation.classification_evaluator import *\nfrom loss_fn.BCEWithLogits_mixup import BCEWithLogitsMixup\nfrom models.classification_stage.resnet34 import ResNet34\nfrom training.classification_trainer import ClassificationTrainer\nfrom utils.plotter import plot_training_val, plot_test\nfrom utils.random_seed import set_seed\nfrom utils.mixup_dataloader_initializer import MixupDataLoader\nimport torch\nimport torch.optim as optim\nfrom torch.utils.data import DataLoader\nimport torch.nn as nn\nimport torchvision.transforms.v2 as v2","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T11:25:29.309556Z","iopub.execute_input":"2025-03-25T11:25:29.309893Z","iopub.status.idle":"2025-03-25T11:25:29.315051Z","shell.execute_reply.started":"2025-03-25T11:25:29.309868Z","shell.execute_reply":"2025-03-25T11:25:29.314241Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Seed","metadata":{}},{"cell_type":"code","source":"seed = 2005\nset_seed(seed=seed)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T11:19:37.050730Z","iopub.execute_input":"2025-03-25T11:19:37.051202Z","iopub.status.idle":"2025-03-25T11:19:37.062668Z","shell.execute_reply.started":"2025-03-25T11:19:37.051168Z","shell.execute_reply":"2025-03-25T11:19:37.062042Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Device","metadata":{}},{"cell_type":"code","source":"device = 'cuda' if torch.cuda.is_available() else 'cpu'\ndevice","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T11:19:37.064349Z","iopub.execute_input":"2025-03-25T11:19:37.064568Z","iopub.status.idle":"2025-03-25T11:19:37.142518Z","shell.execute_reply.started":"2025-03-25T11:19:37.064550Z","shell.execute_reply":"2025-03-25T11:19:37.141693Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Dataprocessing","metadata":{}},{"cell_type":"code","source":"dataset_root = '/kaggle/input/airbus-ship-detection'\ncsv_file = '/kaggle/input/airbus-ship-detection/train_ship_segmentations_v2.csv'\ndp = DataProcessor(csv_file=csv_file, dataset_root=dataset_root, seed=seed)\ntrain_data, val_data, test_data = dp.get_data()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T11:19:37.143737Z","iopub.execute_input":"2025-03-25T11:19:37.143999Z","iopub.status.idle":"2025-03-25T11:19:38.852090Z","shell.execute_reply.started":"2025-03-25T11:19:37.143968Z","shell.execute_reply":"2025-03-25T11:19:38.851195Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Datasets","metadata":{}},{"cell_type":"code","source":"train_aug = v2.Compose([\n        v2.RandomHorizontalFlip(p=0.5),  # Horizontal flipping with 50% probability\n        v2.RandomRotation(degrees=15),  # Random rotation within a range of ±15 degrees\n        v2.RandomResizedCrop(size=(224), scale=(0.8, 1.0)),  # Random zoom by cropping\n        v2.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1),  # Adjust brightness, contrast, etc.\n        v2.ToImage(),\n        v2.ToDtype(torch.float32, scale=True),\n        v2.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  # Normalize using ImageNet stats\n    ])\n\ntrain_dataset = ClassificationDataset(train_data, transform=train_aug)\nval_dataset = ClassificationDataset(val_data)\ntest_dataset = ClassificationDataset(test_data)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T11:26:24.925944Z","iopub.execute_input":"2025-03-25T11:26:24.926255Z","iopub.status.idle":"2025-03-25T11:26:24.932482Z","shell.execute_reply.started":"2025-03-25T11:26:24.926231Z","shell.execute_reply":"2025-03-25T11:26:24.931561Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Dataloaders","metadata":{}},{"cell_type":"code","source":"batch_size = 450\nnum_workers = 4\n\ntrain_loader = DataLoader(train_dataset, batch_size=batch_size, num_workers=num_workers, pin_memory=True)\nval_loader = DataLoader(val_dataset, batch_size=batch_size, num_workers=num_workers, pin_memory=True)\ntest_loader = DataLoader(test_dataset, batch_size=batch_size, num_workers=num_workers, pin_memory=True)\n\ndataloaders = {'train': train_loader, 'val': val_loader, 'test': test_loader}","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T11:26:28.598007Z","iopub.execute_input":"2025-03-25T11:26:28.598320Z","iopub.status.idle":"2025-03-25T11:26:28.602940Z","shell.execute_reply.started":"2025-03-25T11:26:28.598296Z","shell.execute_reply":"2025-03-25T11:26:28.602138Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Criterion","metadata":{}},{"cell_type":"code","source":"pos_weight = train_dataset.get_pos_weight()\ncriterion = nn.BCEWithLogitsLoss(pos_weight=pos_weight)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T11:19:38.915432Z","iopub.execute_input":"2025-03-25T11:19:38.915639Z","iopub.status.idle":"2025-03-25T11:19:38.920846Z","shell.execute_reply.started":"2025-03-25T11:19:38.915621Z","shell.execute_reply":"2025-03-25T11:19:38.920079Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Model","metadata":{}},{"cell_type":"code","source":"model = ResNet34().to(device)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T11:19:38.921783Z","iopub.execute_input":"2025-03-25T11:19:38.922031Z","iopub.status.idle":"2025-03-25T11:19:39.484218Z","shell.execute_reply.started":"2025-03-25T11:19:38.922002Z","shell.execute_reply":"2025-03-25T11:19:39.483482Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Optimizer","metadata":{}},{"cell_type":"code","source":"early_cnn_lr = 3e-4\nlater_cnn_lr = 1.5e-3\nfc_layer_lr = 3e-3\nweight_decay = 0\n\nearly_cnn_params = list(model.get_layer('conv1').parameters()) + \\\n                   list(model.get_layer('layer1').parameters())\nlater_cnn_params = list(model.get_layer('layer2').parameters()) + \\\n                   list(model.get_layer('layer3').parameters()) + \\\n                   list(model.get_layer('layer4').parameters())\nfc_layer_params = list(model.get_layer('fc').parameters())\n\n# Initialize the Adam optimizer with different learning rates\noptimizer = optim.Adam(\n    params=[\n    {'params': early_cnn_params, 'lr': early_cnn_lr},\n    {'params': later_cnn_params, 'lr': later_cnn_lr},\n    {'params': fc_layer_params, 'lr': fc_layer_lr},\n],\n    lr=early_cnn_lr,\n    weight_decay=weight_decay)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T11:27:58.196180Z","iopub.execute_input":"2025-03-25T11:27:58.196519Z","iopub.status.idle":"2025-03-25T11:27:58.202717Z","shell.execute_reply.started":"2025-03-25T11:27:58.196495Z","shell.execute_reply":"2025-03-25T11:27:58.201752Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Training","metadata":{}},{"cell_type":"code","source":"trainer = ClassificationTrainer(model=model, optimizer=optimizer, loss_fn=criterion, dataloaders=dataloaders, device=device)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T11:28:00.544711Z","iopub.execute_input":"2025-03-25T11:28:00.545000Z","iopub.status.idle":"2025-03-25T11:28:00.548890Z","shell.execute_reply.started":"2025-03-25T11:28:00.544979Z","shell.execute_reply":"2025-03-25T11:28:00.548002Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"best_model, history = trainer.train(epochs=10)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T11:28:02.144677Z","iopub.execute_input":"2025-03-25T11:28:02.144959Z","execution_failed":"2025-03-25T11:29:25.630Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_loss, val_loss, train_acc, val_acc = history['train_loss'], history['val_loss'], history['train_accuracy'], history['val_accuracy']\nplot_training_val(train_loss, val_loss, train_acc, val_acc)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T11:20:14.788654Z","iopub.status.idle":"2025-03-25T11:20:14.788944Z","shell.execute_reply":"2025-03-25T11:20:14.788831Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Evaluation","metadata":{}},{"cell_type":"code","source":"evaluator = ClassificationEvaluator(best_model, test_loader, criterion, device)\navg_loss, metrics_dict, confusion_data = evaluator.evaluate()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T11:20:14.789720Z","iopub.status.idle":"2025-03-25T11:20:14.790097Z","shell.execute_reply":"2025-03-25T11:20:14.789934Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plot_test(avg_loss, metrics_dict, confusion_data)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-25T11:20:14.790879Z","iopub.status.idle":"2025-03-25T11:20:14.791178Z","shell.execute_reply":"2025-03-25T11:20:14.791034Z"}},"outputs":[],"execution_count":null}]}