论文地址:https://arxiv.org/abs/2105.04206

代码地址:https://github.com/WongKinYiu/yolor

介绍和相关工作


如上图,人类可以从不同的角度分析同一条数据。然而,一个训练好的卷积神经网络(CNN)模型通常只能实现一个目标。也就是说,从一个训练好的CNN中提取的特征通常是泛化性不足的,且无法很好的适用于其他任务。造成如此的问题是,网络只从神经元提取特征,而然还存在很多隐式的特征并没有被使用,如同人的大脑一般,隐式知识可以帮助大脑实现很多任务。

神经网络的广泛定义中,从浅层获得的特征就是显示特征,而深层获得的特征就被称为隐式特征。本论文中,作者把与观察直接对应的知识称为显式知识,对于模型内隐的、与观察无关的知识称之为内隐知识。

作者提出了一个新颖的网络整合隐式和显示知识,使得让模型学习一个泛化能力更强的表示,其子表示可以适用于各种任务,图2(c)代表了所提出了统一网络框架。构建上述统一网络的方法是将压缩感知和深度学习相结合,证明了扩展字典重构残差的有效性,利用稀疏编码重建CNN的特征图,使其更加鲁棒。


主要贡献如下:

  1. 通过整合显示和隐式知识,学习更泛化表示,适用于多任务学习,且计算量代价很小。
  2. 将核空间对齐,预测微调和多任务学习引入到隐式知识学习过程中。
  3. 分别讨论了用向量、神经网络和矩阵分解作为隐式知识建模工具的方法,并对其有效性进行了验证。
  4. 证实了所提出的内隐表征能够准确地对应特定的物理特征,并且我们也以视觉的方式将其呈现出来,并且如果操作符符合目标的物理意义,就可以用来整合隐性知识和显性知识,并产生乘数效应

显示深度学习

如Transformer,主要使用Q,K,V来获得自注意力;Non-local网络通过提取时间和空间的成对注意力。

隐式深度学习

主要包括隐式神经表示和深度平衡模型,前者主要是获取离散输入执行不同任务的参数化连续映射表示,后者是将隐式学习转化为残差形式的神经网络,并对其进行平衡点计算。

知识建模

主要包括稀疏表示和记忆网络两个方面,前者使用预定义过完整的范例或学习过的字典来进行建模,而后者依赖于组合各种形式的嵌入来形成记忆,并使记忆能够被动态添加或更改。

隐式知识如何工作

由于隐式表达 z i z_i zi和观察无关,所以作者把它看作一个常张量的集合 Z = { z 1 , z 2 , … , z k } Z = \{z_1,z_2,\dots,z_k\} Z={ z1,z2,,zk}

流形空间缩小

作者认为,一个良好的表象应该能够在它所属的流形空间中找到一个适当的投影,并促进后续的客观任务的成功。如下图3,如果超平面能在投影空间中成功分类目标类别,则为最佳结果。在上面的例子中,我们可以取投影向量隐式表示的内积来实现流形空间降维的目的,有效地完成各种任务。

内核空间对齐

多任务和多头神经网络中,核空间不对齐一直是个平凡的问题,下图(a)为一个不对齐的例子,为此可以对输出特征隐式表示进行加法乘法,使核空间可以平移、旋转和缩放,以对齐神经网络的每个输出核空间,如下图(b)。以上操作可以运用于多个领域,如大目标和小目标在FPN中的特征对齐,利用知识精馏来集成大模型和小模型和处理zero-shot域转移等问题。

更多的功能

除了运用于多任务,隐式知识也可以拓展到多种功能,如下图5,(a)可以帮助神经网络预测中心点的偏移,还可以引入乘法来自动搜索锚点的超参数集,这是基于锚点的对象检测器经常需要的。除此外点积和concat连接可以用于多任务特征选择,并为后续计算设置先决条件。

统一网络中的隐式知识

隐性知识的表达

传统网络:

对于传统网络的训练目标函数表示如下:
y = f θ ( x ) + ϵ  minimize  ϵ (1) \begin{array}{l} y=f_{\theta}(\mathbf{x})+\epsilon\\ \text { minimize } \epsilon \end{array} \tag{1} y=fθ(x)+ϵ minimize ϵ(1)
其中 x x x为观察值, θ θ θ为神经网络超参值, f θ f_{\theta} fθ表示为神经网络操作, ϵ \epsilon ϵ为误差项, y y y为给定任务目标。

