{"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/robin-robust-and-invisible-watermarks-for","title":"ROBIN: Robust and Invisible Watermarks for Diffusion Models with Adversarial Optimization","arxiv_id":"2411.03862","date":"2024-11-06","proceeding":null,"authors":["Huayang Huang","Yu Wu","Qian Wang"],"abstract":"Watermarking generative content serves as a vital tool for authentication, ownership protection, and mitigation of potential misuse. Existing watermarking methods face the challenge of balancing robustness and concealment. They empirically inject a watermark that is both invisible and robust and passively achieve concealment by limiting the strength of the watermark, thus reducing the robustness. In this paper, we propose to explicitly introduce a watermark hiding process to actively achieve concealment, thus allowing the embedding of stronger watermarks. To be specific, we implant a robust watermark in an intermediate diffusion state and then guide the model to hide the watermark in the final generated image. We employ an adversarial optimization algorithm to produce the optimal hiding prompt guiding signal for each watermark. The prompt embedding is optimized to minimize artifacts in the generated image, while the watermark is optimized to achieve maximum strength. The watermark can be verified by reversing the generation process. Experiments on various diffusion models demonstrate the watermark remains verifiable even under significant image tampering and shows superior invisibility compared to other state-of-the-art robust watermarking methods. Code is available at https://github.com/Hannah1102/ROBIN.","url_abs":"https://arxiv.org/abs/2411.03862v2","url_pdf":"https://arxiv.org/pdf/2411.03862v2.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":"robin-robust-and-invisible-watermarks-for","repo_url":"https://github.com/hannah1102/robin","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[],"methods":[{"method_slug":"diffusion","method_name":"Diffusion"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2411.03862","atlas_url":"https://app.syntology.ai/?focus=2411.03862","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2411.03862"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+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/Hannah1102/ROBIN","reach":{"status":"ok"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/hannah1102/robin","reach":{"status":"ok"}}],"summary":{"ran_draft_wrong":3,"ran_violates":1,"ran_honours":1,"unverified":11},"by_repo_kind":{"official":{"samples":16,"ran":5,"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":16,"samples":[{"code_sha256_prefix":"cfd76fd0d89574a4","entry":"approx_standard_normal_cdf","repo":"Hannah1102/ROBIN","repo_kind":"official","path":"guided_diffusion/losses.py","file_url":"https://github.com/Hannah1102/ROBIN/blob/HEAD/guided_diffusion/losses.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"cfd76fd0d89574a4"}},{"code_sha256_prefix":"f19962ebb134b3d7","entry":"convert_to_custom_text_state_dict","repo":"Hannah1102/ROBIN","repo_kind":"official","path":"open_clip/model.py","file_url":"https://github.com/Hannah1102/ROBIN/blob/HEAD/open_clip/model.py","link_basis":"harvester_set","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"f19962ebb134b3d7"}},{"code_sha256_prefix":"cd33283d615fb3d7","entry":"discretized_gaussian_log_likelihood","repo":"Hannah1102/ROBIN","repo_kind":"official","path":"guided_diffusion/losses.py","file_url":"https://github.com/Hannah1102/ROBIN/blob/HEAD/guided_diffusion/losses.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"cd33283d615fb3d7"}},{"code_sha256_prefix":"dcd422d66b0581d8","entry":"get_cast_dtype","repo":"Hannah1102/ROBIN","repo_kind":"official","path":"open_clip/model.py","file_url":"https://github.com/Hannah1102/ROBIN/blob/HEAD/open_clip/model.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":"dcd422d66b0581d8"}},{"code_sha256_prefix":"cf2798b666b231ca","entry":"normal_kl","repo":"Hannah1102/ROBIN","repo_kind":"official","path":"guided_diffusion/losses.py","file_url":"https://github.com/Hannah1102/ROBIN/blob/HEAD/guided_diffusion/losses.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"cf2798b666b231ca"}},{"code_sha256_prefix":"b9d521d7021e46bb","entry":"backward_ddim","repo":"Hannah1102/ROBIN","repo_kind":"official","path":"inverse_stable_diffusion.py","file_url":"https://github.com/Hannah1102/ROBIN/blob/HEAD/inverse_stable_diffusion.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":"b9d521d7021e46bb"}},{"code_sha256_prefix":"57f1602ed20a9c21","entry":"build_model_from_openai_state_dict","repo":"Hannah1102/ROBIN","repo_kind":"official","path":"open_clip/model.py","file_url":"https://github.com/Hannah1102/ROBIN/blob/HEAD/open_clip/model.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":"57f1602ed20a9c21"}},{"code_sha256_prefix":"c00a1b3a3bfccabb","entry":"create_dataloader","repo":"Hannah1102/ROBIN","repo_kind":"official","path":"gen_watermark.py","file_url":"https://github.com/Hannah1102/ROBIN/blob/HEAD/gen_watermark.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":"c00a1b3a3bfccabb"}},{"code_sha256_prefix":"3b89ab9f937dccdd","entry":"forward_ddim","repo":"Hannah1102/ROBIN","repo_kind":"official","path":"inverse_stable_diffusion.py","file_url":"https://github.com/Hannah1102/ROBIN/blob/HEAD/inverse_stable_diffusion.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":"3b89ab9f937dccdd"}},{"code_sha256_prefix":"ddcbd45e940484ee","entry":"gather_features","repo":"Hannah1102/ROBIN","repo_kind":"official","path":"open_clip/loss.py","file_url":"https://github.com/Hannah1102/ROBIN/blob/HEAD/open_clip/loss.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":"ddcbd45e940484ee"}},{"code_sha256_prefix":"8c930cf169a119b1","entry":"get_pred_ori","repo":"Hannah1102/ROBIN","repo_kind":"official","path":"stable_diffusion_robin.py","file_url":"https://github.com/Hannah1102/ROBIN/blob/HEAD/stable_diffusion_robin.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":"8c930cf169a119b1"}},{"code_sha256_prefix":"075fbc6126eeefe6","entry":"hf_read_jsonlines","repo":"Hannah1102/ROBIN","repo_kind":"official","path":"io_utils.py","file_url":"https://github.com/Hannah1102/ROBIN/blob/HEAD/io_utils.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":"075fbc6126eeefe6"}},{"code_sha256_prefix":"81cef8be4a138b63","entry":"load_jsonlines","repo":"Hannah1102/ROBIN","repo_kind":"official","path":"io_utils.py","file_url":"https://github.com/Hannah1102/ROBIN/blob/HEAD/io_utils.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":"81cef8be4a138b63"}},{"code_sha256_prefix":"fb651d0a97fd4d3f","entry":"prepare_inputs_for_generation","repo":"Hannah1102/ROBIN","repo_kind":"official","path":"open_clip/coca_model.py","file_url":"https://github.com/Hannah1102/ROBIN/blob/HEAD/open_clip/coca_model.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":"fb651d0a97fd4d3f"}},{"code_sha256_prefix":"2a377da4a76a2d44","entry":"register_pooler","repo":"Hannah1102/ROBIN","repo_kind":"official","path":"open_clip/hf_model.py","file_url":"https://github.com/Hannah1102/ROBIN/blob/HEAD/open_clip/hf_model.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":"2a377da4a76a2d44"}},{"code_sha256_prefix":"afbb28c04b32db08","entry":"resolve_globs","repo":"Hannah1102/ROBIN","repo_kind":"official","path":"io_utils.py","file_url":"https://github.com/Hannah1102/ROBIN/blob/HEAD/io_utils.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":"afbb28c04b32db08"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}