本项目实现了一个基于 ResNet-50-FPN 骨干网络的 Faster R-CNN,用于车辆识别任务。它支持对抗样本生成、攻击评估、防御机制和模型训练。
- 对抗攻击方法: FGSM, PGD, BIM, C&W, DeepFool
- 防御机制: 基于缩放的防御、JPEG 压缩防御
- 模型架构: Faster R-CNN 配合 ResNet-50-FPN 骨干网络
- SSE 输出: 服务器推送事件格式,用于实时进度跟踪
- Docker 支持: 容器化部署,支持 GPU
nudt_faster_rcnn/
├── main.py # 主入口点
├── Dockerfile # Docker 配置文件
├── requirements.txt # Python 依赖
├── ENV_VARIABLES.md # 环境变量文档
├── docker_run_scripts.sh # Docker 运行示例脚本
├── fasterrcnn_detector/ # Faster R-CNN 检测器实现
│ ├── __init__.py
│ └── main.py
├── attacks/ # 攻击实现
│ ├── __init__.py
│ └── attacks.py
├── defends/ # 防御实现
│ ├── __init__.py
│ └── defends.py
├── train/ # 训练实现
│ ├── __init__.py
│ └── trainer.py
└── utils/ # 工具函数
├── __init__.py
├── sse.py # SSE 输出函数
└── yaml_rw.py # YAML 读写
cd nudt_faster_rcnn
docker build -t nudt_faster_rcnn:latest .docker run --rm --gpus all \
-v /path/to/input:/project/input:ro \
-v /path/to/output:/project/output:rw \
-e PROCESS=adv \
-e MODEL=fasterrcnn \
-e ATTACK_METHOD=fgsm \
-e EPSILON=0.031 \
nudt_faster_rcnn:latestdocker run --rm --gpus all \
-v /path/to/input:/project/input:ro \
-v /path/to/output:/project/output:rw \
-e PROCESS=attack \
-e MODEL=fasterrcnn \
-e ATTACK_METHOD=pgd \
-e EPSILON=0.031 \
-e STEP_SIZE=0.008 \
-e MAX_ITERATIONS=10 \
nudt_faster_rcnn:latestdocker run --rm \
-v /path/to/input:/project/input:ro \
-v /path/to/output:/project/output:rw \
-e PROCESS=defend \
-e MODEL=fasterrcnn \
-e DEFEND_METHOD=scale \
nudt_faster_rcnn:latestdocker run --rm --gpus all \
-v /path/to/input:/project/input:ro \
-v /path/to/output:/project/output:rw \
-e PROCESS=train \
-e MODEL=fasterrcnn \
-e EPOCHS=100 \
-e BATCH=8 \
nudt_faster_rcnn:latestinput/
├── model/
│ └── fasterrcnn.pth # 预训练模型权重
└── data/
└── dataset_name/ # 数据集目录
├── image1.jpg
├── image2.jpg
└── ...
output/
├── adv_images/ # 生成的对抗样本(adv 模式)
│ ├── adv_image_0_0.jpg
│ └── ...
├── defended_images/ # 防御后的图像(defend 模式)
│ ├── image1.jpg
│ └── ...
└── fasterrcnn_model.pth # 训练后的模型(train 模式)
查看 ENV_VARIABLES.md 了解所有环境变量的详细文档。
PROCESS: 操作模式 (adv, attack, defend, train)MODEL: 模型架构 (fasterrcnn)ATTACK_METHOD: 攻击方法 (fgsm, pgd, bim, cw, deepfool)DEFEND_METHOD: 防御方法 (scale, comp)EPSILON: 扰动幅度 (默认: 0.031)DEVICE: GPU 设备索引 (默认: 0)
快速单步攻击方法。
-e ATTACK_METHOD=fgsm -e EPSILON=0.031带投影的迭代攻击。
-e ATTACK_METHOD=pgd -e EPSILON=0.031 -e STEP_SIZE=0.008 -e MAX_ITERATIONS=10迭代 FGSM 变体。
-e ATTACK_METHOD=bim -e EPSILON=0.031 -e STEP_SIZE=0.008 -e MAX_ITERATIONS=20基于优化的攻击。
-e ATTACK_METHOD=cw -e MAX_ITERATIONS=50最小扰动攻击。
-e ATTACK_METHOD=deepfool -e MAX_ITERATIONS=50将图像缩小再放大以去除扰动。
-e DEFEND_METHOD=scale应用 JPEG 压缩以去除扰动。
-e DEFEND_METHOD=comp系统以 SSE(服务器推送事件)格式输出进度:
event: input_path_validated
data: {"status": "success", "message": "Input path is valid and complete.", "file_name": "/project/input"}
event: adv_samples_gen_validated
data: {"status": "success", "message": "adv sample is generated.", "file_name": "/project/output/adv_images/adv_image_0_0.jpg"}
python image-test.py查看 docker_run_scripts.sh 了解不同配置下运行容器的更多示例。
- adv、attack 和 train 模式需要 GPU
- 防御模式默认在 CPU 上运行
- 确保输入目录包含模型权重和数据集
- 使用 ResNet-50-FPN 骨干网络(torchvision 默认)而非 VGG16