训练过程中,需要最小化 ϵ \epsilon ϵ,从而使得 f θ ( x ) f_{\theta}(\mathbf{x}) fθ(x)趋近于目标,这意味我们期望相同目标的不同的目标观察需要在 f θ f_{\theta} fθ的子空间中为一个点,如下图(a)。也就意味对于当前任务 t i t_i ti,我们获得的解决空间需要具有辨别性,并且对于出 t i t_i ti以外的其他潜在任务 T \ t i , T = { t 1 , t 2 , … , t n } T \backslash t_{i},T=\{t_1,t_2,\dots,t_n\} T\ti,T={ t1,t2,,tn}具有不变性。

为了泛化神经网络,期望获得的表示同样适用于 T T T的所有任务。因此需要释放 ϵ \epsilon ϵ,使在流形空间上同时找到每个任务的解成为可能,下图(b)。但是如此要求无法用如one-hot向量最大值或者欧氏距离阈值等简单数学方法解决从而获得 t i t_i ti,为此需要建模 ϵ \epsilon ϵ,如下图(c)。

统一网络:
为了训练想要的统一网络,利用显示和隐式知识共同建模误差值,然后用其来指导多功能网络训练。

训练相应等式如下: y = f θ ( x ) + ϵ + g ϕ ( ϵ e x ( x ) , ϵ i m ( z ) ) minimize ⁡ ϵ + g ϕ ( ϵ e x ( x ) , ϵ i m ( z ) ) (2) \begin{array}{l} y=f_{\theta}(\mathbf{x})+\epsilon+g_{\phi}\left(\epsilon_{e x}(\mathbf{x}), \epsilon_{i m}(\mathbf{z})\right)\\ \operatorname{minimize} \epsilon+g_{\phi}\left(\epsilon_{e x}(\mathbf{x}), \epsilon_{i m}(\mathbf{z})\right) \end{array} \tag{2} y=fθ(x)+ϵ+gϕ(ϵex(x),ϵim(z))minimizeϵ+gϕ(ϵex(x),ϵim(z))(2)
ϵ e x \epsilon_{e x} ϵex ϵ i m \epsilon_{im} ϵim分别为从观察 x x x和潜在代码 z z z建模显示误差项和隐式误差操作。 g ϕ g_{\phi} gϕ为一种特定于任务的操作,用于从显性知识和隐性知识中组合或选择信息。

有些已存的方法可以将显示信息整合进 f θ f_\theta fθ,所以可以将公示2改写为公示3: y = f θ ( x ) ⋆ g ϕ ( z ) (3) y=f_{\theta}(\mathbf{x}) \star g_{\phi}(\mathbf{z}) \tag{3} y=fθ(x)gϕ(z)(3)

⋆ \star 表示可以组合 f θ f_\theta fθ g ϕ g_{\phi} gϕ的操作(加、乘以及concat)。

将误差项的推导过程推广到多任务处理,可得:
F ( x , θ , Z , Φ , Y , Ψ ) = 0 (4) F(\mathbf{x}, \theta, \mathbf{Z}, \Phi, Y, \Psi)=0 \tag{4} F(x,θ,Z,Φ,Y,Ψ)=0(4)

Z = { z 1 , z 2 , . . . , z T } Z = \{z_1, z_2, ..., z_T\} Z={ z1,z2,...,zT}是一组 T T T不同任务的隐潜代码, Φ \Phi Φ表示可以从 Z Z Z产生潜在表示的参数, Ψ \Psi Ψ用于从显式表示和隐式表示的不同组合中计算最终输出参数。
对于不同的任务,我们可以使用下面的公式得到所有 z ∈ Z z∈Z zZ的预测:
d Ψ ( f θ ( x ) , g Φ ( z ) , y ) = 0 (5) d_{\Psi}\left(f_{\theta}(\mathbf{x}), g_{\Phi}(\mathbf{z}), y\right)=0 \tag{5} dΨ(fθ(x),gΦ(z),y)=0(5)
对于所以的任务,开始于常见的统一表示 f θ ( x ) f_{\theta}(x) fθ(x),经历具体任务隐式表示 g Φ ( z ) g_{\Phi}{(z)} gΦ(z),最后用具体任务判别器完成不同的任务 d Ψ d_{\Psi} dΨ

