UniversalFakeDetect 尝试区分真实图片与生成图片。它输出分类倾向,只适合作为筛查线索,不能单独鉴定一张网络图的来源。本篇用已知来源的两组图片整理可回查的误判记录;未执行检测模型。
建立四张已知来源的小样本
自有实拍两张放入 test/real,自行生成且有生成记录的两张放入 test/fake;标签0代表实拍,1代表生成。两组数量必须相等,题材、尺寸与压缩方式尽量接近。网上猜测的标签不能作为真值。按官方仓库准备依赖及 fc_weights.pth;当前实现直接调用 CUDA,需可用匹配环境,不保证纯CPU运行。

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