Project Icon

DeepRobust

PyTorch图像和图神经网络对抗性攻防开源库

DeepRobust是一个基于PyTorch的开源库,专注于图像和图神经网络的对抗性攻击与防御。它提供多种攻防算法,支持MNIST、CIFAR10等数据集,可与PyTorch Geometric集成。该库适用于对抗性机器学习研究,也为构建鲁棒深度学习模型提供工具。DeepRobust支持大规模图如OGB-ArXiv的攻击,并包含节点嵌入攻击和受害模型。它还提供图像预处理方法APE-GAN,支持ImageNet数据集,新增UGBA后门攻击和PRBCD可扩展攻击算法。库中包含MedianGCN、AirGNN等鲁棒模型,以及用于转换PyTorch Geometric和DeepRobust数据集的工具,成为全面的对抗性机器学习研究平台。

标志


GitHub最后提交 GitHub问题 GitHub 贡献 推文

文档 | 论文 | 示例

[AAAI 2021] DeepRobust是一个用于图像和图形攻击和防御方法的PyTorch对抗库。

  • 如果您是DeepRobust的新用户,我们强烈建议您阅读文档页面或本README中的以下内容,以了解如何使用它。
  • 如果您对这个库有任何问题或建议,请随时在这里创建一个问题。我们会尽快回复 :)

包含的算法列表可以在[图像包][图形包]中找到。

环境与安装

用法

致谢

有关攻击和防御的更多详细信息,您可以阅读以下论文。

如果我们的工作对您的研究有帮助,请引用: DeepRobust:用于对抗攻击和防御的PyTorch库

@article{li2020deeprobust,
  title={Deeprobust: A pytorch library for adversarial attacks and defenses},
  author={Li, Yaxin and Jin, Wei and Xu, Han and Tang, Jiliang},
  journal={arXiv preprint arXiv:2005.06149},
  year={2020}
}

更新日志

  • [2023年11月] 尝试 git clone https://github.com/DSE-MSU/DeepRobust.git; cd DeepRobust; python setup_empty.py install 直接安装DeepRobust,无需安装依赖包。
  • [2023年11月] DeepRobust 0.2.9 发布。请尝试 pip install deeprobust==0.2.9。我们修复了新版本PyTorch中metattack的内存溢出问题。
  • [2023年6月] 我们在图包中添加了一个后门攻击方法 UGBA, WWW'23。现在我们可以使用UGBA对大规模图(如ogb-arxiv)进行不易察觉的后门攻击(参见 test_ugba.py 中的示例)!
  • [2023年2月] DeepRobust 0.2.8 发布。请尝试 pip install deeprobust==0.2.8!我们在图包中添加了一个可扩展的攻击方法 PRBCD, NeurIPS'21。现在我们可以使用PRBCD攻击大规模图(如ogb-arxiv)(参见 test_prbcd.py 中的示例)!
  • [2023年2月] 在图包中添加了一个鲁棒模型 AirGNN, NeurIPS'21。尝试 python examples/graph/test_airgnn.py!详情请参见 test_airgnn.py
  • [2022年11月] DeepRobust 0.2.6 发布。请尝试 pip install deeprobust==0.2.6!我们将有更多更新,敬请关注!
  • [2021年11月] 发布了包含图像领域流行黑盒攻击的子包。在此处查看。链接
  • [2021年11月] DeepRobust 0.2.4 发布。请尝试 pip install deeprobust==0.2.4
  • [2021年10月] 添加可扩展攻击和MedianGCN。感谢 Jintang 的贡献!
  • [2021年6月] [图像包] 添加预处理方法:APE-GAN。
  • [2021年5月] DeepRobust 发表于AAAI 2021。查看 这里
  • [2021年5月] DeepRobust 0.2.2 发布。请尝试 pip install deeprobust==0.2.2
  • [2021年4月] [图像包] 添加对ImageNet的支持。详情请参见 test_ImageNet.py
  • [2021年4月] [图包] 添加对OGB数据集的支持。更多详情请参见 教程页面
  • [2021年3月] [图包] 添加了节点嵌入攻击和受害者模型!请参见此 教程页面
  • [2021年2月] [图包] DeepRobust 现在提供工具用于在 Pytorch Geometric 和 DeepRobust 之间转换数据集。更多详情请参见 教程页面 DeepRobust 现在还支持基于pyg的GAT、Chebnet和SGC;详情请参见 test_gat.pytest_chebnet.pytest_sgc.py
  • [2020年12月] DeepRobust 现在可以通过pip安装!尝试 pip install deeprobust
  • [2020年12月] [图包] 新增四个 数据集 和一个防御算法。更多详情可以在 这里 找到。稍后将添加更多数据集和算法。敬请关注 :)
  • [2020年7月] 添加 文档 页面!
  • [2020年6月] 为图像和图包添加文档字符串

基本环境

  • python >= 3.6 (python 3.5 应该也可以)
  • pytorch >= 1.2.0

更多信息请参见 setup.pyrequirements.txt

安装

通过pip安装

pip install deeprobust 

从源代码安装

git clone https://github.com/DSE-MSU/DeepRobust.git
cd DeepRobust
python setup.py install

如果发现依赖难以安装,请尝试以下方法: python setup_empty.py install(仅安装deeprobust,不安装其他包)

测试示例

python examples/image/test_PGD.py
python examples/image/test_pgdtraining.py
python examples/graph/test_gcn_jaccard.py --dataset cora
python examples/graph/test_mettack.py --dataset cora --ptb_rate 0.05

使用方法