建模隐式知识

作者建议隐式知识可以被建模为以下方式:
Vector / Matrix / Tensor:
z (6) z\tag{6} z(6)

直接使用向量z作为隐式知识的先验,直接作为隐式表达。如此,必须认为每个维度是相互独立的。

Neural Network:
W z (7) Wz \tag{7} Wz(7)
使用向量 z z z作为隐式知识先验,然后使用权重矩阵 W W W来实现线性组合或者非线性操作,然后再变为隐式表达。如此就要假设每个维度是相互依赖的,也可以使用更复杂的神经网络来生成隐式表示,或者利用马尔可夫链模拟不同任务间隐式表征的相关性。

Matrix Factorization:
Z T c (8) \mathbf{Z}^{\mathrm{T}} \mathbf{c} \tag{8} ZTc(8)

将多个向量作为隐知识的先验,这些隐先验基 Z Z Z和系数 c c c构成隐式表示。还可以进一步对 c c c进行稀疏约束,并将其转化为稀疏表示形式。还可以对 Z Z Z c c c施加非负约束,将它们转化为非负矩阵分解形式。

训练

假设我们的模型一开始并没有任何的先验隐式知识,也就是说,对于显示表示 f θ ( x ) f_θ(x) fθ(x)并没有任何的作用在其上,当组合操作 ⋆ ∈ { a d d i t i o n , c o n c a t e n a t i o n } \star \in \{addition,concatenation\} { addition,concatenation},初始隐式先验 z ∼ N ( 0 , σ ) \mathbf{z} \sim N(0, \sigma) zN(0,σ),当 ⋆ ∈ { m u l t i p l i c a t i o n } \star \in \{multiplication\} { multiplication} z ∼ N ( 1 , σ ) \mathbf{z} \sim N(1, \sigma) zN(1,σ) σ σ σ为接近于0的值, z z z Φ \Phi Φ通过反向传播进行训练。

推理

由于隐式知识和观察 x x x是无关的,不论隐式模型 g ϕ g_{\phi} gϕ多复杂,在推理阶段执行之前,它可以简化为一组常量张量。换句话说,隐式信息的形成对算法的计算复杂度几乎没有影响。另外,当上面的算子是乘法时,如果后面的层是卷积层,则使用下面的(9)进行积分。当遇到加法运算符时,如果前一层是卷积层,并且它没有激活函数,则使用下面所示的(10)进行集成。
x ( l + 1 ) = σ ( W l ( g ϕ ( z ) x l ) + b l ) = σ ( W l ′ ( x l ) + b l ) ,  where  W l ′ = W l g ϕ ( z ) (9) \begin{aligned} \mathbf{x}_{(l+1)} &=\sigma\left(W_{l}\left(g_{\phi}(\mathbf{z}) \mathbf{x}_{l}\right)+b_{l}\right) \\ &=\sigma\left(W_{l}^{\prime}\left(\mathbf{x}_{l}\right)+b_{l}\right), \text { where } W_{l}^{\prime}=W_{l} g_{\phi}(\mathbf{z}) \end{aligned} \tag{9} x(l+1)=σ(Wl(gϕ(z)xl)+bl)=σ(Wl(xl)+bl), where Wl=Wlgϕ(z)(9)

x ( l + 1 ) = W l ( x l ) + b l + g ϕ ( z ) = W l ( x l ) + b l ′ ,  where  b l ′ = b l + g ϕ ( z ) (10) \begin{aligned} \mathbf{x}_{(l+1)} &=W_{l}\left(\mathbf{x}_{l}\right)+b_{l}+g_{\phi}(\mathbf{z}) \\ &=W_{l}\left(\mathbf{x}_{l}\right)+b_{l}^{\prime}, \text { where } b_{l}^{\prime}=b_{l}+g_{\phi}(\mathbf{z}) \end{aligned} \tag{10} x(l+1)=Wl(xl)+bl+gϕ(z)=Wl(xl)+bl, where bl=bl+gϕ(z)(10)

实验

实验采用MSCOCO数据集,因为其GT可以满足多种任务需求。模型选择YOLOv4- CSP作为baseline

FPN特征对齐

目标检测的预测微调

多任务的规范表示

不同操作符的隐式建模

不同方法进行隐式知识建模