Segmentation

InΒ [Β ]:
from google.colab import drive
drive.mount('/content/drive')
Mounted at /content/drive

Raw Dataset Import

InΒ [Β ]:
import os
import zipfile
from tqdm import tqdm

# Path configuration
zips_dir = "/content/drive/MyDrive/Final Thesis File/AgriMultiCrop-BD-Renamed-Zips"
extracted_dir = "/content/unzipped_raw_images"

if not os.path.exists(zips_dir):
    raise FileNotFoundError(f"Folder not found in Drive: {zips_dir}\nPlease make sure Google Drive is mounted correctly.")

os.makedirs(extracted_dir, exist_ok=True)

zip_files = [f for f in os.listdir(zips_dir) if f.lower().endswith('.zip')]

if not zip_files:
    raise FileNotFoundError(f"No .zip files found in {zips_dir}")

print(f"πŸ“¦ Unzipping a total of {len(zip_files)} zip files to local disk, please wait...")

for z_file in tqdm(sorted(zip_files), desc="Unzipping classes"):
    full_zip_path = os.path.join(zips_dir, z_file)
    class_folder_name = os.path.splitext(z_file)[0]
    target_extract_path = os.path.join(extracted_dir, class_folder_name)
    os.makedirs(target_extract_path, exist_ok=True)

    with zipfile.ZipFile(full_zip_path, 'r') as zip_ref:
        zip_ref.extractall(target_extract_path)

print("βœ… All zip files have been successfully unzipped to local disk!")
πŸ“¦ Unzipping a total of 28 zip files to local disk, please wait...
Unzipping classes: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 28/28 [06:12<00:00, 13.30s/it]
βœ… All zip files have been successfully unzipped to local disk!

