0%

Physical Attack on Monocular Depth Estimation with Optimal Adversarial Patches

研究动机

​ 现有的针对MDE的adversarial attack方法分为digital和pysical两个方面的。

​ 数字层面通常是对像素点添加扰动,这样的攻击肉眼难以分辨,但是现实中的操作性不大。物理层面是针对真实的物理物体,通常是通过添加对抗性补丁的方式。

​ 与数字层面相比,真实世界的攻击因为攻击需要对多样的摄象与几何变换具有鲁棒性的扰动,并且隐秘性较低。本文提出一个隐秘的针对MDE的真实世界攻击方式,并且提出了一个针对目标物体的隐秘、高效、鲁棒的真实物体的对抗性补丁的优化框架。并且在多个下游感知任务和多个训练集里进行了实验。

网络模型

​ 首先通过风格变换处理patch,接着和Patch Mask融合,两者综合到攻击对象上,最后将攻击对象与随机场景融合。

Adversarial Perturbation Generation

​ patch与图像的拼接操作如下:

O=O(1mp)+xmpO^{'} = O \bigodot(1-m_p)+x^{'}\bigodot m_p

​ 为了增强攻击的鲁棒性,实施了Expectation of Transofrmation,来随机改变目标的大小、旋转方向、明亮程度、饱和度。目标的水平位置是随机的,但是高度位置通过如下的公式进行计算:

d=hHs+ftan αd=-\frac{h}{H}s+\frac{f}{tan\ {\alpha}}

​ 最后生成的图像就是:

Rt=Λt(t(Omo),R)R'_t = Λ_t(t(O'\bigodot m_o), R)

loss计算
Sensitive Region Localization

​ 将mask转化为如下的函数:

​ 同时用tanh来近似:

​ 同时如上图所示,最终的mask形状可以随意改变。

loss

总的Loss

代码与实验

Categorical Depth Distribution Network for Monocular 3D Object Detection

University of Toronto Robotics Institute

研究动机

​ 与其他论文相似,本文也是把深度的预测作为了核心问题。为了提高深度预测的准确度,该模型将连续的深度转化为离散的深度值。划分深度区间,计算分布。最后生成BEV表示来进行分类与检测。本文亮点在于将难以预测的深度值转化为容易预测的离散值,并且采用了效果较好的BEV表示来进行后续的分类和回归。

网络模型

​ 论文采用ResNet-101作为Image Backbone,对输入的2D图像进行处理来生成图像特征。之后根据图像特征来生成深度分布。同时抽取其中的Block1层来获取高空间分辨率。高空间分辨率可以避免Frustum Grid的低分辨率和过采样。模型利用DeepLabV3类似的方法来获取图像的深度分布。之后根据图像的深度分布和图像特征来生成Frustum Features。

G(u,v)=D(u,v)F(u,v)G(u,v)=D(u,v) \bigotimes F(u,v)

​ 之后将Frustum Grid转化为Voxel Features,最后再将Voxel Featrues拍扁生成BEV表示

深度离散化

​ 论文中关键点在于深度的离散化,常用的离散化方式有UD(等距)、SID(间距递增)、LID(线性递增离散化),本文主要采用LID的离散化方法:

dc=dmin+dmaxdminD(D+1)di(di+1)d_c = d_{min} + \frac{d_{max}-d_{min}}{D(D+1)}\cdot d_i(d_i+1)

深度分布标签生成

​ 模型训练过程中需要标准的深度分布标签。论文从将LiDAR的点云投影到图像框架上来生成sparse dense maps。接着将depth maps降采样到与feature map相同大小。接着将depth maps用LID的方式生成depth bin。接着用one-hot编码来生成对应的标签。

Loss

Ldepth=1WFHFu=1WFv=1HFFL(D(u,v),D^(u,v))L_{depth}=\frac{1}{W_F \cdot H_F}\sum_{u=1}^{W_F}\sum_{v=1}^{H_F}FL(D(u,v),\hat D(u,v))

