2022 CVPR Adversarial Texture for Fooling Person Detectors in the Physical World 物理世界中对人的对抗纹理 对抗样本

发布于:2022-10-17 ⋅ 阅读:(2355) ⋅ 点赞:(2)

文章相关信息和链接

文章链接: https://arxiv.org/abs/2203.03373 清华大学 胡展豪
文章代码: https://github.com/WhoTHU/Adversarial_Texture

文章概览:文章解决了之前的针对人的物理对抗样本缺乏多角度鲁棒性的问题,通过生成对抗纹理,并且对抗纹理中任意取较小区域补丁都具有对抗效果,以此来模拟摄像机各角度拍摄情况下都成功攻击目标检测。

作者解决的问题

以往的针对人的物理对抗补丁攻击方法都需要人正对摄像机才能发挥较好的攻击效果,即使将仿射变换等模拟物理世界角度变换的方法加入到训练过程中也很难发挥各个角度都兼具的攻击效果,同时作者认为3D建模很难渲染出人类衣服这种非刚性效果,未采用3D建模方法生成对抗样本。

作者希望生成任意大小的2D对抗纹理,当纹理被印在布上时,从布上提取的任何补丁在对抗攻击中都是有效的。作者实现了这种方法——AdvTexture,是有这般对抗效果并且连续可重复的对抗纹理。

在这里插入图片描述
作者同时提出并实验验证:一旦移动视角,普通2D补丁和简单平铺补丁被摄像头捕获的部分对抗效果较差。

本文方法

在这里插入图片描述pipeline
从隐空间变量通过生成器生成对抗图案,经过亮度,对比度等等变换贴到数据集的人身上,再将整张图片送入目标检测器获取其输出如置信度等,通过其输出优化生成器,最后固定生成器参数优化得到最优的隐空间变量z。

作者最终方法Toroidal-Cropping-based Expandable Generative Attack (TC-EGA),消融实验为Random cropping attack (RCA),Toroidal Cropping Attack (TCA),Expandable Generative Attack (EGA)。其实可以从下图流程理解作者方法:

RCA
TCA
EGA
TC-EGA

RCA(Random cropping attack)

为达到每次取小patch都具有对抗攻击效果,我们初始化一个大对抗图案(看作衣服),每epoch随机裁剪一个小patch。
在这里插入图片描述此方法缺点:

当大图案(衣服)尺寸很大时,如边长1800像素

  1. 太多参数(1800 × 1800 像素)
  2. 每一块小patch采样率太低(2.8%=1/36)
  3. 边缘像素采样少,采样不平均

TCA(Toroidal Cropping Attack)

为解决RCA的缺点,针对需要优化太多参数,采用只更新小补丁,平铺成大的对抗图案。如果需要平铺并且保证任意取小补丁也有对抗效果,作者想到环形剪裁去更新小补丁。
在这里插入图片描述作者初始化一个300 * 300的补丁,每次更新150 * 150的小补丁,通过.repeat方法实现每次更新小补丁。

        cloth_expanded = cloth.repeat([1, 1, expand_w, expand_h])

黑框为大补丁,蓝框为每次更新的小补丁,因为蓝框一部分在黑框内,一部分在黑框外,黑框外的这部分可以看作平移到红框的蓝色区域这进行更新,其实每次黑框更新的内容为蓝色填充区域(由两部分组成并且图案是连续的)。
在这里插入图片描述
具体的代码实施部分(有删减)如下:

    elif crop_type == 'recursive':
        r_w = np.random.randint(w)
        r_h = np.random.randint(h)
        expand_w = (w + crop_size[0] - 1) // w + 1
        expand_h = (h + crop_size[1] - 1) // h + 1
        cloth_expanded = cloth.repeat([1, 1, expand_w, expand_h])
        patch = cloth_expanded[:, :, r_w:r_w + crop_size[0], r_h:r_h + crop_size[1]]

EGA(Expandable Generative Attack)

作者将优化目标从原本固定的patch创新为找到一个对抗分布,作者认为对抗分布中任意一个图片都具有对抗效果,作者想找到这种分布。作者用由全卷积(FCN,其中FCN中的padding均为0)构成的Generator去采样对抗分布,之所以采用FCN作为生成器的原因是:

  1. 若采用全连接层等需要固定size的参数大小,而FCN可以生成任意size大小的补丁,每一个对抗小补丁均共享相同的模型架构和参数
  2. FCN具有平移不变性,适合对抗分布中对大图案中取小补丁仍然在对抗分布中的特性
    在这里插入图片描述图中Z是隐空间变量, τ ~ \tilde{τ} τ~是对抗分布对抗图案。

EGA的推导如下:

在这里插入图片描述作者用能量函数定义对抗分布 P a d v P_{adv} Padv τ τ τ表示被AdvTexture覆盖的整块布,我们假设 τ τ τ遵循一个分布 P a d v P_{adv} Padv,这样,当它的对抗性效果更显著时,概率 P a d v ( τ ~ ) P_{adv}(\tilde{τ}) Padv(τ~)更高。,用来模拟此分布的能量函数 U ( τ ~ ) U(\tilde{τ}) U(τ~)由两部分组成,一部分是衡量对抗攻击效果: x x x表示行人图片,而 τ ~ \tilde{τ} τ~表示一个提取的补丁, M ( ⋅ ) M(\cdot) M()表示将补丁经过变换贴在图中人身上, f ( ⋅ ) f(\cdot) f()表示目标检测器。对抗损失代码如下:

