项目作者: cuge1995

项目描述 :
Our code for paper 'The art of defense: letting networks fool the attacker'
高级语言: Python
项目地址: git://github.com/cuge1995/IT-Defense.git
创建时间: 2021-04-07T07:40:03Z
项目社区:https://github.com/cuge1995/IT-Defense

开源协议:

下载


IT-Defense

Our code for paper ‘The art of defense: letting networks fool the attacker

Introduction

Robust environment perception is critical for autonomous cars, and adversarial defenses are the most effective and widely studied ways to improve the robustness of environment perception.
However, all of previous defense methods decrease the natural accuracy, and the nature of the DNNs itself has been overlooked. To this end, in this paper, we propose a novel adversarial defense for 3D point cloud classifier that makes full use of the nature of the DNNs. Due to the disorder of point cloud, all point cloud classifiers have the property of permutation invariant to the input point cloud. Based on this nature, we design invariant transformations defense (IT-Defense).
We show that, even after accounting for obfuscated gradients, our IT-Defense is a resilient defense against state-of-the-art (SOTA) 3D attacks. Moreover, IT-Defense do not hurt clean accuracy compared to previous SOTA 3D defenses.

invariant

it_defense

Citation

if you find our work useful in your research, please consider citing:

  1. @article{zhang2023art,
  2. title={The art of defense: letting networks fool the attacker},
  3. author={Zhang, Jinlai and Dong, Yinpeng and Liu, Binbin and Ouyang, Bo and Zhu, Jihong and Kuang, Minchi and Wang, Houqing and Meng, Yanmei},
  4. journal={IEEE Transactions on Information Forensics and Security},
  5. year={2023},
  6. publisher={IEEE}
  7. }

Usage

For example, your can insert our code in IF-Defense baseline to implement our IT-Defense.

  1. #attack_scripts/targeted_perturb_attack.py#L128
  2. # for input x.size() = Bx3xN
  3. class Infer(nn.Module):
  4. def __init__(self, model):
  5. super(Infer, self).__init__()
  6. self.model = model
  7. for p in self.parameters():
  8. p.requires_grad = False
  9. def forward(self, x):
  10. x.data = x[:, :, torch.randperm(x.size()[2])].data
  11. x = self.model(x)
  12. return x
  13. model = Infer(model)

Note that for BxNx3, our code should be x.data = x[:, torch.randperm(x.size()[1]), :].data