{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Data Exploration\n", "\n", "This notebook explores the CrisisLandMark dataset structure and verifies preprocessing." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import sys\n", "sys.path.insert(0, '..')\n", "\n", "import torch\n", "import numpy as np\n", "from PIL import Image\n", "import matplotlib.pyplot as plt\n", "\n", "from src.data.preprocessing import preprocess_image, handle_channels\n", "from src.data.dataset import CrisisLandMarkDataset, create_splits" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Create Dataset" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Create dataset for each modality\n", "optical_dataset = CrisisLandMarkDataset(modality='optical')\n", "sar_dataset = CrisisLandMarkDataset(modality='sar')\n", "\n", "print(f\"Optical dataset: {len(optical_dataset)} samples\")\n", "print(f\"SAR dataset: {len(sar_dataset)} samples\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Sample Images" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Get sample images\n", "optical_img, optical_mod, optical_class = optical_dataset[0]\n", "sar_img, sar_mod, sar_class = sar_dataset[0]\n", "\n", "print(f\"Optical shape: {optical_img.shape}\")\n", "print(f\"SAR shape: {sar_img.shape}\")\n", "print(f\"Optical modality label: {optical_mod}\")\n", "print(f\"SAR modality label: {sar_mod}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Data Splitting" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Test splitting\n", "query_idx, gallery_idx = create_splits(optical_dataset, query_ratio=0.2)\n", "\n", "print(f\"Query set: {len(query_idx)} samples\")\n", "print(f\"Gallery set: {len(gallery_idx)} samples\")\n", "print(f\"Overlap: {len(set(query_idx) & set(gallery_idx))} (should be 0)\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Class Distribution" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Check class distribution\n", "class_counts = {}\n", "for i in range(len(optical_dataset)):\n", " _, _, class_label = optical_dataset[i]\n", " class_counts[class_label] = class_counts.get(class_label, 0) + 1\n", "\n", "print(\"Class distribution:\")\n", "for cls, count in sorted(class_counts.items()):\n", " print(f\" Class {cls}: {count} samples\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5. Summary" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(\"\\n=== Data Exploration Summary ===\")\n", "print(f\"Total optical samples: {len(optical_dataset)}\")\n", "print(f\"Total SAR samples: {len(sar_dataset)}\")\n", "print(f\"Number of classes: {len(class_counts)}\")\n", "print(f\"Query/Gallery split: 80/20 with no overlap\")\n", "print(\"\\nPreprocessing verified for optical and SAR modalities.\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "name": "python", "version": "3.10.0" } }, "nbformat": 4, "nbformat_minor": 4 }