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

Add support for Detection task type #732

Merged
merged 29 commits into from
Dec 6, 2022

Conversation

djdameln
Copy link
Contributor

@djdameln djdameln commented Nov 24, 2022

Description

This PR adds the detection task type. This is mainly to support region-based models that produce bounding box predictions instead of / in addition to anomaly maps.

Changes

Major

  • Adds conversion utilities between masks and bounding boxes. This allows automatic generation of ground truth boxes for detection models. These utilities are also used to generate bounding box predictions when the model is of the segmentation type.
  • The detection task uses the thresholding and evaluation mechanisms from the segmentation task under the hood. This is achieved by converting the bounding boxes to segmentation masks or anomaly maps before evaluating the metrics.
  • Visualization functionality was added. This means that the predictions of any model capable of localization (segmentation or detection) can be visualized as detection predictions. For example, the following image was generated by passing detection as task type for a padim model training on MVTec bottle dataset:

002

Minor

  • Using enum instead of string to configure task type.
  • A new collate_fn function had to be implemented to allow collating the ground truth bounding boxes across batches.
  • connected component functions were moved to a separate module because these are used when converting boxes.

Known issues

  • No test cases
  • No inference support

Changes

  • Bug fix (non-breaking change which fixes an issue)
  • Refactor (non-breaking change which refactors the code base)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

Checklist

  • My code follows the pre-commit style and check guidelines of this project.
  • I have performed a self-review of my code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing tests pass locally with my changes

@github-actions github-actions bot added Callbacks Data Metrics Metric Component. Post-Processing The components that are related to post-processing Inference Tests labels Nov 24, 2022
Copy link
Collaborator

@ashwinvaidya17 ashwinvaidya17 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the efforts! I have a few minor comments

anomalib/utils/callbacks/visualizer/visualizer_base.py Outdated Show resolved Hide resolved
pl_module.normalization_metrics(outputs["pred_scores"])
else:
raise ValueError("No values found for normalization, provide anomaly maps, bbox scores, or image scores")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should it be image score or pred score? It means the same thing but might confuse the users.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree that image_score would be more suitable, but I feel changing this is outside of the scope of this PR.

anomalib/data/base/video.py Outdated Show resolved Hide resolved
Copy link
Contributor

@samet-akcay samet-akcay left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Took me some time to review :) Appreciate your time to finish the entire implementation :)

@@ -14,6 +14,7 @@
from .folder import Folder
from .inference import InferenceDataset
from .mvtec import MVTec
from .task_type import TaskType
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would this be used by models and other components as well? If so, would it be an idea to move it to a place that would be accessible by other components?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I'm not super happy with the location of TaskType but couldn't think of a better place. Maybe somewhere in anomalib/config would work? @ashwinvaidya17 any ideas?

anomalib/data/base/datamodule.py Outdated Show resolved Hide resolved
anomalib/data/base/datamodule.py Outdated Show resolved Hide resolved
anomalib/data/base/datamodule.py Outdated Show resolved Hide resolved
anomalib/data/base/video.py Outdated Show resolved Hide resolved
anomalib/data/utils/boxes.py Show resolved Hide resolved
anomalib/deploy/inferencers/openvino_inferencer.py Outdated Show resolved Hide resolved
anomalib/utils/cv/connected_components.py Show resolved Hide resolved
@jpcbertoldo
Copy link
Contributor

Using enum instead of string to configure task type.

I found a few str <--> enum conversion issues at some point when trying to use the cli with config files (somehow the string from the .yaml was not properly converted?).

So it made me wonder: are there tests covering this? (i.e. the different values of the enum work properly when being passed from the config file)

@djdameln djdameln mentioned this pull request Nov 28, 2022
8 tasks
@djdameln
Copy link
Contributor Author

So it made me wonder: are there tests covering this? (i.e. the different values of the enum work properly when being passed from the config file)

I don't think the tests cover this explicitly at the moment. Which enum was causing problems at your end?

@github-actions github-actions bot added the Tools label Nov 30, 2022
@jpcbertoldo
Copy link
Contributor

So it made me wonder: are there tests covering this? (i.e. the different values of the enum work properly when being passed from the config file)

I don't think the tests cover this explicitly at the moment. Which enum was causing problems at your end?

Honestly I don't remember because it was blocking me to use the new cli so I dropped the ball.
Anyway, just something to keep in mind : )

@djdameln
Copy link
Contributor Author

djdameln commented Dec 1, 2022

@ashwinvaidya17 @samet-akcay I've updated the PR based on your comments, and also added test cases and inference support. So it's ready for the next round of review.

Copy link
Collaborator

@ashwinvaidya17 ashwinvaidya17 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the efforts!

