Skip to main content

Segmentation Robustness Framework - a powerful toolkit for evaluating the robustness of semantic segmentation models against adversarial attacks.

Project description

Python PyTorch PyPI version Docs Ruff License: MIT

Segmentation Robustness Framework Documentation

Welcome to the comprehensive documentation for the Segmentation Robustness Framework - a powerful toolkit for evaluating the robustness of semantic segmentation models against adversarial attacks.

🚀 Quick Start

Get started in minutes with our comprehensive examples:

from segmentation_robustness_framework.engine.pipeline import SegmentationRobustnessPipeline
from segmentation_robustness_framework.utils.metrics import MetricsCollection
from segmentation_robustness_framework.attacks import FGSM
from segmentation_robustness_framework.datasets import VOCSegmentation
from segmentation_robustness_framework.loaders.models.universal_loader import UniversalModelLoader
from segmentation_robustness_framework.utils import image_preprocessing
import torch

# Load model with universal loader
loader = UniversalModelLoader()
model = loader.load_model(
    model_type="torchvision",
    model_config={"name": "deeplabv3_resnet50", "num_classes": 21}
)

# Set device and move model to it (IMPORTANT: Do this before creating attacks!)
device = "cuda" if torch.cuda.is_available() else "cpu"
model = model.to(device)

# Setup dataset with preprocessing
preprocess, target_preprocess = image_preprocessing.get_preprocessing_fn(
    [512, 512], dataset_name="voc"
)
dataset = VOCSegmentation(
    split="val", 
    root="path/to/existing/VOCdevkit/VOC2012/",
    transform=preprocess,
    target_transform=target_preprocess
)

# Setup attack and metrics (attacks will use the same device as the model)
attack = FGSM(model, eps=2/255)

# Setup metrics
metrics_collection = MetricsCollection(num_classes=21)
metrics = [metrics_collection.mean_iou, metrics_collection.pixel_accuracy]

# Create and run pipeline
pipeline = SegmentationRobustnessPipeline(
    model=model,
    dataset=dataset,
    attacks=[attack],
    metrics=metrics,
    batch_size=4,
    device=device
)

results = pipeline.run(save=True, show=True)
pipeline.print_summary()

📚 Documentation Structure

🎯 Getting Started

📖 User Guides

🎓 Learning Path

  1. Start Here: Installation GuideQuick Start
  2. Basic Usage: User Guide
  3. Custom Components: Custom Components

🎯 Key Features

🔬 Comprehensive Evaluation

  • Multiple Attacks: FGSM, PGD, RFGSM, TPGD, and custom attacks
  • Rich Metrics: IoU, pixel accuracy, precision, recall, dice score
  • Flexible Output: JSON, CSV
  • Batch Processing: Efficient evaluation of large datasets

🏗️ Universal Model Support

  • Torchvision Models: DeepLab, FCN, LRASPP architectures
  • SMP Models: UNet, LinkNet, PSPNet, and more
  • HuggingFace Models: Transformers-based segmentation models
  • Custom Models: Easy integration with your own models

📊 Built-in Datasets

  • VOC: Pascal VOC 2012 (21 classes)
  • ADE20K: Scene parsing dataset (150 classes)
  • Cityscapes: Urban scene understanding (35 classes)
  • Stanford Background: Natural scene dataset (9 classes)

⚡ Easy Integration

  • Registry System: Automatic discovery of custom components
  • Adapter Pattern: Standardized model interfaces
  • Preprocessing Pipeline: Automatic data normalization and conversion
  • Error Handling: Comprehensive error messages and debugging

🚀 Quick Examples

Basic Evaluation

# Load components
from segmentation_robustness_framework import *

# Setup pipeline
pipeline = SegmentationRobustnessPipeline(
    model=load_model(),
    dataset=load_dataset(),
    attacks=[FGSM(model, eps=2/255)],
    metrics=[mean_iou, pixel_accuracy]
)

# Run evaluation
results = pipeline.run()

Custom Dataset

@register_dataset("my_dataset")
class MyDataset(Dataset):
    def __init__(self, root, transform=None):
        self.num_classes = 5
        # ... implementation
    
    def __getitem__(self, idx):
        return image, mask

Custom Attack

@register_attack("my_attack")
class MyAttack(AdversarialAttack):
    def apply(self, images, labels):
        # Implement attack logic
        return adversarial_images

Custom Model Example

# Register and use a custom adapter for your model
from segmentation_robustness_framework.adapters import CustomAdapter
from segmentation_robustness_framework.adapters.registry import register_adapter

@register_adapter("my_custom_adapter")
class MyCustomAdapter(CustomAdapter):
    pass  # Optionally override methods if your model's output format is different

# Use your custom adapter with the universal loader
loader = UniversalModelLoader()
model = loader.load_model(
    model_type="my_custom_adapter",
    model_config={
        "model_class": "path.to.MyCustomModel",
        "model_args": [21],
        "model_kwargs": {"pretrained": True}
    }
)

# Set device and create attacks
device = "cuda" if torch.cuda.is_available() else "cpu"
model = model.to(device)
attacks = [FGSM(model, eps=2/255)]

pipeline = SegmentationRobustnessPipeline(
    model=model, dataset=dataset, attacks=attacks, metrics=metrics, device=device
)
results = pipeline.run()

🛠️ Installation

# Install from PyPI
pip install segmentation-robustness-framework

# Or install from source
git clone https://github.com/your-repo/segmentation-robustness-framework
cd segmentation-robustness-framework
pip install -e .

📖 Framework Architecture

The framework follows a modular architecture with clear separation of concerns:

Framework Architecture

🤝 Contributing

We welcome contributions! Please see our contributing guidelines for details on:

  • Code style and standards
  • Testing requirements
  • Documentation guidelines
  • Pull request process

📞 Support

  • Documentation: Browse the guides above
  • Issues: Report bugs and request features on GitHub
  • Discussions: Join our community discussions

📄 License

This project is licensed under the MIT License - see the LICENSE file in the project root for details.


Ready to evaluate your segmentation models? 🚀

Start with our Quick Start Guide and have your first evaluation running in minutes!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

segmentation_robustness_framework-0.2.1.tar.gz (43.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file segmentation_robustness_framework-0.2.1.tar.gz.

File metadata

File hashes

Hashes for segmentation_robustness_framework-0.2.1.tar.gz
Algorithm Hash digest
SHA256 2a839b869340527bbde14e21858995a8746f1299188c32ba52c034259acb35b5
MD5 eb771ead577faf3c249d8c9ad4d31849
BLAKE2b-256 ad4c7b83c370d3815a0dc9e78d59d89291db3af120281dcfa8b16f92c20fa633

See more details on using hashes here.

File details

Details for the file segmentation_robustness_framework-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for segmentation_robustness_framework-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 14ae28e37af258636fefd70aec43d3e16b507c4c2d548acf9adf8cb8227ac7d6
MD5 c2437c4cb1b6969731dcab9d8a14ae5f
BLAKE2b-256 5c61b56d7c2b48d59ac6d53ca3fe5a239f7aa4a79909c9d43072c84cc3126a7a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page