​ D是预测的深度分布,D^\hat D是深度分布标签。因为目标检测中待检测的物体占比较少,所以采用Focal Loss的方式,αfg=3.25,αbg=0.25\alpha_{fg}=3.25,\alpha_{bg}=0.25来针对目标和背景。

​ 总的Loss如下:

L=λdepthLdepth+λclsLcls+λregLreg+λdirLdirL=\lambda_{depth}L_{depth}+\lambda_{cls}L_{cls}+\lambda_{reg}L_{reg}+\lambda_{dir}L_{dir}

代码

ing~

Geometry-based Distance Decomposition for Monocular 3D Object Detection

研究动机

​ 3D目标检测的核心问题是对深度进行估计,已有的深度估计方法通常都是将深度作为一个单一的参数进行回归。作者提出了一种将深度拆分成物理高度与PCL的方式。使得模型更具有解释性、实现起来更简单、更具有鲁棒性。

核心思路

​ 将深度拆分成物理高度与PCL,通过公式Z=fHhZ=\frac{fH}{h}来计算与物体中心的距离。当目标出现遮挡或者残缺时,相比于直接预测目标的3D框,预测目标的高度有更好的准确率。

网络模型

采用ResNet-50和FPN作为Backbone,从Backbone的P2、P3、P4、P5层特征图来获取ROI。之后根据不同的head,生成目标的种类clscls和置信度scorescore和目标的2D检测框b=(x1,y1,x2,y2)b=(x_1,y_1,x_2,y_2)。生成3D目标在2D上的投影中心p=(p1,p2)p=(p_1,p_2)和3D目标框的大小(W,H,L)(W,H,L),最后是目标的朝向和距离。

损失函数

Deep Residual Learning for Image Recognition

研究动机

​ 如上图所示,单纯的堆叠卷积层有时候并不能取得更好的效果,比如上图中56层的卷积网络比20层的卷积网络在训练集和测试集上的error更多了。

​ 因为梯度消失和梯度爆炸的原因,阻碍了网络的收敛,该问题通过加入了中间层的正则化有所缓解,但是随着网络的深入,导至网络不按照预期进行收敛。并且该问题不是因为网络的过拟合产生的,仅仅堆叠网络层数并不能解决。

​ 作者提出了残差网络,来解决该问题。

网络模型

残差模块

​ 假设网络学习的拟合目标是H(x)\mathcal{H}(x)。我们改变非线性层转而去拟合一个新的函数:F(x):=H(x)x\mathcal{F}(x) :=\mathcal{H}(x)-x
​ 原始的映射H(x):=F(x)+x\mathcal{H}(x):=\mathcal{F}(x)+x。相比于原始的映射,这种新的映射更容易去学习。

因为残差的引入,导至随着网络的叠加,深层的网络不会出现梯度过小而产生的训练不动的问题。

模块实现

​ 如上图所示,残差模块实际上就是在input进入前,引一条边到output,进行相加,这个操作叫做Shortcut Connections

​ 实线的连接表示的是两个层之间的通道数相同,虚线连接表示的是两层之间通道数不同。该通道数可以通过1×11\times 1的卷积核来处理。

左图在论文中成为BasicBlock,右图称为Bottleneck,通过有图这种通道数的变换,可以有效的降低运算复杂度。

1×11 \times 1卷积核可以参考该文章 残差网络(Deep Residual Learning for Image Recognition)

代码

先摸了

EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

研究动机

​ 针对卷积神经网络的缩放技术一直以来都被广泛应用,并且取得了不错的成绩。但是现有的网络缩放仅仅是针对网络宽度、网络深度、图片大小其中之一来进行的。针对两个或三个维度的任意的修改需要大量的调参,而且通常很难优化准确率和效率。

​ 另一方面现有的卷积神经网络可以通过堆叠参数来达到较高的准确率,但是在很多应用场景下(比如手机端的应用)并不需要很高的准确度,而是需要交高的效率。针对大型网络的深度、宽度调整通常来说会需要非常大的设计时间和调整成本。

​ 本文想探究一种规律的方法去同时缩放网络宽度、网络深度、图片分辨率三个维度,来达到一个更好的准确度和效率。

