一、背景
广义敌对攻击是一种针对深度学习的攻击方法,通过对整个输入进行微调,从而影响模型的运行结果。现有的针对回环检测的攻击以及物理贴图等方法,大多数都是针对一般的SLAM算法进行设计,而对于基于深度学习的视觉里程计来说,目前的攻击并没有过多的研究。在这篇文章中,作者提出了一种针对视觉里程计的广义敌对攻击。该攻击的实现方式是在原图中叠加一个不可见的扰动,之后在不被察觉的前提下实现攻击。
二、方法
文章选择SC-Depth作为主要的攻击对象。攻击所使用的扰动本身属于一种基于PGD的扰动,但是放在视觉里程计这个任务中,如果我们按照传统的方法,对一个序列中的所有图像都施加同样的扰动,这实际上会降低图像之间的差异性,而这一差异性本身就是视觉里程计工作的基础。针对这一问题,作者选择了对不同图像叠加不同的扰动,以此来保证图像之间的差异性。
具体来说,在论文中作者的目标是产生两个扰动,实际上数量是无所谓的,只不过论文用两个扰动进行举例。对于连续两帧,我们将两个扰动分别叠加在两张图上,我们的目标就是最大化叠加扰动后这两帧位姿计算结果的偏差。
现在我们就将攻击的过程转变为了PGD攻击的流程,为了增加攻击效果,作者让两个扰动分别进行叠加,从而产生两个优化的目标:
这两个优化目标分别被记为L1和L2,我们的优化目标其实就是L1和L2的加权求和。在优化扰动的过程中,作者设计了一系列的技巧来保证隐蔽性,首先是像素的合法性,作者使用CLIP函数来限制叠加攻击后的像素不超过0-255的范围。这个过程扰动实际上也做了限制,每次的扰动限制在[2,4,8,16]范围内,以此保证每次的扰动变化幅度不会太大。
在此基础上,每次的扰动在上一轮的基础上进行叠加。
这个公式实际上就是深度学习优化目标函数的变形,而且貌似有点写错了。这里我们假设扰动全是在合法范围内,那么最外层的CLIP函数可以去掉,这时有:
Pt是上一轮的结果sign为取符号函数,用于确定移动的方向,α为学习率,这么看的话,这个公式其实就是“沿着梯度方向移动学习率的距离”,这其实就是深度学习优化参数的过程。之所以说公式有点问题,是因为L1和L2代表的是LOSS值,这里应该是LOSS值对扰动P的导数,所以公式写的不对,应该是导数,否则意义说不通。正确的公式应该是:
优化的目标函数也可以进行调整,这里我是这么理解的,优化的过程本身是一个最小化损失函数的过程,对于视觉里程计任务,其输出应该是位移和角度,如果我希望对偏航角进行攻击,那么我应该最小化计算出的偏航角与“真值的负值”的差异,通过这种方法,让攻击后计算出的偏航角尽可能接近真值的负值,从而让攻击后的偏航角变成反方向。按照这个道理,作者设计了三种攻击方法,分别针对:偏航角、z轴以及全部计算结果。