InΒ [Β ]:
!pip3 install torch torchvision --index-url https://pytorch.org
!pip install torch torchvision
!pip install numpy pillow opencv-python transformers accelerate timm einops ultralytics
!pip install kornia
Looking in indexes: https://pytorch.org
Requirement already satisfied: torch in /usr/local/lib/python3.13/dist-packages (2.11.0+cu130)
Requirement already satisfied: torchvision in /usr/local/lib/python3.13/dist-packages (0.26.0+cu130)
Requirement already satisfied: filelock in /usr/local/lib/python3.13/dist-packages (from torch) (3.32.7)
Requirement already satisfied: typing-extensions>=4.10.0 in /usr/local/lib/python3.13/dist-packages (from torch) (4.16.0)
Requirement already satisfied: setuptools<82 in /usr/local/lib/python3.13/dist-packages (from torch) (80.10.2)
Requirement already satisfied: sympy>=1.13.3 in /usr/local/lib/python3.13/dist-packages (from torch) (1.14.0)
Requirement already satisfied: networkx>=2.5.1 in /usr/local/lib/python3.13/dist-packages (from torch) (3.6.1)
Requirement already satisfied: jinja2 in /usr/local/lib/python3.13/dist-packages (from torch) (3.1.6)
Requirement already satisfied: fsspec>=0.8.5 in /usr/local/lib/python3.13/dist-packages (from torch) (2025.12.0)
Requirement already satisfied: cuda-toolkit==13.0.2 in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (13.0.2)
Requirement already satisfied: cuda-bindings<14,>=13.0.3 in /usr/local/lib/python3.13/dist-packages (from torch) (13.0.3)
Requirement already satisfied: nvidia-cudnn-cu13==9.19.0.56 in /usr/local/lib/python3.13/dist-packages (from torch) (9.19.0.56)
Requirement already satisfied: nvidia-cusparselt-cu13==0.8.0 in /usr/local/lib/python3.13/dist-packages (from torch) (0.8.0)
Requirement already satisfied: nvidia-nccl-cu13==2.28.9 in /usr/local/lib/python3.13/dist-packages (from torch) (2.28.9)
Requirement already satisfied: nvidia-nvshmem-cu13==3.4.5 in /usr/local/lib/python3.13/dist-packages (from torch) (3.4.5)
Requirement already satisfied: triton==3.6.0 in /usr/local/lib/python3.13/dist-packages (from torch) (3.6.0)
Requirement already satisfied: nvidia-cublas==13.1.0.3.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (13.1.0.3)
Requirement already satisfied: nvidia-cuda-runtime==13.0.96.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (13.0.96)
Requirement already satisfied: nvidia-cufft==12.0.0.61.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (12.0.0.61)
Requirement already satisfied: nvidia-cufile==1.15.1.6.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (1.15.1.6)
Requirement already satisfied: nvidia-cuda-cupti==13.0.85.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (13.0.85)
Requirement already satisfied: nvidia-curand==10.4.0.35.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (10.4.0.35)
Requirement already satisfied: nvidia-cusolver==12.0.4.66.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (12.0.4.66)
Requirement already satisfied: nvidia-cusparse==12.6.3.3.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (12.6.3.3)
Requirement already satisfied: nvidia-nvjitlink==13.0.88.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (13.0.88)
Requirement already satisfied: nvidia-cuda-nvrtc==13.0.88.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (13.0.88)
Requirement already satisfied: nvidia-nvtx==13.0.85.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (13.0.85)
Requirement already satisfied: numpy in /usr/local/lib/python3.13/dist-packages (from torchvision) (2.1.3)
Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in /usr/local/lib/python3.13/dist-packages (from torchvision) (11.3.0)
Requirement already satisfied: cuda-pathfinder~=1.1 in /usr/local/lib/python3.13/dist-packages (from cuda-bindings<14,>=13.0.3->torch) (1.8.1)
Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.13/dist-packages (from sympy>=1.13.3->torch) (1.3.0)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.13/dist-packages (from jinja2->torch) (3.0.3)
Requirement already satisfied: torch in /usr/local/lib/python3.13/dist-packages (2.11.0+cu130)
Requirement already satisfied: torchvision in /usr/local/lib/python3.13/dist-packages (0.26.0+cu130)
Requirement already satisfied: filelock in /usr/local/lib/python3.13/dist-packages (from torch) (3.32.7)
Requirement already satisfied: typing-extensions>=4.10.0 in /usr/local/lib/python3.13/dist-packages (from torch) (4.16.0)
Requirement already satisfied: setuptools<82 in /usr/local/lib/python3.13/dist-packages (from torch) (80.10.2)
Requirement already satisfied: sympy>=1.13.3 in /usr/local/lib/python3.13/dist-packages (from torch) (1.14.0)
Requirement already satisfied: networkx>=2.5.1 in /usr/local/lib/python3.13/dist-packages (from torch) (3.6.1)
Requirement already satisfied: jinja2 in /usr/local/lib/python3.13/dist-packages (from torch) (3.1.6)
Requirement already satisfied: fsspec>=0.8.5 in /usr/local/lib/python3.13/dist-packages (from torch) (2025.12.0)
Requirement already satisfied: cuda-toolkit==13.0.2 in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (13.0.2)
Requirement already satisfied: cuda-bindings<14,>=13.0.3 in /usr/local/lib/python3.13/dist-packages (from torch) (13.0.3)
Requirement already satisfied: nvidia-cudnn-cu13==9.19.0.56 in /usr/local/lib/python3.13/dist-packages (from torch) (9.19.0.56)
Requirement already satisfied: nvidia-cusparselt-cu13==0.8.0 in /usr/local/lib/python3.13/dist-packages (from torch) (0.8.0)
Requirement already satisfied: nvidia-nccl-cu13==2.28.9 in /usr/local/lib/python3.13/dist-packages (from torch) (2.28.9)
Requirement already satisfied: nvidia-nvshmem-cu13==3.4.5 in /usr/local/lib/python3.13/dist-packages (from torch) (3.4.5)
Requirement already satisfied: triton==3.6.0 in /usr/local/lib/python3.13/dist-packages (from torch) (3.6.0)
Requirement already satisfied: nvidia-cublas==13.1.0.3.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (13.1.0.3)
Requirement already satisfied: nvidia-cuda-runtime==13.0.96.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (13.0.96)
Requirement already satisfied: nvidia-cufft==12.0.0.61.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (12.0.0.61)
Requirement already satisfied: nvidia-cufile==1.15.1.6.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (1.15.1.6)
Requirement already satisfied: nvidia-cuda-cupti==13.0.85.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (13.0.85)
Requirement already satisfied: nvidia-curand==10.4.0.35.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (10.4.0.35)
Requirement already satisfied: nvidia-cusolver==12.0.4.66.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (12.0.4.66)
Requirement already satisfied: nvidia-cusparse==12.6.3.3.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (12.6.3.3)
Requirement already satisfied: nvidia-nvjitlink==13.0.88.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (13.0.88)
Requirement already satisfied: nvidia-cuda-nvrtc==13.0.88.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (13.0.88)
Requirement already satisfied: nvidia-nvtx==13.0.85.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch) (13.0.85)
Requirement already satisfied: numpy in /usr/local/lib/python3.13/dist-packages (from torchvision) (2.1.3)
Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in /usr/local/lib/python3.13/dist-packages (from torchvision) (11.3.0)
Requirement already satisfied: cuda-pathfinder~=1.1 in /usr/local/lib/python3.13/dist-packages (from cuda-bindings<14,>=13.0.3->torch) (1.8.1)
Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.13/dist-packages (from sympy>=1.13.3->torch) (1.3.0)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.13/dist-packages (from jinja2->torch) (3.0.3)
Requirement already satisfied: numpy in /usr/local/lib/python3.13/dist-packages (2.1.3)
Requirement already satisfied: pillow in /usr/local/lib/python3.13/dist-packages (11.3.0)
Requirement already satisfied: opencv-python in /usr/local/lib/python3.13/dist-packages (5.0.0.93)
Requirement already satisfied: transformers in /usr/local/lib/python3.13/dist-packages (5.17.0)
Requirement already satisfied: accelerate in /usr/local/lib/python3.13/dist-packages (1.15.0)
Requirement already satisfied: timm in /usr/local/lib/python3.13/dist-packages (1.0.29)
Requirement already satisfied: einops in /usr/local/lib/python3.13/dist-packages (0.8.2)
Requirement already satisfied: ultralytics in /usr/local/lib/python3.13/dist-packages (8.4.173)
Requirement already satisfied: huggingface-hub<2.0,>=1.5.0 in /usr/local/lib/python3.13/dist-packages (from transformers) (1.31.0)
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.13/dist-packages (from transformers) (26.3)
Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.13/dist-packages (from transformers) (6.0.3)
Requirement already satisfied: regex>=2025.10.22 in /usr/local/lib/python3.13/dist-packages (from transformers) (2025.11.3)
Requirement already satisfied: tokenizers<0.24.0,>=0.23.1 in /usr/local/lib/python3.13/dist-packages (from transformers) (0.23.2)
Requirement already satisfied: typer in /usr/local/lib/python3.13/dist-packages (from transformers) (0.27.2)
Requirement already satisfied: safetensors>=0.8.0 in /usr/local/lib/python3.13/dist-packages (from transformers) (0.8.0)
Requirement already satisfied: tqdm>=4.60 in /usr/local/lib/python3.13/dist-packages (from transformers) (4.67.3)
Requirement already satisfied: psutil in /usr/local/lib/python3.13/dist-packages (from accelerate) (5.9.5)
Requirement already satisfied: torch>=2.0.0 in /usr/local/lib/python3.13/dist-packages (from accelerate) (2.11.0+cu130)
Requirement already satisfied: torchvision in /usr/local/lib/python3.13/dist-packages (from timm) (0.26.0+cu130)
Requirement already satisfied: matplotlib>=3.3.0 in /usr/local/lib/python3.13/dist-packages (from ultralytics) (3.10.0)
Requirement already satisfied: requests>=2.23.0 in /usr/local/lib/python3.13/dist-packages (from ultralytics) (2.32.4)
Requirement already satisfied: polars>=0.20.0 in /usr/local/lib/python3.13/dist-packages (from ultralytics) (1.35.2)
Requirement already satisfied: nvidia-ml-py>=12.0.0 in /usr/local/lib/python3.13/dist-packages (from ultralytics) (13.610.43)
Requirement already satisfied: ultralytics-thop>=2.2.2 in /usr/local/lib/python3.13/dist-packages (from ultralytics) (2.2.2)
Requirement already satisfied: ultralytics-platform>=0.1.45 in /usr/local/lib/python3.13/dist-packages (from ultralytics) (0.1.80)
Requirement already satisfied: click<9.0.0,>=8.4.2 in /usr/local/lib/python3.13/dist-packages (from huggingface-hub<2.0,>=1.5.0->transformers) (8.5.0)
Requirement already satisfied: filelock>=3.10.0 in /usr/local/lib/python3.13/dist-packages (from huggingface-hub<2.0,>=1.5.0->transformers) (3.32.7)
Requirement already satisfied: fsspec>=2023.5.0 in /usr/local/lib/python3.13/dist-packages (from huggingface-hub<2.0,>=1.5.0->transformers) (2025.12.0)
Requirement already satisfied: hf-xet<2.0.0,>=1.5.2 in /usr/local/lib/python3.13/dist-packages (from huggingface-hub<2.0,>=1.5.0->transformers) (1.6.0)
Requirement already satisfied: httpx<1,>=0.23.0 in /usr/local/lib/python3.13/dist-packages (from huggingface-hub<2.0,>=1.5.0->transformers) (0.28.1)
Requirement already satisfied: typing-extensions>=4.1.0 in /usr/local/lib/python3.13/dist-packages (from huggingface-hub<2.0,>=1.5.0->transformers) (4.16.0)
Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.13/dist-packages (from matplotlib>=3.3.0->ultralytics) (1.4.0)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.13/dist-packages (from matplotlib>=3.3.0->ultralytics) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.13/dist-packages (from matplotlib>=3.3.0->ultralytics) (4.65.0)
Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/lib/python3.13/dist-packages (from matplotlib>=3.3.0->ultralytics) (1.5.1)
Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.13/dist-packages (from matplotlib>=3.3.0->ultralytics) (3.3.2)
Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.13/dist-packages (from matplotlib>=3.3.0->ultralytics) (2.9.0.post0)
Requirement already satisfied: polars-runtime-32==1.35.2 in /usr/local/lib/python3.13/dist-packages (from polars>=0.20.0->ultralytics) (1.35.2)
Requirement already satisfied: charset_normalizer<4,>=2 in /usr/local/lib/python3.13/dist-packages (from requests>=2.23.0->ultralytics) (3.4.9)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.13/dist-packages (from requests>=2.23.0->ultralytics) (3.19)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.13/dist-packages (from requests>=2.23.0->ultralytics) (2.5.0)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.13/dist-packages (from requests>=2.23.0->ultralytics) (2026.7.22)
Requirement already satisfied: setuptools<82 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->accelerate) (80.10.2)
Requirement already satisfied: sympy>=1.13.3 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->accelerate) (1.14.0)
Requirement already satisfied: networkx>=2.5.1 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->accelerate) (3.6.1)
Requirement already satisfied: jinja2 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->accelerate) (3.1.6)
Requirement already satisfied: cuda-toolkit==13.0.2 in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->accelerate) (13.0.2)
Requirement already satisfied: cuda-bindings<14,>=13.0.3 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->accelerate) (13.0.3)
Requirement already satisfied: nvidia-cudnn-cu13==9.19.0.56 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->accelerate) (9.19.0.56)
Requirement already satisfied: nvidia-cusparselt-cu13==0.8.0 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->accelerate) (0.8.0)
Requirement already satisfied: nvidia-nccl-cu13==2.28.9 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->accelerate) (2.28.9)
Requirement already satisfied: nvidia-nvshmem-cu13==3.4.5 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->accelerate) (3.4.5)
Requirement already satisfied: triton==3.6.0 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->accelerate) (3.6.0)
Requirement already satisfied: nvidia-cublas==13.1.0.3.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->accelerate) (13.1.0.3)
Requirement already satisfied: nvidia-cuda-runtime==13.0.96.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->accelerate) (13.0.96)
Requirement already satisfied: nvidia-cufft==12.0.0.61.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->accelerate) (12.0.0.61)
Requirement already satisfied: nvidia-cufile==1.15.1.6.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->accelerate) (1.15.1.6)
Requirement already satisfied: nvidia-cuda-cupti==13.0.85.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->accelerate) (13.0.85)
Requirement already satisfied: nvidia-curand==10.4.0.35.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->accelerate) (10.4.0.35)
Requirement already satisfied: nvidia-cusolver==12.0.4.66.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->accelerate) (12.0.4.66)
Requirement already satisfied: nvidia-cusparse==12.6.3.3.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->accelerate) (12.6.3.3)
Requirement already satisfied: nvidia-nvjitlink==13.0.88.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->accelerate) (13.0.88)
Requirement already satisfied: nvidia-cuda-nvrtc==13.0.88.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->accelerate) (13.0.88)
Requirement already satisfied: nvidia-nvtx==13.0.85.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->accelerate) (13.0.85)
Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.13/dist-packages (from typer->transformers) (1.5.4)
Requirement already satisfied: rich>=13.8.0 in /usr/local/lib/python3.13/dist-packages (from typer->transformers) (13.9.4)
Requirement already satisfied: annotated-doc>=0.0.2 in /usr/local/lib/python3.13/dist-packages (from typer->transformers) (0.0.5)
Requirement already satisfied: cuda-pathfinder~=1.1 in /usr/local/lib/python3.13/dist-packages (from cuda-bindings<14,>=13.0.3->torch>=2.0.0->accelerate) (1.8.1)
Requirement already satisfied: anyio in /usr/local/lib/python3.13/dist-packages (from httpx<1,>=0.23.0->huggingface-hub<2.0,>=1.5.0->transformers) (4.15.1)
Requirement already satisfied: httpcore==1.* in /usr/local/lib/python3.13/dist-packages (from httpx<1,>=0.23.0->huggingface-hub<2.0,>=1.5.0->transformers) (1.0.9)
Requirement already satisfied: h11>=0.16 in /usr/local/lib/python3.13/dist-packages (from httpcore==1.*->httpx<1,>=0.23.0->huggingface-hub<2.0,>=1.5.0->transformers) (0.16.0)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.13/dist-packages (from python-dateutil>=2.7->matplotlib>=3.3.0->ultralytics) (1.17.0)
Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.13/dist-packages (from rich>=13.8.0->typer->transformers) (4.2.0)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.13/dist-packages (from rich>=13.8.0->typer->transformers) (2.21.0)
Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.13/dist-packages (from sympy>=1.13.3->torch>=2.0.0->accelerate) (1.3.0)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.13/dist-packages (from jinja2->torch>=2.0.0->accelerate) (3.0.3)
Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.13/dist-packages (from markdown-it-py>=2.2.0->rich>=13.8.0->typer->transformers) (0.1.2)
Collecting kornia
  Downloading kornia-0.8.3-py3-none-any.whl.metadata (22 kB)
Collecting kornia-rs>=0.1.9 (from kornia)
  Downloading kornia_rs-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (19 kB)
Requirement already satisfied: packaging in /usr/local/lib/python3.13/dist-packages (from kornia) (26.3)
Requirement already satisfied: torch>=2.0.0 in /usr/local/lib/python3.13/dist-packages (from kornia) (2.11.0+cu130)
Requirement already satisfied: filelock in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->kornia) (3.32.7)
Requirement already satisfied: typing-extensions>=4.10.0 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->kornia) (4.16.0)
Requirement already satisfied: setuptools<82 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->kornia) (80.10.2)
Requirement already satisfied: sympy>=1.13.3 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->kornia) (1.14.0)
Requirement already satisfied: networkx>=2.5.1 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->kornia) (3.6.1)
Requirement already satisfied: jinja2 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->kornia) (3.1.6)
Requirement already satisfied: fsspec>=0.8.5 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->kornia) (2025.12.0)
Requirement already satisfied: cuda-toolkit==13.0.2 in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->kornia) (13.0.2)
Requirement already satisfied: cuda-bindings<14,>=13.0.3 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->kornia) (13.0.3)
Requirement already satisfied: nvidia-cudnn-cu13==9.19.0.56 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->kornia) (9.19.0.56)
Requirement already satisfied: nvidia-cusparselt-cu13==0.8.0 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->kornia) (0.8.0)
Requirement already satisfied: nvidia-nccl-cu13==2.28.9 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->kornia) (2.28.9)
Requirement already satisfied: nvidia-nvshmem-cu13==3.4.5 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->kornia) (3.4.5)
Requirement already satisfied: triton==3.6.0 in /usr/local/lib/python3.13/dist-packages (from torch>=2.0.0->kornia) (3.6.0)
Requirement already satisfied: nvidia-cublas==13.1.0.3.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->kornia) (13.1.0.3)
Requirement already satisfied: nvidia-cuda-runtime==13.0.96.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->kornia) (13.0.96)
Requirement already satisfied: nvidia-cufft==12.0.0.61.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->kornia) (12.0.0.61)
Requirement already satisfied: nvidia-cufile==1.15.1.6.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->kornia) (1.15.1.6)
Requirement already satisfied: nvidia-cuda-cupti==13.0.85.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->kornia) (13.0.85)
Requirement already satisfied: nvidia-curand==10.4.0.35.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->kornia) (10.4.0.35)
Requirement already satisfied: nvidia-cusolver==12.0.4.66.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->kornia) (12.0.4.66)
Requirement already satisfied: nvidia-cusparse==12.6.3.3.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->kornia) (12.6.3.3)
Requirement already satisfied: nvidia-nvjitlink==13.0.88.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->kornia) (13.0.88)
Requirement already satisfied: nvidia-cuda-nvrtc==13.0.88.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->kornia) (13.0.88)
Requirement already satisfied: nvidia-nvtx==13.0.85.* in /usr/local/lib/python3.13/dist-packages (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.2; platform_system == "Linux"->torch>=2.0.0->kornia) (13.0.85)
Requirement already satisfied: cuda-pathfinder~=1.1 in /usr/local/lib/python3.13/dist-packages (from cuda-bindings<14,>=13.0.3->torch>=2.0.0->kornia) (1.8.1)
Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.13/dist-packages (from sympy>=1.13.3->torch>=2.0.0->kornia) (1.3.0)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.13/dist-packages (from jinja2->torch>=2.0.0->kornia) (3.0.3)
Downloading kornia-0.8.3-py3-none-any.whl (1.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 3.6 MB/s eta 0:00:00
Downloading kornia_rs-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.3/5.3 MB 29.9 MB/s eta 0:00:00
Installing collected packages: kornia-rs, kornia
Successfully installed kornia-0.8.3 kornia-rs-0.2.0

YOLOv11-M & Birefnet Model Load

InΒ [Β ]:
import torch
from torchvision import transforms
from transformers import AutoModelForImageSegmentation
from ultralytics import YOLO

# Device selection
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Device being used: {device}")

# 1. Load BiRefNet model (Preserved)
print("⏳ Loading BiRefNet model...")
birefnet_model = AutoModelForImageSegmentation.from_pretrained(
    "ZhengPeng7/BiRefNet",
    trust_remote_code=True
).to(device)

if device == "cuda":
    birefnet_model = birefnet_model.half()
birefnet_model.eval()
print("βœ… BiRefNet loaded successfully!")

# 2. Load your trained YOLOv11 Best Model
# (Modify the Drive path if needed)
yolo_model_path = "/content/drive/MyDrive/Final Thesis File/YOLO11_Thesis_Project_33to60/weights/best.pt"

print(f"⏳ Loading YOLOv11 model from: {yolo_model_path}")
yolo_model = YOLO(yolo_model_path)
print("βœ… YOLOv11 loaded successfully!")

# 3. Tensor transform (Preserved)
normalize_transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])
Device being used: cuda
⏳ Loading BiRefNet model...
βœ… BiRefNet loaded successfully!
⏳ Loading YOLOv11 model from: /content/drive/MyDrive/Final Thesis File/YOLO11_Thesis_Project_33to60/weights/best.pt
βœ… YOLOv11 loaded successfully!