def get_det_loss(darknet_model, p_img, lab_batch, args, kwargs):
    valid_num = 0
    det_loss = p_img.new_zeros([])
    output = darknet_model(p_img)
    if kwargs['name'] == 'yolov2':
        all_boxes_t = [utils.get_region_boxes_general(output, darknet_model, conf_thresh=args.conf_thresh, name=kwargs['name'])]
    else:
        raise ValueError

    for all_boxes in all_boxes_t:
        for ii in range(p_img.shape[0]):
            if all_boxes[ii].shape[0] > 0:
                iou_mat = utils.bbox_iou_mat(all_boxes[ii][..., :4], lab_batch[ii][:truths_length(lab_batch[ii]), 1:], False)
                iou_max = iou_mat.max(1)[0]
                idxs = iou_max > args.iou_thresh
                det_confs = all_boxes[ii][idxs][:, 4]
                if det_confs.shape[0] > 0:
                    max_prob = det_confs.max()
                    det_loss = det_loss + max_prob
                    valid_num += 1

    return det_loss, valid_num

能量函数 U ( τ ~ ) U(\tilde{τ}) U(τ~)另一部分是约束图案平滑性的相邻像素MSEloss。
Z u Z_u Zu为配分函数,配分函数的存在使得不好采样此分布。作者用Generator采样对抗分布,生成器定义的分布为 q φ ( τ ~ ) q_φ(\tilde{τ}) qφ(τ~),其中 z ∼ N ( 0 , 1 ) z\sim N(0,1) zN0,1 P z ( ⋅ ) P_z(\cdot) Pz()是标准正态分布的概率密度函数, δ ( ⋅ ) \delta(\cdot) δ()是单位脉冲函数,优化目标为min两个分布之间的KL距离。

经过推导后(文章附录有推导过程)得出最终损失函数:

loss = det_loss + torch.max(tv_loss, torch.tensor(0.1).to(device)) + disc_loss

一部分为 U ( τ ~ ) U(\tilde{τ}) U(τ~)的期望,通过多次采样 z z z生成 τ ~ \tilde{τ} τ~计算,另一部分为 τ ~ \tilde{τ} τ~ z z z的互信息量函数(disc_loss),互信息量衡量两个变量相关性,通过此损失让不同的 z z z可以生成不同的 τ ~ \tilde{τ} τ~
其中互信息量损失推导得出结果为:
在这里插入图片描述其中使用一个辅助网络 T w T_w Tw来增加 z z z τ ~ \tilde{τ} τ~的互信息,上图公式中有两个项,每个项都需要随机抽样。为了估计第一个项,我们首先从N(0,1)中对 z z z进行抽样,然后在每个训练步骤中用 G φ ( z ) G_φ(z) Gφ(z)生成 τ ~ \tilde{τ} τ~ s p ( t ) sp(t) sp(t)为softplus—— l o g ( 1 + e t ) log(1+e^t) log(1+et)

Tw示意图
代码中作者在鉴别器D中将 G φ ( z ) G_φ(z) Gφ(z) τ ~ \tilde{τ} τ~ z z z cat 在一起输入到卷积中再经过线性层即得到 T w ( τ ~ , z ) T_w(\tilde{τ},z) Tw(τ~,z)

    def get_loss(self, y, z, gp=0.0):
        if z.shape[0] > 1:
            z_prime = torch.cat((z[1:], z[:1]), dim=0)
        else:
            z_prime = z.new(z.shape).normal_()
        pj = self.D(y, z)
        pm = self.D(y, z_prime)
        Ej = -F.softplus(-pj).mean()
        Em = F.softplus(pm).mean()
        loss = (Em - Ej)
        if gp > 0:
            return loss + gp * calc_gradient_penalty(self.D, y), pj, pm
        else:
            return loss, pj, pm

TC-EGA(Toroidal-Cropping-based Expandable Generative Attack)

此方法为作者在EGA方法的基础上加入环形剪裁(Toroidal-Cropping),生成更加规则可重复的对抗纹理。其方法分为两个步骤:

  1. 用EGA方法训练一个生成器
  2. 固定生成器参数,优化隐空间变量z,优化过程对z同时使用TCA方法的环形剪裁

个人的疑惑和感想

  1. 为什么要用生成器?TCA其实已经实现了通过优化小单元并平铺小单元后得到的大对抗图案,从大图案中去小补丁具有对抗效果。作者说用生成器可以生成任意大小的图案,这确实修改z的w和h是可以生成任意大小的对抗图案,但TCA平铺也可以生成可大可小的对抗图案,看你自己铺多少了,maybeTCA局限在是需要是单元的整数倍大小?
  2. 对抗损失中对置信度处理是先对label进行匹配,避开了除了label之外的人(未加补丁)的置信度对loss的影响。

写在最后

个人水平有限,文章很多推导过程进行了省略,感兴趣可以到作者文章中找到推导过程研究,本文仅仅是浅浅的学习。作者本质上解决的问题是因为物理世界中的视角变换导致每个角度只能拍摄到部分纹理,作者成功解决了任意的部分纹理都具有对抗攻击效果的问题,从2D维度对抗纹理解决了3D物理世界的问题。


网站公告

今日签到

点亮在社区的每一天
去签到