首页 > 其他分享 >TruFor笔记和代码复现

TruFor笔记和代码复现

时间:2023-11-28 17:45:07浏览次数:34  
标签:置信度 -- TruFor 笔记 复现 图像 test docker

title: TruFor笔记和代码复现
banner_img: https://cdn.studyinglover.com/pic/2023/11/35a3ffa0a81b1791e692c591a92b9256.png
date: 2023-11-28 17:38:00
tags:
- 图像伪造检测和定位

TruFor笔记和代码复现

最近有个新闻很火,说谷歌 AI 技术曾判定美国登月任务的照片存在虚假内容大佬找到了出处,使用的是google 的论文arxiv,代码开源在GitHub

笔记

这篇论文介绍了一个名为TruFor的图像伪造检测和定位框架。该框架可以应用于各种图像处理方法,包括基于深度学习的伪造方法。TruFor利用了RGB图像和一个学习的噪音敏感指纹来提取高级和低级痕迹,最终输出像素级别的定位图和整个图像的完整性分数,以及一个可靠性映射,用于减少误报。

image.png

它包括以下几个关键组件:

  1. Noiseprint++ 提取器:该提取器从RGB图像中获取一个学习的噪声敏感指纹。
  2. 编码器:编码器使用RGB输入和Noiseprint++共同计算将被异常解码器和置信度解码器使用的特征。
  3. 异常解码器和置信度解码器:这两个解码器分别用于像素级别的伪造定位和置信度估计。
  4. 伪造检测器:该检测器利用定位图和置信度图进行图像级别的决策。

这些组件通过三个训练阶段进行学习:

  1. 首先,使用大量原始图像数据集训练Noiseprint++提取器。
  2. 然后,使用相同的数据集训练异常定位网络的编码器和解码器。
  3. 最后,使用相同的数据集训练置信度图解码器和伪造检测器。

通过这些组件和训练阶段,TruFor框架能够在各种图像伪造方法中实现可靠的检测和定位。

模型输出包括以下三个部分:

  1. 全局完整性得分(Global Integrity Score):该得分表示图像的整体真实性,用于自动图像伪造检测。
  2. 异常定位图(Anomaly Localization Map):该图表示图像中可能存在伪造的区域。通过分析异常定位图,用户可以识别被篡改的区域。
  3. 置信度图(Confidence Map):该图突出显示了异常定位图中可能存在误报的区域。通过分析置信度图,用户可以区分异常定位图中的真实伪造区域预测和随机异常。
    这三个输出为用户提供了有关图像真实性和可能篡改区域的全面信息,有助于进行进一步的分析

代码复现

作者在github上给出了一个复现方法,git clone之后bash docker_build.shbash docker_run.sh。使用docker固然容易复现,但是这个项目并没有什么奇怪的依赖,所以我们可以大胆直接跑。(如果你想用docker跑我劝你不要,因为代码有bug需要修)

首先clone项目

git clone https://github.com/grip-unina/TruFor

然后下载依赖,作者没有给requirements.txt,我从Dockerfile找到了下载依赖的部分

pip install tqdm yacs>=0.1.8 timm>=0.5.4 numpy==1.21.5

接下来cd到test_docker文件夹,下载模型

cd test_docker
wget -q -c https://www.grip.unina.it/download/prog/TruFor/TruFor_weights.zip
unzip -q -n TruFor_weights.zip && rm TruFor_weights.zip

你的test_docker 文件夹下应该有一个weights文件下,下面有一个文件trufor.pth.tar

接下来,运行下面的命令复现测试

cd src
python trufor_test.py

你注意一下,如果爆显存了就运行,这样会使用cpu推理

python trufor_test.py --gpu -1

运行结束后你在test_docker/output 目录下应该能看到这样的四个文件image.png

你也可以指定推理的图片和保存位置,参考python trufor_test.py -h,可以传一个文件或者文件夹

usage: trufor_test.py [-h] [-gpu GPU] [-in INPUT] [-out OUTPUT] [-save_np] ...

Test TruFor

positional arguments:
  opts                  other options

options:
  -h, --help            show this help message and exit
  -gpu GPU, --gpu GPU   device, use -1 for cpu
  -in INPUT, --input INPUT
                        can be a single file, a directory or a glob statement
  -out OUTPUT, --output OUTPUT
                        output folder
  -save_np, --save_np   whether to save the Noiseprint++ or not

接下来让我们可视化异常检测图,回到test_docker文件夹,

很重要!! 请看visualize.py 他的第32行是不是

fig.suptitle('score: %.3f' % result['score_sigmoid'])

