Skip to content

Commit

Permalink
Release v1.1.0 (#2088)
Browse files Browse the repository at this point in the history
* Update `CHANGELOG.md` (#2087)

Create changelog

* 📚 Add Pipelines Documentation (#2096)

Add reference guide

Signed-off-by: Ashwin Vaidya <ashwinnitinvaidya@gmail.com>

---------

Signed-off-by: Ashwin Vaidya <ashwinnitinvaidya@gmail.com>
Co-authored-by: Ashwin Vaidya <ashwin.vaidya@intel.com>
  • Loading branch information
samet-akcay and ashwinvaidya17 authored May 31, 2024
1 parent e5b91d6 commit 76fc980
Show file tree
Hide file tree
Showing 16 changed files with 370 additions and 14 deletions.
74 changes: 63 additions & 11 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,79 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

### Added

- 🚀 Update OpenVINO and ONNX export to support fixed input shape by @adrianboguszewski in https://github.com/openvinotoolkit/anomalib/pull/2006
- Add data_path argument to predict entrypoint and add properties for retrieving model path by @djdameln in https://github.com/openvinotoolkit/anomalib/pull/2018
### Changed

### Deprecated

### Fixed

### New Contributors

**Full Changelog**:

## [v1.1.0]

### Added

- 🚀 Add support for MLFlow logger by @DoMaLi94 in https://github.com/openvinotoolkit/anomalib/pull/1847
- 📚 Add Transform behaviour+documentation by @djdameln in https://github.com/openvinotoolkit/anomalib/pull/1953
- 📚 Add documentation on how to use the tiler by @blaz-r in https://github.com/openvinotoolkit/anomalib/pull/1960
- 💬 Add Discord badge to `README.md` by @samet-akcay in https://github.com/openvinotoolkit/anomalib/pull/2012
- 🚀 Add Auto-Encoder based FRE by @nahuja-intel in https://github.com/openvinotoolkit/anomalib/pull/2025
- 🚀 Add compression and quantization for OpenVINO export by @adrianboguszewski in https://github.com/openvinotoolkit/anomalib/pull/2052
- 🚀from_config API: Create a path between API & configuration file (CLI) by @harimkang in https://github.com/openvinotoolkit/anomalib/pull/2065
- 🚀 Add Anomalib Pipelines by @ashwinvaidya17 in https://github.com/openvinotoolkit/anomalib/pull/2060
- 🚀 Add `from_config` API: Create a path between API & configuration file (CLI) by @harimkang in https://github.com/openvinotoolkit/anomalib/pull/2065
- 🚀 Add data filter in tar extract by @ashwinvaidya17 in https://github.com/openvinotoolkit/anomalib/pull/2084

### Changed

- WinCLIP: set device in text embedding collection and apply forward pass with no grad, by @djdameln in https://github.com/openvinotoolkit/anomalib/pull/1984
- 🔨 Move all export functionalities to AnomalyModule as base methods by @thinhngo-x in (<https://github.com/openvinotoolkit/anomalib/pull/1803>)
- Remove unnecessary jsonargparse dependencies by @davnn in (<https://github.com/openvinotoolkit/anomalib/pull/2046>)
- Use default model-specific eval transform when only train_transform specified by @djdameln(https://github.com/djdameln) in (<https://github.com/openvinotoolkit/anomalib/pull/1953>)
- 🔨Rename OptimalF1 to F1Max for consistency with the literature, by @samet-akcay in https://github.com/openvinotoolkit/anomalib/pull/1980
- 🐞Update OptimalF1 score to use BinaryPrecisionRecallCurve and remove num_classes by @ashwinvaidya17 in https://github.com/openvinotoolkit/anomalib/pull/1972
- ⬆️ Update torch and lightning package versions by @samet-akcay in https://github.com/openvinotoolkit/anomalib/pull/1949
- 🔨 Use default model-specific eval transform when only train_transform specified by @djdameln(https://github.com/djdameln) in (<https://github.com/openvinotoolkit/anomalib/pull/1953>)
- 🔨 Replace `@abstractproperty` since it is deprecated by @samet-akcay in https://github.com/openvinotoolkit/anomalib/pull/1964
- 🛠️ Update OptimalF1 Score by @ashwinvaidya17 in https://github.com/openvinotoolkit/anomalib/pull/1972
- 🔨 Rename OptimalF1 to F1Max for consistency with the literature, by @samet-akcay in https://github.com/openvinotoolkit/anomalib/pull/1980
- 🔨 WinCLIP: set device in text embedding collection and apply forward pass with no grad, by @djdameln in https://github.com/openvinotoolkit/anomalib/pull/1984
- 🔨 WinCLIP improvements by @djdameln in https://github.com/openvinotoolkit/anomalib/pull/1985
- 🚀 Update OpenVINO and ONNX export to support fixed input shape by @adrianboguszewski in https://github.com/openvinotoolkit/anomalib/pull/2006
- 🔨 Update lightning inference by @djdameln in https://github.com/openvinotoolkit/anomalib/pull/2018
- ⬆️ Upgrade wandb by @ashwinvaidya17 in https://github.com/openvinotoolkit/anomalib/pull/2040
- 🔨 Refactor Export by @ashwinvaidya17 in https://github.com/openvinotoolkit/anomalib/pull/2057
- ⬆️ Update `pyproject.toml` so `liccheck` can pick the license by @samet-akcay in https://github.com/openvinotoolkit/anomalib/pull/2074
- ⬆️ Update timm requirement from <=0.9.16,>=0.5.4 to >=0.5.4,<=1.0.3 by @dependabot in https://github.com/openvinotoolkit/anomalib/pull/2075
- 🔨 Update model `README.md` files by @samet-akcay in https://github.com/openvinotoolkit/anomalib/pull/2076

### Deprecated

- 🗑️ Remove labeler and update codeowners by @samet-akcay in https://github.com/openvinotoolkit/anomalib/pull/1946
- 🗑️ Remove requirements directory by @samet-akcay in https://github.com/openvinotoolkit/anomalib/pull/1945
- 🗑️ Remove Docker related files by @ashwinvaidya17 in https://github.com/openvinotoolkit/anomalib/pull/2039
- 🗑️ Remove references to nightly tests by @ashwinvaidya17 in https://github.com/openvinotoolkit/anomalib/pull/2048
- 🗑️ Remove unnecessary jsonargparse dependencies by @davnn in https://github.com/openvinotoolkit/anomalib/pull/2046

### Fixed

- 🐞 Fix dimensionality mismatch issue caused by the new kornia version by @samet-akcay in https://github.com/openvinotoolkit/anomalib/pull/1944
- 🐞 Fix DFM PyTorch inference by @adrianboguszewski in https://github.com/openvinotoolkit/anomalib/pull/1952
- 🐞 Fix anomaly map shape to also work with tiling by @blaz-r in https://github.com/openvinotoolkit/anomalib/pull/1959
- 🐞 Fix EfficientAD's pretrained weigths load path by @seyeon923 in https://github.com/openvinotoolkit/anomalib/pull/1966
- 🐞 fixbug: use BinaryPrecisionRecallCurve instead of PrecisionRecallCurve by @rglkt in https://github.com/openvinotoolkit/anomalib/pull/1956
- 🚨 Hotfix: compute precision recall on raw scores by @ashwinvaidya17 in https://github.com/openvinotoolkit/anomalib/pull/1973
- 🐞 Minor fix to remove input_size from Padim config by @ashwinvaidya17 in https://github.com/openvinotoolkit/anomalib/pull/1988
- 🐞 Fix Reverse Distillation export to ONNX by @adrianboguszewski in https://github.com/openvinotoolkit/anomalib/pull/1990
- 🐞 Fix DSR training when no GPU by @adrianboguszewski in https://github.com/openvinotoolkit/anomalib/pull/2004
- 🐞 Fix efficient ad by @abc-125 in https://github.com/openvinotoolkit/anomalib/pull/2015
- 🐞 Fix keys in data configs to fit AnomalibDataModule parameters by @abc-125 in https://github.com/openvinotoolkit/anomalib/pull/2032
- 🐞 Fix Export docstring in CLI by @ashwinvaidya17 in https://github.com/openvinotoolkit/anomalib/pull/2058
- 🐞 Fix UFlow links by @ashwinvaidya17 in https://github.com/openvinotoolkit/anomalib/pull/2059

### New Contributors

**Full Changelog**:
- @seyeon923 made their first contribution in https://github.com/openvinotoolkit/anomalib/pull/1966
- @rglkt made their first contribution in https://github.com/openvinotoolkit/anomalib/pull/1956
- @DoMaLi94 made their first contribution in https://github.com/openvinotoolkit/anomalib/pull/1847

**Full Changelog**: https://github.com/openvinotoolkit/anomalib/compare/v1.0.1...v1.1.0

## [v1.0.1] - 2024-03-27

Expand Down Expand Up @@ -124,7 +176,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- 🔒 Replace `md5` with `sha-256` by @samet-akcay in https://github.com/openvinotoolkit/anomalib/pull/1680
- 🔨 Refactor Visualisation by @ashwinvaidya17 in https://github.com/openvinotoolkit/anomalib/pull/1693
- 🚀 Replace `albumentations` with `torchvision` transforms by @djdameln in https://github.com/openvinotoolkit/anomalib/pull/1706
- 💥 Create a script to upgrade v0.\* configuration format to v1 by @samet-akcay in https://github.com/openvinotoolkit/anomalib/pull/1738
- 💥 Create a script to upgrade v0.\- configuration format to v1 by @samet-akcay in https://github.com/openvinotoolkit/anomalib/pull/1738
- 🔨 Refactor type alias by @ashwinvaidya17 in https://github.com/openvinotoolkit/anomalib/pull/1742
- 🔨 Remove Lightning dependencies from the CLI and Add `anomalib install` subcommand by @harimkang in https://github.com/openvinotoolkit/anomalib/pull/1748
- 🔨 Refactor `Engine.predict` method by @ashwinvaidya17 in https://github.com/openvinotoolkit/anomalib/pull/1772
Expand Down Expand Up @@ -376,7 +428,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Configure reference frame for multi-frame video clips (<https://github.com/openvinotoolkit/anomalib/pull/1023>)
- Bump OpenVINO version to `2022.3.0` (<https://github.com/openvinotoolkit/anomalib/pull/932>)
- Remove the dependecy on a specific `torchvision` and `torchmetrics` packages.
- Bump PyTorch Lightning version to v.1.9.\* (<https://github.com/openvinotoolkit/anomalib/pull/870>)
- Bump PyTorch Lightning version to v.1.9.\- (<https://github.com/openvinotoolkit/anomalib/pull/870>)
- Make input image normalization and center cropping configurable from config (https://github.com/openvinotoolkit/anomalib/pull/822)
- Improve flexibility and configurability of subset splitting (https://github.com/openvinotoolkit/anomalib/pull/822)
- Switch to new datamodules design (https://github.com/openvinotoolkit/anomalib/pull/822)
Expand Down
2 changes: 2 additions & 0 deletions docs/source/markdown/guides/reference/models/image/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ Student-Teacher Feature Pyramid Matching for Unsupervised Anomaly Detection
:link-type: doc

U-Flow: A U-shaped Normalizing Flow for Anomaly Detection with Unsupervised Threshold
:::

:::{grid-item-card} {material-regular}`model_training;1.5em` WinCLIP
:link: ./winclip
:link-type: doc
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Generator

```{eval-rst}
.. autoclass:: anomalib.pipelines.components.base.job.JobGenerator
:members:
:inherited-members:
:show-inheritance:
```
9 changes: 9 additions & 0 deletions docs/source/markdown/guides/reference/pipelines/base/job.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Job

```{eval-rst}
.. autoclass:: anomalib.pipelines.components.base.job.Job
:members:
:inherited-members:
:show-inheritance:
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Pipeline Base Class

The `Pipeline` class is the base class for all pipelines. It provides the following methods:

```{eval-rst}
.. automodule:: anomalib.pipelines.components.base.pipeline
:members:
:show-inheritance:
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Benchmark Job Generator

```{eval-rst}
.. autoclass:: anomalib.pipelines.benchmark.generator.BenchmarkJobGenerator
:members:
:inherited-members:
:show-inheritance:
```
91 changes: 91 additions & 0 deletions docs/source/markdown/guides/reference/pipelines/benchmark/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# Benchmarking Pipeline

The benchmarking pipeline allows you to run multiple models across combination of parameters and dataset categories to collect metrics. The benchmarking run is configured using a config file that specifies the grid-search parameters. A sample config file is shown below:

```yaml
accelerator:
- cuda
- cpu
benchmark:
seed: 42
model:
class_path:
grid_search: [Padim, Patchcore]
data:
class_path: MVTec
init_args:
category:
grid:
- bottle
- cable
- capsule
```
The `accelerator` parameter is specific to the pipeline and is used to configure the runners. When `cuda` is passed it adds a [parallel](../runners/parallel.md) runner with number of jobs equal to the number of cuda devices. The idea is that since job is independent, we can increase the throughput by distributing each on an individual accelerator. The `cpu` jobs are run [serially](../runners/serial.md).

## Running the Benchmark Pipeline

There are two ways to run the benchmark pipeline; as a subcommand, or as a standalone entrypoint.

:::::{dropdown} CLI
:icon: code

::::{tab-set}
:::{tab-item} Anomalib subcommand
:sync: label-1

```{literalinclude} ../../../../../snippets/pipelines/benchmark/cli_anomalib.txt
:language: bash
```

:::

:::{tab-item} Standalone entrypoint
:sync: label-2

```{literalinclude} ../../../../../snippets/pipelines/benchmark/cli_tools.txt
:language: bash
```

:::

:::::

## Benchmark Pipeline Class

```{eval-rst}
.. autoclass:: anomalib.pipelines.benchmark.pipeline.Benchmark
:members:
:inherited-members:
:show-inheritance:
```

::::{grid}
:margin: 1 1 0 0
:gutter: 1

:::{grid-item-card} Job
:link: ./job
:link-type: doc

Benchmark Job
:::

:::{grid-item-card} Generator
:link: ./generator
:link-type: doc

Benchmark Job Generator
:::

::::

```{toctree}
:caption: Benchmark
:hidden:
./job
./generator
```
10 changes: 10 additions & 0 deletions docs/source/markdown/guides/reference/pipelines/benchmark/job.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Benchmark Job

```{eval-rst}
.. autoclass:: anomalib.pipelines.benchmark.job.BenchmarkJob
:members:
:inherited-members:
:show-inheritance:
```
83 changes: 83 additions & 0 deletions docs/source/markdown/guides/reference/pipelines/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Pipelines

```{danger}
The pipelines feature is experimental and might be changed without backward compatibility.
```

## Introduction

Tasks such as Benchmarking, Ensemble Tiling, and Hyper-parameter optimization requires running multiple models and chaining multiple stages together. The pipelines feature provides a way to define and run such tasks. Each part of the pipeline is designed to be independent and composable so that they can be reused across different pipelines.

## Terminology

- **Pipeline**: Pipeline is the main entity that defines the sequence of [jobs](./base/job.md) to be executed. It is responsible for creating and running the jobs. The job itself is generated using a [job generator](./base/generator.md). And, these are chained using a [runner](./runners/index.md).

- **Runner**: A runner is responsible for scheduling and running the jobs. It also passes the output of the previous job, if available. It also calls the right hooks to gather and save the results from the jobs and passes the gathered results to the next runner.

- **Job Generator**: The job generator is responsible for generating jobs based on the configuration. It is used by the runner to create jobs.

- **Job**: A job is an atomic unit of work that can be run independently. It is responsible for running a single task. For example, training a model or computing metrics. The idea behind this is to ensure that it can be attached to any runner without making changes to the job itself. This is useful when you want to distribute the jobs to increase the throughput of your pipeline.

```{admonition} Detailed Walkthrough
:class: tip
For more clarity on creating a custom pipeline, refer to the [How-To Guide](../../how_to/pipelines/index.md).
```

## Base classes

::::{grid}
:margin: 1 1 0 0
:gutter: 1

:::{grid-item-card} {octicon}`workflow` Pipeline
:link: ./base/pipeline
:link-type: doc

Base class for pipeline.
:::

:::{grid-item-card} {octicon}`file` Job
:link: ./base/job
:link-type: doc

Base class for job.
:::

:::{grid-item-card} {octicon}`iterations` Job Generator
:link: ./base/generator
:link-type: doc

Base class for job generator.
:::

:::{grid-item-card} {octicon}`play` Runner
:link: ./runners/index
:link-type: doc

Base class for runner.
:::

::::

## Available Pipelines

::::{grid}
:margin: 1 1 0 0
:gutter: 1

:::{grid-item-card} {octicon}`number` Benchmarking
:link: ./benchmark/index
:link-type: doc

Compute metrics across models using a grid-search.
:::

::::

```{toctree}
:caption: Pipelines
:hidden:
./benchmark/index
./runners/index
```
39 changes: 39 additions & 0 deletions docs/source/markdown/guides/reference/pipelines/runners/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Runner

```{eval-rst}
.. autoclass:: anomalib.pipelines.components.base.runner.Runner
:members:
```

## Available Runners

Anomalib provides a few runners that can be used in your pipelines.

::::{grid}
:margin: 1 1 0 0
:gutter: 1

:::{grid-item-card} {octicon}`list-ordered` Serial Runner
:link: ./serial
:link-type: doc

Runner for serial jobs.
:::

:::{grid-item-card} {octicon}`git-branch` Parallel Runner
:link: ./parallel
:link-type: doc

Runner for parallel jobs.
:::

::::

```{toctree}
:caption: Runners
:hidden:
./serial
./parallel
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Parallel Runner

```{eval-rst}
.. automodule:: anomalib.pipelines.components.runners.parallel
:members:
:show-inheritance:
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Serial Runner

```{eval-rst}
.. automodule:: anomalib.pipelines.components.runners.serial
:members:
:show-inheritance:
```
Loading

0 comments on commit 76fc980

Please sign in to comment.