Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: IndexError when running PaDiM Example #2549

Open
1 task done
JLZ22 opened this issue Feb 4, 2025 · 1 comment
Open
1 task done

[Bug]: IndexError when running PaDiM Example #2549

JLZ22 opened this issue Feb 4, 2025 · 1 comment

Comments

@JLZ22
Copy link

JLZ22 commented Feb 4, 2025

Describe the bug

I am copy pasting the code from examples/api/03_models/padim.py and trying to run it. When fitting the model, there is an IndexError somewhere in the implementation of engine.fit().

Dataset

MVTec

Model

PADiM

Steps to reproduce the behavior

Steps to reproduce the behavior.

  1. pip install anomalib
  2. anomalib install
  3. run the following code
# Copyright (C) 2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

"""Example showing how to use the Padim model.

PaDiM (Patch Distribution Modeling) is a model that uses pretrained CNN features
and multivariate Gaussian modeling for anomaly detection.
"""

from anomalib.data import MVTec
from anomalib.engine import Engine
from anomalib.models import Padim

if __name__ == '__main__':
    # 1. Basic Usage
    # Initialize with default settings
    model = Padim()

    # 2. Custom Configuration
    # Configure model parameters
    model = Padim(
        backbone="resnet18",  # Feature extraction backbone
        layers=["layer1", "layer2", "layer3"],  # Layers to extract features from
        pre_trained=True,  # Use pretrained weights
        n_features=100,  # Number of features to retain
    )

    # 3. Training Pipeline
    # Set up the complete training pipeline
    datamodule = MVTec(
        root="./datasets/MVTec",
        category="bottle",
        train_batch_size=32,
        eval_batch_size=32,  # Important for feature extraction
    )

    # Initialize training engine with specific settings
    engine = Engine(
        max_epochs=1,  # PaDiM needs only one epoch
        accelerator="auto",  # Automatically detect GPU/CPU
        devices=1,  # Number of devices to use
    )

    # Train the model
    engine.fit(
        model=model,
        datamodule=datamodule,
    )

OS information

OS information:

  • OS: macOS 14.6.1
  • Python version: 3.12.7
  • Anomalib version: 2.0.0b2
  • PyTorch version: 2.6.0

Expected behavior

I expect it to fit the model and exit. There is no prediction step here, so I'm not expecting much other than some terminal messages providing some details about fitting.

Screenshots

No response

Pip/GitHub

pip

What version/branch did you use?

24.2

Configuration YAML

n/a

Logs

$ python3 padim.py                                                                                                                                                    
-----------------------------------------------------------------------------------------------------------
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
INFO:anomalib.models.components.base.anomalib_module:Initializing Padim model.
INFO:timm.models._builder:Loading pretrained weights from Hugging Face hub (timm/resnet18.a1_in1k)
INFO:timm.models._hub:[timm/resnet18.a1_in1k] Safe alternative available for 'pytorch_model.bin' (as 'model.safetensors'). Loading weights using safetensors.
INFO:timm.models._builder:Missing keys (fc.weight, fc.bias) discovered while loading pretrained weights. This is expected if model is being adapted.
INFO:anomalib.models.components.base.anomalib_module:Initializing Padim model.
INFO:timm.models._builder:Loading pretrained weights from Hugging Face hub (timm/resnet18.a1_in1k)
INFO:timm.models._hub:[timm/resnet18.a1_in1k] Safe alternative available for 'pytorch_model.bin' (as 'model.safetensors'). Loading weights using safetensors.
INFO:timm.models._builder:Missing keys (fc.weight, fc.bias) discovered while loading pretrained weights. This is expected if model is being adapted.
GPU available: True (mps), used: True
TPU available: False, using: 0 TPU cores
HPU available: False, using: 0 HPUs
`Trainer(val_check_interval=1.0)` was configured so validation will run at the end of the training epoch..
INFO:anomalib.data.datamodules.image.mvtec:Found the dataset.
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/lightning/pytorch/core/optimizer.py:183: `LightningModule.configure_optimizers` returned `None`, this fit will run with no optimizer

  | Name           | Type                  | Params | Mode 
