reverse-SynthID人在环校准实战:从Gemini手动检测反馈自动优化carrier_weights

reverse-SynthID人在环校准实战:从Gemini手动检测反馈自动优化carrier_weights reverse-SynthID人在环校准实战从Gemini手动检测反馈自动优化carrier_weights【免费下载链接】reverse-SynthIDreverse engineering Geminis SynthID detection项目地址: https://gitcode.com/gh_mirrors/re/reverse-SynthIDreverse-SynthID是一个反向工程 Google SynthID 隐水印的开源项目它不仅能以 90% 准确率检测 Gemini 生成图片中的水印还能通过多阶段频谱攻击将其无损去除。其中最有趣的设计是人在环校准human-in-the-loop calibration把你在 Gemini App 里的手动检测结果填回一张简单的 CSV 表格scripts/calibrate_from_feedback.py 就会自动调优 V4 频谱码本中的carrier_weights载波权重让下一轮去水印攻击更准、更强同时保持画质。纯白 Gemini 图片放大后的高频残差——那些斜向条纹就是 SynthID 水印的空间频率签名也是校准循环要盯住的对象。为什么 SynthID 水印去除还需要人来反馈因为唯一可靠的裁判是 Gemini 自家的检测器。本地可以用频谱相关性做体检例如水印图conf0.91处理后conf0.02但本地体检通过 ≠ Gemini App 放行。检测器的内部实现是黑盒只有通过人工把输出图逐张上传、查看是否仍含 SynthID 水印才能获得真正的 ground truth。reverse-SynthID 的做法是把人工检测变成一条可重复的自动化闭环——你只负责在 Gemini App 里点检测和填y/n权重更新、备份、统计全部由脚本完成。理解 carrier_weightsV4 码本的力度旋钮V4 码本artifacts/spectral_codebook_v4.npz为每个(模型, 宽, 高)组合保存了一份频谱档案其中carrier_weights是唯一活的字段字段形状作用consensus_coherence(H, W, 3)跨 6 色背景的相位一致性作为载波掩码consensus_phase(H, W, 3)平均相位模板供频谱减除使用carrier_weights(H, W, 3)实时权重初始为consensus² × (0.5 0.5 × agreement)由校准循环更新每次频谱减除时每个频点的减除量都乘以该点的carrier_weights见 src/extraction/synthid_bypass_v4.py。权重越高该载波被打得越狠——校准的本质就是根据真人反馈把这个旋钮转到合适的位置。从参考图提取的 SynthID 水印信号与其频谱幅度/相位右下角的亮点正是跨颜色一致锁定、需要重点校准的载波频点。三步人在环校准流程从批量去除到码本更新第 1 步用 dissolve_batch.py 生成多档强度变体scripts/dissolve_batch.py 会为每张输入图生成 A/B/C… 多个强度版本并写出一份manifest.csv记录每个变体的输出路径、所用 profile、PSNR/SSIMpython scripts/dissolve_batch.py \ --input ./to_clean/ \ --output ./runs/round_01/ \ --codebook artifacts/spectral_codebook_v4.npz \ --model nano-banana-pro-preview \ --strengths gentle moderate aggressive变体用单字母 A/B/C 命名如cat__A_gentle.png就是为了让你填表时不用抄长路径。第 2 步在 Gemini App 手动检测填写 tally.csv把每张输出图上传到 Gemini App 运行 SynthID 检测然后给每行标一个y仍有水印或n已清除source,variant,still_watermarked /data/.../cat__A_gentle.png,A,n /data/.../cat__B_moderate.png,B,y /data/.../cat__C_aggressive.png,C,n解析器接受y/n/yes/no/1/0/true/false空行自动跳过calibrate_from_feedback.py。tally 也可以直接就在 manifest 上原地填写两个文件按(source, variant)自动关联。第 3 步运行 calibrate_from_feedback.py 自动更新权重python scripts/calibrate_from_feedback.py \ --manifest runs/round_01/manifest.csv \ --tally runs/round_01/tally.csv \ --codebook artifacts/spectral_codebook_v4.npz \ --step 0.25运行后终端会输出每个 profile 的动作摘要如bump ×1.250/damp ×0.963和本轮成功率代码本就地写回并自动创建带时间戳的备份spectral_codebook_v4.npz.bak-20260821-120000.npz除非你加--no-backup。校准规则详解失败的频点加码成功的频点轻退核心逻辑在 calibrate()规则非常克制有失败样本F 0该 profile 的载波权重整体放大1 step × (F / (FS))倍——失败率越高下一轮攻击越猛默认step0.25即最多 25%/轮。全部成功F 0 且 S 0权重轻微衰减1 − 0.15 × step倍回收画质而不是继续加码。只动载波频点仅更新consensus_coherence ≥ consensus_floor默认 0.50的频点内容噪声频点永远不会被放大。这个失败加码、成功回退的机制让你可以在绕过检测和保持 PSNR之间自动走钢丝。迭代调参建议step、damp-factor 与备份策略参数默认值什么时候调--step0.25连续多轮仍失败 → 加大到 0.5 猛攻一轮就过头掉画质 → 降到 0.1--damp-factor0.15全部成功后想更快恢复画质时调大--consensus-floor0.50想更保守地只动强载波时调高如 0.60 实战建议小批量迭代先用dissolve_batch.py --limit 5跑 5 张图快速验证方向再放大批次。保留备份默认自动备份不要关调参翻车时可以直接恢复上一版码本。关注终端提示全部清除时脚本会提示考虑降低强度换画质还有失败时会提示重新跑一批新图验证——照着做即可。最终效果画质无损与检测绕过兼得左第 1 轮仅温和频谱减除的输出右第 6 轮七合一攻击的输出。肉眼几乎无法分辨差异但只有后者通过了 Gemini SynthID 检测器——这正是多轮人工校准积累出的效果。项目最终在gemini-3.1-flash-image-preview和nano-banana-pro-preview两个模型上全部绕过检测验证样本如下经过校准后码本处理的城市测试图validation_images/cleaned/无可见伪影。相关文件速查文件说明scripts/dissolve_batch.py批量生成多档强度变体 manifest.csvscripts/calibrate_from_feedback.py读取手动检测反馈更新 carrier_weightsscripts/build_codebook_v4.py从多模型多色数据集构建 V4 码本src/extraction/synthid_bypass_v4.pyV4 跨色一致码本 七阶段去除器核心实现artifacts/spectral_codebook_v4.npz校准后的 V4 频谱码本validation_images/cleaned/4:3 / 9:16 验证图片的去除结果⚠️ 本项目仅用于研究与教育目的水印鲁棒性研究、AI 生成内容识别的安全分析请勿用于将 AI 生成内容伪装为人类创作。【免费下载链接】reverse-SynthIDreverse engineering Geminis SynthID detection项目地址: https://gitcode.com/gh_mirrors/re/reverse-SynthID创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考