Kitchen-sink example

The example below shows a complete configuration with all top-level modules populated.

If you want to learn how to write such a config, see the General configuration guide guide. The Python API page covers the equivalent programmatic surface.

hardware: "gpu"
experiment_name: "My Experiment"

model:
  source: "./models/my-model.onnx"

data:
  name: "my-dataset"
  description: "Internal validation set"
  source: "./data/images"
  forward_batch_size: 32
  labels:
    source: "./data/labels.csv"
    id_column: "image"
    column: "label"
    encoding: "index"

transparency:
  captum_ig:
    _target_: "CaptumExplainer"
    algorithm: "IntegratedGradients"
    constructor: {}
    call:
      target: 0
    raitap:
      baseline:
        source: "./data/baselines"
        n_samples: 8
    visualisers:
      - _target_: "CaptumImageVisualiser"
        constructor:
          method: "blended_heat_map"
          sign: "all"
          show_colorbar: true
          title: "Integrated gradients"
          include_original_image: true
        call:
          max_samples: 4
          show_sample_names: true
  shap_gradient:
    _target_: "ShapExplainer"
    algorithm: "GradientExplainer"
    constructor:
      local_smoothing: 0.0
    call:
      target: 0
      nsamples: 10
    raitap:
      baseline:
        source: "./data/background"
        n_samples: 32
      batch_size: 1
      progress_desc: "SHAP batches"
    visualisers:
      - _target_: "ShapImageVisualiser"
        constructor:
          max_samples: 2

robustness:
  pgd:
    _target_: "TorchattacksAssessor"
    algorithm: "PGD"
    constructor:
      eps: 0.03
      alpha: 0.0078
      steps: 10
    visualisers:
      - _target_: "ImagePairVisualiser"
        constructor:
          max_samples: 4
  linf_pgd:
    _target_: "FoolboxAssessor"
    algorithm: "LinfPGD"
    constructor:
      rel_stepsize: 0.025
      steps: 40
    call:
      eps: 0.03
    visualisers:
      - _target_: "PerturbationHeatmapVisualiser"

metrics:
  _target_: "MulticlassClassificationMetrics"
  num_classes: 7
  average: "macro"
  ignore_index: null

tracking:
  _target_: "MLFlowTracker"
  output_forwarding_url: "http://127.0.0.1:5001"
  log_model: false
  open_when_done: true

reporting:
  _target_: "HTMLReporter"
  filename: "report"
  multirun_report: true
  show_original_per_explainer: false
  show_redundant_robustness_panels: false
from raitap import AppConfig, Hardware
from raitap.data import DataConfig, LabelEncoding, LabelsConfig
from raitap.metrics import multiclass_classification
from raitap.models import ModelConfig
from raitap.reporting import html as html_report
from raitap.robustness import foolbox, image_pair, perturbation_heatmap, torchattacks
from raitap.tracking import mlflow
from raitap.transparency import captum, captum_image, shap, shap_image

config = AppConfig(
    hardware=Hardware.gpu,
    experiment_name="My Experiment",
    model=ModelConfig(source="./models/my-model.onnx"),
    data=DataConfig(
        name="my-dataset",
        description="Internal validation set",
        source="./data/images",
        forward_batch_size=32,
        labels=LabelsConfig(
            source="./data/labels.csv",
            id_column="image",
            column="label",
            encoding=LabelEncoding.index,
        ),
    ),
    transparency={
        "captum_ig": captum(
            algorithm="IntegratedGradients",
            call={"target": 0},
            raitap={"baseline": {"source": "./data/baselines", "n_samples": 8}},
            visualisers=[
                captum_image(
                    method="blended_heat_map",
                    sign="all",
                    show_colorbar=True,
                    title="Integrated gradients",
                    include_original_image=True,
                    call={"max_samples": 4, "show_sample_names": True},
                ),
            ],
        ),
        "shap_gradient": shap(
            algorithm="GradientExplainer",
            constructor={"local_smoothing": 0.0},
            call={"target": 0, "nsamples": 10},
            raitap={
                "baseline": {"source": "./data/background", "n_samples": 32},
                "batch_size": 1,
                "progress_desc": "SHAP batches",
            },
            visualisers=[shap_image(max_samples=2)],
        ),
    },
    robustness={
        "pgd": torchattacks(
            algorithm="PGD",
            constructor={"eps": 0.03, "alpha": 0.0078, "steps": 10},
            visualisers=[image_pair(max_samples=4)],
        ),
        "linf_pgd": foolbox(
            algorithm="LinfPGD",
            constructor={"rel_stepsize": 0.025, "steps": 40},
            call={"eps": 0.03},
            visualisers=[perturbation_heatmap()],
        ),
    },
    metrics=multiclass_classification(
        num_classes=7,
    ),
    tracking=mlflow(
        output_forwarding_url="http://127.0.0.1:5001",
        log_model=False,
        open_when_done=True,
    ),
    reporting=html_report(
        filename="report",
        multirun_report=True,
        show_original_per_explainer=False,
        show_redundant_robustness_panels=False,
    ),
)

Notes

The kitchen-sink config references user-supplied artefacts (./models/my-model.onnx, ./data/images, ./data/labels.csv, ./data/baselines, ./data/background) and a local MLflow server at 127.0.0.1:5001.

Expected output

outputs/<date>/<time>/
├── metrics/{metrics.json, artifacts.json, metadata.json, metrics_overview.png}
├── transparency/
│   ├── captum_ig/{attributions.pt, CaptumImageVisualiser_0.png, metadata.json}
│   └── shap_gradient/{attributions.pt, ShapImageVisualiser_0.png, metadata.json}
├── robustness/
│   ├── pgd/{robustness_data.pt, ImagePairVisualiser_0.png, metadata.json}
│   └── linf_pgd/{robustness_data.pt, PerturbationHeatmapVisualiser_0.png, metadata.json}
├── tracking/{run_id.txt, mlflow.log}
└── reports/{report.html, report.zip, _assets/…}

MLflow artefacts land on the tracking server itself (http://127.0.0.1:5001). The tracking/ directory only carries the local hand-off metadata.