{"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/diffusion-driven-data-replay-a-novel-approach","title":"Diffusion-Driven Data Replay: A Novel Approach to Combat Forgetting in Federated Class Continual Learning","arxiv_id":"2409.01128","date":"2024-09-02","proceeding":null,"authors":["Jinglin Liang","Jin Zhong","Hanlin Gu","Zhongqi Lu","Xingxing Tang","Gang Dai","Shuangping Huang","Lixin Fan","Qiang Yang"],"abstract":"Federated Class Continual Learning (FCCL) merges the challenges of distributed client learning with the need for seamless adaptation to new classes without forgetting old ones. The key challenge in FCCL is catastrophic forgetting, an issue that has been explored to some extent in Continual Learning (CL). However, due to privacy preservation requirements, some conventional methods, such as experience replay, are not directly applicable to FCCL. Existing FCCL methods mitigate forgetting by generating historical data through federated training of GANs or data-free knowledge distillation. However, these approaches often suffer from unstable training of generators or low-quality generated data, limiting their guidance for the model. To address this challenge, we propose a novel method of data replay based on diffusion models. Instead of training a diffusion model, we employ a pre-trained conditional diffusion model to reverse-engineer each class, searching the corresponding input conditions for each class within the model's input space, significantly reducing computational resources and time consumption while ensuring effective generation. Furthermore, we enhance the classifier's domain generalization ability on generated and real data through contrastive learning, indirectly improving the representational capability of generated data for real data. Comprehensive experiments demonstrate that our method significantly outperforms existing baselines. Code is available at https://github.com/jinglin-liang/DDDR.","url_abs":"https://arxiv.org/abs/2409.01128v2","url_pdf":"https://arxiv.org/pdf/2409.01128v2.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":"diffusion-driven-data-replay-a-novel-approach","repo_url":"https://github.com/jinglin-liang/dddr","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[{"task_slug":"continual-learning","task_name":"Continual Learning"},{"task_slug":"contrastive-learning","task_name":"Contrastive Learning"},{"task_slug":"data-free-knowledge-distillation","task_name":"Data-free Knowledge Distillation"},{"task_slug":"domain-generalization","task_name":"Domain Generalization"},{"task_slug":"knowledge-distillation","task_name":"Knowledge Distillation"}],"methods":[{"method_slug":"diffusion","method_name":"Diffusion"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2409.01128","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2409.01128"}},"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/jinglin-liang/dddr","reach":{"status":"ok"}},{"provenance":"deterministic:regex_extraction","url":"https://github.com/jinglin-liang/DDDR","reach":{"status":"ok"}}],"summary":{"ran_draft_wrong":6,"ran":2,"unverified":5},"by_repo_kind":{"official":{"samples":13,"ran":8,"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":13,"samples":[{"code_sha256_prefix":"d9def42110729a85","entry":"conv1x1","repo":"jinglin-liang/DDDR","repo_kind":"official","path":"convs/resnet.py","file_url":"https://github.com/jinglin-liang/DDDR/blob/HEAD/convs/resnet.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"d9def42110729a85"}},{"code_sha256_prefix":"d5cd7ffe2dc51b21","entry":"conv1x1","repo":"jinglin-liang/DDDR","repo_kind":"official","path":"convs/modified_represnet.py","file_url":"https://github.com/jinglin-liang/DDDR/blob/HEAD/convs/modified_represnet.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"d5cd7ffe2dc51b21"}},{"code_sha256_prefix":"160bb14bd76201b4","entry":"conv3x3","repo":"jinglin-liang/DDDR","repo_kind":"official","path":"convs/resnet.py","file_url":"https://github.com/jinglin-liang/DDDR/blob/HEAD/convs/resnet.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"160bb14bd76201b4"}},{"code_sha256_prefix":"fac5364e2f53c6db","entry":"conv3x3","repo":"jinglin-liang/DDDR","repo_kind":"official","path":"convs/resnet_cbam.py","file_url":"https://github.com/jinglin-liang/DDDR/blob/HEAD/convs/resnet_cbam.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"fac5364e2f53c6db"}},{"code_sha256_prefix":"1907f2ae25449f39","entry":"conv3x3","repo":"jinglin-liang/DDDR","repo_kind":"official","path":"convs/modified_represnet.py","file_url":"https://github.com/jinglin-liang/DDDR/blob/HEAD/convs/modified_represnet.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"1907f2ae25449f39"}},{"code_sha256_prefix":"5418e150a16eff01","entry":"kldiv","repo":"jinglin-liang/DDDR","repo_kind":"official","path":"methods/target.py","file_url":"https://github.com/jinglin-liang/DDDR/blob/HEAD/methods/target.py","link_basis":"plan_row","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"5418e150a16eff01"}},{"code_sha256_prefix":"b8c9308d810cac84","entry":"normalize","repo":"jinglin-liang/DDDR","repo_kind":"official","path":"methods/target.py","file_url":"https://github.com/jinglin-liang/DDDR/blob/HEAD/methods/target.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b8c9308d810cac84"}},{"code_sha256_prefix":"ff4408de553ce9df","entry":"pack_images","repo":"jinglin-liang/DDDR","repo_kind":"official","path":"methods/target.py","file_url":"https://github.com/jinglin-liang/DDDR/blob/HEAD/methods/target.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"ff4408de553ce9df"}},{"code_sha256_prefix":"4742faeabce1f66b","entry":"resnet18","repo":"jinglin-liang/DDDR","repo_kind":"official","path":"convs/ucir_resnet.py","file_url":"https://github.com/jinglin-liang/DDDR/blob/HEAD/convs/ucir_resnet.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"4742faeabce1f66b"}},{"code_sha256_prefix":"efffaa1ddb5723bb","entry":"resnet18","repo":"jinglin-liang/DDDR","repo_kind":"official","path":"convs/resnet.py","file_url":"https://github.com/jinglin-liang/DDDR/blob/HEAD/convs/resnet.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"efffaa1ddb5723bb"}},{"code_sha256_prefix":"9d7277889d69cf2d","entry":"resnet18_cbam","repo":"jinglin-liang/DDDR","repo_kind":"official","path":"convs/resnet_cbam.py","file_url":"https://github.com/jinglin-liang/DDDR/blob/HEAD/convs/resnet_cbam.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"9d7277889d69cf2d"}},{"code_sha256_prefix":"ecaa7ca05d715804","entry":"resnet18_rep","repo":"jinglin-liang/DDDR","repo_kind":"official","path":"convs/modified_represnet.py","file_url":"https://github.com/jinglin-liang/DDDR/blob/HEAD/convs/modified_represnet.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"ecaa7ca05d715804"}},{"code_sha256_prefix":"9eb3d43ee2e8ae7d","entry":"resnet34_cbam","repo":"jinglin-liang/DDDR","repo_kind":"official","path":"convs/resnet_cbam.py","file_url":"https://github.com/jinglin-liang/DDDR/blob/HEAD/convs/resnet_cbam.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"9eb3d43ee2e8ae7d"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}