这是个错误!请将他改成下面的代码

fig.suptitle('score: %.3f' % result['score'])

运行下面的命令,记得把/path/to改成你的真实路径

cd ..
python visualize.py --image /path/to/TruFor/test_docker/images/pristine1.jpg --output /path/to/TruFor/test_docker/output/pristine1.jpg.npz

我们可以得到推理结果
image.png

ok,让我们来看看宇航员的图片吧,先下载两张图

wget https://history.nasa.gov/alsj/a15/AS15-92-12407HR.jpg
wget https://history.nasa.gov/alsj/a15/AS15-92-12424HR.jpg

我直接给出运行结果
image.png
image.png

标签:置信度,--,TruFor,笔记,复现,图像,test,docker
From: https://www.cnblogs.com/studyinglover/p/17862538.html

相关文章

  • Linux第一章学习笔记
    Linux是一种开源的操作系统内核,它以稳定性、安全性和灵活性而闻名。Linux操作系统被广泛用于服务器、嵌入式设备和个人电脑等领域。Linux的历史Linux的起源可以追溯到1991年,当时芬兰大学生LinusTorvalds开始开发一个类UNIX操作系统内核。他将自己的项目命名为“Linux”,这个名字......
  • Linux第七章学习笔记
    Linux中的存储管理主要涉及磁盘分区、文件系统和磁盘配额等内容。本篇学习笔记将对Linux存储管理相关内容进行介绍。磁盘分区在Linux中,磁盘分为多个区域,每个区域被称为一个分区(partition)。磁盘分区可以将硬盘划分为不同的逻辑部分,每个分区可以单独设置不同的文件系统和挂载点。......
  • Linux第三章学习笔记
    Linux系统是一个多用户、多任务的操作系统。为了保证系统的安全和有效使用,Linux提供了严格的用户管理机制。本篇学习笔记主要讲解Linux用户管理相关内容。用户账户Linux系统中的用户账户包括系统管理员账户(root账户)和普通用户账户。其中,root账户拥有最高的权限,可以进行系统的所......
  • 《Effective Java》阅读笔记-第二章
    EffectiveJava阅读笔记第二章创建和销毁对象第1条:用静态工厂方法代替构造器静态工厂方法优势:静态工厂方法有名称静态工厂方法可以详细的指定名称,而使用构造器时如果没有文档会难以区分不同构造器之间的区别。不必每次调用的时候创建一个新对象静态工厂方法可以缓......
  • 秦疆的Java课程笔记:42 流程控制 增强For循环
    Java5引入的一种主要用于数组或集合的增强型for循环。这里只是先了解一下。格式如下:for(声明语句:表达式){ //代码语句}声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用于限定在循环语句块,其值与此数组元素的值相等。表达式:表达式是要访问的数组......
  • 秦疆的Java课程笔记:43 流程控制 break、continue、goto
    break:在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break也在switch语句中使用)publicclassBreakDemo{publicstaticvoidmain(String[]args){inti=0;while(i<100){......
  • Opencv学习笔记(1)
    1、安装环境 如何安装Python解释器和PyCharm,这里就不说明了,参考文章链接:https://blog.csdn.net/weixin_72959097/article/details/130226675下面主要说明在配置好开发环境后,Opencv是如何安装的。 首先,创建一个新项目,创建一个main.py的代码文件。在下面的命令窗口,选择终端......
  • 秦疆的Java课程笔记:44 流程控制 打印三角形及Debug
    作业:打印5行三角形这是我写的:publicclassTestDemo1{publicstaticvoidmain(String[]args){intline=5;//定义总行数linefor(inti=1;i<=line;i++){//i是循环输出每一行for(intj=1;j<=line-i;j++){//j......
  • Linux学习笔记 虚拟机的安装
    VMWare是当前最主流、应用最广泛的虚拟软件(来搭建虚拟环境)。它可以保证在一台现有的计算机操作系统上,模拟出一个新的硬件环境,以实现在一个电脑上真正同时运行两个OS。其官网为:www.vmware.com。在我看来:使用VMWare装的OS还可以同Windows主机进行网络通信的。安装VMWare的配置建议......
  • C++ Primer 学习笔记——第十三章
    第十三章拷贝控制前言类是如何控制类型对象的拷贝、赋值、移动和销毁的?类通过一些特殊的成员函数控制,包括:拷贝构造函数、移动构造函数、拷贝赋值运算符、移动赋值运算符以及析构函数。当定义一个类时,我们显式地或隐式的指定在此类型的对象拷贝、移动、赋值和销毁时做什么。一......