{"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/anomaly-detection-with-deep-perceptual","title":"Anomaly Detection in Medical Imaging with Deep Perceptual Autoencoders","arxiv_id":"2006.13265","date":"2020-06-23","proceeding":null,"authors":["Nina Shvetsova","Bart Bakker","Irina Fedulova","Heinrich Schulz","Dmitry V. Dylov"],"abstract":"Anomaly detection is the problem of recognizing abnormal inputs based on the seen examples of normal data. Despite recent advances of deep learning in recognizing image anomalies, these methods still prove incapable of handling complex medical images, such as barely visible abnormalities in chest X-rays and metastases in lymph nodes. To address this problem, we introduce a new powerful method of image anomaly detection. It relies on the classical autoencoder approach with a re-designed training pipeline to handle high-resolution, complex images and a robust way of computing an image abnormality score. We revisit the very problem statement of fully unsupervised anomaly detection, where no abnormal examples at all are provided during the model setup. We propose to relax this unrealistic assumption by using a very small number of anomalies of confined variability merely to initiate the search of hyperparameters of the model. We evaluate our solution on natural image datasets with a known benchmark, as well as on two medical datasets containing radiology and digital pathology images. The proposed approach suggests a new strong baseline for image anomaly detection and outperforms state-of-the-art approaches in complex medical image analysis tasks.","url_abs":"https://arxiv.org/abs/2006.13265v3","url_pdf":"https://arxiv.org/pdf/2006.13265v3.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":"anomaly-detection-with-deep-perceptual","repo_url":"https://github.com/ninatu/anomaly_detection","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"anomaly-detection-with-deep-perceptual","repo_url":"https://github.com/ninatu/mood_challenge","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"anomaly-detection","task_name":"Anomaly Detection"},{"task_slug":"medical-image-analysis","task_name":"Medical Image Analysis"},{"task_slug":"unsupervised-anomaly-detection","task_name":"Unsupervised Anomaly Detection"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2006.13265","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2006.13265"}},"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/ninatu/anomaly_detection","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/ninatu/mood_challenge","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"unverified":9},"by_repo_kind":{"official":{"samples":6,"ran":0,"repositories":1},"listed":{"samples":3,"ran":0,"repositories":1}},"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":"2cd3242793c5e6e9","entry":"get_act_layer","repo":"ninatu/anomaly_detection","repo_kind":"official","path":"anomaly_detection/dpa/layers.py","file_url":"https://github.com/ninatu/anomaly_detection/blob/HEAD/anomaly_detection/dpa/layers.py","link_basis":"first_harvest_node","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":"2cd3242793c5e6e9"}},{"code_sha256_prefix":"13c5185af2809723","entry":"get_act_layer","repo":"ninatu/mood_challenge","repo_kind":"listed","path":"mood/dpa/layers.py","file_url":"https://github.com/ninatu/mood_challenge/blob/HEAD/mood/dpa/layers.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":"13c5185af2809723"}},{"code_sha256_prefix":"02607ba448745ff4","entry":"get_norm_layer","repo":"ninatu/anomaly_detection","repo_kind":"official","path":"anomaly_detection/dpa/layers.py","file_url":"https://github.com/ninatu/anomaly_detection/blob/HEAD/anomaly_detection/dpa/layers.py","link_basis":"first_harvest_node","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":"02607ba448745ff4"}},{"code_sha256_prefix":"8aff7f9d2b993ef5","entry":"get_norm_layer","repo":"ninatu/mood_challenge","repo_kind":"listed","path":"mood/dpa/layers.py","file_url":"https://github.com/ninatu/mood_challenge/blob/HEAD/mood/dpa/layers.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":"8aff7f9d2b993ef5"}},{"code_sha256_prefix":"7128fe63905eb63d","entry":"get_pool_layer","repo":"ninatu/anomaly_detection","repo_kind":"official","path":"anomaly_detection/dpa/layers.py","file_url":"https://github.com/ninatu/anomaly_detection/blob/HEAD/anomaly_detection/dpa/layers.py","link_basis":"first_harvest_node","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":"7128fe63905eb63d"}},{"code_sha256_prefix":"123ffbf866826bb5","entry":"get_pool_layer","repo":"ninatu/mood_challenge","repo_kind":"listed","path":"mood/dpa/layers.py","file_url":"https://github.com/ninatu/mood_challenge/blob/HEAD/mood/dpa/layers.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":"123ffbf866826bb5"}},{"code_sha256_prefix":"404a50d962719722","entry":"gradient_penalty","repo":"ninatu/anomaly_detection","repo_kind":"official","path":"anomaly_detection/dpa/losses.py","file_url":"https://github.com/ninatu/anomaly_detection/blob/HEAD/anomaly_detection/dpa/losses.py","link_basis":"first_harvest_node","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":"404a50d962719722"}},{"code_sha256_prefix":"0c6060d9692f443f","entry":"mse_loss","repo":"ninatu/anomaly_detection","repo_kind":"official","path":"anomaly_detection/dpa/losses.py","file_url":"https://github.com/ninatu/anomaly_detection/blob/HEAD/anomaly_detection/dpa/losses.py","link_basis":"first_harvest_node","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":"0c6060d9692f443f"}},{"code_sha256_prefix":"da05d3d5e3f4056d","entry":"wasserstein_loss","repo":"ninatu/anomaly_detection","repo_kind":"official","path":"anomaly_detection/dpa/losses.py","file_url":"https://github.com/ninatu/anomaly_detection/blob/HEAD/anomaly_detection/dpa/losses.py","link_basis":"first_harvest_node","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":"da05d3d5e3f4056d"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}