raise ValueError(f"Unknown task type: {mode}. Please choose one of ['classification', 'segmentation']")
if task not in [TaskType.CLASSIFICATION, TaskType.DETECTION, TaskType.SEGMENTATION]:
raise ValueError(
f"Unknown task type: {mode}. Please choose one of ['classification', 'detection', 'segmentation']"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not really necessary here but I wonder if f"Unknown task type: {mode}. Please choose one of {TaskType.__members__.values()} will work here. But will not make it a very descriptive docstring for the programmers.

Copy link
Contributor

@samet-akcay samet-akcay left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks!

@djdameln djdameln merged commit 045d77f into feature/datamodules Dec 6, 2022
@djdameln djdameln deleted the da/detection-task-type branch December 6, 2022 13:00
djdameln added a commit that referenced this pull request Jan 6, 2023
* New datamodules design (#572)

* move sample generation to datamodule instead of dataset

* move sample generation from init to setup

* remove inference stage and add base classes

* replace dataset classes with AnomalibDataset

* move setup to base class, create samples as class method

* update docstrings

* refactor btech to new format

* allow training with no anomalous data

* remove MVTec name from comment

* raise NotImplementedError in base class

* allow both png and bmp images for btech

* use label_index to check if dataset contains anomalous images

* refactor getitem in dataset class

* use iloc for indexing

* move dataloader getters to base class

* refactor to add validate stage in setup

* implement alternative datamodules solution

* small improvements

* improve design

* remove unused constructor arguments

* adapt btech to new design

* add prepare_data method for mvtec

* implement more generic random splitting function

* update docstrings for folder module

* ensure type consistency when performing operations on dataset

* change imports

* change variable names

* replace pass with NotImplementedError

* allow training on folder without test images

* use relative path for normal_test_dir

* fix dataset tests

* update validation set parameter in configs

* change default argument

* use setter for samples

* hint options for val_split_mode

* update assert message and docstring

* revert name change dataset vs datamodule

* typing and docstrings

* remove samples argument from dataset constructor

* val/test -> eval

* remove Split.Full from enum

* sort samples when setting

* update warn message

* formatting

* use setter when creating samples in dataset classes

* add tests for new dataset class

* add test case for label aware random split

* update parameter name in inferencers

* move _setup implementation to base class

* address codacy issues

* fix pylint issues

* codacy

* update example dataset config in docs

* fix test

* move base classes to separate files (avoid circular import)

* add base classes

* update docstring

* fix imports

* validation_split_mode -> val_split_mode

* update docs

* Update anomalib/data/base/dataset.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* get length from self.samples

* assert unique indices

* check is_setup for individual datasets

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* remove assert in __getitem_\

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* Update anomalib/data/btech.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* clearer assert message

* clarify list inversion in comment

* comments and typing

* validate contents of samples dataframe before setting

* add file paths check

* add seed to random_split function

* fix expected columns

* fix typo

* add seed parameter to datamodules

* set global seed in test entrypoint

* add NONE option to valsplitmode

* clarify setup behaviour in docstring

* fix typo

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* Video Datamodules (#676)

* move sample generation to datamodule instead of dataset

* move sample generation from init to setup

* remove inference stage and add base classes

* replace dataset classes with AnomalibDataset

* move setup to base class, create samples as class method

* update docstrings

* refactor btech to new format

* allow training with no anomalous data

* remove MVTec name from comment

* raise NotImplementedError in base class

* allow both png and bmp images for btech

* use label_index to check if dataset contains anomalous images

* refactor getitem in dataset class

* use iloc for indexing

* move dataloader getters to base class

* refactor to add validate stage in setup

* implement alternative datamodules solution

* small improvements

* improve design

* remove unused constructor arguments

* adapt btech to new design

* add prepare_data method for mvtec

* implement more generic random splitting function

* update docstrings for folder module

* ensure type consistency when performing operations on dataset

* change imports

* change variable names

* replace pass with NotImplementedError

* allow training on folder without test images

* use relative path for normal_test_dir

* fix dataset tests

* update validation set parameter in configs

* change default argument

* use setter for samples

* hint options for val_split_mode

* update assert message and docstring

* revert name change dataset vs datamodule

* typing and docstrings

* remove samples argument from dataset constructor

* val/test -> eval

* remove Split.Full from enum

* sort samples when setting

* update warn message

* formatting

* use setter when creating samples in dataset classes

* add tests for new dataset class

* add test case for label aware random split

* update parameter name in inferencers

* move _setup implementation to base class

* address codacy issues

* fix pylint issues

* codacy

* update example dataset config in docs

* fix test

* move base classes to separate files (avoid circular import)

* add base classes

* update docstring

* fix imports

* validation_split_mode -> val_split_mode

* update docs

* Update anomalib/data/base/dataset.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* get length from self.samples

* assert unique indices

* check is_setup for individual datasets

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* remove assert in __getitem_\

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* Update anomalib/data/btech.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* clearer assert message

* clarify list inversion in comment

* comments and typing

* validate contents of samples dataframe before setting

* add file paths check

* add seed to random_split function

* fix expected columns

* fix typo

* add pedestrian and avenue datasets and video utils

* add seed parameter to datamodules

* set global seed in test entrypoint

* add NONE option to valsplitmode

* clarify setup behaviour in docstring

* add basic visualization for video datasets

* simplify ucsdped implementation

* add ucsd and avenue to __all__

* add default value for task

* add tests for ucsd and avenue

* add tests for video dataset and utils

* add download info for avenue dataset

* add download info for ucsd pedestrian dataset

* more consistent naming

* fix path to masks folder in gt dir

* pass original image in batch to facilitate visualization

* convert mask files for avenue

* suppress warning due to torchvision bug

* fix bug in avenue masks

* store visualizations for each video in separate folder

* rename parameters

* add warning for clip_length > 1

* fix dataset tests

* fix labels tensor shape bug

* add pyav to requirements

* add description for avenue dataset

* use pathlib

* Update anomalib/data/avenue.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/avenue.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/utils/video.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/base/video.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/base/video.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/ucsd_ped.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* import video dataset from base

* fix bug when collecting ucsd samples

* clean up datamodules tests

* fix tests

* remove redundant test cases

* retrieve masks as numpy array

* use pathlib

* variable name

* pathlib

* use preprocesser from arguments

* fix indexing bug

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>
Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update lightning_inference.py

* Make `val split ratio` configurable (#760)

* make val split ratio configurable

* use DeprecationWarning, update config key

* Add support for Detection task type (#732)

* add basic support for detection task

* use enum for task type

* formatting

* small bugfix

* add unit tests for bounding box conversion

* update error message

* use as_tensor

* typing and docstring

* explicit keyword arguments

* simplify bbox handling in video dataset

* docstring consistency

* add missing licenses

* add whitespace for readability

* add missing license

* Update anomalib/data/utils/boxes.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Revert "Update anomalib/data/utils/boxes.py"

This reverts commit cec6138.

* add test case for custom collate function

* docstring

* add integration tests for detection dataloading

* extend and clean up datamodules tests

* add detection task type to visualizer tests

* only show pred_boxes during inference

* add detection support for torch inference

* add detection support for openvino inference

* test inference for all task types

* pylint

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* [Datamodules] Update deprecation messages (#764)

* update deprecation messages

* raise warnings as DeprecationWarning

* Improve image source parsing for Folder dataset (#784)

* mask -> mask_dir

* properly handle absolute and relative paths

* make root path parameter optional

* formatting

* path -> root

* update docs

* remove options hint for name parameter

* refactor function

* Update anomalib/config/config.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/config/config.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* make root and abnormal_dir optional

* Update anomalib/data/folder.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Synthetic anomaly for testing and validation (#634)

* move sample generation to datamodule instead of dataset

* move sample generation from init to setup

* remove inference stage and add base classes

* replace dataset classes with AnomalibDataset

* move setup to base class, create samples as class method

* update docstrings

* refactor btech to new format

* allow training with no anomalous data

* remove MVTec name from comment

* raise NotImplementedError in base class

* allow both png and bmp images for btech

* use label_index to check if dataset contains anomalous images

* refactor getitem in dataset class

* use iloc for indexing

* move dataloader getters to base class

* refactor to add validate stage in setup

* implement alternative datamodules solution

* small improvements

* improve design

* remove unused constructor arguments

* adapt btech to new design

* add prepare_data method for mvtec

* implement more generic random splitting function

* update docstrings for folder module

* ensure type consistency when performing operations on dataset

* change imports

* change variable names

* replace pass with NotImplementedError

* allow training on folder without test images

* use relative path for normal_test_dir

* fix dataset tests

* update validation set parameter in configs

* change default argument

* use setter for samples

* hint options for val_split_mode

* update assert message and docstring

* revert name change dataset vs datamodule

* typing and docstrings

* remove samples argument from dataset constructor

* val/test -> eval

* remove Split.Full from enum

* sort samples when setting

* update warn message

* formatting

* use setter when creating samples in dataset classes

* add tests for new dataset class

* add test case for label aware random split

* update parameter name in inferencers

* move _setup implementation to base class

* address codacy issues

* fix pylint issues

* codacy

* update example dataset config in docs

* fix test

* move base classes to separate files (avoid circular import)

* add synthetic dataset class

* move augmenter to data directory

* add base classes

* update docstring

* use synthetic dataset in base datamodule

* fix imports

* clean up synthetic anomaly dataset implementation

* fix mistake in augmenter

* change default split ratio

* remove accidentally added file

* validation_split_mode -> val_split_mode

* update docs

* Update anomalib/data/base/dataset.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* get length from self.samples

* assert unique indices

* check is_setup for individual datasets

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* remove assert in __getitem_\

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* Update anomalib/data/btech.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* clearer assert message

* clarify list inversion in comment

* comments and typing

* validate contents of samples dataframe before setting

* add file paths check

* add seed to random_split function

* fix expected columns

* fix typo

* add seed parameter to datamodules

* set global seed in test entrypoint

* add NONE option to valsplitmode

* clarify setup behaviour in docstring

* add logging message

* use val_split_ratio for synthetic validation set

* pathlib

* make synthetic anomaly available for test set

* update configs

* add tests

* simplify test set splitting logic

* update docstring

* add missing licence

* split_normal_and_anomalous -> split_by_label

* VideoAnomalib -> AnomalibVideo

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* Bugfixes for Datamodules feature branch (#800)

* properly handle NoneType mask_dir and add test case

* fix wrong deprecation handling

* Deprecate PreProcessor (#795)

* deprecate PreProcessor

* update configs

* update deprecation messages

* update video dataset

* update inference dataset

* move transforms to data module

* update and extend transform tests

* fix cyclic import

* add validity checks for image size and center crop

* pass image size as tuple

* update path to get_transforms

* update error message

* fix center crop tuple conversion

* update inferencers

* remove draem transform config

* update changelog

* fix cyclic import

* add crop size vs image size check

* improve readability

* mypy

* use enum to configure input normalization

* update lightning inference

* update inference dataset

* [Datamodules] Fix bug in bbox score to image score conversion (#803)

handle empty box predictions

* Improve handling of `test_split_mode='none'` and `val_split_mode='none'` (#801)

* enable none as split mode

* use get to retrieve config keys

* update deprecation message and config key

* fix to float transform

* Detection improvements (#820)

* apply pixel threshold to bbox detections

* allow visualizing normal boxes

* normalize box scores

* fix bbox logic in base anomaly module

* boxes_scores -> box_scores

* fix inferencers

* update changelog

* update csflow config to new format

* remove unused imports

* line length

* suppress bandit warnings

* use torch rng in augmenter

* use tuple instead of list

* add missing params to dosctring

* add missing licence information

* COLS -> COLUMNS

* typing and variable naming

* remove duplicate parameter in docstring

* im_dir -> image_dir

* typing and docstring

* typing

* ValSplitMode -> ValidationSplitMode

* add missing licence

* rename variable

* remove empty comment

* remove unused class attribute

* [Detection] Compute box score when generating boxes from masks (#828)

* infer box scores from anomaly maps

* discard single pixel boxes

* revert discard single pixel boxes

* add test case for bbox scores

* update torch inferencer

* minor refactor

* revert val_split_mode -> validation_split_mode

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>
Co-authored-by: Samet Akcay <samet.akcay@intel.com>
djdameln added a commit that referenced this pull request Jan 6, 2023
* New datamodules design (#572)

* move sample generation to datamodule instead of dataset

* move sample generation from init to setup

* remove inference stage and add base classes

* replace dataset classes with AnomalibDataset

* move setup to base class, create samples as class method

* update docstrings

* refactor btech to new format

* allow training with no anomalous data

* remove MVTec name from comment

* raise NotImplementedError in base class

* allow both png and bmp images for btech

* use label_index to check if dataset contains anomalous images

* refactor getitem in dataset class

* use iloc for indexing

* move dataloader getters to base class

* refactor to add validate stage in setup

* implement alternative datamodules solution

* small improvements

* improve design

* remove unused constructor arguments

* adapt btech to new design

* add prepare_data method for mvtec

* implement more generic random splitting function

* update docstrings for folder module

* ensure type consistency when performing operations on dataset

* change imports

* change variable names

* replace pass with NotImplementedError

* allow training on folder without test images

* use relative path for normal_test_dir

* fix dataset tests

* update validation set parameter in configs

* change default argument

* use setter for samples

* hint options for val_split_mode

* update assert message and docstring

* revert name change dataset vs datamodule

* typing and docstrings

* remove samples argument from dataset constructor

* val/test -> eval

* remove Split.Full from enum

* sort samples when setting

* update warn message

* formatting

* use setter when creating samples in dataset classes

* add tests for new dataset class

* add test case for label aware random split

* update parameter name in inferencers

* move _setup implementation to base class

* address codacy issues

* fix pylint issues

* codacy

* update example dataset config in docs

* fix test

* move base classes to separate files (avoid circular import)

* add base classes

* update docstring

* fix imports

* validation_split_mode -> val_split_mode

* update docs

* Update anomalib/data/base/dataset.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* get length from self.samples

* assert unique indices

* check is_setup for individual datasets

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* remove assert in __getitem_\

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* Update anomalib/data/btech.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* clearer assert message

* clarify list inversion in comment

* comments and typing

* validate contents of samples dataframe before setting

* add file paths check

* add seed to random_split function

* fix expected columns

* fix typo

* add seed parameter to datamodules

* set global seed in test entrypoint

* add NONE option to valsplitmode

* clarify setup behaviour in docstring

* fix typo

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* Video Datamodules (#676)

* move sample generation to datamodule instead of dataset

* move sample generation from init to setup

* remove inference stage and add base classes

* replace dataset classes with AnomalibDataset

* move setup to base class, create samples as class method

* update docstrings

* refactor btech to new format

* allow training with no anomalous data

* remove MVTec name from comment

* raise NotImplementedError in base class

* allow both png and bmp images for btech

* use label_index to check if dataset contains anomalous images

* refactor getitem in dataset class

* use iloc for indexing

* move dataloader getters to base class

* refactor to add validate stage in setup

* implement alternative datamodules solution

* small improvements

* improve design

* remove unused constructor arguments

* adapt btech to new design

* add prepare_data method for mvtec

* implement more generic random splitting function

* update docstrings for folder module

* ensure type consistency when performing operations on dataset

* change imports

* change variable names

* replace pass with NotImplementedError

* allow training on folder without test images

* use relative path for normal_test_dir

* fix dataset tests

* update validation set parameter in configs

* change default argument

* use setter for samples

* hint options for val_split_mode

* update assert message and docstring

* revert name change dataset vs datamodule

* typing and docstrings

* remove samples argument from dataset constructor

* val/test -> eval

* remove Split.Full from enum

* sort samples when setting

* update warn message

* formatting

* use setter when creating samples in dataset classes

* add tests for new dataset class

* add test case for label aware random split

* update parameter name in inferencers

* move _setup implementation to base class

* address codacy issues

* fix pylint issues

* codacy

* update example dataset config in docs

* fix test

* move base classes to separate files (avoid circular import)

* add base classes

* update docstring

* fix imports

* validation_split_mode -> val_split_mode

* update docs

* Update anomalib/data/base/dataset.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* get length from self.samples

* assert unique indices

* check is_setup for individual datasets

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* remove assert in __getitem_\

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* Update anomalib/data/btech.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* clearer assert message

* clarify list inversion in comment

* comments and typing

* validate contents of samples dataframe before setting

* add file paths check

* add seed to random_split function

* fix expected columns

* fix typo

* add pedestrian and avenue datasets and video utils

* add seed parameter to datamodules

* set global seed in test entrypoint

* add NONE option to valsplitmode

* clarify setup behaviour in docstring

* add basic visualization for video datasets

* simplify ucsdped implementation

* add ucsd and avenue to __all__

* add default value for task

* add tests for ucsd and avenue

* add tests for video dataset and utils

* add download info for avenue dataset

* add download info for ucsd pedestrian dataset

* more consistent naming

* fix path to masks folder in gt dir

* pass original image in batch to facilitate visualization

* convert mask files for avenue

* suppress warning due to torchvision bug

* fix bug in avenue masks

* store visualizations for each video in separate folder

* rename parameters

* add warning for clip_length > 1

* fix dataset tests

* fix labels tensor shape bug

* add pyav to requirements

* add description for avenue dataset

* use pathlib

* Update anomalib/data/avenue.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/avenue.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/utils/video.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/base/video.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/base/video.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/ucsd_ped.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* import video dataset from base

* fix bug when collecting ucsd samples

* clean up datamodules tests

* fix tests

* remove redundant test cases

* retrieve masks as numpy array

* use pathlib

* variable name

* pathlib

* use preprocesser from arguments

* fix indexing bug

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>
Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update lightning_inference.py

* Make `val split ratio` configurable (#760)

* make val split ratio configurable

* use DeprecationWarning, update config key

* Add support for Detection task type (#732)

* add basic support for detection task

* use enum for task type

* formatting

* small bugfix

* add unit tests for bounding box conversion

* update error message

* use as_tensor

* typing and docstring

* explicit keyword arguments

* simplify bbox handling in video dataset

* docstring consistency

* add missing licenses

* add whitespace for readability

* add missing license

* Update anomalib/data/utils/boxes.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Revert "Update anomalib/data/utils/boxes.py"

This reverts commit cec6138.

* add test case for custom collate function

* docstring

* add integration tests for detection dataloading

* extend and clean up datamodules tests

* add detection task type to visualizer tests

* only show pred_boxes during inference

* add detection support for torch inference

* add detection support for openvino inference

* test inference for all task types

* pylint

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* [Datamodules] Update deprecation messages (#764)

* update deprecation messages

* raise warnings as DeprecationWarning

* Improve image source parsing for Folder dataset (#784)

* mask -> mask_dir

* properly handle absolute and relative paths

* make root path parameter optional

* formatting

* path -> root

* update docs

* remove options hint for name parameter

* refactor function

* Update anomalib/config/config.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/config/config.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* make root and abnormal_dir optional

* Update anomalib/data/folder.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Synthetic anomaly for testing and validation (#634)

* move sample generation to datamodule instead of dataset

* move sample generation from init to setup

* remove inference stage and add base classes

* replace dataset classes with AnomalibDataset

* move setup to base class, create samples as class method

* update docstrings

* refactor btech to new format

* allow training with no anomalous data

* remove MVTec name from comment

* raise NotImplementedError in base class

* allow both png and bmp images for btech

* use label_index to check if dataset contains anomalous images

* refactor getitem in dataset class

* use iloc for indexing

* move dataloader getters to base class

* refactor to add validate stage in setup

* implement alternative datamodules solution

* small improvements

* improve design

* remove unused constructor arguments

* adapt btech to new design

* add prepare_data method for mvtec

* implement more generic random splitting function

* update docstrings for folder module

* ensure type consistency when performing operations on dataset

* change imports

* change variable names

* replace pass with NotImplementedError

* allow training on folder without test images

* use relative path for normal_test_dir

* fix dataset tests

* update validation set parameter in configs

* change default argument

* use setter for samples

* hint options for val_split_mode

* update assert message and docstring

* revert name change dataset vs datamodule

* typing and docstrings

* remove samples argument from dataset constructor

* val/test -> eval

* remove Split.Full from enum

* sort samples when setting

* update warn message

* formatting

* use setter when creating samples in dataset classes

* add tests for new dataset class

* add test case for label aware random split

* update parameter name in inferencers

* move _setup implementation to base class

* address codacy issues

* fix pylint issues

* codacy

* update example dataset config in docs

* fix test

* move base classes to separate files (avoid circular import)

* add synthetic dataset class

* move augmenter to data directory

* add base classes

* update docstring

* use synthetic dataset in base datamodule

* fix imports

* clean up synthetic anomaly dataset implementation

* fix mistake in augmenter

* change default split ratio

* remove accidentally added file

* validation_split_mode -> val_split_mode

* update docs

* Update anomalib/data/base/dataset.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* get length from self.samples

* assert unique indices

* check is_setup for individual datasets

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* remove assert in __getitem_\

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* Update anomalib/data/btech.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* clearer assert message

* clarify list inversion in comment

* comments and typing

* validate contents of samples dataframe before setting

* add file paths check

* add seed to random_split function

* fix expected columns

* fix typo

* add seed parameter to datamodules

* set global seed in test entrypoint

* add NONE option to valsplitmode

* clarify setup behaviour in docstring

* add logging message

* use val_split_ratio for synthetic validation set

* pathlib

* make synthetic anomaly available for test set

* update configs

* add tests

* simplify test set splitting logic

* update docstring

* add missing licence

* split_normal_and_anomalous -> split_by_label

* VideoAnomalib -> AnomalibVideo

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* Bugfixes for Datamodules feature branch (#800)

* properly handle NoneType mask_dir and add test case

* fix wrong deprecation handling

* Deprecate PreProcessor (#795)

* deprecate PreProcessor

* update configs

* update deprecation messages

* update video dataset

* update inference dataset

* move transforms to data module

* update and extend transform tests

* fix cyclic import

* add validity checks for image size and center crop

* pass image size as tuple

* update path to get_transforms

* update error message

* fix center crop tuple conversion

* update inferencers

* remove draem transform config

* update changelog

* fix cyclic import

* add crop size vs image size check

* improve readability

* mypy

* use enum to configure input normalization

* update lightning inference

* update inference dataset

* [Datamodules] Fix bug in bbox score to image score conversion (#803)

handle empty box predictions

* Improve handling of `test_split_mode='none'` and `val_split_mode='none'` (#801)

* enable none as split mode

* use get to retrieve config keys

* update deprecation message and config key

* fix to float transform

* Detection improvements (#820)

* apply pixel threshold to bbox detections

* allow visualizing normal boxes

* normalize box scores

* fix bbox logic in base anomaly module

* boxes_scores -> box_scores

* fix inferencers

* update changelog

* update csflow config to new format

* remove unused imports

* line length

* refactor make_mvtec_dataset to improve flexibility

* add visa dataset

* move download and extract functionality to shared location

* move visa subset splitting to separate method

* update changelog

* add tests for visa dataset

* suppress bandit url warning

* update test

* address PR comments

* suppress bandit warnings

* use torch rng in augmenter

* fix logic in prepare_data

* add comments

* cleaner zipfile import

* address PR comments

* use tuple instead of list

* add missing params to dosctring

* add missing licence information

* COLS -> COLUMNS

* typing and variable naming

* remove duplicate parameter in docstring

* im_dir -> image_dir

* typing and docstring

* typing

* ValSplitMode -> ValidationSplitMode

* add missing licence

* rename variable

* remove empty comment

* remove unused class attribute

* [Detection] Compute box score when generating boxes from masks (#828)

* infer box scores from anomaly maps

* discard single pixel boxes

* revert discard single pixel boxes

* add test case for bbox scores

* update torch inferencer

* minor refactor

* revert val_split_mode -> validation_split_mode

* use empty string instead of nan as empty mask path

* typing

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>
Co-authored-by: Samet Akcay <samet.akcay@intel.com>
djdameln added a commit that referenced this pull request Jan 6, 2023
* fix pylint issues

* codacy

* update example dataset config in docs

* fix test

* move base classes to separate files (avoid circular import)

* add base classes

* update docstring

* fix imports

* validation_split_mode -> val_split_mode

* update docs

* Update anomalib/data/base/dataset.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* get length from self.samples

* assert unique indices

* check is_setup for individual datasets

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* remove assert in __getitem_\

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* Update anomalib/data/btech.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* clearer assert message

* clarify list inversion in comment

* comments and typing

* validate contents of samples dataframe before setting

* add file paths check

* add seed to random_split function

* fix expected columns

* fix typo

* add pedestrian and avenue datasets and video utils

* add seed parameter to datamodules

* set global seed in test entrypoint

* add NONE option to valsplitmode

* clarify setup behaviour in docstring

* Created rbad directory

* Keep refactoring region-extractor

* rename new_image_sizes to transformed_image_sizes

* Renamed the variables in region extractor

* post-process function in region extractor

* Refactored tile-boxes function

* Added feature extractor

* Add main.py

* Added feature extractor to tests

* Update the jupyter notebook

* Uncomment loa weights from region.py

* Add feature and region extractors

* Finished feature-extractor implementation

* Rename the algo as rkde

* New datamodules design (#572)

* move sample generation to datamodule instead of dataset

* move sample generation from init to setup

* remove inference stage and add base classes

* replace dataset classes with AnomalibDataset

* move setup to base class, create samples as class method

* update docstrings

* refactor btech to new format

* allow training with no anomalous data

* remove MVTec name from comment

* raise NotImplementedError in base class

* allow both png and bmp images for btech

* use label_index to check if dataset contains anomalous images

* refactor getitem in dataset class

* use iloc for indexing

* move dataloader getters to base class

* refactor to add validate stage in setup

* implement alternative datamodules solution

* small improvements

* improve design

* remove unused constructor arguments

* adapt btech to new design

* add prepare_data method for mvtec

* implement more generic random splitting function

* update docstrings for folder module

* ensure type consistency when performing operations on dataset

* change imports

* change variable names

* replace pass with NotImplementedError

* allow training on folder without test images

* use relative path for normal_test_dir

* fix dataset tests

* update validation set parameter in configs

* change default argument

* use setter for samples

* hint options for val_split_mode

* update assert message and docstring

* revert name change dataset vs datamodule

* typing and docstrings

* remove samples argument from dataset constructor

* val/test -> eval

* remove Split.Full from enum

* sort samples when setting

* update warn message

* formatting

* use setter when creating samples in dataset classes

* add tests for new dataset class

* add test case for label aware random split

* update parameter name in inferencers

* move _setup implementation to base class

* address codacy issues

* fix pylint issues

* codacy

* update example dataset config in docs

* fix test

* move base classes to separate files (avoid circular import)

* add base classes

* update docstring

* fix imports

* validation_split_mode -> val_split_mode

* update docs

* Update anomalib/data/base/dataset.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* get length from self.samples

* assert unique indices

* check is_setup for individual datasets

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* remove assert in __getitem_\

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* Update anomalib/data/btech.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* clearer assert message

* clarify list inversion in comment

* comments and typing

* validate contents of samples dataframe before setting

* add file paths check

* add seed to random_split function

* fix expected columns

* fix typo

* add seed parameter to datamodules

* set global seed in test entrypoint

* add NONE option to valsplitmode

* clarify setup behaviour in docstring

* fix typo

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* add basic visualization for video datasets

* simplify ucsdped implementation

* TODO: Investigate torch_model

* add ucsd and avenue to __all__

* add default value for task

* add tests for ucsd and avenue

* add tests for video dataset and utils

* add download info for avenue dataset

* add download info for ucsd pedestrian dataset

* more consistent naming

* fix path to masks folder in gt dir

* pass original image in batch to facilitate visualization

* convert mask files for avenue

* suppress warning due to torchvision bug

* fix bug in avenue masks

* store visualizations for each video in separate folder

* rename parameters

* add warning for clip_length > 1

* fix dataset tests

* fix labels tensor shape bug

* add pyav to requirements

* Add TODO notes

* add todo notes

* add description for avenue dataset

* use pathlib

* Update anomalib/data/avenue.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/avenue.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/utils/video.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/base/video.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/base/video.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/ucsd_ped.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* import video dataset from base

* fix bug when collecting ucsd samples

* clean up datamodules tests

* fix tests

* remove redundant test cases

* add test case for normality model

* retrieve masks as numpy array

* use pathlib

* variable name

* pathlib

* use preprocesser from arguments

* fix indexing bug

* Video Datamodules (#676)

* move sample generation to datamodule instead of dataset

* move sample generation from init to setup

* remove inference stage and add base classes

* replace dataset classes with AnomalibDataset

* move setup to base class, create samples as class method

* update docstrings

* refactor btech to new format

* allow training with no anomalous data

* remove MVTec name from comment

* raise NotImplementedError in base class

* allow both png and bmp images for btech

* use label_index to check if dataset contains anomalous images

* refactor getitem in dataset class

* use iloc for indexing

* move dataloader getters to base class

* refactor to add validate stage in setup

* implement alternative datamodules solution

* small improvements

* improve design

* remove unused constructor arguments

* adapt btech to new design

* add prepare_data method for mvtec

* implement more generic random splitting function

* update docstrings for folder module

* ensure type consistency when performing operations on dataset

* change imports

* change variable names

* replace pass with NotImplementedError

* allow training on folder without test images

* use relative path for normal_test_dir

* fix dataset tests

* update validation set parameter in configs

* change default argument

* use setter for samples

* hint options for val_split_mode

* update assert message and docstring

* revert name change dataset vs datamodule

* typing and docstrings

* remove samples argument from dataset constructor

* val/test -> eval

* remove Split.Full from enum

* sort samples when setting

* update warn message

* formatting

* use setter when creating samples in dataset classes

* add tests for new dataset class

* add test case for label aware random split

* update parameter name in inferencers

* move _setup implementation to base class

* address codacy issues

* fix pylint issues

* codacy

* update example dataset config in docs

* fix test

* move base classes to separate files (avoid circular import)

* add base classes

* update docstring

* fix imports

* validation_split_mode -> val_split_mode

* update docs

* Update anomalib/data/base/dataset.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* get length from self.samples

* assert unique indices

* check is_setup for individual datasets

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* remove assert in __getitem_\

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* Update anomalib/data/btech.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* clearer assert message

* clarify list inversion in comment

* comments and typing

* validate contents of samples dataframe before setting

* add file paths check

* add seed to random_split function

* fix expected columns

* fix typo

* add pedestrian and avenue datasets and video utils

* add seed parameter to datamodules

* set global seed in test entrypoint

* add NONE option to valsplitmode

* clarify setup behaviour in docstring

* add basic visualization for video datasets

* simplify ucsdped implementation

* add ucsd and avenue to __all__

* add default value for task

* add tests for ucsd and avenue

* add tests for video dataset and utils

* add download info for avenue dataset

* add download info for ucsd pedestrian dataset

* more consistent naming

* fix path to masks folder in gt dir

* pass original image in batch to facilitate visualization

* convert mask files for avenue

* suppress warning due to torchvision bug

* fix bug in avenue masks

* store visualizations for each video in separate folder

* rename parameters

* add warning for clip_length > 1

* fix dataset tests

* fix labels tensor shape bug

* add pyav to requirements

* add description for avenue dataset

* use pathlib

* Update anomalib/data/avenue.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/avenue.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/utils/video.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/base/video.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/base/video.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/data/ucsd_ped.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* import video dataset from base

* fix bug when collecting ucsd samples

* clean up datamodules tests

* fix tests

* remove redundant test cases

* retrieve masks as numpy array

* use pathlib

* variable name

* pathlib

* use preprocesser from arguments

* fix indexing bug

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>
Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* properly handle batch processing

* include batch index in rois tensor

* return rkde results as lists

* update default rkde config

* add basic support for detection task

* use enum for task type

* formatting

* small bugfix

* add unit tests for bounding box conversion

* update error message

* use as_tensor

* typing and docstring

* explicit keyword arguments

* simplify bbox handling in video dataset

* docstring consistency

* add missing licenses

* add whitespace for readability

* add missing license

* Update anomalib/data/utils/boxes.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Revert "Update anomalib/data/utils/boxes.py"

This reverts commit cec6138.

* add test case for custom collate function

* docstring

* add integration tests for detection dataloading

* extend and clean up datamodules tests

* add detection task type to visualizer tests

* Update lightning_inference.py

* only show pred_boxes during inference

* add detection support for torch inference

* add detection support for openvino inference

* test inference for all task types

* pylint

* Make `val split ratio` configurable (#760)

* make val split ratio configurable

* use DeprecationWarning, update config key

* Add support for Detection task type (#732)

* add basic support for detection task

* use enum for task type

* formatting

* small bugfix

* add unit tests for bounding box conversion

* update error message

* use as_tensor

* typing and docstring

* explicit keyword arguments

* simplify bbox handling in video dataset

* docstring consistency

* add missing licenses

* add whitespace for readability

* add missing license

* Update anomalib/data/utils/boxes.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Revert "Update anomalib/data/utils/boxes.py"

This reverts commit cec6138.

* add test case for custom collate function

* docstring

* add integration tests for detection dataloading

* extend and clean up datamodules tests

* add detection task type to visualizer tests

* only show pred_boxes during inference

* add detection support for torch inference

* add detection support for openvino inference

* test inference for all task types

* pylint

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* [Datamodules] Update deprecation messages (#764)

* update deprecation messages

* raise warnings as DeprecationWarning

* update rkde

* Improve image source parsing for Folder dataset (#784)

* mask -> mask_dir

* properly handle absolute and relative paths

* make root path parameter optional

* formatting

* path -> root

* update docs

* remove options hint for name parameter

* refactor function

* Update anomalib/config/config.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Update anomalib/config/config.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* make root and abnormal_dir optional

* Update anomalib/data/folder.py

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

Co-authored-by: Samet Akcay <samet.akcay@intel.com>

* Synthetic anomaly for testing and validation (#634)

* move sample generation to datamodule instead of dataset

* move sample generation from init to setup

* remove inference stage and add base classes

* replace dataset classes with AnomalibDataset

* move setup to base class, create samples as class method

* update docstrings

* refactor btech to new format

* allow training with no anomalous data

* remove MVTec name from comment

* raise NotImplementedError in base class

* allow both png and bmp images for btech

* use label_index to check if dataset contains anomalous images

* refactor getitem in dataset class

* use iloc for indexing

* move dataloader getters to base class

* refactor to add validate stage in setup

* implement alternative datamodules solution

* small improvements

* improve design

* remove unused constructor arguments

* adapt btech to new design

* add prepare_data method for mvtec

* implement more generic random splitting function

* update docstrings for folder module

* ensure type consistency when performing operations on dataset

* change imports

* change variable names

* replace pass with NotImplementedError

* allow training on folder without test images

* use relative path for normal_test_dir

* fix dataset tests

* update validation set parameter in configs

* change default argument

* use setter for samples

* hint options for val_split_mode

* update assert message and docstring

* revert name change dataset vs datamodule

* typing and docstrings

* remove samples argument from dataset constructor

* val/test -> eval

* remove Split.Full from enum

* sort samples when setting

* update warn message

* formatting

* use setter when creating samples in dataset classes

* add tests for new dataset class

* add test case for label aware random split

* update parameter name in inferencers

* move _setup implementation to base class

* address codacy issues

* fix pylint issues

* codacy

* update example dataset config in docs

* fix test

* move base classes to separate files (avoid circular import)

* add synthetic dataset class

* move augmenter to data directory

* add base classes

* update docstring

* use synthetic dataset in base datamodule

* fix imports

* clean up synthetic anomaly dataset implementation

* fix mistake in augmenter

* change default split ratio

* remove accidentally added file

* validation_split_mode -> val_split_mode

* update docs

* Update anomalib/data/base/dataset.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* get length from self.samples

* assert unique indices

* check is_setup for individual datasets

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* remove assert in __getitem_\

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* Update anomalib/data/btech.py

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* clearer assert message

* clarify list inversion in comment

* comments and typing

* validate contents of samples dataframe before setting

* add file paths check

* add seed to random_split function

* fix expected columns

* fix typo

* add seed parameter to datamodules

* set global seed in test entrypoint

* add NONE option to valsplitmode

* clarify setup behaviour in docstring

* add logging message

* use val_split_ratio for synthetic validation set

* pathlib

* make synthetic anomaly available for test set

* update configs

* add tests

* simplify test set splitting logic

* update docstring

* add missing licence

* split_normal_and_anomalous -> split_by_label

* VideoAnomalib -> AnomalibVideo

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>

* Bugfixes for Datamodules feature branch (#800)

* properly handle NoneType mask_dir and add test case

* fix wrong deprecation handling

* Deprecate PreProcessor (#795)

* deprecate PreProcessor

* update configs

* update deprecation messages

* update video dataset

* update inference dataset

* move transforms to data module

* update and extend transform tests

* fix cyclic import

* add validity checks for image size and center crop

* pass image size as tuple

* update path to get_transforms

* update error message

* fix center crop tuple conversion

* update inferencers

* remove draem transform config

* update changelog

* fix cyclic import

* add crop size vs image size check

* improve readability

* mypy

* use enum to configure input normalization

* update lightning inference

* update inference dataset

* expose more parameters and fix wrong return format

* fix tdd tests

* update config

* [Datamodules] Fix bug in bbox score to image score conversion (#803)

handle empty box predictions

* update config

* apply pixel threshold to bbox detections

* remove confidence threshold parameter from rkde

* hardcode steepness and offset

* rename variable

* remove unused parameters from config

* Improve handling of `test_split_mode='none'` and `val_split_mode='none'` (#801)

* enable none as split mode

* use get to retrieve config keys

* update deprecation message and config key

* update config with new keys

* remove unused parameter

* set device in rpn stage

* move prediction format conversion to lightning model

* clean up torch model

* move region- and feature-extractor to separate files

* allow visualizing normal boxes

* refactor

* WIP: simplify region extractor

* simplify region extractor

* cleanup and docstrings

* typing

* expose max detections per image parameter

* explain configurable parameters

* fix wrong config value

* remove unnecessary squeeze

* box_likelihood -> rcnn_box_threshold

* update comments

* remove unnecessary typing

* separate density estimation stage from torch model

* improve readability

* change default transform settings

* fix to float transform

* simplify feature extractor

* normalize box scores

* further simplify region extractor

* update comment

* improve prn configurability

* remove unnecessary check

* use enum for roi stage options

* use enum for feature scaling method

* re-order parameters

* clean up model dir

* fix bbox logic in base anomaly module

* update key in output dict

* boxes_scores -> box_scores

* remove notebook

* add comments and todo

* Detection improvements (#820)

* apply pixel threshold to bbox detections

* allow visualizing normal boxes

* normalize box scores

* fix bbox logic in base anomaly module

* boxes_scores -> box_scores

* fix inferencers

* add readme

* update changelog

* update changelog

* update csflow config to new format

* initialize max_length as empty tensor

* include RKDE in model tests

* remove unused imports

* line length

* move kde classifier to shared location

* fix import

* re-use RKDE classifier in DFKDE

* remove old imports

* docstrings

* fix codacy issues

* load feature extractor weights from url

* suppress bandit warnings

* use torch rng in augmenter

* typing

* add fit method to torch model

* fix typo

* use enum when checking stage

* use tuple instead of list

* add missing params to dosctring

* add missing licence information

* COLS -> COLUMNS

* typing and variable naming

* remove duplicate parameter in docstring

* im_dir -> image_dir

* typing and docstring

* typing

* ValSplitMode -> ValidationSplitMode

* add missing licence

* rename variable

* remove empty comment

* remove unused class attribute

* [Detection] Compute box score when generating boxes from masks (#828)

* infer box scores from anomaly maps

* discard single pixel boxes

* revert discard single pixel boxes

* add test case for bbox scores

* update torch inferencer

* minor refactor

* revert val_split_mode -> validation_split_mode

Co-authored-by: Joao P C Bertoldo <24547377+jpcbertoldo@users.noreply.github.com>
Co-authored-by: Samet <samet.akcay@intel.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Data Inference Metrics Metric Component. Post-Processing The components that are related to post-processing Tests Tools
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants