跑通代码Dual-Key

《Dual-Key Multimodal Backdoors for Visual Question Answering》

github链接


总概括:

  • 1.使用编码网络生成trigger图片
  • 2.将trigger添加到良性图片样本上
  • 3.提取图像特征后保存
  • 4.训练

f:feature

d:data 

  • make_specs.py 
    • 用于自动生成规范 .csv 文件的工具
    •     * __ALL__ 分叉当前规范并应用所有选项(仅适用于选择变量)
    •     * __SEQ__ 在选择之间进行迭代并按顺序分配(仅适用于选择变量)
    •     * __RAND__k 创建 k 个分支并为每个分支分配不同的随机值
  • orchestrator.py
    • Job orchestrator,用于从规范文件中运行实验或一组实验。
    • 通过在 --sf 标志后传递规范文件来指定作业。给定的文件可以包含特征规范、数据集规范或模型规范。如果给定了数据集或模型规范,orchestrator还将加载相应的特征和/或数据集作业进行运行或检查。
    • 默认情况下,orchestrator将加载并运行规范文件中所有行的所有作业。或者,您可以使用 --rows 或 --ids 标志指定要运行的作业子集。
    • --rows 设置可以以几种方式给出:
    • * 单个整数表示要运行的行(示例:--rows 0)
    • * 以逗号分隔的整数列表,表示要运行的行(示例:--rows 1,2,9,21)
    • * 格式类似于 'i-j' 的字符串,将运行包括行 i 到 j 的所有行(示例:--rows 4-8)
    • * 'all' 会产生默认行为,即运行所有行
    • --ids 设置可以有两种方式:
    • * 单个 ID(根据规范文件类型,可以是 feat_id、data_id 或 model_id)
    • * 以逗号分隔的 ID 列表(示例:--ids m5,m9,m45)
    • --rows 和 --ids 只能同时使用其中之一。如果两者都给定,将使用 --rows 设置。

Setup:步骤如链接所示

Running Experiments with Specs & Orchestrator:使用Specs &和Orchestrator运行

pipeline可以从命令行手动运行。然而,运行实验的最简单方法是使用Orchestrator和Spec文件。

有三种规格文件(特性规格、数据集规格、模型规格)用于上面三个主要的pipeline步骤。每个模型规范指向一个数据集规范,每个数据集规范指向一个特性规范。

  • 生成specs文件

        可以使用make_specs.py自动生成规范文件,它提供了用于生成实验规范文件的全面工具。

在生成任何木马数据集之前,需要干净的图像特征,因为木马数据集中的大部分数据都是干净的。干净的specs是由上文链接提供的,或者可以用:  (--clean启用干净数据规格的特殊模式)

python make_specs.py --clean

spec maker 可以帮助生成大量的特性规格、数据规格和模型规格。例如,要生成包含所有特征和模型组合的规格集合,并为每个模型分配随机触发器、目标和补丁颜色,请运行以下命令:

(这将在specs/example_f_spec.csv、specs/example_d_spec.csv、specs/example_m_spec.csv 创建3个spec文件。这些文件包括4个feature规范、4个数据集规范和40个模型规范。)

python make_specs.py --outbase example --id_prefix example --detector __ALL__ --model __ALL__ --color __RAND__1 --trig_word __RAND__1 --target __RAND__1 --gen_seed 700
  • 提取特征

然后可以使用Orchestrator提取所有4个检测器的所有特征,并组成干净的数据集。这将在2080 Ti上花费大约17个小时,并填满大约80gb。在开始木马模型训练之前,为了测量木马模型的清理精度,也有必要组成干净的数据集。

python orchestrator.py --sf specs/clean_d_spec.csv

        或者,如果您希望只使用一种功能类型,例如R-50,请运行:

python orchestrator.py --sf specs/clean_d_spec.csv --rows 0

然后,您可以轻松地启动一个Orchestrator,它将开始运行所有指定的作业:

python orchestrator.py --sf specs/example_m_spec.csv

        或者只运行第一个模型(也将运行第一个特征集和数据集):

python orchestrator.py --sf specs/example_m_spec.csv --rows 0

在一个GPU上创建4个木马数据集和40个木马模型将花费几天时间在单个2080 Ti上,因此强烈建议您并行使用多台机器/GPU:

<job_0>
python orchestrator.py --sf specs/example_m_spec --rows 0-9 --gpu 0
<job_1>
python orchestrator.py --sf specs/example_m_spec --rows 10-19 --gpu 1
<job_2>
python orchestrator.py --sf specs/example_m_spec --rows 20-29 --gpu 2
<job_3>
python orchestrator.py --sf specs/example_m_spec --rows 30-39 --gpu 3

如果两个Orchestrator试图同时创建相同的功能集或数据集,可能会出现问题,因此在调用多个编排器时要小心。建议将Orchestrator划分为不相关的特征/数据集任务组。
Make_specs.py可以根据设置创建具有模型规格集合的文件,或者单个模型规格的文件。由于规范文件是.csv格式,所以也可以手工编辑。

命令行处理数据

运行特征提取和数据集组合以获得干净的数据。这将以多种格式组合数据以最大化兼容性,但也因此使用了更多的空间。要限制格式,请使用 --fmt:

cd datagen/
python extract_features.py
python compose_dataset.py

对默认触发数据运行特征提取和合成:

python extract_features.py --feat_id troj_f0
python compose_dataset.py --feat_id troj_f0 --data_id troj_d0

用几种不同的中毒百分比配制

python compose_dataset.py --feat_id troj_f0 --perc 0.1 --data_id troj_d0_0.1
python compose_dataset.py --feat_id troj_f0 --perc 0.5 --data_id troj_d0_0.5
python compose_dataset.py --feat_id troj_f0 --perc 1.0 --data_id troj_d0_1.0

Efficient BUTD Model Training

在上一节创建clean和trojan数据集之后,在clean VQAv2上训练一个模型:

cd bottom-up-attention-vqa
python tools/process.py  #提取特征
python main.py --model_id clean_m0

在木马VQAv2数据集上训练模型:

python tools/process.py --data_id troj_d0
python main.py --data_id troj_d0 --model_id troj_m0

这些步骤将自动导出val集的结果文件,val集稍后将用于计算最终指标。

OpenVQA Model Training

在干净的数据上训练一个MCAN Small模型(仅限训练集)。这将自动导出一个val结果文件。

cd openvqa
python run.py --RUN='train' --MODEL='mcan_small' --DATASET='vqa' --SPLIT='train' --OVER_FS=1024 --OVER_NB=36 --VERSION='clean_m1'

在木马数据上训练一个MCAN Small模型,并导出全套木马结果文件:

python run.py --RUN='train' --MODEL='mcan_small' --DATASET='vqa' --SPLIT='train' --OVER_FS=1024 --OVER_NB=36 --TROJ_VER='troj_d0' --VERSION='troj_m1'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值