图片是不是 AI 生成?用 UniversalFakeDetect 保留误判边界

用生成图检测器筛查已知来源图片并验证误判,不当作鉴定结论,附输出核对与失败边界。

UniversalFakeDetect 尝试区分真实图片与生成图片。它输出分类倾向,只适合作为筛查线索,不能单独鉴定一张网络图的来源。本篇用已知来源的两组图片整理可回查的误判记录;未执行检测模型。

建立四张已知来源的小样本

自有实拍两张放入 test/real,自行生成且有生成记录的两张放入 test/fake;标签0代表实拍,1代表生成。两组数量必须相等,题材、尺寸与压缩方式尽量接近。网上猜测的标签不能作为真值。按官方仓库准备依赖及 fc_weights.pth;当前实现直接调用 CUDA,需可用匹配环境,不保证纯CPU运行。

图片是不是 AI 生成?用 UniversalFakeDetect 保留误判边界

README 命令与实际源码需要一起检查

2026-10-03 读取的 validate.py 显示:只给 real_path、fake_path 而不传 data_mode 会仍选默认数据域;自定义路径分支的字典缺少输出使用的 key;实际统计文件叫 acc0.txt。不要把 README 示例命令的提交成功当作自己的图片已被评价。以下为当前源码制作本地副本补丁,保留原 validate.py。

在仓库根目录将下面保存为 make_own_validation.py,运行 python make_own_validation.py。补丁检查三个精确源码片段,任意不匹配就停止,避免套到未来版本。新增 CSV 按官方 shuffle=False 的加载顺序与 total_list 配对,不重新猜文件标签。

from pathlib import Path
import ast
src = Path("validate.py").read_text(encoding="utf-8")
changes = [
    ("dataset_paths = [ dict(real_path=opt.real_path, fake_path=opt.fake_path, data_mode=opt.data_mode) ]",
     "dataset_paths = [dict(key='own', real_path=opt.real_path, fake_path=opt.fake_path, data_mode=opt.data_mode)]"),
    ("    if os.path.exists(opt.result_folder):\n        shutil.rmtree(opt.result_folder)",
     "    if os.path.exists(opt.result_folder):\n        raise FileExistsError('请使用不存在的新输出目录')"),
    ("    y_true, y_pred = np.array(y_true), np.array(y_pred)",
     "    y_true, y_pred = np.array(y_true), np.array(y_pred)\n"
     "    assert len(loader.dataset.total_list) == len(y_true) == len(y_pred)\n"
     "    with open(os.path.join(opt.result_folder, 'prediction_rows.csv'), 'w', newline='', encoding='utf-8-sig') as f:\n"
     "        writer = csv.writer(f)\n"
     "        writer.writerow(['file','known_label','score','predicted_label','is_error'])\n"
     "        for path, label, score in zip(loader.dataset.total_list, y_true, y_pred):\n"
     "            pred = int(score > 0.5)\n"
     "            writer.writerow([path, int(label), float(score), pred, pred != int(label)])")]
for old, new in changes:
    if src.count(old) != 1:
        raise RuntimeError("官方源码已变化,请人工核对对应段落,停止自动改写")
    src = src.replace(old, new)
ast.parse(src)
Path("validate_own.py").write_text(src, encoding="utf-8")
print("已保存副本validate_own.py;尚未执行模型")

用新目录执行模型,再回看逐图清单

python validate_own.py --arch=CLIP:ViT-L/14 --ckpt=pretrained_weights/fc_weights.pth --result_folder=own_pairs_run01 --real_path=test/real --fake_path=test/fake --data_mode=ours --max_sample=2

own_pairs_run01 必须尚不存在,补丁会拒绝覆盖旧结果。代码中的 0.5 是官方当前分类阈值;AP 不等于这个阈值的准确率。补丁生成和语法检查已在所读源码副本上执行通过,但本篇没有安装推理依赖、下载权重或运行检测;模型结果仍须在独立环境执行验收。

逐张核对误判,才谈能否筛查

打开 prediction_rows.csv,应有四条图片记录,逐项核对 file 是否属于输入、known_label 是否与实拍或生成记录相同。predicted_label 为1且 known_label 为0是真照片误判生成;反向是漏判。is_error 为True的图片逐张查看,并记录压缩、纹理或题材差异。ap.txt/acc0.txt 是汇总,不能替代这张逐图清单;若记录不是四张,先检查读取、数量或运行异常,不计算自己想要的结论。

筛查结果不是图片来源证明

再给相同图片建立 JPEG 压缩副本,保持标签来自原始制作记录并使用新结果目录,比较误判变化。跨生成器泛化研究不等于未来所有模型都可识别。一次分数不能证明某人造假或新闻真实性;有争议时回到原文件、制作记录及来源链。下一步只将候选送人工核查,保存全部误判样本和原始输入。

参考资料

依据2026-10-03读取的官方项目README与实际验证源码。补丁属于本文本地示例,不是官方发布的修复版本。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/33121.html

赞 (0)
AI小管家的头像AI小管家
自有图片怎么嵌入 AI 水印?用 TrustMark 编码后回读验证
上一篇 4小时前
AI 配色怎么保留个人偏好?用 Khroma 选色后检查文字对比
下一篇 4小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部