思路分析

三种调整方式

  • 网络的宽度调整通常是调整输出的通道数目,比如输出通道数扩大2倍,这会导至计算复杂度(FLOPS)提高4倍。
  • 网络的深度调整改变了网络的层数,比如层数扩大2倍,导至FLOPS提高2倍
  • 图片分辨率的调整是针对Input的图片大小,比如分辨率提高2倍,这会导致FLOPS提高4倍

上图的(e)是本文的调整方式,同时针对上述的三个维度进行调整。

Compound Model Scaling

Problem Formulation

​ 卷积的一层可以表示为Yi=Fi(Xi)Y_i = \mathcal{F}_i(X_i)XiX_i是输入的tensor通常包含<Hi,Wi,Ci><H_i,W_i,C_i>,通常每层的卷积形式类似,所以可到到卷积网络如下:

N=i=1...sFiLi(X<Hi,Wi,Ci>)\mathcal{N}=\bigodot_{i=1...s}\mathcal{F}_i^{L_i}(X_{<H_i,W_i,C_i>})

​ 在stage ii,卷积重复LiL_i次,所以网络宽度、网络深度、图片分辨率分别对应着Ci,Li,<Hi,Wi>C_i,L_i,<H_i,W_i>。提高准确率实际上是想要优化如下的公式:

maxd,w,r Accuracy(N(d,w,r))s.t. N(d,w,r)=i=1...sF^idL^i(X<rH^i,rW^i,wC^i>)Memory(N)target_memoryFLOPS(N)target_flops\max_{d,w,r} \ Accuracy(\mathcal{N}(d,w,r))\\ s.t.\ \mathcal{N}(d,w,r) = \bigodot_{i=1...s}\hat{\mathcal{F}}_i^{d*\hat{L}_i}(X_{<r*\hat{H}_i,r*\hat{W}_i,w*\hat{C}_i>})\\ Memory(\mathcal{N}) \leq target\_memory\\ FLOPS(\mathcal{N}) \leq target\_flops

Scaling Dimensions

​ 从图中可以看出,提高三个维度的任意一维,都可以提高准确率,但是会带来计算复杂度的提升,并且会迅速收敛。

Compound Scaling

​ 作者为了探讨多个维度一起缩放的效果,进行了相关实验,效果如上图。可以看出多个维度都进行缩放的效果是要好于单个维度的;但是想要追求更好的准确率和效率的话,需要对三个维度的缩放比例配平。

​ 本文采用一个系数ϕ\phi 来统一网络层数、宽度和分辨率的缩放比例,如下:

depth:d=αϕwidth:w=βϕresolution:r=γϕs.t. αβ2γ22α1,β1,γ1depth:d=\alpha ^{\phi}\\ width:w=\beta ^ {\phi}\\ resolution: r = \gamma ^ {\phi}\\ s.t. \ \alpha * \beta ^ 2 * \gamma^2 \approx 2\\ \alpha \geq 1,\beta \geq 1, \gamma \geq1

​ 其中,经过该比例的变化,整个网络的FLOPS会变为原来的(αβ2γ2)ϕ(\alpha * \beta ^ 2 * \gamma ^ 2)^{\phi}倍,所以限制 αβ2γ22\alpha * \beta ^ 2 * \gamma^2\approx2 可以保证对于系数ϕ\phi,FLOPS会近似变为原来的2ϕ2^{\phi}倍。

网络结构

​ 文章优化目标是ACC(m)×[FLOPS(m)/T]wACC(m)\times [FLOPS(m)/T]^w,其中ACC是网络的准确率,采用FLOPS而不是时间是因为作者不是在具体的硬件设备上进行优化的,希望能够在各种设备上都有不错的效果。

​ 文章首先固定ϕ=1\phi = 1,通过small grid search来找到合适的α,β,γ\alpha,\beta,\gamma的值,分别为1.2,1.1,1.15。
​ 接着文章固定α,β,γ\alpha,\beta,\gamma,来寻找合适的ϕ\phi

研究动机