图像攻击和防御

  1. 训练模型

    示例:在MNIST数据集上训练一个简单的CNN模型,在GPU上训练20个epoch。

    import deeprobust.image.netmodels.train_model as trainmodel
    trainmodel.train('CNN', 'MNIST', 'cuda', 20)
    

    模型将保存在deeprobust/trained_models/。

  2. 实例化攻击方法和防御方法。

    示例:使用PGD攻击生成对抗样本。

    from deeprobust.image.attack.pgd import PGD
    from deeprobust.image.config import attack_params
    from deeprobust.image.utils import download_model
    import torch
    import deeprobust.image.netmodels.resnet as resnet
    from torchvision import transforms,datasets
    
    URL = "https://github.com/I-am-Bot/deeprobust_model/raw/master/CIFAR10_ResNet18_epoch_20.pt"
    download_model(URL, "$MODEL_PATH$")
    
    model = resnet.ResNet18().to('cuda')
    model.load_state_dict(torch.load("$MODEL_PATH$"))
    model.eval()
    
    transform_val = transforms.Compose([transforms.ToTensor()])
    test_loader  = torch.utils.data.DataLoader(
                    datasets.CIFAR10('deeprobust/image/data', train = False, download=True,
                    transform = transform_val),
                    batch_size = 10, shuffle=True)
    
    x, y = next(iter(test_loader))
    x = x.to('cuda').float()
    
    adversary = PGD(model, 'cuda')
    Adv_img = adversary.generate(x, y, **attack_params['PGD_CIFAR10'])
    

    示例:训练防御模型。

    from deeprobust.image.defense.pgdtraining import PGDtraining
    from deeprobust.image.config import defense_params
    from deeprobust.image.netmodels.CNN import Net
    import torch
    from torchvision import datasets, transforms 
    
    model = Net()
    train_loader = torch.utils.data.DataLoader(
                    datasets.MNIST('deeprobust/image/defense/data', train=True, download=True,
                                    transform=transforms.Compose([transforms.ToTensor()])),
                                    batch_size=100,shuffle=True)
    

test_loader = torch.utils.data.DataLoader( datasets.MNIST('deeprobust/image/defense/data', train=False, transform=transforms.Compose([transforms.ToTensor()])), batch_size=1000,shuffle=True)

defense = PGDtraining(model, 'cuda') defense.generate(train_loader, test_loader, **defense_params["PGDtraining_MNIST"])


更多示例代码可以在deeprobust/examples中找到。

3. 使用我们的评估程序来测试防御算法对抗攻击。

示例:

cd DeepRobust python examples/image/test_train.py python deeprobust/image/evaluation_attack.py


## 图攻击和防御

### 攻击图神经网络

1. 加载数据集
```python
import torch
import numpy as np
from deeprobust.graph.data import Dataset
from deeprobust.graph.defense import GCN
from deeprobust.graph.global_attack import Metattack

data = Dataset(root='/tmp/', name='cora', setting='nettack')
adj, features, labels = data.adj, data.features, data.labels
idx_train, idx_val, idx_test = data.idx_train, data.idx_val, data.idx_test
idx_unlabeled = np.union1d(idx_val, idx_test)
  1. 设置代理模型
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
surrogate = GCN(nfeat=features.shape[1], nclass=labels.max().item()+1, nhid=16,
                with_relu=False, device=device)
surrogate = surrogate.to(device)
surrogate.fit(features, adj, labels, idx_train)
  1. 设置攻击模型并生成扰动
model = Metattack(model=surrogate, nnodes=adj.shape[0], feature_shape=features.shape, device=device)
model = model.to(device)
perturbations = int(0.05 * (adj.sum() // 2))
model.attack(features, adj, labels, idx_train, idx_unlabeled, perturbations, ll_constraint=False)
modified_adj = model.modified_adj

更多详细信息请参考mettack.py或运行

python examples/graph/test_mettack.py --dataset cora --ptb_rate 0.05

防御图攻击

  1. 加载数据集
import torch
from deeprobust.graph.data import Dataset, PtbDataset
from deeprobust.graph.defense import GCN, GCNJaccard
import numpy as np
np.random.seed(15)

# 加载干净图
data = Dataset(root='/tmp/', name='cora', setting='nettack')
adj, features, labels = data.adj, data.features, data.labels
idx_train, idx_val, idx_test = data.idx_train, data.idx_val, data.idx_test

# 加载由mettack预先攻击的图
perturbed_data = PtbDataset(root='/tmp/', name='cora')
perturbed_adj = perturbed_data.adj
  1. 测试
# 设置防御模型并测试性能
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model = GCNJaccard(nfeat=features.shape[1], nclass=labels.max()+1, nhid=16, device=device)
model = model.to(device)
model.fit(features, perturbed_adj, labels, idx_train)
model.eval()
output = model.test(idx_test)

# 在GCN上测试
model = GCN(nfeat=features.shape[1], nclass=labels.max()+1, nhid=16, device=device)
model = model.to(device)
model.fit(features, perturbed_adj, labels, idx_train)
model.eval()
output = model.test(idx_test)

更多详细信息请参考test_gcn_jaccard.py或运行

python examples/graph/test_gcn_jaccard.py --dataset cora

示例结果

由fgsm生成的对抗样本:

左:原始图像,分类为6;右:对抗样本,分类为4。

几个训练好的模型可以在这里找到:https://drive.google.com/open?id=1uGLiuCyd8zCAQ8tPz9DDUQH6zm-C4tEL

致谢

一些算法参考了论文作者的实现。引用可以在每个文件的顶部找到。

网络结构的实现参考了weiaicunzai的GitHub。原始代码可以在这里找到: pytorch-cifar100

感谢他们的杰出工作!

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号