{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/fastflow-unsupervised-anomaly-detection-and","title":"FastFlow: Unsupervised Anomaly Detection and Localization via 2D Normalizing Flows","arxiv_id":"2111.07677","date":"2021-11-15","proceeding":null,"authors":["Jiawei Yu","Ye Zheng","Xiang Wang","Wei Li","Yushuang Wu","Rui Zhao","Liwei Wu"],"abstract":"Unsupervised anomaly detection and localization is crucial to the practical application when collecting and labeling sufficient anomaly data is infeasible. Most existing representation-based approaches extract normal image features with a deep convolutional neural network and characterize the corresponding distribution through non-parametric distribution estimation methods. The anomaly score is calculated by measuring the distance between the feature of the test image and the estimated distribution. However, current methods can not effectively map image features to a tractable base distribution and ignore the relationship between local and global features which are important to identify anomalies. To this end, we propose FastFlow implemented with 2D normalizing flows and use it as the probability distribution estimator. Our FastFlow can be used as a plug-in module with arbitrary deep feature extractors such as ResNet and vision transformer for unsupervised anomaly detection and localization. In training phase, FastFlow learns to transform the input visual feature into a tractable distribution and obtains the likelihood to recognize anomalies in inference phase. Extensive experimental results on the MVTec AD dataset show that FastFlow surpasses previous state-of-the-art methods in terms of accuracy and inference efficiency with various backbone networks. Our approach achieves 99.4% AUC in anomaly detection with high inference efficiency.","url_abs":"https://arxiv.org/abs/2111.07677v2","url_pdf":"https://arxiv.org/pdf/2111.07677v2.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"fastflow-unsupervised-anomaly-detection-and","repo_url":"https://github.com/RistoranteRist/FastFlow","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"fastflow-unsupervised-anomaly-detection-and","repo_url":"https://github.com/gathierry/FastFlow","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"fastflow-unsupervised-anomaly-detection-and","repo_url":"https://github.com/MindSpore-paper-code-3/code10/tree/main/fastflow","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"mindspore","reach":null},{"paper_slug":"fastflow-unsupervised-anomaly-detection-and","repo_url":"https://github.com/MindSpore-paper-code-3/code7/tree/main/fastflow","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"mindspore","reach":null},{"paper_slug":"fastflow-unsupervised-anomaly-detection-and","repo_url":"https://github.com/openvinotoolkit/anomalib/tree/main/src/anomalib/models/fastflow","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"anomaly-detection","task_name":"Anomaly Detection"},{"task_slug":"unsupervised-anomaly-detection","task_name":"Unsupervised Anomaly Detection"},{"task_slug":"weakly-supervised-defect-detection","task_name":"Weakly Supervised Defect Detection"}],"methods":[{"method_slug":"1x1-convolution","method_name":"1x1 Convolution"},{"method_slug":"attention","method_name":"Attention"},{"method_slug":"average-pooling","method_name":"Average Pooling"},{"method_slug":"batch-normalization","method_name":"Batch Normalization"},{"method_slug":"bottleneck-residual-block","method_name":"Bottleneck Residual Block"},{"method_slug":"convolution","method_name":"Convolution"},{"method_slug":"dense-connections","method_name":"Dense Connections"},{"method_slug":"global-average-pooling","method_name":"Global Average Pooling"},{"method_slug":"kaiming-initialization","method_name":"Kaiming Initialization"},{"method_slug":"layer-normalization","method_name":"Layer Normalization"},{"method_slug":"linear-layer","method_name":"Linear Layer"},{"method_slug":"max-pooling","method_name":"Max Pooling"},{"method_slug":"multi-head-attention","method_name":"Multi-Head Attention"},{"method_slug":"normalizing-flows","method_name":"Normalizing Flows"},{"method_slug":"relu","method_name":"ReLU"},{"method_slug":"residual-block","method_name":"Residual Block"},{"method_slug":"residual-connection","method_name":"Residual Connection"},{"method_slug":"softmax","method_name":"Softmax"},{"method_slug":"vision-transformer","method_name":"Vision Transformer"}],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/anomaly-detection-on-mvtec-ad","task":"Anomaly Detection","dataset":"MVTec AD","model":"Fastflow","rank_in_archive_order":36,"of":148,"metrics":{"Detection AUROC":"99.4","FPS":"21.8","Segmentation AUROC":"98.5"},"uses_additional_data":false},{"leaderboard":"/sota/anomaly-detection-on-mvtec-loco-ad","task":"Anomaly Detection","dataset":"MVTec LOCO AD","model":"FastFlow","rank_in_archive_order":28,"of":40,"metrics":{"Avg. Detection AUROC":"79.2","Detection AUROC (only logical)":"75.5","Detection AUROC (only structural)":"82.9","Segmentation AU-sPRO (until FPR 5%)":"56.8"},"uses_additional_data":false},{"leaderboard":"/sota/anomaly-detection-on-one-class-cifar-10","task":"Anomaly Detection","dataset":"One-class CIFAR-10","model":"FastFlow","rank_in_archive_order":32,"of":36,"metrics":{"AUROC":"66.7"},"uses_additional_data":false},{"leaderboard":"/sota/anomaly-detection-on-visa","task":"Anomaly Detection","dataset":"VisA","model":"FastFlow","rank_in_archive_order":48,"of":50,"metrics":{"Segmentation AUPRO (until 30% FPR)":"59.8"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2111.07677","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2111.07677"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/RistoranteRist/FastFlow","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/gathierry/FastFlow","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/MindSpore-paper-code-3/code7/tree/main/fastflow","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/MindSpore-paper-code-3/code10/tree/main/fastflow","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/openvinotoolkit/anomalib/tree/main/src/anomalib/models/fastflow","reach":null}],"summary":{"unverified":6},"by_repo_kind":{"listed":{"samples":6,"ran":0,"repositories":2}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"a1c1c89b7d27cf53","entry":"calc_loss","repo":"RistoranteRist/FastFlow","repo_kind":"listed","path":"utils.py","file_url":"https://github.com/RistoranteRist/FastFlow/blob/HEAD/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a1c1c89b7d27cf53"}},{"code_sha256_prefix":"2f2d58311dd3969d","entry":"get_score","repo":"RistoranteRist/FastFlow","repo_kind":"listed","path":"utils.py","file_url":"https://github.com/RistoranteRist/FastFlow/blob/HEAD/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"2f2d58311dd3969d"}},{"code_sha256_prefix":"9be60eff7630c2b3","entry":"load_image","repo":"RistoranteRist/FastFlow","repo_kind":"listed","path":"utils.py","file_url":"https://github.com/RistoranteRist/FastFlow/blob/HEAD/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"9be60eff7630c2b3"}},{"code_sha256_prefix":"bec083801249f9c0","entry":"subnet_conv_1x1","repo":"RistoranteRist/FastFlow","repo_kind":"listed","path":"model.py","file_url":"https://github.com/RistoranteRist/FastFlow/blob/HEAD/model.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"bec083801249f9c0"}},{"code_sha256_prefix":"8c83518b50a675fa","entry":"subnet_conv_3x3","repo":"RistoranteRist/FastFlow","repo_kind":"listed","path":"model.py","file_url":"https://github.com/RistoranteRist/FastFlow/blob/HEAD/model.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"8c83518b50a675fa"}},{"code_sha256_prefix":"24b2b1978afd51b6","entry":"subnet_conv_func","repo":"gathierry/FastFlow","repo_kind":"listed","path":"fastflow.py","file_url":"https://github.com/gathierry/FastFlow/blob/HEAD/fastflow.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"24b2b1978afd51b6"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}