​ (截至论文发表)之前的模型通常都是使用RNN与CNN。RNN与LSTM网络中包含隐藏层,并且模型的训练以来序列信息。导至模型难以并行训练,提高了空间复杂度。与此同时,Attention机制逐渐发展并在各种任务的序列模型和变换模型成为重要的组成部分。但是现有的Attention机制还是和RNN连接。

​ 因此本文提出了Transformer模型,舍弃了循环神经网络而完全采用attention机制来在输入和输出之间获取全局的依赖关系。

网络模型

​ 如上图所示,Transformer模型包括一个encoder和一个decoder。encoder包括6个相同层,每层包括两个子层。子层第一个是Multi-head self-attention 第二层是简单的Feed-forward network。在每个子层之间加入了残差连接(ResNet中的short-cut),并且每个子层后接着一个**Layer Normalization(LN)**也就是图中的Add & Norm。子层输出维度为512的向量。

​ 与encoder类似,decoder也包含6个相同的层。不同的是每层包括三个子层。在最开始额外添加了Masked Multi-Head Attention层,用来引入序列信息。同样的每个子层也包括了残差连接和LN。

Attention机制

Scaled Dot-Production Attention

​ 本文提出了Scaled Dot-Product Attention机制。

​ 输入向量包括qkvq、k、v三个向量,对于向量qqkk,先进行乘法,然后通过除以dk\sqrt{d_k}进行尺度收缩(因为认为q和k是独立的随机变量并且均值为0,方差为1,那么qkq \cdot k的均值为0,方差为dkd_k,方差扩大了dkd_k倍),接着对多个k进行softmax,然后将结果乘上vv

​ 因为输入是多个词向量,所以采用矩阵QKVQ、K、V。则公式如下:

Attention(Q,K,V)=softmax(QKTdk)VAttention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}})V

​ 使用该Attention形式,矩阵运算的比例较高,可以很好的使用矩阵运算相关的优化代码进行加速。

Multi-Head Attention

​ 为了引入不同的表示的信息,本文采用了Multi-Head Attention,实际上就是对输入词向量xx生成hh个不同的QKVQ、K、V矩阵,分别进行上述的Scaled Dot-Production Attention,最后进行拼接,再乘一个矩阵WOW^O

MultiHead(Q,K,V)=Concat(head1,...,headh)WOwhereheadi=Attention(QWiO,KWiK,VWiV)MultiHead(Q,K,V) = Concat(head_1,...,head_h)W^O\\ where head_i = Attention(QW^O_i,KW^K_i,VW^V_i)

其中WiQRdmodel×dkWiKRdmodel×dkWiVRdmodel×dvWiORhdv×dmodelW_i^Q \in R^{d_{model} \times d_k}、W_i^K \in R^{d_{model} \times d_k}、W_i^V \in R^{d_{model} \times d_v}、W_i^O \in R^{hd_v \times d_{model}}

​ 下面的这些维度说明了将Q,K,VQ,K,V分别转化乘dk,dvd_k,d_v维度的矩阵,接着进行self-attention的处理,最后再进行拼接,再进行线性变换。

​ 论文中采取了h=8h=8dk=dv=dmodel/h=64d_k=d_v=d_{model}/h=64,8个部分并行计算。

Positon-wise Feed-Forward Networks

​ 对每个位置独立相同的采用一个feed-forward network,包括两个线性变换和一个ReLU激活函数:

FFN(x)=max(0,xW1+b1)W2+b2FFN(x) = max(0,xW_1 + b1)W_2+b_2

Positional Encoding

​ 网络没有循环和卷积结构,那么怎么引入序列信息呢?Transformer添加了**“Positional encodings”**来和输入相加。该模块位于最初的encoder和decoder的层。

PE(pos,2i)=sin(pos/100002i/dmodel)PE(pos,2i+1)=cos(pos/100002i/dmodel)PE_{(pos,2i)}=sin(pos/10000^{2i/d_{model}})\\ PE_{(pos,2i+1)}=cos(pos/10000^{2i/d_{model}})

pos是位置,i是维度

源码

先摸了

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment