Skip to content

Commit f47674a

Browse files
blaz-rsamet-akcayrajeshgangireddy
authored
Enable tiled ensembe in v2 (#2660)
* Add training loop for ensemble * Add model input size setup * Move ens config to separate file * Revert mvtec modifications * Remove unused imports in mvtec * Add batch adjustment to untiling * Add predict step to ensemble * Add comment and docstring to tile joining function * Move tile joining to separate function * Add joining for all tiled data * Add joining for all box data * Refactor pred. joining as modular class * Fix box joining * Add label and score joining * Add ensemble visualization * Add end of predict hook * Add metric computation * Fix metric thresholds * Add removal of individual visualization * Add demo1 notebook * Add docstrings and cleanup * Add memory benchmark * Add modular class for storing predictions * Add metric to separate class * Refactor to support prediction data class * Rename predictions class * Add filesystem predictions class * Add resized predictions class * Fix joiner for classification task * Add page peak to memory benchmark * Add global stats calculation * Add docstrings to stats calculation * Refactor joiner for pipeline * Refactor stats into pipeline * Refactor metrics as pipeline block * Refactor visualization as pipeline block * Refactor postprocessing into a pipeline * Add normalization and thresholding on joined predictions * Refactor tiler to accept config file * Add smoothing of tile joins. * Refactor ensemble datamodule preparation * Remove unused changes in dataloader * Fix metric configuration * Fix box coordinates in joining * Add ensemble callbacks preparation function * Fix box prediction bug in postprocess * Add ensemble params to config * Refactor postprocessing. * Refactor post-processing * Refactor predictions * Code cleanup * Optimize prediction storage * Make join smoothing configurable * Cleanup before PR * Fix stats pipeline * Fix logging strings * Fix memory benchmark * Fix tiler issues * Fix import issues * Fix naming in metrics and visualization * Fix cyclic import * Make logging lazy * Refactor tiler tests * Added collate tiling tests * Added ensemble helper functions tests * Refactor for dummy ensemble config * Refactor for dummy base config * Add tests for prediction storage * Add tests for prediction joiner * Add tests for visualization * Fix small issues in tests * Add metrics test * Add post-processing tests * Fix tiler to work with different instance * Move seed setting inside train loop * Fix pipeline stats bug * Rename ensemble config fixture * Add pipeline tests * Fix config in pipeline tests * Add training script test * Fix types and docstrings * Move and rename to tiled_ensemble * Fix bug in label joining. * Remove memory benchmark * Cleanup files * Fix metrics setup * Rename collate function * Add license to test files * Rename fixtures * Add more comments to tiled ensemble training * Add start of training log message * Refactor tiler to have explicit arguments * Refactor pred. storage to have explicit arguments * Refactor metrics to have explicit arguments * Refactor visualization to have explicit arguments * Refactor post-processing to have explicit arguments * Sort imports * Add test ensemble script * Fix join smoothing bug * Add more documentation to doc-strings * Remove unused import * Add brief tiled ensemble documentation * Update typehints * Make training args more clear * Revert addition of no threshold option. * Refactor normalization and threshold config * Remove tiled ensemble from docs index * Add comments to clarify parts of ensemble config * Improve ensemble config comments * Add num_tiles attribute to tiler. * Fix metrics process docstring * Fix visualization bug and cover with test * Replace strings with enum * Improve comments in joiner. * Fix bug when model doesn't have anomaly maps. * Improve docstrings (types, clarify). * Fix visualization tests * Fix dict membership checks * Add saving of ensemble config file * Update test script args * Cover test script with tests * Update export warning * Fix case when no test or val data * Improve documentation images * Add images for documentation * Add codacy suggestion * Refactor joiner to single class * Refactor storage names and config * Update normalization and threshold stage names * Add transforms independent input size to models Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Make collate function a datamodule attribute Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor tiled ensemble train into pipeline step Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor tiled ensemble prediction into pipeline step Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor tiled ensemble merging into pipeline step Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor tiled ensemble seam smoothing into pipeline step Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor tiled stats calculation into pipeline step Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix ckpt loading when predicting on test set. Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Add logging and add tqdm to pipeline steps. Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor normalization pipeline step Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor thresholding into new pipeline job * Fix transforms issue when predicting with dataloader * Add visualization as new pipeline step * Add metrics as new pipeline step * Format the code and address some lint problems Signed-off-by: Blaz Rolih <blaz.rolih@gmail.com> * Add code to skip test if test split is none Signed-off-by: Blaz Rolih <blaz.rolih@gmail.com> * Add accelerator to metrics and smoothing Signed-off-by: Blaz Rolih <blaz.rolih@gmail.com> * Make threshold acq helper function and add to threshold to metrics Signed-off-by: Blaz Rolih <blaz.rolih@gmail.com> * Make a separate test pipeline Signed-off-by: Blaz Rolih <blaz.rolih@gmail.com> * Restructure tiled ensemble files into directories Signed-off-by: Blaz Rolih <blaz.rolih@gmail.com> * Pipeline code cleanup Signed-off-by: Blaz Rolih <blaz.rolih@gmail.com> * Remove old tiled ensemble files Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Remove old post processing files Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix sigma value read in smoothing Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Update stats calc and normalization Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Update args naming convention Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor code for nice config Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Update docs structure for new system Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Cleanup train code Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix test script args Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Update box merging Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor helper function tests Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Small changes in helper and engine Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor merging tests Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor tiling tests Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor metrics test Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Add support for different threshold methods Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Format tests Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Change test to predict Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor stats calculation tests Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor prediction data tests Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Update metrics tests Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Move metrics tests to components Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor seam smoothing tests Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor normalization tests Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Move mock stats to conftest Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix typehints for generator Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor threshold tests Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Temporarily disable box minmax Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Add tiled ensemble integration test Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix normalization tests and add additional merging test Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Add tile collater tests Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Change dataset in tests to dummy Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Format and fix linter errors Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Format and some cleanup Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Rename predict to eval Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Update docs for refactored version of code Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Cleanup the docs Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Update ensemble engine Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Remove boxes from pipelines and tests Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix TODO comment issue Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix unused model in ens. engine Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix path case in test Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Change temporary dir to project_path Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Change mvtec to MVTec in test path Signed-off-by: Blaz Rolih <blaz.rolih@gmail.com> * Update ensemble tiling and fix tests Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Update normalisation and threshold on tile level Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix datamodule data size Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor pred. data and merging Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Initial train refactor Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactored working training Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix merging missing items, shapes + add test. Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix smoothing and tests Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix stats comp and tests Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix model input_size and tests Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix norm, thresh and metrics Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Refactor test pipeline Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix visualisation Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Small fixes Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix visualisation Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix tests and some linting Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Add lates config Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix linter errors for tiled ensemble Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix type-checking errors Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix torch.Tensor usage Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Add more details to docstrings. Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Fix MVTecAD class in ens config Signed-off-by: blaz-r <blaz.rolih@gmail.com> * Update tiled ensemble docs Signed-off-by: blaz-r <blaz.rolih@gmail.com> --------- Signed-off-by: blaz-r <blaz.rolih@gmail.com> Signed-off-by: Blaz Rolih <blaz.rolih@gmail.com> Co-authored-by: Samet Akcay <samet.akcay@intel.com> Co-authored-by: Rajesh Gangireddy <rajesh.gangireddy@intel.com>
1 parent d496dff commit f47674a

34 files changed

+3739
-3
lines changed

docs/source/markdown/guides/how_to/pipelines/index.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ This section contains tutorials on how to use different pipelines of Anomalib an
66
:margin: 1 1 0 0
77
:gutter: 1
88

9+
:::{grid-item-card} {octicon}`stack` Tiled Ensemble
10+
:link: ./tiled_ensemble
11+
:link-type: doc
12+
13+
Learn more about how to use the tiled ensemble pipelines.
14+
:::
15+
916
:::{grid-item-card} {octicon}`gear` Custom Pipeline
1017
:link: ./custom_pipeline
1118
:link-type: doc
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
# Tiled ensemble
2+
3+
This guide will show you how to use **The Tiled Ensemble** method for anomaly detection. For more details, refer to the official [Paper](https://openaccess.thecvf.com/content/CVPR2024W/VAND/html/Rolih_Divide_and_Conquer_High-Resolution_Industrial_Anomaly_Detection_via_Memory_Efficient_CVPRW_2024_paper.html).
4+
5+
The tiled ensemble approach reduces memory consumption by dividing input images into a grid of tiles and training a dedicated model for each tile location.
6+
It is compatible with any existing image anomaly detection model without the need for any modification of the underlying architecture.
7+
8+
![Tiled ensemble flow](../../../../images/tiled_ensemble/ensemble_flow.png)
9+
10+
```{note}
11+
This feature is experimental and may not work as expected.
12+
For any problems refer to [Issues](https://github.com/open-edge-platform/anomalib/issues) and feel free to ask any question in [Discussions](https://github.com/open-edge-platform/anomalib/discussions).
13+
```
14+
15+
## Training
16+
17+
You can train a tiled ensemble using the training script located inside `tools/tiled_ensemble` directory:
18+
19+
```{code-block} bash
20+
21+
python tools/tiled_ensemble/train_ensemble.py \
22+
--config tools/tiled_ensemble/ens_config.yaml
23+
```
24+
25+
By default, the Padim model is trained on **MVTec AD bottle** category using image size of 256x256, divided into non-overlapping 128x128 tiles.
26+
You can modify these parameters in the [config file](#ensemble-configuration).
27+
28+
## Evaluation
29+
30+
After training, you can evaluate the tiled ensemble on test data using:
31+
32+
```{code-block} bash
33+
34+
python tools/tiled_ensemble/eval.py \
35+
--config tools/tiled_ensemble/ens_config.yaml \
36+
--root path_to_results_dir
37+
38+
```
39+
40+
Ensure that `root` points to the directory containing the training results, typically `results/padim/mvtec/bottle/runX`.
41+
42+
## Ensemble configuration
43+
44+
Tiled ensemble is configured using `ens_config.yaml` file in the `tools/tiled_ensemble` directory.
45+
It contains general settings and tiled ensemble specific settings.
46+
47+
### General
48+
49+
General settings at the top of the config file are used to set up the random `seed`, `accelerator` (device) and the path to where results will be saved `default_root_dir`.
50+
51+
```{code-block} yaml
52+
seed: 42
53+
accelerator: "cuda"
54+
default_root_dir: "results"
55+
```
56+
57+
### Tiling
58+
59+
This section contains the following settings, used for image tiling:
60+
61+
```{code-block} yaml
62+
63+
tiling:
64+
image_size: [256, 256]
65+
tile_size: [128, 128]
66+
stride: 128
67+
```
68+
69+
These settings determine the whole original image size, tile size, and tile stride.
70+
71+
Input image is resized to `image_size` and split into tiles, where each tile is of shape set by `tile_size` and tiles are taken with step set by `stride`.
72+
For example: having image_size: 512, tile_size: 256, and stride: 256, results in 4 non-overlapping tile locations.
73+
74+
### Normalization and thresholding
75+
76+
Next up are the normalization and thresholding settings:
77+
78+
```{code-block} yaml
79+
normalization_stage: image
80+
thresholding_stage: image
81+
```
82+
83+
- **Normalization**: Can be applied per each tile location separately (`tile` option), after combining predictions (`image` option), or skipped (`none` option).
84+
85+
- **Thresholding**: Can also be applied at different stages, but it is limited to `tile` and `image`.
86+
87+
### Data
88+
89+
The `data` section is used to configure the parameters for the dataset used.
90+
91+
```{code-block} yaml
92+
data:
93+
class_path: anomalib.data.MVTecAD
94+
init_args:
95+
root: ./datasets/MVTecAD
96+
category: bottle
97+
train_batch_size: 32
98+
eval_batch_size: 32
99+
num_workers: 8
100+
train_augmentations: null
101+
val_augmentations: null
102+
test_augmentations: null
103+
augmentations: null
104+
test_split_mode: from_dir
105+
test_split_ratio: 0.2
106+
val_split_mode: same_as_test
107+
val_split_ratio: 0.5
108+
```
109+
110+
Refer to [Data](../../reference/data/index.md) for more details.
111+
112+
### SeamSmoothing
113+
114+
This section contains settings for `SeamSmoothing` block of pipeline:
115+
116+
```{code-block} yaml
117+
SeamSmoothing:
118+
apply: True
119+
sigma: 2
120+
width: 0.1
121+
122+
```
123+
124+
SeamSmoothing job is responsible for smoothing of regions where tiles meet - called tile seams.
125+
126+
- **apply**: If True, smoothing will be applied.
127+
- **sigma**: Controls the sigma of Gaussian filter used for smoothing.
128+
- **width**: Sets the percentage of the region around the seam to be smoothed.
129+
130+
### TrainModels
131+
132+
The last section `TrainModels` contains the setup for model training:
133+
134+
```{code-block} yaml
135+
TrainModels:
136+
model:
137+
class_path: Fastflow
138+
139+
trainer:
140+
max_epochs: 500
141+
callbacks:
142+
- class_path: lightning.pytorch.callbacks.EarlyStopping
143+
init_args:
144+
patience: 42
145+
monitor: pixel_AUROC
146+
mode: max
147+
```
148+
149+
- **Model**: Specifies the model used. Refer to [Models](../../reference/models/image/index.md) for more details on the model parameters.
150+
- **Trainer**: _optional_ parameters, used to control the training process. Refer to [Engine](../../reference/engine/index.md) for more details.
151+
152+
### Citation
153+
154+
```BibTeX
155+
@inproceedings{rolih2024divide,
156+
title={Divide and Conquer: High-Resolution Industrial Anomaly Detection via Memory Efficient Tiled Ensemble},
157+
author={Rolih, Bla{\v{z}} and Ameln, Dick and Vaidya, Ashwin and Akcay, Samet},
158+
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
159+
pages={3866--3875},
160+
year={2024}
161+
}
162+
```

src/anomalib/data/datamodules/base/image.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545
from anomalib.utils.attrs import get_nested_attr
4646

4747
if TYPE_CHECKING:
48+
from collections.abc import Callable
49+
4850
from pandas import DataFrame
4951

5052

@@ -126,6 +128,8 @@ def __init__(
126128

127129
self._is_setup = False # flag to track if setup has been called
128130

131+
self.external_collate_fn: Callable | None = None
132+
129133
@property
130134
def name(self) -> str:
131135
"""Name of the datamodule.
@@ -362,7 +366,7 @@ def train_dataloader(self) -> TRAIN_DATALOADERS:
362366
shuffle=True,
363367
batch_size=self.train_batch_size,
364368
num_workers=self.num_workers,
365-
collate_fn=self.train_data.collate_fn,
369+
collate_fn=self.external_collate_fn or self.train_data.collate_fn,
366370
)
367371

368372
def val_dataloader(self) -> EVAL_DATALOADERS:
@@ -376,7 +380,7 @@ def val_dataloader(self) -> EVAL_DATALOADERS:
376380
shuffle=False,
377381
batch_size=self.eval_batch_size,
378382
num_workers=self.num_workers,
379-
collate_fn=self.val_data.collate_fn,
383+
collate_fn=self.external_collate_fn or self.val_data.collate_fn,
380384
)
381385

382386
def test_dataloader(self) -> EVAL_DATALOADERS:
@@ -390,7 +394,7 @@ def test_dataloader(self) -> EVAL_DATALOADERS:
390394
shuffle=False,
391395
batch_size=self.eval_batch_size,
392396
num_workers=self.num_workers,
393-
collate_fn=self.test_data.collate_fn,
397+
collate_fn=self.external_collate_fn or self.test_data.collate_fn,
394398
)
395399

396400
def predict_dataloader(self) -> EVAL_DATALOADERS:
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
"""Tiled Ensemble Pipeline for High-Resolution Anomaly Detection.
2+
3+
This module implements a memory-efficient tiled ensemble approach for
4+
anomaly detection, enabling high-resolution image processing without exceeding GPU memory constraints.
5+
The pipeline divides input images into a grid of tiles, training a dedicated model for each tile location.
6+
By introducing overlapping tiles, it leverages the benefits of traditional
7+
stacking ensembles, enhancing anomaly detection capabilities beyond high resolution alone.
8+
9+
Configuration:
10+
The pipeline is configured via the `ens_config.yaml` file, which
11+
includes settings for:
12+
- Tile size and stride
13+
- Normalization and thresholding stages
14+
- Data parameters
15+
- Seam smoothing parameters
16+
- Training parameters (e.g., model type, trainer settings)
17+
18+
Usage:
19+
Training:
20+
python tools/tiled_ensemble/train_ensemble.py \
21+
--config tools/tiled_ensemble/ens_config.yaml
22+
23+
Evaluation:
24+
python tools/tiled_ensemble/eval.py \
25+
--config tools/tiled_ensemble/ens_config.yaml \
26+
--root path_to_results_dir (e.g. results/Padim/MVTec/bottle/v0)
27+
28+
Reference:
29+
Blaž Rolih, Dick Ameln, Ashwin Vaidya, Samet Akçay:
30+
"Divide and Conquer: High-Resolution Industrial Anomaly Detection via
31+
Memory Efficient Tiled Ensemble." Proceedings of the IEEE/CVF Conference
32+
on Computer Vision and Pattern Recognition Workshops (VAND 2.0). 2024.
33+
"""
34+
35+
# Copyright (C) 2024-2025 Intel Corporation
36+
# SPDX-License-Identifier: Apache-2.0
37+
38+
from .test_pipeline import EvalTiledEnsemble
39+
from .train_pipeline import TrainTiledEnsemble
40+
41+
__all__ = [
42+
"TrainTiledEnsemble",
43+
"EvalTiledEnsemble",
44+
]
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
"""Core Components for the Tiled Ensemble Pipeline.
2+
3+
This module aggregates the essential components utilized in the Tiled Ensemble.
4+
Each component is designed to handle specific stages of the pipeline.
5+
6+
Included Components:
7+
- `merging`: Job to merge predictions from individual tiles into a whole output.
8+
- `metrics_calculation`: Job to compute evaluation metrics at image levels.
9+
- `model_training`: Job for training models on individual tiles.
10+
- `normalization`: Job to normalize predictions.
11+
- `prediction`: Job to generate predictions for each tile.
12+
- `smoothing`: Job to smooth seams between tiles for seamless reconstruction.
13+
- `stats_calculation`: Job to compute statistics required by normalisation and thresholding.
14+
- `thresholding`: Job to apply thresholds to predictions.
15+
- `visualization`: Job to visualize predictions and anomalies.
16+
17+
Reference:
18+
Blaž Rolih, Dick Ameln, Ashwin Vaidya, Samet Akçay:
19+
"Divide and Conquer: High-Resolution Industrial Anomaly Detection via
20+
Memory Efficient Tiled Ensemble." Proceedings of the IEEE/CVF Conference
21+
on Computer Vision and Pattern Recognition Workshops (VAND 2.0). 2024.
22+
"""
23+
24+
# Copyright (C) 2024-2025 Intel Corporation
25+
# SPDX-License-Identifier: Apache-2.0
26+
27+
from .merging import MergeJobGenerator
28+
from .metrics_calculation import MetricsCalculationJobGenerator
29+
from .model_training import TrainModelJobGenerator
30+
from .normalization import NormalizationJobGenerator
31+
from .prediction import PredictJobGenerator
32+
from .smoothing import SmoothingJobGenerator
33+
from .stats_calculation import StatisticsJobGenerator
34+
from .thresholding import ThresholdingJobGenerator
35+
from .utils import NormalizationStage, PredictData, ThresholdingStage
36+
from .visualization import VisualizationJobGenerator
37+
38+
__all__ = [
39+
"NormalizationStage",
40+
"ThresholdingStage",
41+
"PredictData",
42+
"TrainModelJobGenerator",
43+
"PredictJobGenerator",
44+
"MergeJobGenerator",
45+
"SmoothingJobGenerator",
46+
"StatisticsJobGenerator",
47+
"NormalizationJobGenerator",
48+
"ThresholdingJobGenerator",
49+
"VisualizationJobGenerator",
50+
"MetricsCalculationJobGenerator",
51+
]

0 commit comments

Comments
 (0)