{"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/leveraging-frequency-analysis-for-deep-fake","title":"Leveraging Frequency Analysis for Deep Fake Image Recognition","arxiv_id":"2003.08685","date":"2020-03-19","proceeding":"ICML 2020 1","authors":["Joel Frank","Thorsten Eisenhofer","Lea Schönherr","Asja Fischer","Dorothea Kolossa","Thorsten Holz"],"abstract":"Deep neural networks can generate images that are astonishingly realistic, so much so that it is often hard for humans to distinguish them from actual photos. These achievements have been largely made possible by Generative Adversarial Networks (GANs). While deep fake images have been thoroughly investigated in the image domain - a classical approach from the area of image forensics - an analysis in the frequency domain has been missing so far. In this paper, we address this shortcoming and our results reveal that in frequency space, GAN-generated images exhibit severe artifacts that can be easily identified. We perform a comprehensive analysis, showing that these artifacts are consistent across different neural network architectures, data sets, and resolutions. In a further investigation, we demonstrate that these artifacts are caused by upsampling operations found in all current GAN architectures, indicating a structural and fundamental problem in the way images are generated via GANs. Based on this analysis, we demonstrate how the frequency representation can be used to identify deep fake images in an automated way, surpassing state-of-the-art methods.","url_abs":"https://arxiv.org/abs/2003.08685v3","url_pdf":"https://arxiv.org/pdf/2003.08685v3.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":"leveraging-frequency-analysis-for-deep-fake","repo_url":"https://github.com/RUB-SysSec/GANDCTAnalysis","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"tf","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"image-forensics","task_name":"Image Forensics"}],"methods":[{"method_slug":"convolution","method_name":"Convolution"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2003.08685","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2003.08685"}},"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":"deterministic:regex_extraction","url":"https://github.com/RUB-SysSec/GANDCTAnalysis","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran":1,"unverified":11},"by_repo_kind":{"official":{"samples":12,"ran":1,"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":"98ee32fa8f79db2a","entry":"noise","repo":"RUB-SysSec/GANDCTAnalysis","repo_kind":"official","path":"create_perturbed_imagedata.py","file_url":"https://github.com/RUB-SysSec/GANDCTAnalysis/blob/HEAD/create_perturbed_imagedata.py","link_basis":"plan_row","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"98ee32fa8f79db2a"}},{"code_sha256_prefix":"dc1f37b3667e76c4","entry":"blur","repo":"RUB-SysSec/GANDCTAnalysis","repo_kind":"official","path":"create_perturbed_imagedata.py","file_url":"https://github.com/RUB-SysSec/GANDCTAnalysis/blob/HEAD/create_perturbed_imagedata.py","link_basis":"first_harvest_node","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":"dc1f37b3667e76c4"}},{"code_sha256_prefix":"6106b4cc51e62441","entry":"convert_images","repo":"RUB-SysSec/GANDCTAnalysis","repo_kind":"official","path":"prepare_dataset.py","file_url":"https://github.com/RUB-SysSec/GANDCTAnalysis/blob/HEAD/prepare_dataset.py","link_basis":"first_harvest_node","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":"6106b4cc51e62441"}},{"code_sha256_prefix":"de3819ddb7821c62","entry":"crop_image","repo":"RUB-SysSec/GANDCTAnalysis","repo_kind":"official","path":"crop_celeba.py","file_url":"https://github.com/RUB-SysSec/GANDCTAnalysis/blob/HEAD/crop_celeba.py","link_basis":"first_harvest_node","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":"de3819ddb7821c62"}},{"code_sha256_prefix":"4bf75d4114551e1d","entry":"dct2","repo":"RUB-SysSec/GANDCTAnalysis","repo_kind":"official","path":"src/image.py","file_url":"https://github.com/RUB-SysSec/GANDCTAnalysis/blob/HEAD/src/image.py","link_basis":"first_harvest_node","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":"4bf75d4114551e1d"}},{"code_sha256_prefix":"fb2dbd27277ccd27","entry":"dct2","repo":"RUB-SysSec/GANDCTAnalysis","repo_kind":"official","path":"src/image_np.py","file_url":"https://github.com/RUB-SysSec/GANDCTAnalysis/blob/HEAD/src/image_np.py","link_basis":"first_harvest_node","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":"fb2dbd27277ccd27"}},{"code_sha256_prefix":"ea00a1a5e9e3ba3f","entry":"deserialize_data","repo":"RUB-SysSec/GANDCTAnalysis","repo_kind":"official","path":"src/dataset.py","file_url":"https://github.com/RUB-SysSec/GANDCTAnalysis/blob/HEAD/src/dataset.py","link_basis":"first_harvest_node","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":"ea00a1a5e9e3ba3f"}},{"code_sha256_prefix":"0bee49f8f05fe911","entry":"fft2d","repo":"RUB-SysSec/GANDCTAnalysis","repo_kind":"official","path":"src/image_np.py","file_url":"https://github.com/RUB-SysSec/GANDCTAnalysis/blob/HEAD/src/image_np.py","link_basis":"first_harvest_node","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":"0bee49f8f05fe911"}},{"code_sha256_prefix":"6688920fab4c673d","entry":"image_paths","repo":"RUB-SysSec/GANDCTAnalysis","repo_kind":"official","path":"src/dataset.py","file_url":"https://github.com/RUB-SysSec/GANDCTAnalysis/blob/HEAD/src/dataset.py","link_basis":"first_harvest_node","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":"6688920fab4c673d"}},{"code_sha256_prefix":"814f39fb6ae264ea","entry":"jpeg","repo":"RUB-SysSec/GANDCTAnalysis","repo_kind":"official","path":"create_perturbed_imagedata.py","file_url":"https://github.com/RUB-SysSec/GANDCTAnalysis/blob/HEAD/create_perturbed_imagedata.py","link_basis":"first_harvest_node","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":"814f39fb6ae264ea"}},{"code_sha256_prefix":"8c156c4355abbec4","entry":"load_image","repo":"RUB-SysSec/GANDCTAnalysis","repo_kind":"official","path":"src/image.py","file_url":"https://github.com/RUB-SysSec/GANDCTAnalysis/blob/HEAD/src/image.py","link_basis":"first_harvest_node","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":"8c156c4355abbec4"}},{"code_sha256_prefix":"676fc31eed31fb44","entry":"serialize_data","repo":"RUB-SysSec/GANDCTAnalysis","repo_kind":"official","path":"src/dataset.py","file_url":"https://github.com/RUB-SysSec/GANDCTAnalysis/blob/HEAD/src/dataset.py","link_basis":"first_harvest_node","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":"676fc31eed31fb44"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}