Skip to content

Commit

Permalink
Merge branch 'main' into pimo3
Browse files Browse the repository at this point in the history
  • Loading branch information
jpcbertoldo committed Jun 26, 2024
2 parents 012e8e2 + 56843d2 commit fa448f2
Show file tree
Hide file tree
Showing 24 changed files with 576 additions and 62 deletions.
1 change: 1 addition & 0 deletions .github/workflows/code_scan.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
name: Code Scanning
permissions: read-all

on:
workflow_dispatch: # run on request (no need for PR)
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/pre_merge.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
name: Pre-Merge Checks
permissions: read-all

on:
push:
Expand Down
16 changes: 5 additions & 11 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
name: Upload Python Package
permissions: read-all

on:
release:
types: [published]
Expand All @@ -15,18 +17,10 @@ jobs:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools wheel twine
- name: Import GPG Key
pip install build twine
- name: Build the python package
run: |
echo "${{ secrets.GPG_PRIVATE_KEY }}" | base64 --decode | gpg --import --batch --yes --no-tty
- name: Build and sign distribution
run: |
python setup.py sdist bdist_wheel
gpg --batch --yes --no-tty --pinentry-mode loopback --detach-sign -a dist/*.tar.gz
gpg --batch --yes --no-tty --pinentry-mode loopback --detach-sign -a dist/*.whl
python -m build
- name: Upload to PyPI
run: twine upload dist/*
env:
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/upload_coverage.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
name: Upload coverage
permissions: read-all

on:
workflow_run:
workflows: ["Pre-Merge Checks"]
Expand Down
75 changes: 64 additions & 11 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,80 @@ 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 image-level heatmap normalization in visualizer by @djdameln in https://github.com/openvinotoolkit/anomalib/pull/2131
- 🐞 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 +177,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 +429,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
```
Loading

0 comments on commit fa448f2

Please sign in to comment.