Segmentation Preprocessing & Post-processing Utilities

InΒ [Β ]:
import cv2
import numpy as np
from PIL import Image, ImageOps

# 1. Letterbox Padding (Preserved)
def letterbox_image(image, target_size=1024):
    """
    Resizes preserving aspect ratio and pads to square canvas.
    """
    w, h = image.size
    scale = target_size / max(w, h)
    new_w, new_h = int(w * scale), int(h * scale)

    resized_img = image.resize((new_w, new_h), Image.BILINEAR)

    pad_left = (target_size - new_w) // 2
    pad_top = (target_size - new_h) // 2
    pad_right = target_size - new_w - pad_left
    pad_bottom = target_size - new_h - pad_top

    padded_img = ImageOps.expand(resized_img, border=(pad_left, pad_top, pad_right, pad_bottom), fill=(0, 0, 0))
    return padded_img, (pad_left, pad_top, new_w, new_h)

# 2. HSV Fallback Recovery (Preserved)
def recover_fullframe_leaf(cv_img_rgb):
    """
    HSV color thresholding to recover full-frame or extreme close-up leaves.
    """
    hsv = cv2.cvtColor(cv_img_rgb, cv2.COLOR_RGB2HSV)
    lower_green = np.array([15, 20, 20])
    upper_green = np.array([95, 255, 255])
    mask = cv2.inRange(hsv, lower_green, upper_green)

    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (15, 15))
    mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
    mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)

    contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    if contours:
        c = max(contours, key=cv2.contourArea)
        filled_mask = np.zeros_like(mask)
        cv2.drawContours(filled_mask, [c], -1, 255, thickness=cv2.FILLED)
        return filled_mask
    return mask

# 3. Fragment Cleaner: Keep Largest / Significant Components
def refine_mask_artifacts(binary_mask):
    """
    Removes small disconnected noise fragments and keeps the primary object.
    """
    mask_contours, _ = cv2.findContours(binary_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    if mask_contours:
        largest_contour = max(mask_contours, key=cv2.contourArea)
        clean_mask = np.zeros_like(binary_mask)
        cv2.drawContours(clean_mask, [largest_contour], -1, 255, thickness=cv2.FILLED)
        return clean_mask
    return binary_mask

# 4. Spatial Bounding Box Gate
def create_bbox_gate(boxes, img_shape):
    """
    Creates a binary spatial gate from YOLOv11 bounding boxes.
    Any pixel outside the detected object boxes will be strictly masked out.
    """
    h, w = img_shape[:2]
    gate = np.zeros((h, w), dtype=np.uint8)
    for box in boxes:
        x1, y1, x2, y2 = map(int, box.xyxy[0].tolist())
        x1, y1 = max(0, x1), max(0, y1)
        x2, y2 = min(w, x2), min(h, y2)
        gate[y1:y2, x1:x2] = 255
    return gate

Segmentation_Pipeline

InΒ [Β ]:
import os
import cv2
import torch
import numpy as np
from PIL import Image, ImageOps
from tqdm import tqdm

# Paths and configurations
raw_base_dir = "/content/unzipped_raw_images"
output_segmented_dir = "/content/segmented_dataset"
CONF_THRESHOLD = 0.40  # YOLOv11 BBox confidence

# 28 class mapping (preserved)
class_mapping = {
    "Bottle_Gourd_Flower_Blossom_Blight": 0,
    "Bottle_Gourd_Flower_Healthy": 1,
    "Bottle_Gourd_Fruit_Borer": 2,
    "Bottle_Gourd_Fruit_Healthy": 3,
    "Bottle_Gourd_Leaf_Healthy": 4,
    "Bottle_Gourd_Leaf_Wilt": 5,
    "Eggplant_Fruit_Borer": 6,
    "Eggplant_Fruit_Healthy": 7,
    "Eggplant_Leaf_Healthy": 8,
    "Eggplant_Leaf_Mosaic_Virus": 9,
    "Eggplant_Leaf_Wilt": 10,
    "Okra_Leaf_Healthy": 11,
    "Okra_Leaf_Yellow_Vein_Mosaic_Virus": 12,
    "Papaya_Fruit_Anthracnose": 13,
    "Papaya_Fruit_Healthy": 14,
    "Papaya_Leaf_Curl_Virus": 15,
    "Papaya_Leaf_Healthy": 16,
    "Papaya_Leaf_Mosaic_Virus": 17,
    "Papaya_Leaf_Spot": 18,
    "Pointed_Gourd_Fruit_Healthy": 19,
    "Pointed_Gourd_Fruit_Rot": 20,
    "Pointed_Gourd_Leaf_Healthy": 21,
    "Pointed_Gourd_Leaf_Potassium_Deficiency": 22,
    "Teasel_Gourd_Fruit_Healthy": 23,
    "Teasel_Gourd_Fruit_Rot": 24,
    "Teasel_Gourd_Leaf_Blight": 25,
    "Teasel_Gourd_Leaf_Healthy": 26,
    "Teasel_Gourd_Leaf_Spot": 27
}

os.makedirs(output_segmented_dir, exist_ok=True)

# Main processing loop
for folder_name, class_id in class_mapping.items():
    class_folder = os.path.join(raw_base_dir, folder_name)
    if not os.path.exists(class_folder):
        print(f"Folder not found: {folder_name}, skipping...")
        continue

    class_out_dir = os.path.join(output_segmented_dir, folder_name)
    os.makedirs(class_out_dir, exist_ok=True)

    is_leaf_class = "leaf" in folder_name.lower()
    images = [f for f in os.listdir(class_folder) if f.lower().endswith(('.png', '.jpg', '.jpeg'))]
    print(f"\nProcessing class {class_id}: {folder_name} (Leaf Mode: {is_leaf_class}, Total: {len(images)})...")

    for img_name in tqdm(images, desc=folder_name):
        img_path = os.path.join(class_folder, img_name)
        base_name = os.path.splitext(img_name)[0]

        # a. Load original image and correct EXIF orientation
        raw_img = Image.open(img_path)
        orig_img = ImageOps.exif_transpose(raw_img).convert("RGB")
        w, h = orig_img.size
        total_pixels = w * h

        # b. Margin padding for close-up leaves (20%)
        if is_leaf_class:
            pad_w = int(w * 0.20)
            pad_h = int(h * 0.20)
            work_img = ImageOps.expand(orig_img, border=(pad_w, pad_h), fill=(125, 125, 125))
        else:
            work_img = orig_img

        # c. Letterbox resize for BiRefNet (1024x1024)
        padded_input, (p_left, p_top, new_w, new_h) = letterbox_image(work_img, target_size=1024)

        # d. Tensor conversion and BiRefNet inference
        input_tensor = normalize_transform(padded_input).unsqueeze(0).to(device)
        if device == "cuda":
            input_tensor = input_tensor.half()

        with torch.no_grad():
            preds = birefnet_model(input_tensor)[-1].sigmoid().cpu()
            pred = preds.float().squeeze()
            pred_mask = transforms.ToPILImage()(pred)

        # e. Restore canvas dimensions
        unpadded_mask = pred_mask.crop((p_left, p_top, p_left + new_w, p_top + new_h))
        work_mask = unpadded_mask.resize(work_img.size, Image.BILINEAR)

        # f. Crop leaf margin padding back to original dimensions
        if is_leaf_class:
            final_mask = work_mask.crop((pad_w, pad_h, pad_w + w, pad_h + h))
        else:
            final_mask = work_mask

        mask_np = np.array(final_mask)
        _, binary_mask = cv2.threshold(mask_np, 25, 255, cv2.THRESH_BINARY)

        # g. Remove fragments and noise
        binary_mask = refine_mask_artifacts(binary_mask)

        # h. Fallback Foliage Recovery (HSV)
        white_pixels = cv2.countNonZero(binary_mask)
        if is_leaf_class and white_pixels < (total_pixels * 0.15):
            binary_mask = recover_fullframe_leaf(np.array(orig_img))

        # i. YOLOv11 BBox Inference & Spatial Gating (filtering out hands and irrelevant background)
        cv_raw_bgr = cv2.cvtColor(np.array(orig_img), cv2.COLOR_RGB2BGR)
        yolo_res = yolo_model.predict(source=cv_raw_bgr, conf=CONF_THRESHOLD, verbose=False)[0]

        if len(yolo_res.boxes) > 0:
            bbox_gate = create_bbox_gate(yolo_res.boxes, (h, w))
            # Intersection of BiRefNet mask and YOLO BBox gate
            final_refined_mask = cv2.bitwise_and(binary_mask, bbox_gate)
            # Use gated mask only if non-empty after intersection
            if cv2.countNonZero(final_refined_mask) > 0:
                binary_mask = final_refined_mask

        # j. Generate colored segmentation (original colors on white mask region, black elsewhere)
        segmented_bgr = cv2.bitwise_and(cv_raw_bgr, cv_raw_bgr, mask=binary_mask)

        # Save output
        save_path = os.path.join(class_out_dir, f"{base_name}.jpg")
        cv2.imwrite(save_path, segmented_bgr)

print("\nπŸŽ‰ All images successfully segmented, cleaned, and saved!")
Processing class 0: Bottle_Gourd_Flower_Blossom_Blight (Leaf Mode: False, Total: 63)...
Bottle_Gourd_Flower_Blossom_Blight: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 63/63 [00:46<00:00,  1.36it/s]
Processing class 1: Bottle_Gourd_Flower_Healthy (Leaf Mode: False, Total: 75)...
Bottle_Gourd_Flower_Healthy: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 75/75 [00:48<00:00,  1.56it/s]
Processing class 2: Bottle_Gourd_Fruit_Borer (Leaf Mode: False, Total: 87)...
Bottle_Gourd_Fruit_Borer: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 87/87 [00:53<00:00,  1.63it/s]
Processing class 3: Bottle_Gourd_Fruit_Healthy (Leaf Mode: False, Total: 88)...
Bottle_Gourd_Fruit_Healthy: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 88/88 [00:52<00:00,  1.66it/s]
Processing class 4: Bottle_Gourd_Leaf_Healthy (Leaf Mode: True, Total: 99)...
Bottle_Gourd_Leaf_Healthy: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 99/99 [01:52<00:00,  1.14s/it]
Processing class 5: Bottle_Gourd_Leaf_Wilt (Leaf Mode: True, Total: 85)...
Bottle_Gourd_Leaf_Wilt: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 85/85 [00:54<00:00,  1.55it/s]
Processing class 6: Eggplant_Fruit_Borer (Leaf Mode: False, Total: 62)...
Eggplant_Fruit_Borer: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 62/62 [00:40<00:00,  1.54it/s]
Processing class 7: Eggplant_Fruit_Healthy (Leaf Mode: False, Total: 104)...
Eggplant_Fruit_Healthy: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 104/104 [01:29<00:00,  1.16it/s]
Processing class 8: Eggplant_Leaf_Healthy (Leaf Mode: True, Total: 222)...
Eggplant_Leaf_Healthy: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 222/222 [08:04<00:00,  2.18s/it]
Processing class 9: Eggplant_Leaf_Mosaic_Virus (Leaf Mode: True, Total: 106)...
Eggplant_Leaf_Mosaic_Virus: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 106/106 [01:45<00:00,  1.01it/s]
Processing class 10: Eggplant_Leaf_Wilt (Leaf Mode: True, Total: 72)...
Eggplant_Leaf_Wilt: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 72/72 [00:41<00:00,  1.75it/s]
Processing class 11: Okra_Leaf_Healthy (Leaf Mode: True, Total: 81)...
Okra_Leaf_Healthy: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 81/81 [01:23<00:00,  1.04s/it]
Processing class 12: Okra_Leaf_Yellow_Vein_Mosaic_Virus (Leaf Mode: True, Total: 89)...
Okra_Leaf_Yellow_Vein_Mosaic_Virus: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 89/89 [02:14<00:00,  1.51s/it]
Processing class 13: Papaya_Fruit_Anthracnose (Leaf Mode: False, Total: 89)...
Papaya_Fruit_Anthracnose: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 89/89 [01:25<00:00,  1.04it/s]
Processing class 14: Papaya_Fruit_Healthy (Leaf Mode: False, Total: 87)...
Papaya_Fruit_Healthy: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 87/87 [01:45<00:00,  1.22s/it]
Processing class 15: Papaya_Leaf_Curl_Virus (Leaf Mode: True, Total: 90)...
Papaya_Leaf_Curl_Virus: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 90/90 [01:49<00:00,  1.21s/it]
Processing class 16: Papaya_Leaf_Healthy (Leaf Mode: True, Total: 120)...
Papaya_Leaf_Healthy: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 120/120 [01:27<00:00,  1.37it/s]
Processing class 17: Papaya_Leaf_Mosaic_Virus (Leaf Mode: True, Total: 65)...
Papaya_Leaf_Mosaic_Virus: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 65/65 [01:03<00:00,  1.02it/s]
Processing class 18: Papaya_Leaf_Spot (Leaf Mode: True, Total: 106)...
Papaya_Leaf_Spot: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 106/106 [01:55<00:00,  1.09s/it]
Processing class 19: Pointed_Gourd_Fruit_Healthy (Leaf Mode: False, Total: 78)...
Pointed_Gourd_Fruit_Healthy: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 78/78 [00:43<00:00,  1.77it/s]
Processing class 20: Pointed_Gourd_Fruit_Rot (Leaf Mode: False, Total: 52)...
Pointed_Gourd_Fruit_Rot: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 52/52 [00:28<00:00,  1.83it/s]
Processing class 21: Pointed_Gourd_Leaf_Healthy (Leaf Mode: True, Total: 115)...
Pointed_Gourd_Leaf_Healthy: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 115/115 [01:45<00:00,  1.09it/s]
Processing class 22: Pointed_Gourd_Leaf_Potassium_Deficiency (Leaf Mode: True, Total: 83)...
Pointed_Gourd_Leaf_Potassium_Deficiency: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 83/83 [01:46<00:00,  1.29s/it]
Processing class 23: Teasel_Gourd_Fruit_Healthy (Leaf Mode: False, Total: 134)...
Teasel_Gourd_Fruit_Healthy: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 134/134 [01:48<00:00,  1.23it/s]
Processing class 24: Teasel_Gourd_Fruit_Rot (Leaf Mode: False, Total: 121)...
Teasel_Gourd_Fruit_Rot: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 121/121 [01:15<00:00,  1.59it/s]
Processing class 25: Teasel_Gourd_Leaf_Blight (Leaf Mode: True, Total: 61)...
Teasel_Gourd_Leaf_Blight: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 61/61 [00:39<00:00,  1.55it/s]
Processing class 26: Teasel_Gourd_Leaf_Healthy (Leaf Mode: True, Total: 151)...
Teasel_Gourd_Leaf_Healthy: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 151/151 [02:11<00:00,  1.15it/s]
Processing class 27: Teasel_Gourd_Leaf_Spot (Leaf Mode: True, Total: 62)...
Teasel_Gourd_Leaf_Spot: 100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 62/62 [00:55<00:00,  1.13it/s]
πŸŽ‰ All images successfully segmented, cleaned, and saved!

Save Segmented Dataset to Drive

InΒ [Β ]:
import os

# Destination for the zip file (Drive root folder)
drive_zip_path = "/content/drive/MyDrive/Segmented_Dataset_Cleaned_Ratul.zip"
source_dir = "/content/segmented_dataset"

print("⏳ Zipping segmented dataset directly to Google Drive, please wait...")

# Linux fast zip command (-q suppresses verbose output)
!zip -r -q "{drive_zip_path}" "{source_dir}"

if os.path.exists(drive_zip_path):
    size_mb = os.path.getsize(drive_zip_path) / (1024 * 1024)
    print(f"πŸŽ‰ Successfully created and saved to Drive!\nπŸ“ File: {drive_zip_path}\nπŸ“¦ Size: {size_mb:.2f} MB")
else:
    print("❌ Failed to save zip file to Drive. Please check storage/path.")
⏳ Zipping segmented dataset directly to Google Drive, please wait...
πŸŽ‰ Successfully created and saved to Drive!
πŸ“ File: /content/drive/MyDrive/Segmented_Dataset_Cleaned_Ratul.zip
πŸ“¦ Size: 4401.38 MB
InΒ [Β ]:
import os

# Target folder path on Drive
drive_unzip_dest = "/content/drive/MyDrive/Segmented_Dataset_Cleaned_Ratul"
source_dir = "/content/segmented_dataset"

os.makedirs(drive_unzip_dest, exist_ok=True)

print("⏳ Copying unzipped segmented dataset to Google Drive, please wait...")

# Fast recursive copy
!cp -r "{source_dir}"/* "{drive_unzip_dest}"/

print(f"πŸŽ‰ Unzipped dataset successfully copied to Drive!\nπŸ“ Path: {drive_unzip_dest}")
⏳ Copying unzipped segmented dataset to Google Drive, please wait...
πŸŽ‰ Unzipped dataset successfully copied to Drive!
πŸ“ Path: /content/drive/MyDrive/Segmented_Dataset_Cleaned_Ratul