From 65345f92697249aaf4a3c8654d8e8be8955170cc Mon Sep 17 00:00:00 2001 From: Ashwin Vaidya Date: Mon, 31 Oct 2022 15:09:16 +0100 Subject: [PATCH 01/24] Use FrEIA from pip + add initial cs-flow model --- .pre-commit-config.yaml | 7 +- anomalib/models/__init__.py | 3 + anomalib/models/cflow/torch_model.py | 4 +- anomalib/models/cflow/utils.py | 5 +- anomalib/models/components/__init__.py | 5 +- .../components/feature_extractors/__init__.py | 5 +- .../{feature_extractor.py => timm.py} | 6 +- .../components/feature_extractors/torchfx.py | 49 ++ anomalib/models/components/freia/README.md | 7 - anomalib/models/components/freia/__init__.py | 16 - .../components/freia/framework/__init__.py | 9 - .../freia/framework/sequence_inn.py | 120 ----- .../components/freia/modules/__init__.py | 10 - .../freia/modules/all_in_one_block.py | 289 ---------- .../models/components/freia/modules/base.py | 112 ---- anomalib/models/cs_flow/__init__.py | 8 + anomalib/models/cs_flow/config.yaml | 118 +++++ anomalib/models/cs_flow/lightning_model.py | 125 +++++ anomalib/models/cs_flow/torch_model.py | 499 ++++++++++++++++++ anomalib/models/dfkde/torch_model.py | 4 +- anomalib/models/dfm/torch_model.py | 4 +- anomalib/models/fastflow/torch_model.py | 4 +- anomalib/models/padim/torch_model.py | 4 +- anomalib/models/patchcore/torch_model.py | 6 +- .../reverse_distillation/torch_model.py | 4 +- anomalib/models/stfpm/lightning_model.py | 6 +- anomalib/models/stfpm/torch_model.py | 6 +- pyproject.toml | 7 +- requirements/base.txt | 1 + .../models/test_feature_extractor.py | 4 +- 30 files changed, 842 insertions(+), 605 deletions(-) rename anomalib/models/components/feature_extractors/{feature_extractor.py => timm.py} (92%) create mode 100644 anomalib/models/components/feature_extractors/torchfx.py delete mode 100644 anomalib/models/components/freia/README.md delete mode 100644 anomalib/models/components/freia/__init__.py delete mode 100644 anomalib/models/components/freia/framework/__init__.py delete mode 100644 anomalib/models/components/freia/framework/sequence_inn.py delete mode 100644 anomalib/models/components/freia/modules/__init__.py delete mode 100644 anomalib/models/components/freia/modules/all_in_one_block.py delete mode 100644 anomalib/models/components/freia/modules/base.py create mode 100644 anomalib/models/cs_flow/__init__.py create mode 100644 anomalib/models/cs_flow/config.yaml create mode 100644 anomalib/models/cs_flow/lightning_model.py create mode 100644 anomalib/models/cs_flow/torch_model.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2e866a4cb6..15a48179a9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -31,7 +31,6 @@ repos: hooks: - id: flake8 args: ["--max-line-length=120", "--ignore=E203,W503"] - exclude: "tests|anomalib/models/components/freia" # python linting - repo: https://github.com/PyCQA/pylint @@ -42,7 +41,7 @@ repos: entry: pylint --score=no language: system types: [python] - exclude: "tests|docs|anomalib/models/components/freia" + exclude: "tests|docs" # python static type checking - repo: https://github.com/pre-commit/mirrors-mypy @@ -50,7 +49,7 @@ repos: hooks: - id: mypy additional_dependencies: [types-PyYAML] - exclude: "tests|anomalib/models/components/freia" + exclude: "tests" - repo: https://github.com/PyCQA/pydocstyle rev: 6.1.1 @@ -61,7 +60,7 @@ repos: entry: pydocstyle language: python types: [python] - exclude: "tests|docs|anomalib/models/components/freia" + exclude: "tests|docs" # notebooks. - repo: https://github.com/nbQA-dev/nbQA diff --git a/anomalib/models/__init__.py b/anomalib/models/__init__.py index 13243b8613..eff9df1d03 100644 --- a/anomalib/models/__init__.py +++ b/anomalib/models/__init__.py @@ -13,6 +13,7 @@ from anomalib.models.cflow import Cflow from anomalib.models.components import AnomalyModule +from anomalib.models.cs_flow import CsFlow from anomalib.models.dfkde import Dfkde from anomalib.models.dfm import Dfm from anomalib.models.draem import Draem @@ -25,6 +26,7 @@ __all__ = [ "Cflow", + "CsFlow", "Dfkde", "Dfm", "Draem", @@ -73,6 +75,7 @@ def get_model(config: Union[DictConfig, ListConfig]) -> AnomalyModule: model_list: List[str] = [ "cflow", + "cs_flow", "dfkde", "dfm", "draem", diff --git a/anomalib/models/cflow/torch_model.py b/anomalib/models/cflow/torch_model.py index fa86da0932..cb2f5d6fa5 100644 --- a/anomalib/models/cflow/torch_model.py +++ b/anomalib/models/cflow/torch_model.py @@ -11,7 +11,7 @@ from anomalib.models.cflow.anomaly_map import AnomalyMapGenerator from anomalib.models.cflow.utils import cflow_head, get_logp, positional_encoding_2d -from anomalib.models.components import FeatureExtractor +from anomalib.models.components import TimmFeatureExtractor class CflowModel(nn.Module): @@ -38,7 +38,7 @@ def __init__( self.dec_arch = decoder self.pool_layers = layers - self.encoder = FeatureExtractor(backbone=self.backbone, layers=self.pool_layers, pre_trained=pre_trained) + self.encoder = TimmFeatureExtractor(backbone=self.backbone, layers=self.pool_layers, pre_trained=pre_trained) self.pool_dims = self.encoder.out_dims self.decoders = nn.ModuleList( [ diff --git a/anomalib/models/cflow/utils.py b/anomalib/models/cflow/utils.py index e2fd0e592e..dad432ec46 100644 --- a/anomalib/models/cflow/utils.py +++ b/anomalib/models/cflow/utils.py @@ -8,11 +8,10 @@ import numpy as np import torch +from FrEIA.framework import SequenceINN +from FrEIA.modules import AllInOneBlock from torch import nn -from anomalib.models.components.freia.framework import SequenceINN -from anomalib.models.components.freia.modules import AllInOneBlock - logger = logging.getLogger(__name__) diff --git a/anomalib/models/components/__init__.py b/anomalib/models/components/__init__.py index 5d4399ec87..7d3450875a 100644 --- a/anomalib/models/components/__init__.py +++ b/anomalib/models/components/__init__.py @@ -5,7 +5,7 @@ from .base import AnomalyModule, DynamicBufferModule from .dimensionality_reduction import PCA, SparseRandomProjection -from .feature_extractors import FeatureExtractor +from .feature_extractors import TimmFeatureExtractor, get_torchfx_feature_extractor from .filters import GaussianBlur2d from .sampling import KCenterGreedy from .stats import GaussianKDE, MultiVariateGaussian @@ -15,9 +15,10 @@ "DynamicBufferModule", "PCA", "SparseRandomProjection", - "FeatureExtractor", + "TimmFeatureExtractor", "KCenterGreedy", "GaussianKDE", "GaussianBlur2d", "MultiVariateGaussian", + "get_torchfx_feature_extractor", ] diff --git a/anomalib/models/components/feature_extractors/__init__.py b/anomalib/models/components/feature_extractors/__init__.py index 0922fd3701..b31d975dcb 100644 --- a/anomalib/models/components/feature_extractors/__init__.py +++ b/anomalib/models/components/feature_extractors/__init__.py @@ -3,6 +3,7 @@ # Copyright (C) 2022 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from .feature_extractor import FeatureExtractor +from .timm import TimmFeatureExtractor +from .torchfx import get_torchfx_feature_extractor -__all__ = ["FeatureExtractor"] +__all__ = ["TimmFeatureExtractor", "get_torchfx_feature_extractor"] diff --git a/anomalib/models/components/feature_extractors/feature_extractor.py b/anomalib/models/components/feature_extractors/timm.py similarity index 92% rename from anomalib/models/components/feature_extractors/feature_extractor.py rename to anomalib/models/components/feature_extractors/timm.py index 6469b37d39..b40000986c 100644 --- a/anomalib/models/components/feature_extractors/feature_extractor.py +++ b/anomalib/models/components/feature_extractors/timm.py @@ -14,7 +14,7 @@ from torch import Tensor, nn -class FeatureExtractor(nn.Module): +class TimmFeatureExtractor(nn.Module): """Extract features from a CNN. Args: @@ -23,9 +23,9 @@ class FeatureExtractor(nn.Module): Example: >>> import torch - >>> from anomalib.core.model.feature_extractor import FeatureExtractor + >>> from anomalib.models.components.feature_extractors import TimmFeatureExtractor - >>> model = FeatureExtractor(model="resnet18", layers=['layer1', 'layer2', 'layer3']) + >>> model = TimmFeatureExtractor(backbone="resnet18", layers=['layer1', 'layer2', 'layer3']) >>> input = torch.rand((32, 3, 256, 256)) >>> features = model(input) diff --git a/anomalib/models/components/feature_extractors/torchfx.py b/anomalib/models/components/feature_extractors/torchfx.py new file mode 100644 index 0000000000..6c8176d2e5 --- /dev/null +++ b/anomalib/models/components/feature_extractors/torchfx.py @@ -0,0 +1,49 @@ +"""Feature Extractor based on TrochFX.""" + +# Copyright (C) 2022 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import importlib +from typing import List, Optional + +from torch.fx.graph_module import GraphModule +from torchvision.models._api import WeightsEnum +from torchvision.models.feature_extraction import create_feature_extractor + + +def get_torchfx_feature_extractor( + backbone: str, return_nodes: List[str], weights: Optional[WeightsEnum] = None +) -> GraphModule: + """Extract features from a CNN. + + Args: + backbone (nn.Module): The backbone to which the feature extraction hooks are attached. + return_nodes (Iterable[str]): List of layer names of the backbone to which the hooks are attached. + You can find the names of these nodes by using `get_graph_node_names` function. + weights (Optional[WeightsEnum]): Weights enum to use for the model. + These enums are defined in `torchvision.models.`. + + Example: + >>> import torch + >>> from anomalib.models.components.feature_extractors import get_torchfx_feature_extractor + >>> from torchvision.models.efficientnet import EfficientNet_B5_Weights + + >>> feature_extractor = get_torchfx_feature_extractor( + backbone="efficientnet_b5", return_nodes=["6.8"], weights=EfficientNet_B5_Weights.DEFAULT + ) + >>> input = torch.rand((32, 3, 256, 256)) + >>> features = feature_extractor(input) + + >>> [layer for layer in features.keys()] + ["6.8"] + >>> [feature.shape for feature in features.values()] + [torch.Size([32, 304, 8, 8])] + """ + try: + models = importlib.import_module("torchvision.models") + backbone_model = getattr(models, backbone) + except ModuleNotFoundError as exception: + raise ModuleNotFoundError(f"Backbone {backbone} not found in torchvision.models") from exception + + feature_extractor = create_feature_extractor(backbone_model(weights=weights).features, return_nodes) + return feature_extractor.eval() diff --git a/anomalib/models/components/freia/README.md b/anomalib/models/components/freia/README.md deleted file mode 100644 index 9fa6281739..0000000000 --- a/anomalib/models/components/freia/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# FrEIA - -This sub-package contains freia packages to use within flow-based algorithms such as Cflow. - -## Description - -[FrEIA](https://github.com/VLL-HD/FrEIA) package is currently not available in pypi to install via pip. The only way to install it is `pip install git+https://github.com/VLL-HD/FrEIA.git`. PyPI, however, does not support installing packages from git links. Due to this limitation, anomalib cannot be updated on PyPI. To avoid this, `anomalib` contains some of the [FrEIA](https://github.com/VLL-HD/FrEIA) modules to facilitate CFlow training/inference. diff --git a/anomalib/models/components/freia/__init__.py b/anomalib/models/components/freia/__init__.py deleted file mode 100644 index 3fb8f62365..0000000000 --- a/anomalib/models/components/freia/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ -"""Framework for Easily Invertible Architectures. - -Module to construct invertible networks with pytorch, based on a graph -structure of operations. - -Link to the original repo: https://github.com/VLL-HD/FrEIA -""" - -# Copyright (c) 2018-2022 Lynton Ardizzone, Visual Learning Lab Heidelberg. -# SPDX-License-Identifier: MIT -# - -from .framework import SequenceINN -from .modules import AllInOneBlock - -__all__ = ["SequenceINN", "AllInOneBlock"] diff --git a/anomalib/models/components/freia/framework/__init__.py b/anomalib/models/components/freia/framework/__init__.py deleted file mode 100644 index 226ceebd51..0000000000 --- a/anomalib/models/components/freia/framework/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -"""Framework.""" - -# Copyright (c) 2018-2022 Lynton Ardizzone, Visual Learning Lab Heidelberg. -# SPDX-License-Identifier: MIT -# - -from .sequence_inn import SequenceINN - -__all__ = ["SequenceINN"] diff --git a/anomalib/models/components/freia/framework/sequence_inn.py b/anomalib/models/components/freia/framework/sequence_inn.py deleted file mode 100644 index a5c05d8291..0000000000 --- a/anomalib/models/components/freia/framework/sequence_inn.py +++ /dev/null @@ -1,120 +0,0 @@ -"""Sequence INN.""" - -# Copyright (c) 2018-2022 Lynton Ardizzone, Visual Learning Lab Heidelberg. -# SPDX-License-Identifier: MIT -# - -# pylint: disable=invalid-name -# flake8: noqa -# pylint: skip-file -# type: ignore -# pydocstyle: noqa - -from typing import Iterable, List, Tuple - -import torch -from torch import Tensor, nn - -from anomalib.models.components.freia.modules.base import InvertibleModule - - -class SequenceINN(InvertibleModule): - """Simpler than FrEIA.framework.GraphINN. - - Only supports a sequential series of modules (no splitting, merging, - branching off). - Has an append() method, to add new blocks in a more simple way than the - computation-graph based approach of GraphINN. For example: - .. code-block:: python - inn = SequenceINN(channels, dims_H, dims_W) - for i in range(n_blocks): - inn.append(FrEIA.modules.AllInOneBlock, clamp=2.0, permute_soft=True) - inn.append(FrEIA.modules.HaarDownsampling) - # and so on - """ - - def __init__(self, *dims: int, force_tuple_output=False): - super().__init__([dims]) - - self.shapes = [tuple(dims)] - self.conditions = [] - self.module_list = nn.ModuleList() - - self.force_tuple_output = force_tuple_output - - def append(self, module_class, cond=None, cond_shape=None, **kwargs): - """Append a reversible block from FrEIA.modules to the network. - - Args: - module_class: Class from FrEIA.modules. - cond (int): index of which condition to use (conditions will be passed as list to forward()). - Conditioning nodes are not needed for SequenceINN. - cond_shape (tuple[int]): the shape of the condition tensor. - **kwargs: Further keyword arguments that are passed to the constructor of module_class (see example). - """ - - dims_in = [self.shapes[-1]] - self.conditions.append(cond) - - if cond is not None: - kwargs["dims_c"] = [cond_shape] - - module = module_class(dims_in, **kwargs) - self.module_list.append(module) - ouput_dims = module.output_dims(dims_in) - assert len(ouput_dims) == 1, "Module has more than one output" - self.shapes.append(ouput_dims[0]) - - def __getitem__(self, item): - """Get item.""" - return self.module_list.__getitem__(item) - - def __len__(self): - """Get length.""" - return self.module_list.__len__() - - def __iter__(self): - """Iter.""" - return self.module_list.__iter__() - - def output_dims(self, input_dims: List[Tuple[int]]) -> List[Tuple[int]]: - """Output Dims.""" - if not self.force_tuple_output: - raise ValueError( - "You can only call output_dims on a SequentialINN " "when setting force_tuple_output=True." - ) - return input_dims - - def forward( - self, x_or_z: Tensor, c: Iterable[Tensor] = None, rev: bool = False, jac: bool = True - ) -> Tuple[Tensor, Tensor]: - """Execute the sequential INN in forward or inverse (rev=True) direction. - - Args: - x_or_z: input tensor (in contrast to GraphINN, a list of - tensors is not supported, as SequenceINN only has - one input). - c: list of conditions. - rev: whether to compute the network forward or reversed. - jac: whether to compute the log jacobian - Returns: - z_or_x (Tensor): network output. - jac (Tensor): log-jacobian-determinant. - """ - - iterator = range(len(self.module_list)) - log_det_jac = 0 - - if rev: - iterator = reversed(iterator) - - if torch.is_tensor(x_or_z): - x_or_z = (x_or_z,) - for i in iterator: - if self.conditions[i] is None: - x_or_z, j = self.module_list[i](x_or_z, jac=jac, rev=rev) - else: - x_or_z, j = self.module_list[i](x_or_z, c=[c[self.conditions[i]]], jac=jac, rev=rev) - log_det_jac = j + log_det_jac - - return x_or_z if self.force_tuple_output else x_or_z[0], log_det_jac diff --git a/anomalib/models/components/freia/modules/__init__.py b/anomalib/models/components/freia/modules/__init__.py deleted file mode 100644 index 4060ed6bfe..0000000000 --- a/anomalib/models/components/freia/modules/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Modules.""" - -# Copyright (c) 2018-2022 Lynton Ardizzone, Visual Learning Lab Heidelberg. -# SPDX-License-Identifier: MIT -# - -from .all_in_one_block import AllInOneBlock -from .base import InvertibleModule - -__all__ = ["AllInOneBlock", "InvertibleModule"] diff --git a/anomalib/models/components/freia/modules/all_in_one_block.py b/anomalib/models/components/freia/modules/all_in_one_block.py deleted file mode 100644 index cc35c1c3f6..0000000000 --- a/anomalib/models/components/freia/modules/all_in_one_block.py +++ /dev/null @@ -1,289 +0,0 @@ -"""All in One Block Module.""" - -# Copyright (c) 2018-2022 Lynton Ardizzone, Visual Learning Lab Heidelberg. -# SPDX-License-Identifier: MIT -# - -# flake8: noqa -# pylint: skip-file -# type: ignore -# pydocstyle: noqa - -import warnings -from typing import Callable - -import numpy as np -import torch -import torch.nn as nn -import torch.nn.functional as F -from scipy.stats import special_ortho_group - -from anomalib.models.components.freia.modules.base import InvertibleModule - - -class AllInOneBlock(InvertibleModule): - r"""Module combining the most common operations in a normalizing flow or similar model. - - It combines affine coupling, permutation, and global affine transformation - ('ActNorm'). It can also be used as GIN coupling block, perform learned - householder permutations, and use an inverted pre-permutation. The affine - transformation includes a soft clamping mechanism, first used in Real-NVP. - The block as a whole performs the following computation: - .. math:: - y = V\\,R \\; \\Psi(s_\\mathrm{global}) \\odot \\mathrm{Coupling}\\Big(R^{-1} V^{-1} x\\Big)+ t_\\mathrm{global} - - The inverse pre-permutation of x (i.e. :math:`R^{-1} V^{-1}`) is optional (see - ``reverse_permutation`` below). - - The learned householder reflection matrix - :math:`V` is also optional all together (see ``learned_householder_permutation`` - below). - - For the coupling, the input is split into :math:`x_1, x_2` along - the channel dimension. Then the output of the coupling operation is the - two halves :math:`u = \\mathrm{concat}(u_1, u_2)`. - .. math:: - u_1 &= x_1 \\odot \\exp \\Big( \\alpha \\; \\mathrm{tanh}\\big( s(x_2) \\big)\\Big) + t(x_2) \\\\ - u_2 &= x_2 - Because :math:`\\mathrm{tanh}(s) \\in [-1, 1]`, this clamping mechanism prevents - exploding values in the exponential. The hyperparameter :math:`\\alpha` can be adjusted. - """ - - def __init__( - self, - dims_in, - dims_c=[], - subnet_constructor: Callable = None, - affine_clamping: float = 2.0, - gin_block: bool = False, - global_affine_init: float = 1.0, - global_affine_type: str = "SOFTPLUS", - permute_soft: bool = False, - learned_householder_permutation: int = 0, - reverse_permutation: bool = False, - ): - r"""Initialize. - - Args: - dims_in (_type_): dims_in - dims_c (list, optional): dims_c. Defaults to []. - subnet_constructor (Callable, optional): class or callable ``f``, called as ``f(channels_in, channels_out)`` and - should return a torch.nn.Module. Predicts coupling coefficients :math:`s, t`. Defaults to None. - affine_clamping (float, optional): clamp the output of the multiplicative coefficients before - exponentiation to +/- ``affine_clamping`` (see :math:`\\alpha` above). Defaults to 2.0. - gin_block (bool, optional): Turn the block into a GIN block from Sorrenson et al, 2019. - Makes it so that the coupling operations as a whole is volume preserving. Defaults to False. - global_affine_init (float, optional): Initial value for the global affine scaling :math:`s_\mathrm{global}`.. Defaults to 1.0. - global_affine_type (str, optional): ``'SIGMOID'``, ``'SOFTPLUS'``, or ``'EXP'``. Defines the activation to be used - on the beta for the global affine scaling (:math:`\\Psi` above).. Defaults to "SOFTPLUS". - permute_soft (bool, optional): bool, whether to sample the permutation matrix :math:`R` from :math:`SO(N)`, - or to use hard permutations instead. Note, ``permute_soft=True`` is very slow - when working with >512 dimensions. Defaults to False. - learned_householder_permutation (int, optional): Int, if >0, turn on the matrix :math:`V` above, that represents - multiple learned householder reflections. Slow if large number. - Dubious whether it actually helps network performance. Defaults to 0. - reverse_permutation (bool, optional): Reverse the permutation before the block, as introduced by Putzky - et al, 2019. Turns on the :math:`R^{-1} V^{-1}` pre-multiplication above. Defaults to False. - - Raises: - ValueError: _description_ - ValueError: _description_ - ValueError: _description_ - """ - - super().__init__(dims_in, dims_c) - - channels = dims_in[0][0] - # rank of the tensors means 1d, 2d, 3d tensor etc. - self.input_rank = len(dims_in[0]) - 1 - # tuple containing all dims except for batch-dim (used at various points) - self.sum_dims = tuple(range(1, 2 + self.input_rank)) - - if len(dims_c) == 0: - self.conditional = False - self.condition_channels = 0 - else: - assert tuple(dims_c[0][1:]) == tuple( - dims_in[0][1:] - ), f"Dimensions of input and condition don't agree: {dims_c} vs {dims_in}." - self.conditional = True - self.condition_channels = sum(dc[0] for dc in dims_c) - - split_len1 = channels - channels // 2 - split_len2 = channels // 2 - self.splits = [split_len1, split_len2] - - try: - self.permute_function = {0: F.linear, 1: F.conv1d, 2: F.conv2d, 3: F.conv3d}[self.input_rank] - except KeyError: - raise ValueError(f"Data is {1 + self.input_rank}D. Must be 1D-4D.") - - self.in_channels = channels - self.clamp = affine_clamping - self.GIN = gin_block - self.reverse_pre_permute = reverse_permutation - self.householder = learned_householder_permutation - - if permute_soft and channels > 512: - warnings.warn( - ( - "Soft permutation will take a very long time to initialize " - f"with {channels} feature channels. Consider using hard permutation instead." - ) - ) - - # global_scale is used as the initial value for the global affine scale - # (pre-activation). It is computed such that - # global_scale_activation(global_scale) = global_affine_init - # the 'magic numbers' (specifically for sigmoid) scale the activation to - # a sensible range. - if global_affine_type == "SIGMOID": - global_scale = 2.0 - np.log(10.0 / global_affine_init - 1.0) - self.global_scale_activation = lambda a: 10 * torch.sigmoid(a - 2.0) - elif global_affine_type == "SOFTPLUS": - global_scale = 2.0 * np.log(np.exp(0.5 * 10.0 * global_affine_init) - 1) - self.softplus = nn.Softplus(beta=0.5) - self.global_scale_activation = lambda a: 0.1 * self.softplus(a) - elif global_affine_type == "EXP": - global_scale = np.log(global_affine_init) - self.global_scale_activation = lambda a: torch.exp(a) - else: - raise ValueError('Global affine activation must be "SIGMOID", "SOFTPLUS" or "EXP"') - - self.global_scale = nn.Parameter( - torch.ones(1, self.in_channels, *([1] * self.input_rank)) * float(global_scale) - ) - self.global_offset = nn.Parameter(torch.zeros(1, self.in_channels, *([1] * self.input_rank))) - - if permute_soft: - w = special_ortho_group.rvs(channels) - else: - w = np.zeros((channels, channels)) - for i, j in enumerate(np.random.permutation(channels)): - w[i, j] = 1.0 - - if self.householder: - # instead of just the permutation matrix w, the learned housholder - # permutation keeps track of reflection vectors vk, in addition to a - # random initial permutation w_0. - self.vk_householder = nn.Parameter(0.2 * torch.randn(self.householder, channels), requires_grad=True) - self.w_perm = None - self.w_perm_inv = None - self.w_0 = nn.Parameter(torch.FloatTensor(w), requires_grad=False) - else: - self.w_perm = nn.Parameter( - torch.FloatTensor(w).view(channels, channels, *([1] * self.input_rank)), requires_grad=False - ) - self.w_perm_inv = nn.Parameter( - torch.FloatTensor(w.T).view(channels, channels, *([1] * self.input_rank)), requires_grad=False - ) - - if subnet_constructor is None: - raise ValueError("Please supply a callable subnet_constructor" "function or object (see docstring)") - self.subnet = subnet_constructor(self.splits[0] + self.condition_channels, 2 * self.splits[1]) - self.last_jac = None - - def _construct_householder_permutation(self): - """Compute a permutation matrix. - - Compute a permutation matrix from the reflection vectors that are - learned internally as nn.Parameters. - """ - w = self.w_0 - for vk in self.vk_householder: - w = torch.mm(w, torch.eye(self.in_channels).to(w.device) - 2 * torch.ger(vk, vk) / torch.dot(vk, vk)) - - for i in range(self.input_rank): - w = w.unsqueeze(-1) - return w - - def _permute(self, x, rev=False): - """Perform permutation. - - Performs the permutation and scaling after the coupling operation. - Returns transformed outputs and the LogJacDet of the scaling operation. - """ - if self.GIN: - scale = 1.0 - perm_log_jac = 0.0 - else: - scale = self.global_scale_activation(self.global_scale) - perm_log_jac = torch.sum(torch.log(scale)) - - if rev: - return ((self.permute_function(x, self.w_perm_inv) - self.global_offset) / scale, perm_log_jac) - else: - return (self.permute_function(x * scale + self.global_offset, self.w_perm), perm_log_jac) - - def _pre_permute(self, x, rev=False): - """Permute before the coupling block, only used if reverse_permutation is set.""" - if rev: - return self.permute_function(x, self.w_perm) - else: - return self.permute_function(x, self.w_perm_inv) - - def _affine(self, x, a, rev=False): - """Perform affine coupling operation. - - Given the passive half, and the pre-activation outputs of the - coupling subnetwork, perform the affine coupling operation. - Returns both the transformed inputs and the LogJacDet. - """ - - # the entire coupling coefficient tensor is scaled down by a - # factor of ten for stability and easier initialization. - a *= 0.1 - ch = x.shape[1] - - sub_jac = self.clamp * torch.tanh(a[:, :ch]) - if self.GIN: - sub_jac -= torch.mean(sub_jac, dim=self.sum_dims, keepdim=True) - - if not rev: - return (x * torch.exp(sub_jac) + a[:, ch:], torch.sum(sub_jac, dim=self.sum_dims)) - else: - return ((x - a[:, ch:]) * torch.exp(-sub_jac), -torch.sum(sub_jac, dim=self.sum_dims)) - - def forward(self, x, c=[], rev=False, jac=True): - """See base class docstring.""" - if self.householder: - self.w_perm = self._construct_householder_permutation() - if rev or self.reverse_pre_permute: - self.w_perm_inv = self.w_perm.transpose(0, 1).contiguous() - - if rev: - x, global_scaling_jac = self._permute(x[0], rev=True) - x = (x,) - elif self.reverse_pre_permute: - x = (self._pre_permute(x[0], rev=False),) - - x1, x2 = torch.split(x[0], self.splits, dim=1) - - if self.conditional: - x1c = torch.cat([x1, *c], 1) - else: - x1c = x1 - - if not rev: - a1 = self.subnet(x1c) - x2, j2 = self._affine(x2, a1) - else: - a1 = self.subnet(x1c) - x2, j2 = self._affine(x2, a1, rev=True) - - log_jac_det = j2 - x_out = torch.cat((x1, x2), 1) - - if not rev: - x_out, global_scaling_jac = self._permute(x_out, rev=False) - elif self.reverse_pre_permute: - x_out = self._pre_permute(x_out, rev=True) - - # add the global scaling Jacobian to the total. - # trick to get the total number of non-channel dimensions: - # number of elements of the first channel of the first batch member - n_pixels = x_out[0, :1].numel() - log_jac_det += (-1) ** rev * n_pixels * global_scaling_jac - - return (x_out,), log_jac_det - - def output_dims(self, input_dims): - """Output Dims.""" - return input_dims diff --git a/anomalib/models/components/freia/modules/base.py b/anomalib/models/components/freia/modules/base.py deleted file mode 100644 index 0a67d31541..0000000000 --- a/anomalib/models/components/freia/modules/base.py +++ /dev/null @@ -1,112 +0,0 @@ -"""Base Module.""" - -# Copyright (c) 2018-2022 Lynton Ardizzone, Visual Learning Lab Heidelberg. -# SPDX-License-Identifier: MIT -# - -# flake8: noqa -# pylint: skip-file -# type: ignore -# pydocstyle: noqa - -from typing import Iterable, List, Tuple - -import torch.nn as nn -from torch import Tensor - - -class InvertibleModule(nn.Module): - r"""Base class for all invertible modules in FrEIA. - - Given ``module``, an instance of some InvertibleModule. - This ``module`` shall be invertible in its input dimensions, - so that the input can be recovered by applying the module - in backwards mode (``rev=True``), not to be confused with - ``pytorch.backward()`` which computes the gradient of an operation:: - x = torch.randn(BATCH_SIZE, DIM_COUNT) - c = torch.randn(BATCH_SIZE, CONDITION_DIM) - # Forward mode - z, jac = module([x], [c], jac=True) - # Backward mode - x_rev, jac_rev = module(z, [c], rev=True) - The ``module`` returns :math:`\\log \\det J = \\log \\left| \\det \\frac{\\partial f}{\\partial x} \\right|` - of the operation in forward mode, and - :math:`-\\log | \\det J | = \\log \\left| \\det \\frac{\\partial f^{-1}}{\\partial z} \\right| = -\\log \\left| \\det \\frac{\\partial f}{\\partial x} \\right|` - in backward mode (``rev=True``). - Then, ``torch.allclose(x, x_rev) == True`` and ``torch.allclose(jac, -jac_rev) == True``. - """ - - def __init__(self, dims_in: Iterable[Tuple[int]], dims_c: Iterable[Tuple[int]] = None): - """Initialize. - - Args: - dims_in: list of tuples specifying the shape of the inputs to this - operator: ``dims_in = [shape_x_0, shape_x_1, ...]`` - dims_c: list of tuples specifying the shape of the conditions to - this operator. - """ - super().__init__() - if dims_c is None: - dims_c = [] - self.dims_in = list(dims_in) - self.dims_c = list(dims_c) - - def forward( - self, x_or_z: Iterable[Tensor], c: Iterable[Tensor] = None, rev: bool = False, jac: bool = True - ) -> Tuple[Tuple[Tensor], Tensor]: - r"""Forward/Backward Pass. - - Perform a forward (default, ``rev=False``) or backward pass (``rev=True``) through this module/operator. - - **Note to implementers:** - - Subclasses MUST return a Jacobian when ``jac=True``, but CAN return a - valid Jacobian when ``jac=False`` (not punished). The latter is only recommended - if the computation of the Jacobian is trivial. - - Subclasses MUST follow the convention that the returned Jacobian be - consistent with the evaluation direction. Let's make this more precise: - Let :math:`f` be the function that the subclass represents. Then: - .. math:: - J &= \\log \\det \\frac{\\partial f}{\\partial x} \\\\ - -J &= \\log \\det \\frac{\\partial f^{-1}}{\\partial z}. - Any subclass MUST return :math:`J` for forward evaluation (``rev=False``), - and :math:`-J` for backward evaluation (``rev=True``). - - Args: - x_or_z: input data (array-like of one or more tensors) - c: conditioning data (array-like of none or more tensors) - rev: perform backward pass - jac: return Jacobian associated to the direction - """ - raise NotImplementedError(f"{self.__class__.__name__} does not provide forward(...) method") - - def log_jacobian(self, *args, **kwargs): - """This method is deprecated, and does nothing except raise a warning.""" - raise DeprecationWarning( - "module.log_jacobian(...) is deprecated. " - "module.forward(..., jac=True) returns a " - "tuple (out, jacobian) now." - ) - - def output_dims(self, input_dims: List[Tuple[int]]) -> List[Tuple[int]]: - """Use for shape inference during construction of the graph. - - MUST be implemented for each subclass of ``InvertibleModule``. - - Args: - input_dims: A list with one entry for each input to the module. - Even if the module only has one input, must be a list with one - entry. Each entry is a tuple giving the shape of that input, - excluding the batch dimension. For example for a module with one - input, which receives a 32x32 pixel RGB image, ``input_dims`` would - be ``[(3, 32, 32)]`` - - Returns: - A list structured in the same way as ``input_dims``. Each entry - represents one output of the module, and the entry is a tuple giving - the shape of that output. For example if the module splits the image - into a right and a left half, the return value should be - ``[(3, 16, 32), (3, 16, 32)]``. It is up to the implementor of the - subclass to ensure that the total number of elements in all inputs - and all outputs is consistent. - """ - raise NotImplementedError(f"{self.__class__.__name__} does not provide output_dims(...)") diff --git a/anomalib/models/cs_flow/__init__.py b/anomalib/models/cs_flow/__init__.py new file mode 100644 index 0000000000..f7157551e3 --- /dev/null +++ b/anomalib/models/cs_flow/__init__.py @@ -0,0 +1,8 @@ +"""Fully Convolutional Cross-Scale-Flows for Image-based Defect Detection.""" + +# Copyright (C) 2022 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +from .lightning_model import CsFlow, CsFlowLightning + +__all__ = ["CsFlow", "CsFlowLightning"] diff --git a/anomalib/models/cs_flow/config.yaml b/anomalib/models/cs_flow/config.yaml new file mode 100644 index 0000000000..2d2fe98701 --- /dev/null +++ b/anomalib/models/cs_flow/config.yaml @@ -0,0 +1,118 @@ +dataset: + name: mvtec #options: [mvtec, btech, folder] + format: mvtec + path: ./datasets/MVTec + category: bottle + task: segmentation + image_size: 256 # 768 is the dimensions used in the official implementation + train_batch_size: 32 + test_batch_size: 32 + inference_batch_size: 32 + num_workers: 36 + transform_config: + train: null + val: null + create_validation_set: false + tiling: + apply: false + tile_size: null + stride: null + remove_border_count: 0 + use_random_tiling: False + random_tile_count: 16 + +model: + name: cs_flow + backbone: efficientnet_b5 + clamp: 3 + cross_conv_hidden_channels: 1024 + early_stopping: + patience: 3 + metric: pixel_AUROC + mode: max + eps: 1e-04 # Adam epsilon + layers: + - 6.8 + lr: 2e-4 + n_coupling_blocks: 4 + n_scales: 3 + normalization_method: min_max # options: [null, min_max, cdf] + weight_decay: 1e-5 # Adam weight decay + +metrics: + image: + - F1Score + - AUROC + pixel: + - F1Score + - AUROC + threshold: + method: adaptive #options: [adaptive, manual] + manual_image: null + manual_pixel: null + +visualization: + show_images: False # show images on the screen + save_images: True # save images to the file system + log_images: True # log images to the available loggers (if any) + image_save_path: null # path to which images will be saved + mode: full # options: ["full", "simple"] + +project: + seed: 0 + path: ./results + +logging: + logger: [] # options: [comet, tensorboard, wandb, csv] or combinations. + log_graph: false # Logs the model graph to respective logger. + +optimization: + export_mode: null #options: onnx, openvino +# PL Trainer Args. Don't add extra parameter here. +trainer: + accelerator: auto # <"cpu", "gpu", "tpu", "ipu", "hpu", "auto"> + accumulate_grad_batches: 1 + amp_backend: native + auto_lr_find: false + auto_scale_batch_size: false + auto_select_gpus: false + benchmark: false + check_val_every_n_epoch: 1 + default_root_dir: null + detect_anomaly: false + deterministic: false + devices: 1 + enable_checkpointing: true + enable_model_summary: true + enable_progress_bar: true + fast_dev_run: false + gpus: null # Set automatically + gradient_clip_val: 1 # Grad clip value set based on the official implementation + ipus: null + limit_predict_batches: 1.0 + limit_test_batches: 1.0 + limit_train_batches: 1.0 + limit_val_batches: 1.0 + log_every_n_steps: 50 + log_gpu_memory: null + max_epochs: 240 + max_steps: -1 + max_time: null + min_epochs: null + min_steps: null + move_metrics_to_cpu: false + multiple_trainloader_mode: max_size_cycle + num_nodes: 1 + num_processes: null + num_sanity_val_steps: 0 + overfit_batches: 0.0 + plugins: null + precision: 32 + profiler: null + reload_dataloaders_every_n_epochs: 0 + replace_sampler_ddp: true + strategy: null + sync_batchnorm: false + tpu_cores: null + track_grad_norm: -1 + val_check_interval: 1.0 diff --git a/anomalib/models/cs_flow/lightning_model.py b/anomalib/models/cs_flow/lightning_model.py new file mode 100644 index 0000000000..00c8217cc7 --- /dev/null +++ b/anomalib/models/cs_flow/lightning_model.py @@ -0,0 +1,125 @@ +"""Fully Convolutional Cross-Scale-Flows for Image-based Defect Detection. + +https://arxiv.org/pdf/2110.02855.pdf +""" + +# Copyright (C) 2022 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import logging +from typing import Tuple, Union + +import torch +from omegaconf import DictConfig, ListConfig +from pytorch_lightning.utilities.cli import MODEL_REGISTRY +from torch import Tensor + +from anomalib.models.components import AnomalyModule + +from .torch_model import CsFlowModel + +logger = logging.getLogger(__name__) + +__all__ = ["CsFlow", "CsFlowLightning"] + + +@MODEL_REGISTRY +class CsFlow(AnomalyModule): + """Fully Convolutional Cross-Scale-Flows for Image-based Defect Detection. + + Args: + input_size (Tuple[int, int]): Size of the model input. + n_coupling_blocks (int): Number of coupling blocks in the model. + clamp (int): Clamp value for glow layer. + num_channels (int): Number of channels in the model. + """ + + def __init__( + self, + input_size: Tuple[int, int], + cross_conv_hidden_channels: int, + n_coupling_blocks: int, + clamp: int, + num_channels: int, + ): + super().__init__() + self.model: CsFlowModel = CsFlowModel( + input_size=input_size, + cross_conv_hidden_channels=cross_conv_hidden_channels, + n_coupling_blocks=n_coupling_blocks, + clamp=clamp, + num_channels=num_channels, + ) + + def _get_loss(self, z_dist: Tensor, jacobians: Tensor): + """Loss function of CsFlow. + + Args: + z_distribution (Tensor): Latent space image mappings from NF. + jacobians (Tensor): Jacobians of the distribution + + Returns: + Loss value + """ + z_dist = torch.cat([z_dist[i].reshape(z_dist[i].shape[0], -1) for i in range(len(z_dist))], dim=1) + return torch.mean(0.5 * torch.sum(z_dist**2, dim=(1,)) - jacobians) / z_dist.shape[1] + + def training_step(self, batch, _): + """Training Step of CsFlow. + + Args: + batch (Tensor): Input batch + _: Index of the batch. + + Returns: + Loss value + """ + self.model.feature_extractor.eval() + z_dist, jacobians = self.model(batch["image"]) + loss = self._get_loss(z_dist, jacobians) + return {"loss": loss} + + def validation_step(self, batch, _): + """Validation step for CS Flow.""" + anomaly_maps, anomaly_scores = self.model(batch["image"]) + batch["anomaly_maps"] = anomaly_maps + batch["anomaly_scores"] = anomaly_scores + return batch + + +class CsFlowLightning(CsFlow): + """Fully Convolutional Cross-Scale-Flows for Image-based Defect Detection. + + Args: + hprams (Union[DictConfig, ListConfig]): Model params + """ + + def __init__(self, hparams: Union[DictConfig, ListConfig]): + super().__init__( + input_size=hparams.model.input_size, + n_coupling_blocks=hparams.model.n_coupling_blocks, + cross_conv_hidden_channels=hparams.model.cross_conv_hidden_channels, + clamp=hparams.model.clamp, + num_channels=3, + ) + self.hparams: Union[DictConfig, ListConfig] # type: ignore + self.save_hyperparameters(hparams) + + def configure_optimizers(self) -> torch.optim.Optimizer: + """Configures optimizers. + + Note: + This method is used for the existing CLI. + When PL CLI is introduced, configure optimizers method will be + deprecated, and optimizers will be configured from either + config.yaml file or from CLI. + + Returns: + Optimizer: Adam optimizer + """ + return torch.optim.Adam( + self.parameters(), + lr=self.hparams.model.lr, + eps=self.hparams.model.eps, + weight_decay=self.hparams.model.weight_decay, + ) diff --git a/anomalib/models/cs_flow/torch_model.py b/anomalib/models/cs_flow/torch_model.py new file mode 100644 index 0000000000..5d0c74d583 --- /dev/null +++ b/anomalib/models/cs_flow/torch_model.py @@ -0,0 +1,499 @@ +"""PyTorch model for CS-Flow implementation.""" + + +# Original Code +# Copyright (c) 2021 marco-rudolph +# https://github.com/marco-rudolph/cs-flow +# SPDX-License-Identifier: MIT +# +# Modified +# Copyright (C) 2022 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + + +from math import exp +from typing import Callable, Dict, List, Optional, Tuple + +import numpy as np +import torch +import torch.nn.functional as F +from FrEIA.framework import GraphINN, InputNode, Node, OutputNode +from FrEIA.modules import InvertibleModule +from torch import Tensor, nn +from torchvision.models.efficientnet import EfficientNet_B5_Weights + +from anomalib.models.components.feature_extractors import get_torchfx_feature_extractor + + +class CrossConvolutions(nn.Module): + """Cross convolution for the three scales.""" + + def __init__( + self, + in_channels: int, + channels: int, + channels_hidden: int = 512, + kernel_size: int = 3, + leaky_slope: float = 0.1, + batch_norm: bool = False, + use_gamma: bool = True, + ): + super().__init__() + + pad = kernel_size // 2 + self.leaky_slope = leaky_slope + pad_mode = "zeros" + self.use_gamma = use_gamma + self.gamma0 = nn.Parameter(torch.zeros(1)) + self.gamma1 = nn.Parameter(torch.zeros(1)) + self.gamma2 = nn.Parameter(torch.zeros(1)) + + self.conv_scale0_0 = nn.Conv2d( + in_channels, + channels_hidden, + kernel_size=kernel_size, + padding=pad, + bias=not batch_norm, + padding_mode=pad_mode, + ) + + self.conv_scale1_0 = nn.Conv2d( + in_channels, + channels_hidden, + kernel_size=kernel_size, + padding=pad, + bias=not batch_norm, + padding_mode=pad_mode, + ) + self.conv_scale2_0 = nn.Conv2d( + in_channels, + channels_hidden, + kernel_size=kernel_size, + padding=pad, + bias=not batch_norm, + padding_mode=pad_mode, + ) + self.conv_scale0_1 = nn.Conv2d( + channels_hidden * 1, + channels, # + kernel_size=kernel_size, + padding=pad, + bias=not batch_norm, + padding_mode=pad_mode, + dilation=1, + ) + self.conv_scale1_1 = nn.Conv2d( + channels_hidden * 1, + channels, # + kernel_size=kernel_size, + padding=pad * 1, + bias=not batch_norm, + padding_mode=pad_mode, + dilation=1, + ) + self.conv_scale2_1 = nn.Conv2d( + channels_hidden * 1, + channels, # + kernel_size=kernel_size, + padding=pad, + bias=not batch_norm, + padding_mode=pad_mode, + ) + + self.upsample = nn.Upsample(scale_factor=2, mode="bilinear", align_corners=False) + + self.up_conv10 = nn.Conv2d( + channels_hidden, channels, kernel_size=kernel_size, padding=pad, bias=True, padding_mode=pad_mode + ) + + self.up_conv21 = nn.Conv2d( + channels_hidden, channels, kernel_size=kernel_size, padding=pad, bias=True, padding_mode=pad_mode + ) + + self.down_conv01 = nn.Conv2d( + channels_hidden, + channels, + kernel_size=kernel_size, + padding=pad, + bias=not batch_norm, + stride=2, + padding_mode=pad_mode, + dilation=1, + ) + + self.down_conv12 = nn.Conv2d( + channels_hidden, + channels, + kernel_size=kernel_size, + padding=pad, + bias=not batch_norm, + stride=2, + padding_mode=pad_mode, + dilation=1, + ) + + self.leaky_relu = nn.LeakyReLU(self.leaky_slope) + + def forward(self, scale0, scale1, scale2): + """Applies the cross convolution to the three scales.""" + out0 = self.conv_scale0_0(scale0) + out1 = self.conv_scale1_0(scale1) + out2 = self.conv_scale2_0(scale2) + + lr0 = self.leaky_relu(out0) + lr1 = self.leaky_relu(out1) + lr3 = self.leaky_relu(out2) + + out0 = self.conv_scale0_1(lr0) + out1 = self.conv_scale1_1(lr1) + out2 = self.conv_scale2_1(lr3) + + y1_up = self.up_conv10(self.upsample(lr1)) + y2_up = self.up_conv21(self.upsample(lr3)) + + y0_down = self.down_conv01(lr0) + y1_down = self.down_conv12(lr1) + + out0 = out0 + y1_up + out1 = out1 + y0_down + y2_up + out2 = out2 + y1_down + + if self.use_gamma: + out0 = out0 * self.gamma0 + out1 = out1 * self.gamma1 + out2 = out2 * self.gamma2 + return out0, out1, out2 + + +class ParallelPermute(InvertibleModule): + """Permutes input vector in a random but fixed way. + + Args: + dim (List[Tuple[int]]): Dimension of the input vector. + seed (Optional[float]=None): Seed for the random permutation. + """ + + def __init__(self, dims_in: List[Tuple[int]], seed: Optional[float] = None): + super().__init__(dims_in) + self.n_inputs: int = len(dims_in) + self.in_channels = [dims_in[i][0] for i in range(self.n_inputs)] + + np.random.seed(seed) + perm, perm_inv = self.get_random_perm(0) + self.perm = [perm] # stores the random order of channels + self.perm_inv = [perm_inv] # stores the inverse mapping to recover the original order of channels + + for i in range(1, self.n_inputs): + perm, perm_inv = self.get_random_perm(i) + self.perm.append(perm) + self.perm_inv.append(perm_inv) + + def get_random_perm(self, index: int) -> Tuple[Tensor, Tensor]: + """Returns a random permutation of the channels for each input. + + Args: + i: index of the input + + Returns: + Tuple[Tensor, Tensor]: permutation and inverse permutation + """ + perm = np.random.permutation(self.in_channels[index]) + perm_inv = np.zeros_like(perm) + for idx, permutation in enumerate(perm): + perm_inv[permutation] = idx + + perm = torch.LongTensor(perm) + perm_inv = torch.LongTensor(perm_inv) + return perm, perm_inv + + def forward(self, x: List[Tensor], rev=False, jac=True) -> Tuple[List[Tensor], float]: + """Applies the permutation to the input. + + Args: + x: list of input tensors + rev: (unused) if True, applies the inverse permutation + jac: (unused) if True, computes the log determinant of the Jacobian + + Returns: + Tuple[Tensor, Tensor]: output tensor and log determinant of the Jacobian + """ + if not rev: + return [x[i][:, self.perm[i]] for i in range(self.n_inputs)], 0.0 + + return [x[i][:, self.perm_inv[i]] for i in range(self.n_inputs)], 0.0 + + def output_dims(self, input_dims: List[Tuple[int]]) -> List[Tuple[int]]: + """Returns the output dimensions of the module.""" + return input_dims + + +class ParallelGlowCouplingLayer(InvertibleModule): + """Coupling block that follows the GLOW design but is applied to all the scales in parallel. + + Args: + dims_in (List[Tuple[int]]): list of dimensions of the input tensors + subnet_constructor (Callable): constructor of the subnet + subnet_args (Dict): arguments of the subnet + clamp (float): clamp value for the output of the subnet + """ + + def __init__(self, dims_in: List[Tuple[int]], subnet_constructor: Callable, subnet_args: Dict, clamp: float = 5.0): + super().__init__(dims_in) + channels = dims_in[0][0] + self.ndims = len(dims_in[0]) + + self.split_len1 = channels // 2 + self.split_len2 = channels - channels // 2 + + self.clamp = clamp + + self.max_s = exp(clamp) + self.min_s = exp(-clamp) + + self.subnet1 = subnet_constructor(self.split_len1, self.split_len2 * 2, **subnet_args) + self.subnet2 = subnet_constructor(self.split_len2, self.split_len1 * 2, **subnet_args) + + def exp(self, input_tensor): + """Exponentiates the input and, optionally, clamps it to avoid numerical issues.""" + if self.clamp > 0: + return torch.exp(self.log_e(input_tensor)) + return torch.exp(input_tensor) + + def log_e(self, input_tensor): + """Returns log of input. And optionally clamped to avoid numerical issues.""" + if self.clamp > 0: + return self.clamp * 0.636 * torch.atan(input_tensor / self.clamp) + return input_tensor + + def forward(self, x: List[Tensor], rev=False, jac=True): + """Applies GLOW coupling for the three scales.""" + + x01, x02 = (x[0].narrow(1, 0, self.split_len1), x[0].narrow(1, self.split_len1, self.split_len2)) + x11, x12 = (x[1].narrow(1, 0, self.split_len1), x[1].narrow(1, self.split_len1, self.split_len2)) + x21, x22 = (x[2].narrow(1, 0, self.split_len1), x[2].narrow(1, self.split_len1, self.split_len2)) + + if not rev: + r02, r12, r22 = self.subnet2(x02, x12, x22) + + s02, t02 = r02[:, : self.split_len1], r02[:, self.split_len1 :] + s12, t12 = r12[:, : self.split_len1], r12[:, self.split_len1 :] + s22, t22 = r22[:, : self.split_len1], r22[:, self.split_len1 :] + + y01 = self.exp(s02) * x01 + t02 + y11 = self.exp(s12) * x11 + t12 + y21 = self.exp(s22) * x21 + t22 + + r01, r11, r21 = self.subnet1(y01, y11, y21) + + s01, t01 = r01[:, : self.split_len2], r01[:, self.split_len2 :] + s11, t11 = r11[:, : self.split_len2], r11[:, self.split_len2 :] + s21, t21 = r21[:, : self.split_len2], r21[:, self.split_len2 :] + y02 = self.exp(s01) * x02 + t01 + y12 = self.exp(s11) * x12 + t11 + y22 = self.exp(s21) * x22 + t21 + + else: # names of x and y are swapped! + r01, r11, r21 = self.subnet1(x01, x11, x21) + + s01, t01 = r01[:, : self.split_len2], r01[:, self.split_len2 :] + s11, t11 = r11[:, : self.split_len2], r11[:, self.split_len2 :] + s21, t21 = r21[:, : self.split_len2], r21[:, self.split_len2 :] + + y02 = (x02 - t01) / self.exp(s01) + y12 = (x12 - t11) / self.exp(s11) + y22 = (x22 - t21) / self.exp(s21) + + r02, r12, r22 = self.subnet2(y02, y12, y22) + + s02, t02 = r02[:, : self.split_len2], r01[:, self.split_len2 :] + s12, t12 = r12[:, : self.split_len2], r11[:, self.split_len2 :] + s22, t22 = r22[:, : self.split_len2], r21[:, self.split_len2 :] + + y01 = (x01 - t02) / self.exp(s02) + y11 = (x11 - t12) / self.exp(s12) + y21 = (x21 - t22) / self.exp(s22) + + z_dist0 = torch.cat((y01, y02), 1) + z_dist1 = torch.cat((y11, y12), 1) + z_dist2 = torch.cat((y21, y22), 1) + + z_dist0 = torch.clamp(z_dist0, -1e6, 1e6) + z_dist1 = torch.clamp(z_dist1, -1e6, 1e6) + z_dist2 = torch.clamp(z_dist2, -1e6, 1e6) + + jac0 = torch.sum(self.log_e(s01), dim=(1, 2, 3)) + torch.sum(self.log_e(s02), dim=(1, 2, 3)) + jac1 = torch.sum(self.log_e(s11), dim=(1, 2, 3)) + torch.sum(self.log_e(s12), dim=(1, 2, 3)) + jac2 = torch.sum(self.log_e(s21), dim=(1, 2, 3)) + torch.sum(self.log_e(s22), dim=(1, 2, 3)) + + # Since Jacobians are only used for computing loss and summed in the loss, the idea is to sum them here + return [z_dist0, z_dist1, z_dist2], torch.stack([jac0, jac1, jac2], dim=1).sum() + + def output_dims(self, input_dims: List[Tuple[int]]): + """Output dimensions of the module.""" + return input_dims + + +class CsFlowModel(nn.Module): + """CS Flow Module. + + Args: + input_size (Tuple[int, int]): Input image size. + n_coupling_blocks (int): Number of coupling blocks. + clamp (float): Clamp value for the coupling blocks. + num_channels (int): Number of channels in the input image. + """ + + def __init__( + self, + input_size: Tuple[int, int], + cross_conv_hidden_channels: int, + n_coupling_blocks: int = 4, + clamp: int = 3, + num_channels: int = 3, + ): + + super().__init__() + self.input_dims = (num_channels, *input_size) + self.n_coupling_blocks = n_coupling_blocks + self.kernel_sizes = [3] * (n_coupling_blocks - 1) + [5] + self.clamp = clamp + self.cross_conv_hidden_channels = cross_conv_hidden_channels + self.feature_extractor = MultiScaleFeatureExtractor(n_scales=3, input_size=input_size) + self.graph = self._create_graph() + + def _create_graph(self): + nodes = [] + # 304 is the number of features extracted from EfficientNet-B5 feature extractor + nodes.append(InputNode(304, (self.input_dims[1] // 32), (self.input_dims[2] // 32), name="input")) + nodes.append(InputNode(304, (self.input_dims[1] // 64), (self.input_dims[2] // 64), name="input2")) + nodes.append(InputNode(304, (self.input_dims[1] // 128), (self.input_dims[2] // 128), name="input3")) + + for coupling_block in range(self.n_coupling_blocks): + if coupling_block == 0: + node_to_permute = [nodes[-3].out0, nodes[-2].out0, nodes[-1].out0] + else: + node_to_permute = [nodes[-1].out0, nodes[-1].out1, nodes[-1].out2] + + nodes.append( + Node(node_to_permute, ParallelPermute, {"seed": coupling_block}, name=f"permute_{coupling_block}") + ) + nodes.append( + Node( + [nodes[-1].out0, nodes[-1].out1, nodes[-1].out2], + ParallelGlowCouplingLayer, + { + "clamp": self.clamp, + "F_class": CrossConvolutions, + "F_args": { + "channels_hidden": self.cross_conv_hidden_channels, + "kernel_size": self.kernel_sizes[coupling_block], + }, + }, + name=f"fc1_{coupling_block}", + ) + ) + + nodes.append(OutputNode([nodes[-1].out0], name="output_end0")) + nodes.append(OutputNode([nodes[-2].out1], name="output_end1")) + nodes.append(OutputNode([nodes[-3].out2], name="output_end2")) + return GraphINN(nodes) + + def forward(self, images) -> Tuple[Tensor, Tensor]: + """Forward method of the model. + + Args: + images (Tensor): Input images. + + Returns: + Tuple[Tensor, Tensor]: During training: Tuple containing the z_distribution for three scales and the sum + of log determinant of the Jacobian. During evaluation: Tuple containing anomaly maps and anomaly scores + """ + features = self.feature_extractor(images) + if self.training: + output = self.graph(features) + else: + # TODO: add anomaly map generation + z_dist, _ = self.graph(features) # Ignore Jacobians + anomaly_scores = self._get_anomaly_scores(z_dist) + anomaly_maps = self._get_anomaly_maps(z_dist) + output = anomaly_maps, anomaly_scores + return output + + def _get_anomaly_maps(self, z_dists: Tuple[Tensor]) -> Tensor: + """Get anomaly maps by taking mean of the z-distributions across channels for the largest scale. + + Args: + z_dists (Tensor): z-distributions for the three scales. + + Returns: + Tensor: Anomaly maps. + """ + anomaly_map = torch.ones(z_dists[0].shape[0], 1, *self.input_dims[1:]).to(z_dists[0].device) + for z_dist in z_dists: + anomaly_map *= F.interpolate( + (z_dist**2).mean(dim=1, keepdim=True), + size=self.input_dims[1:], + mode="bilinear", + align_corners=False, + ) + return anomaly_map + + def _get_anomaly_scores(self, z_dists: Tensor) -> Tensor: + """Get anomaly scores from the latent distribution. + + Args: + z_dist (Tensor): Latent distribution. + + Returns: + Tensor: Anomaly scores. + """ + # z_dist is a 3 length list of tensors with shape b x 304 x fx x fy + flat_maps: List[Tensor] = [] + for z_dist in z_dists: + flat_maps.append(z_dist.reshape(z_dist.shape[0], -1)) + flat_maps_tensor = torch.cat(flat_maps, dim=1) + anomaly_scores = torch.mean(flat_maps_tensor**2 / 2, dim=1) + return anomaly_scores + + +class MultiScaleFeatureExtractor(nn.Module): + """Multi-scale feature extractor. + + Uses 36th layer of EfficientNet-B5 to extract features. + + Args: + n_scales (int): Number of scales for input image. + input_size (Tuple[int, int]): Size of input image. + """ + + def __init__(self, n_scales: int, input_size: Tuple[int, int]): + super().__init__() + + self.n_scales = n_scales + self.input_size = input_size + self.feature_extractor = get_torchfx_feature_extractor( + backbone="efficientnet_b5", weights=EfficientNet_B5_Weights.DEFAULT, return_nodes=["6.8"] + ) + + def forward(self, input_tensor: Tensor) -> List[Tensor]: + """Extracts features at three scales. + + Args: + input_tensor (Tensor): Input images. + + Returns: + List[Tensor]: List of tensors containing features at three scales. + """ + output = [] + for scale in range(self.n_scales): + feat_s = ( + F.interpolate( + input_tensor, size=(self.input_size[0] // (2**scale), self.input_size[1] // (2**scale)) + ) + if scale > 0 + else input_tensor + ) + feat_s = self.feature_extractor(feat_s)["6.8"] + + output.append(feat_s) + return output diff --git a/anomalib/models/dfkde/torch_model.py b/anomalib/models/dfkde/torch_model.py index 399cda1290..7d69d23c29 100644 --- a/anomalib/models/dfkde/torch_model.py +++ b/anomalib/models/dfkde/torch_model.py @@ -11,7 +11,7 @@ import torch.nn.functional as F from torch import Tensor, nn -from anomalib.models.components import PCA, FeatureExtractor, GaussianKDE +from anomalib.models.components import PCA, GaussianKDE, TimmFeatureExtractor logger = logging.getLogger(__name__) @@ -49,7 +49,7 @@ def __init__( self.threshold_offset = threshold_offset _backbone = backbone - self.feature_extractor = FeatureExtractor(backbone=_backbone, pre_trained=pre_trained, layers=layers).eval() + self.feature_extractor = TimmFeatureExtractor(backbone=_backbone, pre_trained=pre_trained, layers=layers).eval() self.pca_model = PCA(n_components=self.n_components) self.kde_model = GaussianKDE() diff --git a/anomalib/models/dfm/torch_model.py b/anomalib/models/dfm/torch_model.py index 5a8feeffb1..a222fd1a92 100644 --- a/anomalib/models/dfm/torch_model.py +++ b/anomalib/models/dfm/torch_model.py @@ -9,7 +9,7 @@ import torch.nn.functional as F from torch import Tensor, nn -from anomalib.models.components import PCA, DynamicBufferModule, FeatureExtractor +from anomalib.models.components import PCA, DynamicBufferModule, TimmFeatureExtractor class SingleClassGaussian(DynamicBufferModule): @@ -97,7 +97,7 @@ def __init__( self.pca_model = PCA(n_components=self.n_components) self.gaussian_model = SingleClassGaussian() self.score_type = score_type - self.feature_extractor = FeatureExtractor( + self.feature_extractor = TimmFeatureExtractor( backbone=self.backbone, pre_trained=pre_trained, layers=[layer] ).eval() diff --git a/anomalib/models/fastflow/torch_model.py b/anomalib/models/fastflow/torch_model.py index 577323ac28..3a96a46377 100644 --- a/anomalib/models/fastflow/torch_model.py +++ b/anomalib/models/fastflow/torch_model.py @@ -13,12 +13,12 @@ import timm import torch +from FrEIA.framework import SequenceINN +from FrEIA.modules import AllInOneBlock from timm.models.cait import Cait from timm.models.vision_transformer import VisionTransformer from torch import Tensor, nn -from anomalib.models.components.freia.framework import SequenceINN -from anomalib.models.components.freia.modules import AllInOneBlock from anomalib.models.fastflow.anomaly_map import AnomalyMapGenerator diff --git a/anomalib/models/padim/torch_model.py b/anomalib/models/padim/torch_model.py index 17fa51f453..60c4414815 100644 --- a/anomalib/models/padim/torch_model.py +++ b/anomalib/models/padim/torch_model.py @@ -10,7 +10,7 @@ import torch.nn.functional as F from torch import Tensor, nn -from anomalib.models.components import FeatureExtractor, MultiVariateGaussian +from anomalib.models.components import MultiVariateGaussian, TimmFeatureExtractor from anomalib.models.padim.anomaly_map import AnomalyMapGenerator from anomalib.pre_processing import Tiler @@ -42,7 +42,7 @@ def __init__( self.backbone = backbone self.layers = layers - self.feature_extractor = FeatureExtractor(backbone=self.backbone, layers=layers, pre_trained=pre_trained) + self.feature_extractor = TimmFeatureExtractor(backbone=self.backbone, layers=layers, pre_trained=pre_trained) self.dims = DIMS[backbone] # pylint: disable=not-callable # Since idx is randomly selected, save it with model to get same results diff --git a/anomalib/models/patchcore/torch_model.py b/anomalib/models/patchcore/torch_model.py index 21ca16b944..6d22687724 100644 --- a/anomalib/models/patchcore/torch_model.py +++ b/anomalib/models/patchcore/torch_model.py @@ -11,8 +11,8 @@ from anomalib.models.components import ( DynamicBufferModule, - FeatureExtractor, KCenterGreedy, + TimmFeatureExtractor, ) from anomalib.models.patchcore.anomaly_map import AnomalyMapGenerator from anomalib.pre_processing import Tiler @@ -37,7 +37,9 @@ def __init__( self.input_size = input_size self.num_neighbors = num_neighbors - self.feature_extractor = FeatureExtractor(backbone=self.backbone, pre_trained=pre_trained, layers=self.layers) + self.feature_extractor = TimmFeatureExtractor( + backbone=self.backbone, pre_trained=pre_trained, layers=self.layers + ) self.feature_pooler = torch.nn.AvgPool2d(3, 1, 1) self.anomaly_map_generator = AnomalyMapGenerator(input_size=input_size) diff --git a/anomalib/models/reverse_distillation/torch_model.py b/anomalib/models/reverse_distillation/torch_model.py index 312d4fd2ab..d4d7e12a31 100644 --- a/anomalib/models/reverse_distillation/torch_model.py +++ b/anomalib/models/reverse_distillation/torch_model.py @@ -7,7 +7,7 @@ from torch import Tensor, nn -from anomalib.models.components import FeatureExtractor +from anomalib.models.components import TimmFeatureExtractor from anomalib.models.reverse_distillation.anomaly_map import AnomalyMapGenerator from anomalib.models.reverse_distillation.components import ( get_bottleneck_layer, @@ -39,7 +39,7 @@ def __init__( self.tiler: Optional[Tiler] = None encoder_backbone = backbone - self.encoder = FeatureExtractor(backbone=encoder_backbone, pre_trained=pre_trained, layers=layers) + self.encoder = TimmFeatureExtractor(backbone=encoder_backbone, pre_trained=pre_trained, layers=layers) self.bottleneck = get_bottleneck_layer(backbone) self.decoder = get_decoder(backbone) diff --git a/anomalib/models/stfpm/lightning_model.py b/anomalib/models/stfpm/lightning_model.py index cc2004c3c1..fba854678f 100644 --- a/anomalib/models/stfpm/lightning_model.py +++ b/anomalib/models/stfpm/lightning_model.py @@ -56,7 +56,7 @@ def training_step(self, batch, _): # pylint: disable=arguments-differ _: Index of the batch. Returns: - Hierarchical feature map + Loss value """ self.model.teacher_model.eval() teacher_features, student_features = self.model.forward(batch["image"]) @@ -115,7 +115,7 @@ def configure_callbacks(self): return [early_stopping] def configure_optimizers(self) -> torch.optim.Optimizer: - """Configures optimizers for each decoder. + """Configures optimizers. Note: This method is used for the existing CLI. @@ -124,7 +124,7 @@ def configure_optimizers(self) -> torch.optim.Optimizer: config.yaml file or from CLI. Returns: - Optimizer: Adam optimizer for each decoder + Optimizer: SGD optimizer """ return optim.SGD( params=self.model.student_model.parameters(), diff --git a/anomalib/models/stfpm/torch_model.py b/anomalib/models/stfpm/torch_model.py index 669786f45c..adfe0f3f84 100644 --- a/anomalib/models/stfpm/torch_model.py +++ b/anomalib/models/stfpm/torch_model.py @@ -7,7 +7,7 @@ from torch import Tensor, nn -from anomalib.models.components import FeatureExtractor +from anomalib.models.components import TimmFeatureExtractor from anomalib.models.stfpm.anomaly_map import AnomalyMapGenerator from anomalib.pre_processing import Tiler @@ -31,8 +31,8 @@ def __init__( self.tiler: Optional[Tiler] = None self.backbone = backbone - self.teacher_model = FeatureExtractor(backbone=self.backbone, pre_trained=True, layers=layers) - self.student_model = FeatureExtractor(backbone=self.backbone, pre_trained=False, layers=layers) + self.teacher_model = TimmFeatureExtractor(backbone=self.backbone, pre_trained=True, layers=layers) + self.student_model = TimmFeatureExtractor(backbone=self.backbone, pre_trained=False, layers=layers) # teacher model is fixed for parameters in self.teacher_model.parameters(): diff --git a/pyproject.toml b/pyproject.toml index f6778506f7..22f8872939 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,7 @@ max-line-length = 120 # PYLINT CONFIGURATION # [tool.pylint.main] extension-pkg-whitelist = "cv2" -ignore = ["tests", "docs", "anomalib/models/components/freia"] +ignore = ["tests", "docs"] ignored-modules = "cv2" [tool.pylint.messages_control] @@ -64,12 +64,7 @@ min-similarity-lines = 5 [tool.mypy] ignore_missing_imports = true show_error_codes = true -exclude = ["anomalib/models/components/freia/"] -# mypy per-module options: -[[tool.mypy.overrides]] -module = "anomalib.models.components.freia.*" -follow_imports = "skip" [[tool.mypy.overrides]] module = "torch.*" diff --git a/requirements/base.txt b/requirements/base.txt index 37dc678cc3..1259eb2930 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,6 +1,7 @@ albumentations>=1.1.0 comet-ml>=3.31.7 einops>=0.3.2 +freia>=0.2 gradio>=2.9.4 imgaug==0.4.0 jsonargparse[signatures]>=4.3 diff --git a/tests/pre_merge/models/test_feature_extractor.py b/tests/pre_merge/models/test_feature_extractor.py index 7355e8fb2f..f2aa4cdaa6 100644 --- a/tests/pre_merge/models/test_feature_extractor.py +++ b/tests/pre_merge/models/test_feature_extractor.py @@ -1,7 +1,7 @@ import pytest import torch -from anomalib.models.components.feature_extractors import FeatureExtractor +from anomalib.models.components.feature_extractors import TimmFeatureExtractor class TestFeatureExtractor: @@ -15,7 +15,7 @@ class TestFeatureExtractor: ) def test_feature_extraction(self, backbone, pretrained): layers = ["layer1", "layer2", "layer3"] - model = FeatureExtractor(backbone=backbone, layers=layers, pre_trained=pretrained) + model = TimmFeatureExtractor(backbone=backbone, layers=layers, pre_trained=pretrained) test_input = torch.rand((32, 3, 256, 256)) features = model(test_input) From d35c842df681c67824074b282801c2e552023629 Mon Sep 17 00:00:00 2001 From: Ashwin Vaidya Date: Tue, 1 Nov 2022 12:33:28 +0100 Subject: [PATCH 02/24] Explicitly freeze feature extractor weights --- anomalib/models/components/feature_extractors/timm.py | 4 ++++ anomalib/models/components/feature_extractors/torchfx.py | 6 ++++-- anomalib/models/cs_flow/config.yaml | 8 ++++---- anomalib/models/cs_flow/torch_model.py | 5 +++-- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/anomalib/models/components/feature_extractors/timm.py b/anomalib/models/components/feature_extractors/timm.py index b40000986c..b4133b626f 100644 --- a/anomalib/models/components/feature_extractors/timm.py +++ b/anomalib/models/components/feature_extractors/timm.py @@ -47,6 +47,10 @@ def __init__(self, backbone: str, layers: List[str], pre_trained: bool = True): exportable=True, out_indices=self.idx, ) + # Freeze weights + for param in self.feature_extractor.parameters(): + param.requires_grad_(False) + self.out_dims = self.feature_extractor.feature_info.channels() self._features = {layer: torch.empty(0) for layer in self.layers} diff --git a/anomalib/models/components/feature_extractors/torchfx.py b/anomalib/models/components/feature_extractors/torchfx.py index 6c8176d2e5..319a484bd0 100644 --- a/anomalib/models/components/feature_extractors/torchfx.py +++ b/anomalib/models/components/feature_extractors/torchfx.py @@ -45,5 +45,7 @@ def get_torchfx_feature_extractor( except ModuleNotFoundError as exception: raise ModuleNotFoundError(f"Backbone {backbone} not found in torchvision.models") from exception - feature_extractor = create_feature_extractor(backbone_model(weights=weights).features, return_nodes) - return feature_extractor.eval() + feature_extractor = create_feature_extractor(backbone_model(weights=weights).features, return_nodes).eval() + for param in feature_extractor.parameters(): + param.requires_grad_(False) + return feature_extractor diff --git a/anomalib/models/cs_flow/config.yaml b/anomalib/models/cs_flow/config.yaml index 2d2fe98701..bf6a483d4b 100644 --- a/anomalib/models/cs_flow/config.yaml +++ b/anomalib/models/cs_flow/config.yaml @@ -4,10 +4,10 @@ dataset: path: ./datasets/MVTec category: bottle task: segmentation - image_size: 256 # 768 is the dimensions used in the official implementation - train_batch_size: 32 - test_batch_size: 32 - inference_batch_size: 32 + image_size: 768 # 768 is the dimensions used in the official implementation + train_batch_size: 16 + test_batch_size: 16 + inference_batch_size: 16 num_workers: 36 transform_config: train: null diff --git a/anomalib/models/cs_flow/torch_model.py b/anomalib/models/cs_flow/torch_model.py index 5d0c74d583..ce2568cd95 100644 --- a/anomalib/models/cs_flow/torch_model.py +++ b/anomalib/models/cs_flow/torch_model.py @@ -383,8 +383,8 @@ def _create_graph(self): ParallelGlowCouplingLayer, { "clamp": self.clamp, - "F_class": CrossConvolutions, - "F_args": { + "subnet_constructor": CrossConvolutions, + "subnet_args": { "channels_hidden": self.cross_conv_hidden_channels, "kernel_size": self.kernel_sizes[coupling_block], }, @@ -428,6 +428,7 @@ def _get_anomaly_maps(self, z_dists: Tuple[Tensor]) -> Tensor: Returns: Tensor: Anomaly maps. """ + # TODO compare anomaly maps with only the largest scale anomaly_map = torch.ones(z_dists[0].shape[0], 1, *self.input_dims[1:]).to(z_dists[0].device) for z_dist in z_dists: anomaly_map *= F.interpolate( From cec6b5312a3424a779d520a7db10c2712c91ac86 Mon Sep 17 00:00:00 2001 From: Ashwin Vaidya Date: Tue, 1 Nov 2022 12:57:23 +0100 Subject: [PATCH 03/24] Fix pre-commit --- .pre-commit-config.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 15a48179a9..2d79d75aa6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -31,6 +31,7 @@ repos: hooks: - id: flake8 args: ["--max-line-length=120", "--ignore=E203,W503"] + exclude: "tests" # python linting - repo: https://github.com/PyCQA/pylint From 274a022f6d6c886f4f2438249b0b5cc1da71e57a Mon Sep 17 00:00:00 2001 From: Ashwin Vaidya Date: Tue, 1 Nov 2022 13:07:40 +0100 Subject: [PATCH 04/24] Fix pylint issues --- anomalib/models/cs_flow/torch_model.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/anomalib/models/cs_flow/torch_model.py b/anomalib/models/cs_flow/torch_model.py index ce2568cd95..362b93ad52 100644 --- a/anomalib/models/cs_flow/torch_model.py +++ b/anomalib/models/cs_flow/torch_model.py @@ -206,21 +206,23 @@ def get_random_perm(self, index: int) -> Tuple[Tensor, Tensor]: perm_inv = torch.LongTensor(perm_inv) return perm, perm_inv - def forward(self, x: List[Tensor], rev=False, jac=True) -> Tuple[List[Tensor], float]: + def forward( + self, input_tensor: List[Tensor], rev=False, jac=True + ) -> Tuple[List[Tensor], float]: # pylint: disable=unused-argument """Applies the permutation to the input. Args: - x: list of input tensors - rev: (unused) if True, applies the inverse permutation + input_tensor: list of input tensors + rev: if True, applies the inverse permutation jac: (unused) if True, computes the log determinant of the Jacobian Returns: Tuple[Tensor, Tensor]: output tensor and log determinant of the Jacobian """ if not rev: - return [x[i][:, self.perm[i]] for i in range(self.n_inputs)], 0.0 + return [input_tensor[i][:, self.perm[i]] for i in range(self.n_inputs)], 0.0 - return [x[i][:, self.perm_inv[i]] for i in range(self.n_inputs)], 0.0 + return [input_tensor[i][:, self.perm_inv[i]] for i in range(self.n_inputs)], 0.0 def output_dims(self, input_dims: List[Tuple[int]]) -> List[Tuple[int]]: """Returns the output dimensions of the module.""" From 77024ce5283af7154d6b3be194104486e02849d0 Mon Sep 17 00:00:00 2001 From: Ashwin Vaidya Date: Tue, 1 Nov 2022 13:15:39 +0100 Subject: [PATCH 05/24] Fix pylint issues --- anomalib/models/cs_flow/torch_model.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/anomalib/models/cs_flow/torch_model.py b/anomalib/models/cs_flow/torch_model.py index 362b93ad52..fd795453d5 100644 --- a/anomalib/models/cs_flow/torch_model.py +++ b/anomalib/models/cs_flow/torch_model.py @@ -206,9 +206,8 @@ def get_random_perm(self, index: int) -> Tuple[Tensor, Tensor]: perm_inv = torch.LongTensor(perm_inv) return perm, perm_inv - def forward( - self, input_tensor: List[Tensor], rev=False, jac=True - ) -> Tuple[List[Tensor], float]: # pylint: disable=unused-argument + # pylint: disable=unused-argument + def forward(self, input_tensor: List[Tensor], rev=False, jac=True) -> Tuple[List[Tensor], float]: """Applies the permutation to the input. Args: @@ -267,6 +266,7 @@ def log_e(self, input_tensor): return self.clamp * 0.636 * torch.atan(input_tensor / self.clamp) return input_tensor + # pylint: disable=unused-argument def forward(self, x: List[Tensor], rev=False, jac=True): """Applies GLOW coupling for the three scales.""" From 9c2b8e351ac445ee666ce8cc4abe48e190723afe Mon Sep 17 00:00:00 2001 From: Ashwin Vaidya Date: Tue, 1 Nov 2022 13:25:30 +0100 Subject: [PATCH 06/24] Rename variable --- anomalib/models/cs_flow/torch_model.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/anomalib/models/cs_flow/torch_model.py b/anomalib/models/cs_flow/torch_model.py index fd795453d5..b03ca3d972 100644 --- a/anomalib/models/cs_flow/torch_model.py +++ b/anomalib/models/cs_flow/torch_model.py @@ -267,12 +267,21 @@ def log_e(self, input_tensor): return input_tensor # pylint: disable=unused-argument - def forward(self, x: List[Tensor], rev=False, jac=True): + def forward(self, input_tensor: List[Tensor], rev=False, jac=True): """Applies GLOW coupling for the three scales.""" - x01, x02 = (x[0].narrow(1, 0, self.split_len1), x[0].narrow(1, self.split_len1, self.split_len2)) - x11, x12 = (x[1].narrow(1, 0, self.split_len1), x[1].narrow(1, self.split_len1, self.split_len2)) - x21, x22 = (x[2].narrow(1, 0, self.split_len1), x[2].narrow(1, self.split_len1, self.split_len2)) + x01, x02 = ( + input_tensor[0].narrow(1, 0, self.split_len1), + input_tensor[0].narrow(1, self.split_len1, self.split_len2), + ) + x11, x12 = ( + input_tensor[1].narrow(1, 0, self.split_len1), + input_tensor[1].narrow(1, self.split_len1, self.split_len2), + ) + x21, x22 = ( + input_tensor[2].narrow(1, 0, self.split_len1), + input_tensor[2].narrow(1, self.split_len1, self.split_len2), + ) if not rev: r02, r12, r22 = self.subnet2(x02, x12, x22) From 0bdedd310bb69ff7c83a99de253e50c257c78099 Mon Sep 17 00:00:00 2001 From: Ashwin Vaidya Date: Tue, 1 Nov 2022 13:50:18 +0100 Subject: [PATCH 07/24] Remove requires grad from timm --- anomalib/models/components/feature_extractors/timm.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/anomalib/models/components/feature_extractors/timm.py b/anomalib/models/components/feature_extractors/timm.py index b4133b626f..2840ffb2a2 100644 --- a/anomalib/models/components/feature_extractors/timm.py +++ b/anomalib/models/components/feature_extractors/timm.py @@ -47,9 +47,6 @@ def __init__(self, backbone: str, layers: List[str], pre_trained: bool = True): exportable=True, out_indices=self.idx, ) - # Freeze weights - for param in self.feature_extractor.parameters(): - param.requires_grad_(False) self.out_dims = self.feature_extractor.feature_info.channels() self._features = {layer: torch.empty(0) for layer in self.layers} From 3c585fd2df3de39ad79a7003adfec2f0d2c3df8c Mon Sep 17 00:00:00 2001 From: Ashwin Vaidya Date: Tue, 1 Nov 2022 14:23:29 +0100 Subject: [PATCH 08/24] Add csflow to tests --- tests/nightly/models/test_model_nightly.py | 1 + tests/pre_merge/models/test_model_premerge.py | 1 + 2 files changed, 2 insertions(+) diff --git a/tests/nightly/models/test_model_nightly.py b/tests/nightly/models/test_model_nightly.py index ac6b39006d..3768c7cd84 100644 --- a/tests/nightly/models/test_model_nightly.py +++ b/tests/nightly/models/test_model_nightly.py @@ -32,6 +32,7 @@ def get_model_nncf_cat() -> List: """ model_support = [ ("cflow", False), + ("cs_flow", False), ("dfkde", False), ("dfm", False), ("ganomaly", False), diff --git a/tests/pre_merge/models/test_model_premerge.py b/tests/pre_merge/models/test_model_premerge.py index 4ac84b7350..cdf0d0e7a8 100644 --- a/tests/pre_merge/models/test_model_premerge.py +++ b/tests/pre_merge/models/test_model_premerge.py @@ -18,6 +18,7 @@ class TestModel: ["model_name", "nncf"], [ ("cflow", False), + ("cs_flow", False), ("dfkde", False), ("dfm", False), ("draem", False), From f6a5921ceb906d86de752335c29fc520aa4d0484 Mon Sep 17 00:00:00 2001 From: Ashwin Vaidya Date: Mon, 7 Nov 2022 09:40:27 +0100 Subject: [PATCH 09/24] Support two map modes --- anomalib/models/cs_flow/torch_model.py | 35 ++++++++++++++++++++------ 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/anomalib/models/cs_flow/torch_model.py b/anomalib/models/cs_flow/torch_model.py index b03ca3d972..0491c0ae68 100644 --- a/anomalib/models/cs_flow/torch_model.py +++ b/anomalib/models/cs_flow/torch_model.py @@ -11,6 +11,7 @@ # SPDX-License-Identifier: Apache-2.0 +from enum import Enum from math import exp from typing import Callable, Dict, List, Optional, Tuple @@ -25,6 +26,13 @@ from anomalib.models.components.feature_extractors import get_torchfx_feature_extractor +class AnomalyMapMode(str, Enum): + """Generate anomaly map from all the scales or the max.""" + + ALL = "all" + MAX = "max" + + class CrossConvolutions(nn.Module): """Cross convolution for the three scales.""" @@ -430,24 +438,37 @@ def forward(self, images) -> Tuple[Tensor, Tensor]: output = anomaly_maps, anomaly_scores return output - def _get_anomaly_maps(self, z_dists: Tuple[Tensor]) -> Tensor: - """Get anomaly maps by taking mean of the z-distributions across channels for the largest scale. + def _get_anomaly_maps(self, z_dists: Tuple[Tensor], mode: AnomalyMapMode = AnomalyMapMode.ALL) -> Tensor: + """Get anomaly maps by taking mean of the z-distributions across channels. + + By default it computes anomaly maps for all the scales as it gave better performance on initial tests. + Use ``AnomalyMapMode.MAX`` for the largest scale as mentioned in the paper. Args: z_dists (Tensor): z-distributions for the three scales. + mode (AnomalyMapMode): Anomaly map mode. Returns: Tensor: Anomaly maps. """ - # TODO compare anomaly maps with only the largest scale - anomaly_map = torch.ones(z_dists[0].shape[0], 1, *self.input_dims[1:]).to(z_dists[0].device) - for z_dist in z_dists: - anomaly_map *= F.interpolate( - (z_dist**2).mean(dim=1, keepdim=True), + anomaly_map: Tensor + if mode == AnomalyMapMode.ALL: + anomaly_map = torch.ones(z_dists[0].shape[0], 1, *self.input_dims[1:]).to(z_dists[0].device) + for z_dist in z_dists: + anomaly_map *= F.interpolate( + (z_dist**2).mean(dim=1, keepdim=True), + size=self.input_dims[1:], + mode="bilinear", + align_corners=False, + ) + else: + anomaly_map = F.interpolate( + (z_dists[0] ** 2).mean(dim=1, keepdim=True), size=self.input_dims[1:], mode="bilinear", align_corners=False, ) + return anomaly_map def _get_anomaly_scores(self, z_dists: Tensor) -> Tensor: From 5bea4083f899419c4180a2586bc7521c1024d975 Mon Sep 17 00:00:00 2001 From: Ashwin Vaidya Date: Mon, 14 Nov 2022 09:43:34 +0100 Subject: [PATCH 10/24] Add metrics for cs-flow --- README.md | 33 ++++++------ anomalib/models/cs_flow/README.md | 83 +++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 14 deletions(-) create mode 100644 anomalib/models/cs_flow/README.md diff --git a/README.md b/README.md index 5dca967878..27e27d44c9 100644 --- a/README.md +++ b/README.md @@ -308,22 +308,25 @@ Note: Set your API Key for [Comet.ml](https://www.comet.com/signup?utm_source=an MVTec AD dataset is one of the main benchmarks for anomaly detection, and is released under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License [(CC BY-NC-SA 4.0)](https://creativecommons.org/licenses/by-nc-sa/4.0/). +> Note: These metrics are collected with image size of 256 and seed `42`. This common setting is used to make model comparisons fair. + ## Image-Level AUC -| Model | | Avg | Carpet | Grid | Leather | Tile | Wood | Bottle | Cable | Capsule | Hazelnut | Metal Nut | Pill | Screw | Toothbrush | Transistor | Zipper | -| ------------- | ------------------ | :-------: | :-------: | :-------: | :-----: | :-------: | :-------: | :-----: | :-------: | :-------: | :------: | :-------: | :-------: | :-------: | :--------: | :--------: | :-------: | -| **PatchCore** | **Wide ResNet-50** | **0.980** | 0.984 | 0.959 | 1.000 | **1.000** | 0.989 | 1.000 | **0.990** | **0.982** | 1.000 | 0.994 | 0.924 | 0.960 | 0.933 | **1.000** | 0.982 | -| PatchCore | ResNet-18 | 0.973 | 0.970 | 0.947 | 1.000 | 0.997 | 0.997 | 1.000 | 0.986 | 0.965 | 1.000 | 0.991 | 0.916 | **0.943** | 0.931 | 0.996 | 0.953 | -| CFlow | Wide ResNet-50 | 0.962 | 0.986 | 0.962 | **1.0** | 0.999 | **0.993** | **1.0** | 0.893 | 0.945 | **1.0** | **0.995** | 0.924 | 0.908 | 0.897 | 0.943 | **0.984** | -| PaDiM | Wide ResNet-50 | 0.950 | **0.995** | 0.942 | 1.0 | 0.974 | **0.993** | 0.999 | 0.878 | 0.927 | 0.964 | 0.989 | **0.939** | 0.845 | 0.942 | 0.976 | 0.882 | -| PaDiM | ResNet-18 | 0.891 | 0.945 | 0.857 | 0.982 | 0.950 | 0.976 | 0.994 | 0.844 | 0.901 | 0.750 | 0.961 | 0.863 | 0.759 | 0.889 | 0.920 | 0.780 | -| STFPM | Wide ResNet-50 | 0.876 | 0.957 | 0.977 | 0.981 | 0.976 | 0.939 | 0.987 | 0.878 | 0.732 | 0.995 | 0.973 | 0.652 | 0.825 | 0.5 | 0.875 | 0.899 | -| STFPM | ResNet-18 | 0.893 | 0.954 | **0.982** | 0.989 | 0.949 | 0.961 | 0.979 | 0.838 | 0.759 | 0.999 | 0.956 | 0.705 | 0.835 | **0.997** | 0.853 | 0.645 | -| DFM | Wide ResNet-50 | 0.891 | 0.978 | 0.540 | 0.979 | 0.977 | 0.974 | 0.990 | 0.891 | 0.931 | 0.947 | 0.839 | 0.809 | 0.700 | 0.911 | 0.915 | 0.981 | -| DFM | ResNet-18 | 0.894 | 0.864 | 0.558 | 0.945 | 0.984 | 0.946 | 0.994 | 0.913 | 0.871 | 0.979 | 0.941 | 0.838 | 0.761 | 0.95 | 0.911 | 0.949 | -| DFKDE | Wide ResNet-50 | 0.774 | 0.708 | 0.422 | 0.905 | 0.959 | 0.903 | 0.936 | 0.746 | 0.853 | 0.736 | 0.687 | 0.749 | 0.574 | 0.697 | 0.843 | 0.892 | -| DFKDE | ResNet-18 | 0.762 | 0.646 | 0.577 | 0.669 | 0.965 | 0.863 | 0.951 | 0.751 | 0.698 | 0.806 | 0.729 | 0.607 | 0.694 | 0.767 | 0.839 | 0.866 | -| GANomaly | | 0.421 | 0.203 | 0.404 | 0.413 | 0.408 | 0.744 | 0.251 | 0.457 | 0.682 | 0.537 | 0.270 | 0.472 | 0.231 | 0.372 | 0.440 | 0.434 | +| Model | | Avg | Carpet | Grid | Leather | Tile | Wood | Bottle | Cable | Capsule | Hazelnut | Metal Nut | Pill | Screw | Toothbrush | Transistor | Zipper | +| ------------- | ------------------ | :-------: | :-------: | :-------: | :-------: | :-------: | :-------: | :-------: | :-------: | :-------: | :-------: | :-------: | :-------: | :-------: | :--------: | :--------: | :-------: | +| **PatchCore** | **Wide ResNet-50** | **0.980** | 0.984 | 0.959 | **1.000** | **1.000** | 0.989 | **1.000** | **0.990** | **0.982** | **1.000** | 0.994 | 0.924 | 0.960 | 0.933 | **1.000** | 0.982 | +| PatchCore | ResNet-18 | 0.973 | 0.970 | 0.947 | **1.000** | 0.997 | 0.997 | **1.000** | 0.986 | 0.965 | **1.000** | 0.991 | 0.916 | **0.943** | 0.931 | 0.996 | 0.953 | +| CFlow | Wide ResNet-50 | 0.962 | 0.986 | 0.962 | **1.0** | 0.999 | **0.993** | **1.0** | 0.893 | 0.945 | **1.0** | **0.995** | 0.924 | 0.908 | 0.897 | 0.943 | **0.984** | +| CS-Flow | EfficientNet-B5 | 0.972 | 0.995 | 0.982 | **1** | 0.972 | 0.988 | **1** | 0.97 | 0.907 | 0.995 | 0.972 | 0.953 | 0.896 | 0.969 | 0.987 | 0.987 | +| PaDiM | Wide ResNet-50 | 0.950 | **0.995** | 0.942 | **1.0** | 0.974 | **0.993** | 0.999 | 0.878 | 0.927 | 0.964 | 0.989 | **0.939** | 0.845 | 0.942 | 0.976 | 0.882 | +| PaDiM | ResNet-18 | 0.891 | 0.945 | 0.857 | 0.982 | 0.950 | 0.976 | 0.994 | 0.844 | 0.901 | 0.750 | 0.961 | 0.863 | 0.759 | 0.889 | 0.920 | 0.780 | +| STFPM | Wide ResNet-50 | 0.876 | 0.957 | 0.977 | 0.981 | 0.976 | 0.939 | 0.987 | 0.878 | 0.732 | 0.995 | 0.973 | 0.652 | 0.825 | 0.5 | 0.875 | 0.899 | +| STFPM | ResNet-18 | 0.893 | 0.954 | **0.982** | 0.989 | 0.949 | 0.961 | 0.979 | 0.838 | 0.759 | 0.999 | 0.956 | 0.705 | 0.835 | **0.997** | 0.853 | 0.645 | +| DFM | Wide ResNet-50 | 0.891 | 0.978 | 0.540 | 0.979 | 0.977 | 0.974 | 0.990 | 0.891 | 0.931 | 0.947 | 0.839 | 0.809 | 0.700 | 0.911 | 0.915 | 0.981 | +| DFM | ResNet-18 | 0.894 | 0.864 | 0.558 | 0.945 | 0.984 | 0.946 | 0.994 | 0.913 | 0.871 | 0.979 | 0.941 | 0.838 | 0.761 | 0.95 | 0.911 | 0.949 | +| DFKDE | Wide ResNet-50 | 0.774 | 0.708 | 0.422 | 0.905 | 0.959 | 0.903 | 0.936 | 0.746 | 0.853 | 0.736 | 0.687 | 0.749 | 0.574 | 0.697 | 0.843 | 0.892 | +| DFKDE | ResNet-18 | 0.762 | 0.646 | 0.577 | 0.669 | 0.965 | 0.863 | 0.951 | 0.751 | 0.698 | 0.806 | 0.729 | 0.607 | 0.694 | 0.767 | 0.839 | 0.866 | +| GANomaly | | 0.421 | 0.203 | 0.404 | 0.413 | 0.408 | 0.744 | 0.251 | 0.457 | 0.682 | 0.537 | 0.270 | 0.472 | 0.231 | 0.372 | 0.440 | 0.434 | ### Pixel-Level AUC @@ -332,6 +335,7 @@ Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License | **PatchCore** | **Wide ResNet-50** | **0.980** | 0.988 | 0.968 | 0.991 | 0.961 | 0.934 | 0.984 | **0.988** | **0.988** | 0.987 | **0.989** | 0.980 | **0.989** | 0.988 | **0.981** | 0.983 | | PatchCore | ResNet-18 | 0.976 | 0.986 | 0.955 | 0.990 | 0.943 | 0.933 | 0.981 | 0.984 | 0.986 | 0.986 | 0.986 | 0.974 | 0.991 | 0.988 | 0.974 | 0.983 | | CFlow | Wide ResNet-50 | 0.971 | 0.986 | 0.968 | 0.993 | **0.968** | 0.924 | 0.981 | 0.955 | **0.988** | **0.990** | 0.982 | **0.983** | 0.979 | 0.985 | 0.897 | 0.980 | +| CS-Flow | EfficientNet B5 | 0.845 | 0.847 | 0.746 | 0.851 | 0.775 | 0.677 | 0.853 | 0.863 | 0.882 | 0.895 | 0.932 | 0.92 | 0.779 | 0.892 | 0.96 | 0.803 | | PaDiM | Wide ResNet-50 | 0.979 | **0.991** | 0.970 | 0.993 | 0.955 | **0.957** | **0.985** | 0.970 | **0.988** | 0.985 | 0.982 | 0.966 | 0.988 | **0.991** | 0.976 | **0.986** | | PaDiM | ResNet-18 | 0.968 | 0.984 | 0.918 | **0.994** | 0.934 | 0.947 | 0.983 | 0.965 | 0.984 | 0.978 | 0.970 | 0.957 | 0.978 | 0.988 | 0.968 | 0.979 | | STFPM | Wide ResNet-50 | 0.903 | 0.987 | **0.989** | 0.980 | 0.966 | 0.956 | 0.966 | 0.913 | 0.956 | 0.974 | 0.961 | 0.946 | 0.988 | 0.178 | 0.807 | 0.980 | @@ -344,6 +348,7 @@ Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License | **PatchCore** | **Wide ResNet-50** | **0.976** | 0.971 | 0.974 | **1.000** | **1.000** | 0.967 | **1.000** | 0.968 | **0.982** | **1.000** | 0.984 | 0.940 | 0.943 | 0.938 | **1.000** | **0.979** | | PatchCore | ResNet-18 | 0.970 | 0.949 | 0.946 | **1.000** | 0.98 | **0.992** | **1.000** | **0.978** | 0.969 | **1.000** | **0.989** | 0.940 | 0.932 | 0.935 | 0.974 | 0.967 | | CFlow | Wide ResNet-50 | 0.944 | 0.972 | 0.932 | **1.0** | 0.988 | 0.967 | **1.0** | 0.832 | 0.939 | **1.0** | 0.979 | 0.924 | **0.971** | 0.870 | 0.818 | 0.967 | +| CS-Flow | EfficientNet B5 | 0.965 | 0.983 | 0.982 | **1** | 0.957 | 0.966 | **1** | 0.945 | 0.944 | 0.986 | 0.963 | 0.965 | 0.906 | 0.949 | 0.938 | 0.987 | | PaDiM | Wide ResNet-50 | 0.951 | **0.989** | 0.930 | **1.0** | 0.960 | 0.983 | 0.992 | 0.856 | **0.982** | 0.937 | 0.978 | **0.946** | 0.895 | 0.952 | 0.914 | 0.947 | | PaDiM | ResNet-18 | 0.916 | 0.930 | 0.893 | 0.984 | 0.934 | 0.952 | 0.976 | 0.858 | 0.960 | 0.836 | 0.974 | 0.932 | 0.879 | 0.923 | 0.796 | 0.915 | | STFPM | Wide ResNet-50 | 0.926 | 0.973 | 0.973 | 0.974 | 0.965 | 0.929 | 0.976 | 0.853 | 0.920 | 0.972 | 0.974 | 0.922 | 0.884 | 0.833 | 0.815 | 0.931 | diff --git a/anomalib/models/cs_flow/README.md b/anomalib/models/cs_flow/README.md new file mode 100644 index 0000000000..69bc9e0d89 --- /dev/null +++ b/anomalib/models/cs_flow/README.md @@ -0,0 +1,83 @@ +# Real-Time Unsupervised Anomaly Detection via Conditional Normalizing Flows + +This is the implementation of the [CS-Flow](https://arxiv.org/pdf/2110.02855.pdf) paper. This code is modified form of the [official repository](https://github.com/marco-rudolph/cs-flow). + +Model Type: Segmentation + +## Description + +TODO + +## Architecture + +![CS-Flow Architecture](../../../docs/source/images/cs_flow/architecture.jpg "CS-Flow Architecture") + +## Usage + +`python tools/train.py --model cs_flow` + +## Benchmark + +All results gathered with seed `42`. + +## [MVTec AD Dataset](https://www.mvtec.com/company/research/datasets/mvtec-ad) + +> The following table is generated with image size of 768 and generating the anomaly map from all the three scales unlike the paper. Initial experiments showed that the anomaly map from all the three scales gives better results than the one from the largest scale. + +### Image AUROC + +| | Average | Carpet | Grid | Leather | Tile | Wood | Bottle | Cable | Capsule | Hazelnut | Metal_nut | Pill | Screw | Toothbrush | Transistor | Zipper | +| :-------------- | ------: | -----: | ----: | ------: | ----: | ----: | -----: | ----: | ------: | -------: | --------: | ---: | ----: | ---------: | ---------: | -----: | +| EfficientNet-B5 | 0.987 | 1 | 0.989 | 1 | 0.998 | 0.998 | 1 | 0.996 | 0.981 | 0.994 | 1 | 0.98 | 0.95 | 0.919 | 1 | 0.999 | + +### Pixel AUROC + +| | Average | Carpet | Grid | Leather | Tile | Wood | Bottle | Cable | Capsule | Hazelnut | Metal_nut | Pill | Screw | Toothbrush | Transistor | Zipper | +| :-------------- | ------: | -----: | ----: | ------: | ----: | ----: | -----: | ----: | ------: | -------: | --------: | ---: | ----: | ---------: | ---------: | -----: | +| EfficientNet-B5 | 0.921 | 0.936 | 0.878 | 0.917 | 0.872 | 0.782 | 0.889 | 0.935 | 0.961 | 0.957 | 0.953 | 0.95 | 0.947 | 0.951 | 0.974 | 0.919 | + +### Pixel F1Score + +| | Average | Carpet | Grid | Leather | Tile | Wood | Bottle | Cable | Capsule | Hazelnut | Metal_nut | Pill | Screw | Toothbrush | Transistor | Zipper | +| :-------------- | ------: | -----: | ----: | ------: | ---: | ----: | -----: | ----: | ------: | -------: | --------: | ----: | ----: | ---------: | ---------: | -----: | +| EfficientNet-B5 | 0.33 | 0.219 | 0.104 | 0.144 | 0.41 | 0.211 | 0.357 | 0.375 | 0.333 | 0.375 | 0.689 | 0.458 | 0.094 | 0.342 | 0.597 | 0.238 | + +### Image F1 Score + +| | Average | Carpet | Grid | Leather | Tile | Wood | Bottle | Cable | Capsule | Hazelnut | Metal_nut | Pill | Screw | Toothbrush | Transistor | Zipper | +| :-------------- | ------: | -----: | ----: | ------: | ----: | ----: | -----: | ----: | ------: | -------: | --------: | ----: | ----: | ---------: | ---------: | -----: | +| EfficientNet-B5 | 0.985 | 1 | 0.991 | 1 | 0.988 | 0.992 | 1 | 0.973 | 0.977 | 0.979 | 0.995 | 0.975 | 0.975 | 0.952 | 0.988 | 0.996 | + +> For fair comparison with other algorithms, the following results are computed with image size of 256. + +### Image AUROC + +| | Average | Carpet | Grid | Leather | Tile | Wood | Bottle | Cable | Capsule | Hazelnut | Metal_nut | Pill | Screw | Toothbrush | Transistor | Zipper | +| :-------------- | ------: | -----: | ----: | ------: | ----: | ----: | -----: | ----: | ------: | -------: | --------: | ----: | ----: | ---------: | ---------: | -----: | +| EfficientNet-B5 | 0.972 | 0.995 | 0.982 | 1 | 0.972 | 0.988 | 1 | 0.97 | 0.907 | 0.995 | 0.972 | 0.953 | 0.896 | 0.969 | 0.987 | 0.987 | + +### Pixel AUROC + +| | Average | Carpet | Grid | Leather | Tile | Wood | Bottle | Cable | Capsule | Hazelnut | Metal_nut | Pill | Screw | Toothbrush | Transistor | Zipper | +| :-------------- | ------: | -----: | ----: | ------: | ----: | ----: | -----: | ----: | ------: | -------: | --------: | ---: | ----: | ---------: | ---------: | -----: | +| EfficientNet B5 | 0.845 | 0.847 | 0.746 | 0.851 | 0.775 | 0.677 | 0.853 | 0.863 | 0.882 | 0.895 | 0.932 | 0.92 | 0.779 | 0.892 | 0.96 | 0.803 | + +### Pixel F1Score + +| | Average | Carpet | Grid | Leather | Tile | Wood | Bottle | Cable | Capsule | Hazelnut | Metal_nut | Pill | Screw | Toothbrush | Transistor | Zipper | +| :-------------- | ------: | -----: | ----: | ------: | ----: | ----: | -----: | ----: | ------: | -------: | --------: | ----: | ----: | ---------: | ---------: | -----: | +| EfficientNet B5 | 0.231 | 0.108 | 0.069 | 0.048 | 0.306 | 0.127 | 0.303 | 0.21 | 0.165 | 0.215 | 0.659 | 0.412 | 0.017 | 0.214 | 0.513 | 0.106 | + +### Image F1 Score + +| | Average | Carpet | Grid | Leather | Tile | Wood | Bottle | Cable | Capsule | Hazelnut | Metal_nut | Pill | Screw | Toothbrush | Transistor | Zipper | +| :-------------- | ------: | -----: | ----: | ------: | ----: | ----: | -----: | ----: | ------: | -------: | --------: | ----: | ----: | ---------: | ---------: | -----: | +| EfficientNet B5 | 0.965 | 0.983 | 0.982 | 1 | 0.957 | 0.966 | 1 | 0.945 | 0.944 | 0.986 | 0.963 | 0.965 | 0.906 | 0.949 | 0.938 | 0.987 | + +### Sample Results + +![Sample Result 1](../../../docs/source/images/csflow/results/0.png "Sample Result 1") + +![Sample Result 2](../../../docs/source/images/csflow/results/1.png "Sample Result 2") + +![Sample Result 3](../../../docs/source/images/csflow/results/2.png "Sample Result 3") From 77c4594ca5bc215b99225228a5a308dff30e70b6 Mon Sep 17 00:00:00 2001 From: Ashwin Vaidya Date: Fri, 18 Nov 2022 16:46:50 +0100 Subject: [PATCH 11/24] Use the same betas as in paper --- anomalib/models/cs_flow/lightning_model.py | 1 + 1 file changed, 1 insertion(+) diff --git a/anomalib/models/cs_flow/lightning_model.py b/anomalib/models/cs_flow/lightning_model.py index 00c8217cc7..a33b0f8992 100644 --- a/anomalib/models/cs_flow/lightning_model.py +++ b/anomalib/models/cs_flow/lightning_model.py @@ -122,4 +122,5 @@ def configure_optimizers(self) -> torch.optim.Optimizer: lr=self.hparams.model.lr, eps=self.hparams.model.eps, weight_decay=self.hparams.model.weight_decay, + betas=(0.5, 0.9), ) From 6862524e1de6d87f9a240735670ac4a6d88fe17f Mon Sep 17 00:00:00 2001 From: Ashwin Vaidya Date: Mon, 21 Nov 2022 16:16:18 +0100 Subject: [PATCH 12/24] Add model description + images --- .../components/feature_extractors/utils.py | 6 ++--- anomalib/models/cs_flow/README.md | 21 ++++++++++++++++-- anomalib/models/cs_flow/torch_model.py | 1 - docs/source/images/cs_flow/architecture1.jpg | Bin 0 -> 218168 bytes docs/source/images/cs_flow/architecture2.jpg | Bin 0 -> 359696 bytes docs/source/images/cs_flow/architecture3.jpg | Bin 0 -> 267877 bytes 6 files changed, 21 insertions(+), 7 deletions(-) create mode 100644 docs/source/images/cs_flow/architecture1.jpg create mode 100644 docs/source/images/cs_flow/architecture2.jpg create mode 100644 docs/source/images/cs_flow/architecture3.jpg diff --git a/anomalib/models/components/feature_extractors/utils.py b/anomalib/models/components/feature_extractors/utils.py index 0efd1011fd..516e0863f4 100644 --- a/anomalib/models/components/feature_extractors/utils.py +++ b/anomalib/models/components/feature_extractors/utils.py @@ -4,13 +4,11 @@ import torch -from anomalib.models.components.feature_extractors.feature_extractor import ( - FeatureExtractor, -) +from anomalib.models.components.feature_extractors import TimmFeatureExtractor def dryrun_find_featuremap_dims( - feature_extractor: FeatureExtractor, + feature_extractor: TimmFeatureExtractor, input_size: Tuple[int, int], layers: List[str], ) -> Dict[str, Dict[str, Union[int, Tuple[int, int]]]]: diff --git a/anomalib/models/cs_flow/README.md b/anomalib/models/cs_flow/README.md index 69bc9e0d89..f3e3fa7eb5 100644 --- a/anomalib/models/cs_flow/README.md +++ b/anomalib/models/cs_flow/README.md @@ -6,11 +6,28 @@ Model Type: Segmentation ## Description -TODO +The central idea of the paper is to handle fine-grained representations by incorporating global and local image context. This is done by taking multiple scales when extracting features and using a fully-convolutional normalizing flow to process the scales jointly. This can be seen in Figure 1. + +In each cross-scale coupling block, the input tensor is split into two parts across the channel dimension. Similar to RealNVP, each part is used to compute the scale and translate parameters for the affine transform. This is done with the help of cross-scale convolution layers as shown in Figure 2. These are point wise operations. As shown in the figure, the subnetworks are $r_1$ and $r_2$ and their outputs are $[s_1, t_1]$ and $[s_2, t_2]$. Then, the output of the coupling blocks are defined as. + +$$ +y_{out,2} = y_{in,2} \odot e^{\gamma_1s_1(y_{in,1}) + \gamma_1t_1(y_{in,1})}\\ +y_{out,1} = y_{in,1} \odot e^{\gamma_2s_2(y_{out,2}) + \gamma_2t_2(y_{out,2})} +$$ + +Here, $\gamma_1$ and $\gamma_2$ are learnable parameters for each block. + +Figure 3 shows the architecture of the subnetworks in detail. + +The anomaly score for each local position $(i,j)$ of the feature map $y^s$ at scale $s$ is computed by aggregating values along the channel dimension with $||z^s_{i,j}||^2_2$. Here $z$ is the latent variable and $z^s_{i,j}$ is the output of the final coupling block at scale $s$ for the local position $(i,j)$. Thus anomalies can be localized by marking image regions with high norm in output feature tensors $z^s$. ## Architecture -![CS-Flow Architecture](../../../docs/source/images/cs_flow/architecture.jpg "CS-Flow Architecture") +![CS-Flow Architecture](../../../docs/source/images/cs_flow/architecture1.jpg "CS-Flow Architecture") + +![Architecture of a Coupling Block](../../../docs/source/images/cs_flow/architecture2.jpg "Architecture of a Coupling Block") + +![Architecture of network predicting scale and shift parameters.](../../../docs/source/images/cs_flow/architecture3.jpg "Architecture of network predicting scale and shift parameters.") ## Usage diff --git a/anomalib/models/cs_flow/torch_model.py b/anomalib/models/cs_flow/torch_model.py index 0491c0ae68..d6fd6b20f4 100644 --- a/anomalib/models/cs_flow/torch_model.py +++ b/anomalib/models/cs_flow/torch_model.py @@ -431,7 +431,6 @@ def forward(self, images) -> Tuple[Tensor, Tensor]: if self.training: output = self.graph(features) else: - # TODO: add anomaly map generation z_dist, _ = self.graph(features) # Ignore Jacobians anomaly_scores = self._get_anomaly_scores(z_dist) anomaly_maps = self._get_anomaly_maps(z_dist) diff --git a/docs/source/images/cs_flow/architecture1.jpg b/docs/source/images/cs_flow/architecture1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d0594839aafe2fd8cb4a925b66e3cd9699d50450 GIT binary patch literal 218168 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 z

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%0DXDet;0WM!g|Nlh{e$7 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