-----------------------------------------------------------------
0 | pre_processor  | PreProcessor          | 0      | train
1 | post_processor | OneClassPostProcessor | 0      | train
2 | evaluator      | Evaluator             | 0      | train
3 | model          | PadimModel            | 2.8 M  | train
-----------------------------------------------------------------
2.8 M     Trainable params
0         Non-trainable params
2.8 M     Total params
11.131    Total estimated model params size (MB)
19        Modules in train mode
69        Modules in eval mode
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/lightning/pytorch/trainer/connectors/data_connector.py:420: Consider setting `persistent_workers=True` in 'train_dataloader' to speed up the dataloader worker initialization.
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/lightning/pytorch/trainer/connectors/data_connector.py:420: Consider setting `persistent_workers=True` in 'val_dataloader' to speed up the dataloader worker initialization.
Epoch 0:   0%|                                                                                                                                                                                                                       | 0/7 [00:00<?, ?it/s]/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
Epoch 0: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [00:04<00:00,  1.54it/sINFO:anomalib.models.image.padim.lightning_model:Aggregating the embedding extracted from the training set.                                                                                                                           | 0/? [00:00<?, ?it/s]
INFO:anomalib.models.image.padim.lightning_model:Fitting a Gaussian to the embedding collected from the training set.
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
                                                                                                                                                                                                                                                          Traceback (most recent call last):████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00,  5.53it/s]
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/src/padim.py", line 45, in <module>
    engine.fit(
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/anomalib/engine/engine.py", line 416, in fit
    self.trainer.fit(model, train_dataloaders, val_dataloaders, datamodule, ckpt_path)
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/lightning/pytorch/trainer/trainer.py", line 539, in fit
    call._call_and_handle_interrupt(
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/lightning/pytorch/trainer/call.py", line 47, in _call_and_handle_interrupt
    return trainer_fn(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/lightning/pytorch/trainer/trainer.py", line 575, in _fit_impl
    self._run(model, ckpt_path=ckpt_path)
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/lightning/pytorch/trainer/trainer.py", line 982, in _run
    results = self._run_stage()
              ^^^^^^^^^^^^^^^^^
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/lightning/pytorch/trainer/trainer.py", line 1026, in _run_stage
    self.fit_loop.run()
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/lightning/pytorch/loops/fit_loop.py", line 216, in run
    self.advance()
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/lightning/pytorch/loops/fit_loop.py", line 455, in advance
    self.epoch_loop.run(self._data_fetcher)
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/lightning/pytorch/loops/training_epoch_loop.py", line 151, in run
    self.on_advance_end(data_fetcher)
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/lightning/pytorch/loops/training_epoch_loop.py", line 370, in on_advance_end
    self.val_loop.run()
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/lightning/pytorch/loops/utilities.py", line 179, in _decorator
    return loop_run(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/lightning/pytorch/loops/evaluation_loop.py", line 151, in run
    return self.on_run_end()
           ^^^^^^^^^^^^^^^^^
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/lightning/pytorch/loops/evaluation_loop.py", line 291, in on_run_end
    self._on_evaluation_epoch_end()
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/lightning/pytorch/loops/evaluation_loop.py", line 370, in _on_evaluation_epoch_end
    call._call_callback_hooks(trainer, hook_name)
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/lightning/pytorch/trainer/call.py", line 222, in _call_callback_hooks
    fn(trainer, trainer.lightning_module, *args, **kwargs)
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/anomalib/post_processing/one_class.py", line 108, in on_validation_epoch_end
    self._pixel_threshold.compute()
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/torchmetrics/metric.py", line 700, in wrapped_func
    value = _squeeze_if_scalar(compute(*args, **kwargs))
                               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/johnzeng/Code/DEC/Two-Stage-Doubt-Confirmation/venv/lib/python3.12/site-packages/anomalib/metrics/threshold/f1_adaptive_threshold.py", line 113, in compute
    self.value = thresholds[torch.argmax(f1_score)]
                 ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
IndexError: index 4938361 is out of bounds for dimension 0 with size 4938361
$

Code of Conduct

  • I agree to follow this project's Code of Conduct
@alexriedel1
Copy link
Contributor

Hi!
I cannot reproduce the error with the latest version of anomalib. Please try to use the development install and check if your problem still persists: https://github.com/openvinotoolkit/anomalib?tab=readme-ov-file#-development-install

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants