VerifyVision-Pro是一个综合性的基于深度学习的图像伪造检测系统,能够高精度地识别各种图像篡改。系统集成了强大的数据处理流程、先进的深度学习模型和直观的Web界面,实现实时检测功能。
-
🧠 多模型架构支持:集成EfficientNet、ResNet、Xception、CNN等前沿深度学习模型,支持迁移学习和自定义架构,为不同场景提供最优检测方案
-
🔄 端到端完整流程:从原始数据预处理、模型训练、性能评估到生产部署的全链路解决方案,支持自动化数据增强和模型优化
-
🎨 现代化Web界面:基于Bootstrap 5.3.2构建的响应式用户界面,支持拖拽上传、实时预览、暗色主题切换,提供直观的检测结果可视化
-
📊 智能分析引擎:提供置信度评分、概率分布分析、混淆矩阵可视化,支持ROC曲线和AUC指标,帮助用户深入理解检测结果
-
⚡ 高性能推理优化:支持CUDA GPU加速、模型量化、批处理推理,毫秒级响应速度,可处理大规模图像检测任务
-
🔧 企业级特性:内置日志系统、错误处理、API接口、Docker容器化支持,满足生产环境部署需求
VerifyVision-Pro/
│
├── data/ # 数据目录
│ ├── real/ # 真实图像
│ ├── fake/ # 伪造图像
│ └── processed/ # 预处理后的图像
│
├── models/ # 模型目录(已被git忽略)
│ └── saved/ # 保存的模型权重
│
├── src/ # 源代码
│ ├── data_utils/ # 数据处理工具
│ │ ├── dataset.py # 数据集类
│ │ └── data_processor.py # 数据预处理工具
│ │
│ ├── models/ # 模型定义
│ │ └── models.py # 深度学习模型实现
│ │
│ ├── training/ # 训练相关
│ │ ├── train.py # 训练脚本
│ │ └── evaluate.py # 评估脚本
│ │
│ └── web/ # Web应用
│ └── app.py # Flask应用
│
├── static/ # 静态资源
│ ├── css/ # CSS样式
│ │ └── style.css # 自定义样式
│ │
│ ├── js/ # JavaScript
│ │ └── main.js # 主JS文件
│ │
│ └── uploads/ # 用户上传的图像
│
├── templates/ # HTML模板
│ ├── base.html # 基础模板
│ ├── index.html # 首页
│ ├── result.html # 结果页面
│ └── about.html # 关于页面
│
├── generate_test_images.py # 测试图像生成脚本
├── main.py # 项目主入口程序
├── requirements.txt # 项目依赖
└── README.md # 项目说明
- Python: 3.7+
- PyTorch: 2.0+
- 内存: 4GB(仅CPU),8GB(带GPU)
- 存储: 代码和基本数据集需要1GB
- 操作系统: Windows 10+, macOS 10.15+, Ubuntu 18.04+
- Python: 3.9+
- PyTorch: 2.0+(带CUDA支持)
- GPU: NVIDIA GPU,支持CUDA(8GB+显存)
- 内存: 16GB
- 存储: 扩展数据集需要10GB+
- 操作系统: Ubuntu 20.04+或macOS 12+
git clone https://github.com/lintsinghua/VerifyVision-Pro.git
cd VerifyVision-Pro
# macOS/Linux
python -m venv imgvenv
source imgvenv/bin/activate
# Windows
python -m venv imgvenv
imgvenv\Scripts\activate
pip install -r requirements.txt
# 检查PyTorch是否正确安装并支持CUDA(如果可用)
python -c "import torch; print('CUDA可用:', torch.cuda.is_available())"
如果您有NVIDIA GPU,请确保安装了与您的PyTorch版本兼容的CUDA工具包和cuDNN。
按照以下指南快速设置和运行VerifyVision-Pro系统:
首先,为系统测试生成样本图像:
python generate_test_images.py
这将在相应的数据目录中创建20张真实图像和20张伪造图像。
准备用于模型训练的图像:
# 处理真实图像
python main.py preprocess --input-dir data/real --output-dir data/processed/real --target-size 224 224
# 处理伪造图像
python main.py preprocess --input-dir data/fake --output-dir data/processed/fake --target-size 224 224
使用预处理后的数据训练基本CNN模型:
python main.py train \
--real-dir data/processed/real \
--fake-dir data/processed/fake \
--model cnn \
--pretrained \
--epochs 5 \
--batch-size 4 \
--save-dir models/saved
注意:初始测试时,少量的epochs(如5)就足够了。若要提高性能,可增加训练周期。
启动Web界面以与训练好的模型交互:
python main.py web \
--model-path models/saved/best_model.pth \
--model-name cnn \
--port 8080 \
--debug
重要:在macOS上,端口5000可能被AirPlay服务占用,建议使用端口8080。
打开浏览器访问http://localhost:8080即可使用系统。
有多种方法可以收集训练和测试数据:
内置脚本可生成用于测试的合成数据:
python generate_test_images.py
功能说明:
- 创建
data/real
和data/fake
目录 - 生成20张具有随机内容的真实图像
- 创建20张对应的伪造图像
- 适用于初始系统测试和验证
获取关于公开图像伪造检测数据集的信息:
python main.py download-info
这会显示图像伪造检测研究中常用的数据集链接,包括:
- CASIA v1.0和v2.0
- Columbia图像拼接检测
- CoMoFoD(拷贝-移动伪造数据集)
- Coverage
- IEEE IFS-TC图像取证挑战数据集
通过以下方法构建自己的数据集:
-
收集真实图像:
- 将真实图像放入
data/real
目录 - 使用个人照片或公共领域图像
- 确保内容、光线条件和来源设备多样化
- 将真实图像放入
-
创建伪造图像:
python main.py create-fake \ --real-dir data/real \ --fake-dir data/fake \ --method splice \ --num-images 1000
可用伪造方法:
splice
:组合来自不同图像的区域copy
:复制同一图像内的区域noise
:添加局部噪声以创建不一致color
:在特定区域操作颜色属性
训练前,需要对图像进行预处理以保持一致性:
python main.py preprocess \
--input-dir data/real \
--output-dir data/processed/real \
--target-size 224 224 \
--max-images 5000
预处理操作包括:
- 调整为统一尺寸
- 标准化
- 可选的数据增强(旋转、翻转等)
- 格式标准化
- 可选的色彩空间转换
参数说明:
--input-dir
:源图像目录--output-dir
:处理后图像的目标目录--target-size
:输出尺寸(宽度 高度)--max-images
:限制处理的图像数量(可选)--augment
:应用数据增强(可选)
VerifyVision-Pro支持训练各种深度学习模型进行图像伪造检测:
python main.py train \
--real-dir data/processed/real \
--fake-dir data/processed/fake \
--model efficientnet_b0 \
--pretrained \
--epochs 30 \
--batch-size 32 \
--learning-rate 0.001 \
--save-dir models/saved \
--early-stopping \
--patience 5
系统实现了多种最先进的架构:
模型 | 描述 | 参数数量 | 适用场景 |
---|---|---|---|
cnn |
自定义CNN | ~500K | 快速测试,有限数据 |
resnet18 |
ResNet-18 | ~11M | 小型到中型数据集 |
resnet50 |
ResNet-50 | ~25M | 中型数据集 |
efficientnet_b0 |
EfficientNet-B0 | ~5M | 平衡性能 |
xception |
Xception | ~22M | 高级特征 |
训练模块提供全面的自定义选项:
参数 | 描述 | 默认值 | 备注 |
---|---|---|---|
--real-dir |
真实图像目录 | - | 必需 |
--fake-dir |
伪造图像目录 | - | 必需 |
--model |
模型架构 | efficientnet_b0 |
查看可用模型 |
--pretrained |
使用预训练权重 | False |
标志 |
--epochs |
训练周期 | 30 |
|
--batch-size |
批次大小 | 32 |
减小以降低内存占用 |
--learning-rate |
学习率 | 0.001 |
|
--weight-decay |
L2正则化 | 0.0001 |
|
--save-dir |
保存目录 | models/saved |
|
--early-stopping |
启用早停 | False |
标志 |
--patience |
早停周期数 | 5 |
|
--validation-split |
验证数据比例 | 0.2 |
训练过程中,系统会:
- 将数据分割为训练集和验证集
- 加载或初始化所选模型架构
- 如果请求了预训练权重,应用迁移学习
- 使用指定学习率的Adam优化器进行优化
- 实现学习率调度以获得更好的收敛性
- 监控验证指标以防止过拟合
- 根据验证精度保存表现最佳的模型
- 生成训练曲线和性能统计
- 早停:当性能达到平台期时自动停止训练
- 学习率调度:当进度停滞时降低学习率
- 检查点:在训练期间定期保存模型
- 混合精度:在硬件支持时使用FP16训练
- 梯度裁剪:防止梯度爆炸
- 数据增强:训练期间可选的实时增强
训练后,使用以下命令评估模型性能:
python main.py evaluate \
--real-dir data/processed/real \
--fake-dir data/processed/fake \
--model efficientnet_b0 \
--checkpoint models/saved/best_model.pth \
--results-dir results \
--confusion-matrix \
--roc-curve
评估模块提供全面的性能指标:
指标 | 描述 | 范围 |
---|---|---|
准确率 | 总体正确预测比例 | 0-1 |
精确率 | 真阳性/预测阳性 | 0-1 |
召回率 | 真阳性/实际阳性 | 0-1 |
F1分数 | 精确率和召回率的调和平均 | 0-1 |
AUC-ROC | ROC曲线下面积 | 0-1 |
混淆矩阵 | 预测与真实值的可视化 | - |
- 分类别分析:真实和伪造类别的详细指标
- 置信度分布:预测置信度的直方图
- 失败分析:对错误分类样本的检查
- 特征可视化:显示影响区域的激活图
- 交叉验证:可选的k折交叉验证以获得稳健评估
评估结果有助于理解:
- 模型对未见数据的泛化能力
- 模型是否偏向特定类别
- 导致检测失败的图像类型
- 预测的置信度水平
- 可能的改进领域
启动Web应用以与训练好的模型交互:
python main.py web \
--model-path models/saved/best_model.pth \
--model-name efficientnet_b0 \
--port 8080 \
--host 0.0.0.0 \
--debug
VerifyVision-Pro的Web界面提供:
- 用户友好的上传:简单的拖放或文件选择界面
- 实时分析:即时处理和结果显示
- 视觉反馈:清晰显示真伪结果和置信度分数
- 热力图可视化:可选的可疑区域可视化
- 结果历史:基于会话的分析图像历史
- 响应式设计:适用于桌面和移动设备
参数 | 描述 | 默认值 | 备注 |
---|---|---|---|
--model-path |
模型文件路径 | - | 必需 |
--model-name |
模型架构 | - | 必需 |
--port |
服务器端口 | 5000 |
macOS上使用8080 |
--host |
主机地址 | 127.0.0.1 |
外部访问使用0.0.0.0 |
--debug |
启用调试模式 | False |
标志 |
--max-size |
最大上传大小(MB) | 5 |
|
--threshold |
检测阈值 | 0.5 |
范围:0-1 |
-
上传图像:
- 点击"选择文件"或将图像拖放到上传区域
- 支持的格式:JPG、JPEG、PNG
- 最大文件大小:5MB(可配置)
-
分析图像:
- 点击"上传并检测"按钮
- 系统通过模型处理图像
-
查看结果:
- 显示真实/伪造分类结果
- 置信度分数表示检测确定性
- 可选的热力图可视化突出显示可疑区域
- 附加元数据显示图像属性
-
解读结果:
- 更高的置信度分数表示更大的确定性
- 接近0.5的分数表示不确定性
- 对于模糊的情况,考虑使用多个模型
对于生产部署,考虑以下方案:
- Nginx/Apache:设置反向代理以提高安全性和性能
- Docker:容器化部署以保持环境一致性
- 云平台:AWS、Google Cloud或Azure以实现可扩展性
- SSL证书:启用HTTPS以进行安全通信
- 访问限制:防止服务滥用
VerifyVision-Pro基于现代技术构建,以实现可靠的性能:
- OpenCV:图像加载、预处理和操作
- PIL (Pillow):图像格式处理和转换
- Albumentations:高级数据增强流程
- NumPy:图像数据的高效数值运算
- PyTorch:主要深度学习框架
- TorchVision:预训练模型和数据集实用工具
- CUDA:用于训练和推理的GPU加速
- torchinfo:模型架构可视化和分析
- EfficientNet:资源高效的卷积架构
- ResNet:带跳跃连接的深度残差网络
- Xception:深度可分离卷积以提高效率
- 自定义CNN:用于基本检测的轻量级架构
- Flask:轻量级Web服务器实现
- Werkzeug:Web应用的WSGI实用工具库
- Jinja2:HTML生成的模板引擎
- Flask-WTF:表单处理和验证
- Bootstrap:响应式设计框架
- JavaScript:动态客户端功能
- Chart.js:结果的交互式可视化
- Dropzone.js:增强的文件上传体验
系统实现了两类分类方法,包含:
- 特征提取:卷积层捕获空间特征
- 特征聚合:池化操作聚合局部信息
- 分类头:全连接层用于最终预测
- 迁移学习:预训练网络的适应
- 领域特定特征:用于伪造检测的自定义层
训练系统实现:
- 数据集管理:自定义PyTorch数据集用于高效加载
- 平衡采样:确保类别平等表示
- 增强策略:在训练期间应用以提高鲁棒性
- 混合精度:在支持的情况下使用FP16加速训练
- 分布式训练:可选的多GPU支持
推理系统包括:
- 预处理:与训练流程一致
- 批处理:高效处理多个图像
- 模型集成:可选的多模型组合
- 后处理:置信度校准和阈值处理
- 可视化:生成解释性热力图
通过自定义模型架构扩展VerifyVision-Pro:
-
添加新模型:
修改
src/models/models.py
以包括您的架构:class CustomModel(nn.Module): def __init__(self, num_classes=2, pretrained=False): super(CustomModel, self).__init__() # 定义您的模型架构 def forward(self, x): # 定义前向传播 return x
-
注册模型:
将您的模型添加到模型工厂:
def get_model(name, num_classes=2, pretrained=False): models = { # 现有模型 'custom_model': CustomModel, } return models[name](num_classes=num_classes, pretrained=pretrained)
-
使用您的模型:
python main.py train \ --real-dir data/processed/real \ --fake-dir data/processed/fake \ --model custom_model \ --epochs 30
通过高级数据集处理增强模型性能:
使用生成方法创建额外的训练数据:
python main.py generate-synthetic \
--base-images data/real \
--output-dir data/synthetic \
--count 1000 \
--techniques "copy,splice,removal,noise"
测试模型在不同数据集间的泛化能力:
python main.py cross-validate \
--train-real data/datasetA/real \
--train-fake data/datasetA/fake \
--test-real data/datasetB/real \
--test-fake data/datasetB/fake \
--model efficientnet_b0
实现主动学习以优先标注努力:
python main.py active-learning \
--unlabeled data/unlabeled \
--labeled data/labeled \
--model-path models/saved/model.pth \
--selection-method "entropy" \
--batch-size 100
通过高级可视化理解模型决策:
python main.py interpret \
--image path/to/image.jpg \
--model-path models/saved/model.pth \
--method "gradcam" \
--output-dir visualizations
可用的解释方法:
gradcam
:梯度加权类激活映射lime
:局部可解释的模型不可知解释shap
:Shapley加性解释occlusion
:遮挡敏感性分析
通过硬件优化最大化系统性能:
启用GPU加速以实现更快的训练和推理:
# 检查GPU可用性
python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0) if torch.cuda.is_available() else '无GPU')"
# 使用GPU训练(如果可用则自动使用)
python main.py train --model efficientnet_b0 --batch-size 64 --real-dir data/processed/real --fake-dir data/processed/fake
将训练分布到多个GPU上以处理更大的模型:
python -m torch.distributed.launch --nproc_per_node=4 main.py train \
--distributed \
--real-dir data/processed/real \
--fake-dir data/processed/fake \
--model efficientnet_b0 \
--batch-size 128
在GPU不可用时优化CPU性能:
# 设置CPU线程数
python main.py train --num-workers 8 --pin-memory --real-dir data/processed/real --fake-dir data/processed/fake
管理内存使用以实现高效处理:
根据可用内存调整批大小:
硬件 | 推荐批大小 |
---|---|
CPU | 8-16 |
GPU 4GB显存 | 16-32 |
GPU 8GB显存 | 32-64 |
GPU 16GB+显存 | 64-128 |
# 内存有限时使用较小批大小
python main.py train --batch-size 8 --real-dir data/processed/real --fake-dir data/processed/fake
# 高端系统使用较大批大小
python main.py train --batch-size 128 --real-dir data/processed/real --fake-dir data/processed/fake
在有限内存上使用大的有效批大小进行训练:
python main.py train \
--batch-size 16 \
--gradient-accumulation 4 \
--real-dir data/processed/real \
--fake-dir data/processed/fake
这模拟了64(16 × 4)的批大小,但只需要16个样本的内存。
加速生产部署:
减少模型大小并提高推理速度:
python main.py quantize \
--model-path models/saved/best_model.pth \
--quantized-model-path models/saved/quantized_model.pth \
--calibration-images data/processed/real
这可将模型大小减少高达75%,并将推理速度提高2-4倍。
同时处理多个图像:
python main.py batch-inference \
--input-dir data/test \
--output-file results.csv \
--model-path models/saved/best_model.pth \
--batch-size 32
移除不必要的连接以加快推理:
python main.py prune \
--model-path models/saved/best_model.pth \
--pruned-model-path models/saved/pruned_model.pth \
--prune-ratio 0.3
本节解决常见问题:
症状:PyTorch安装成功但CUDA未被检测到,或在GPU操作期间崩溃。
解决方案:
-
确保版本兼容:
# 检查CUDA版本 nvcc --version # 安装兼容的PyTorch版本 pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 -f https://download.pytorch.org/whl/torch_stable.html
-
验证安装:
python -c "import torch; print('CUDA可用:', torch.cuda.is_available())"
症状:pip install
因依赖冲突而失败。
解决方案:
-
创建新的虚拟环境:
python -m venv fresh_env source fresh_env/bin/activate
-
逐个安装依赖:
pip install numpy pip install torch torchvision pip install -r requirements.txt
症状:使用较新版本的Python(如Python 3.13)安装依赖时出现错误,特别是与numpy、pkgutil等包相关的错误。
解决方案:
-
使用Python 3.9-3.10版本创建虚拟环境:
# 首先检查可用的Python版本 which -a python3 python3 -V /usr/bin/python3 -V # 可能会显示系统Python版本 # 使用兼容版本创建虚拟环境 /usr/bin/python3 -m venv imgvenv source imgvenv/bin/activate
-
验证Python版本:
python -V # 应显示兼容版本,如Python 3.9.x
-
安装依赖:
pip install -r requirements.txt
注意:该项目的依赖与Python 3.8-3.10版本最为兼容。较新版本可能需要调整依赖版本或等待包更新以支持新的Python版本。
症状:Web应用启动失败,提示"地址已被使用"错误。
解决方案:
-
在macOS上,端口5000通常被AirPlay服务占用,建议使用其他端口(如8080):
python main.py web --model-path models/saved/best_model.pth --model-name cnn --port 8080
-
或找到并终止使用端口5000的进程(不推荐,可能会影响系统服务):
sudo lsof -i :5000 kill -9 <PID>
-
也可以在启动Web应用时使用
--host
参数指定只在本地接口上监听:python main.py web --model-path models/saved/best_model.pth --model-name cnn --port 5000 --host 127.0.0.1
注意:macOS Monterey及更新版本中,端口5000被AirPlay接收器服务预留。如需在默认端口运行,请在系统设置中禁用AirPlay接收器或选择其他端口。
症状:训练崩溃,出现"CUDA内存不足"或系统内存错误。
解决方案:
-
减小批大小:
python main.py train --batch-size 4 --real-dir data/processed/real --fake-dir data/processed/fake
-
使用梯度累积:
python main.py train --batch-size 2 --gradient-accumulation 8 --real-dir data/processed/real --fake-dir data/processed/fake
-
使用更小的模型:
python main.py train --model resnet18 --real-dir data/processed/real --fake-dir data/processed/fake
症状:训练失败,提示"数据集为空"错误。
解决方案:
-
验证目录路径:
ls -la data/processed/real data/processed/fake
-
检查文件格式(应为.jpg、.jpeg或.png):
find data/processed/real -type f | grep -v -E '\.(jpg|jpeg|png)$'
-
生成测试数据以验证系统:
python generate_test_images.py
症状:模型准确率低或训练期间没有改善。
解决方案:
-
增加训练时长:
python main.py train --epochs 50 --real-dir data/processed/real --fake-dir data/processed/fake
-
尝试不同模型:
python main.py train --model efficientnet_b0 --pretrained --real-dir data/processed/real --fake-dir data/processed/fake
-
确保数据集平衡:
python main.py analyze-dataset --real-dir data/processed/real --fake-dir data/processed/fake
-
启用数据增强:
python main.py train --augmentation --real-dir data/processed/real --fake-dir data/processed/fake
症状:验证准确率在训练早期停止改善。
解决方案:
-
调整学习率:
python main.py train --learning-rate 0.0001 --real-dir data/processed/real --fake-dir data/processed/fake
-
实现学习率调度:
python main.py train --scheduler cosine --real-dir data/processed/real --fake-dir data/processed/fake
-
尝试不同优化器:
python main.py train --optimizer adamw --real-dir data/processed/real --fake-dir data/processed/fake
症状:训练准确率高但验证准确率低。
解决方案:
-
添加正则化:
python main.py train --weight-decay 0.001 --dropout 0.3 --real-dir data/processed/real --fake-dir data/processed/fake
-
使用早停:
python main.py train --early-stopping --patience 5 --real-dir data/processed/real --fake-dir data/processed/fake
-
增加数据集大小或多样性。
训练数据的质量直接影响模型性能:
- 规模:良好性能至少需要每类1,000+图像
- 平衡:保持真实和伪造图像数量相等
- 多样性:包括各种图像来源、光照条件和内容
- 真实性:确保"真实"图像确实未经处理
- 真实感:创建代表现实操作方法的伪造图像
- 元数据:保留相关元数据(相机型号、编辑软件等)
根据您的具体需求选择模型:
优先考虑 | 推荐模型 |
---|---|
速度 | cnn 或resnet18 |
准确率 | efficientnet_b0 或xception |
平衡性能 | resnet18 或efficientnet_b0 |
有限数据 | cnn 配合大量增强 |
生产环境 | 多个模型的集成 |
对于实际部署:
- 安全性:实施速率限制和文件验证
- 可扩展性:对高流量应用使用负载均衡
- 隐私:考虑敏感材料的本地处理
- 透明度:传达置信水平和局限性
- 更新:定期用新的伪造技术重新训练
- 备选方案:对关键或模糊情况有人工审核
了解系统局限性:
- 检测准确率因伪造类型和质量而异
- 高级AI生成图像可能需要专门模型
- 非常小的操作可能被忽略
- 结果应被视为概率性的,而非确定性的
- 系统应作为更广泛验证策略的一部分
我们欢迎对VerifyVision-Pro的贡献!以下是您可以帮助的方式:
- 使用GitHub issue跟踪器报告bug
- 包括详细的步骤以重现问题
- 必要时附加样本图像(确保您有权共享)
- 指定您的环境(操作系统、Python版本等)
- Fork仓库
- 创建特性分支:
git checkout -b feature/your-feature-name
- 做出更改
- 运行测试:
python -m pytest tests/
- 提交拉取请求
我们特别欢迎以下领域的贡献:
- 新模型:最先进架构的实现
- 检测方法:识别操作的新方法
- UI改进:增强Web界面和可视化
- 性能优化:提高速度和资源使用
- 文档:教程、示例和说明
- 本地化:文档和界面的翻译
请遵循以下准则:
- 符合PEP 8的Python代码
- 所有函数、类和模块的文档字符串
- 适当的类型提示
- 复杂逻辑的全面注释
- 新功能的单元测试
VerifyVision-Pro在MIT许可证下发布。
本项目包含来自第三方开源项目的组件:
- PyTorch (BSD许可证)
- Flask (BSD许可证)
- TorchVision (BSD许可证)
- OpenCV (Apache 2.0许可证)
- Bootstrap (MIT许可证)
- 其他各种包,如requirements.txt中所列
⭐ 如果这个项目对您有帮助,请给我们一个 Star!