YOLOR:多任务的统一网络
人们通过视觉、听觉、触觉以及过去的经验“理解”世界。人类经验可以通过正常学习(我们称之为显性知识)或潜意识(我们称之为隐性知识)来学习。这些通过正常学习或潜意识学习到的经验将被编码并存储在大脑中。使用这些丰富的经验作为一个庞大的数据库,人类可以有效地处理数据,即使它们是事先不可见的。在本文中,我们提出了一个统一的网络来将隐性知识和显性知识编码在一起,就像人脑可以从正常学习和潜意识学习中学习知识一样。统一网络可以生成统一的表示以同时服务于各种任务。我们可以在卷积神经网络中执行内核空间对齐、预测优化和多任务学习。结果表明,当隐性知识被引入神经网络时,它有利于所有任务的性能。我们进一步分析了从所提出的统一网络中学习到的隐式表示,它在捕捉不同任务的物理意义方面显示出强大的能力。源码位于:https://github.com/WongKinYiu/yolor。
1、介绍
如图 1 所示,人类可以从不同角度分析同一条数据。 然而,经过训练的卷积神经网络 (CNN) 模型通常只能实现一个目标。 一般来说,可以从经过训练的 CNN 中提取的特征通常对其他类型的问题的适应性较差。 造成上述问题的主要原因是我们只从神经元中提取特征,没有使用CNN中丰富的隐式知识。 当真正的人脑在运作时,前述的隐性知识可以有效辅助大脑执行各种任务。
隐性知识是指在潜意识状态下学到的知识。 然而,对于内隐学习如何运作以及如何获得内隐知识,并没有系统的定义。 在神经网络的一般定义中,从浅层获得的特征通常称为显性知识,从深层获得的特征称为隐性知识。 在本文中,我们将与观察直接对应的知识称为显性知识。 对于模型中隐含的与观察无关的知识,我们称之为隐性知识。
我们提出了一个统一的网络来整合隐性知识和显性知识,并使学习到的模型包含一个通用表示,而这个通用表示使子表示适用于各种任务。 图 2.(c) 说明了提议的统一网络架构。
构建上述统一网络的方式是结合压缩感知和深度学习,主要的理论基础可以在我们之前的工作中找到[16,17,18]。 在[16]中,我们证明了通过扩展字典重构残差的有效性。 在 [17, 18] 中,我们使用稀疏编码来重建 CNN 的特征图并使其更加鲁棒。 这项工作的贡献总结如下:
-
我们提出了一个可以完成各种任务的统一网络,它通过整合隐性知识和显性知识来学习一种通用表示,通过这种通用表示可以完成各种任务。 所提出的网络以极少量的额外成本(少于一万个参数和计算量)有效地提高了模型的性能。
-
我们将核空间对齐、预测细化和多任务学习引入到隐性知识学习过程中,并验证了它们的有效性。
-
我们分别讨论了使用向量、神经网络或矩阵分解作为工具对隐性知识进行建模的方法,同时验证了其有效性。
-
我们确认所提出的隐式表示学习可以准确对应特定的物理特征,并且我们还以视觉方式呈现它。 我们还证实,如果算子符合某个目标的物理意义,则可以用来整合隐性知识和显性知识,并且会产生事半功倍的效果。
-
结合最先进的方法,我们提出的统一网络在物体检测方面达到了与 Scaled-YOLOv4-P7 [15] 相当的准确度,推理速度提高了 88%。
2、相关工作
我们对与该研究主题相关的文献进行了回顾。 本次文献综述主要分为三个方面:(1)显式深度学习:将涵盖一些可以根据输入数据自动调整或选择特征的方法,(2)隐式深度学习:将涵盖隐式深度学习的相关文献 知识学习和隐性微分导数,以及(3)知识建模:将列出几种可以用来整合隐性知识和显性知识的方法。
2.1.显式深度学习
显式深度学习可以通过以下方式进行。其中,Transformer [14, 5, 20] 是一种方式,主要是通过query、key、value来获取self-attention。非局部网络 [21, 4, 24] 是另一种获得注意力的方式,它主要是在时间和空间上提取成对的注意力。另一种常用的显式深度学习方法 [7, 25] 是通过输入数据自动选择合适的核。
2.2.隐式深度学习
属于隐式深度学习范畴的方法主要是隐式神经表征[11]和深度均衡模型[2,3,19]。前者主要是获取离散输入的参数化连续映射表示来执行不同的任务,而后者是将隐式学习转化为残差形式的神经网络,并对其进行平衡点计算。
2.3.知识建模
至于属于知识建模范畴的方法,主要包括稀疏表示[1, 23]和记忆网络[22, 12]。前者使用exemplar、prefixed over complete或learned dictionary进行建模,后者依靠结合各种形式的embedding来形成记忆,使记忆能够动态地添加或改变。
3、隐性知识如何运作?
本研究的主要目的是进行一个统一的网络,可以有效地训练隐性知识,所以在后续我们将首先关注如何训练隐性知识并对其进行快速推理。由于隐式表示 zi 与观察无关,我们可以将其视为一组常数张量Z=\left\{\mathbf{z}_{1}, \mathbf{z}_{2}, \ldots, \mathbf{z}_{k}\right\}。在本节中,我们将介绍作为常数张量的隐性知识如何应用于各种任务。
3.1.多种空间降低
我们认为一个好的表示应该能够在它所属的流形空间中找到合适的投影,并促进后续客观任务的成功。例如,如图 3 所示,如果目标类别可以通过投影空间中的超平面成功分类,那将是最好的结果。在上面的例子中,我们可以通过投影向量和隐式表示的内积来达到降低流形空间维数,有效完成各种任务的目的。
3.2. 内核空间对齐
在多任务和多头神经网络中,内核空间未对齐是一个常见问题,图 4.(a) 说明了多任务和多头 NN 中内核空间未对齐的示例。 为了解决这个问题,我们可以对输出特征和隐式表示进行加法和乘法,从而可以平移、旋转和缩放核空间以对齐神经网络的每个输出核空间,如图4(b)所示。 . 上述操作模式可以广泛应用于不同领域,例如特征金字塔网络(FPN)[8]中大对象和小对象的特征对齐,使用知识蒸馏来整合大模型和小模型,以及 处理零样本域转移和其他问题。
3.3. 更多功能
除了可以应用于不同任务的功能外,隐性知识还可以扩展到更多的功能中。 如图5所示,通过引入加法,可以使神经网络预测中心坐标的偏移。 还可以引入乘法来自动搜索锚的超参数集,这是基于锚的对象检测器经常需要的。 此外,可以分别使用点乘法和串联法来执行多任务特征选择并为后续计算设置前提条件。
4、我们统一网络中的隐性知识
在本节中,我们将比较传统网络和提出的统一网络的目标函数,并解释为什么引入隐性知识对于训练多用途网络很重要。 同时,我们还将详细阐述本工作中提出的方法的细节。
4.1. 隐性知识的形成
常规网络:对于常规网络训练的目标函数,我们可以用(1)表示如下:
y=f_{\theta}(\mathbf{x})+\epsilon
$$
minimize \epsilon
其中 x 是观察值,θ 是神经网络的参数集,f_{θ }表示神经网络的操作,是误差项,y 是给定任务的目标。
在传统神经网络的训练过程中,通常会最小化\epsilon使 f_{θ}(x) 尽可能接近目标。 这意味着我们期望对同一目标的不同观察是由 fθ 获得的子空间中的单个点,如图 6.(a) 所示。 换句话说,我们期望获得的解空间仅对当前任务t_{i}具有判别性,并且对各种潜在任务中的 t_{i} 以外的任务不变,T \backslash t_{i},其中T=\left\{t_{1}, t_{2}, \ldots, t_{n}\right\}。
对于通用神经网络,我们希望得到的表征可以服务于所有属于 T 的任务。因此,我们需要放松,使得可以在流形空间上同时找到每个任务的解,如图 6 所示 .(b)。 但是,上述要求使我们无法使用简单的数学方法,例如one-hot向量的最大值或欧几里得距离的阈值来获得t_{i}的解。 为了解决这个问题,我们必须对误差项进行建模以找到不同任务的解决方案,如图 6.(c)
统一网络:
为了训练提出的统一网络,我们一起使用显性和隐性知识对误差项进行建模,然后用它来指导多用途网络训练过程。 对应的训练方程如下:
\begin{aligned} &y=f_{\theta}(\mathbf{x})+\epsilon+g_{\phi}\left(\epsilon_{e x}(\mathbf{x}), \epsilon_{i m}(\mathbf{z})\right) \\ &\text { minimize } \epsilon+g_{\phi}\left(\epsilon_{e x}(\mathbf{x}), \epsilon_{i m}(\mathbf{z})\right) \end{aligned}
$$
其中 \epsilon_{e x} 和 \epsilon_{i m} 是分别建模来自观察 x 和潜在代码 z 的显式误差和隐式误差的操作。 g_{\phi} 在这里是一个特定于任务的操作,用于从显性知识和隐性知识中组合或选择信息。
有一些现有的方法可以将显性知识整合到 f_{\theta}中,因此我们可以将(2)重写为(3)。
y=f_{\theta}(\mathbf{x}) \star g_{\phi}(\mathbf{z})
$$
其中 \star 表示可以组合 f_{\theta} 和 g_{\phi} 的一些可能的算子。 在这项工作中,将使用第 3 节中介绍的运算符,即加法、乘法和连接。
如果我们将误差项的推导过程扩展到处理多个任务,我们可以得到以下等式:
F(\mathbf{x}, \theta, \mathbf{Z}, \Phi, Y, \Psi)=0
$$
其中 \mathbf{Z}=\left\{\mathbf{z}_{1}, \mathbf{z}_{2}, \ldots, \mathbf{z}_{T}\right\} 是T个不同任务的一组隐式潜在代码。 Φ 是可用于从 Z 生成隐式表示的参数。 \Psi 用于从显式表示和隐式表示的不同组合计算最终输出参数。
对于不同的任务,我们可以使用下面的公式来获得对所有z \in Z的预测:
d_{\Psi}\left(f_{\theta}(\mathbf{x}), g_{\Phi}(\mathbf{z}), y\right)=0
$$
对于所有任务,我们从一个通用的统一表示 f_{\theta}(x) 开始,经过特定任务的隐式表示 g_{\Phi}(\mathbf{z}),最后使用特定任务的判别器 d_{\Psi} 完成不同的任务。
4.2. 隐性知识建模
我们提出的隐性知识可以通过以下方式建模: 向量/矩阵/张量:
z
直接使用向量 z 作为隐式知识的先验,直接作为隐式表示。 这时,必须假设每个维度都是相互独立的。 神经网络:
W_{z}
使用向量z作为隐式知识的先验,然后使用权重矩阵W进行线性组合或非线性化,成为隐式表示。 这时,必须假设每个维度都是相互依赖的。 我们还可以使用更复杂的神经网络来生成隐式表示。 或者使用马尔可夫链来模拟不同任务之间隐式表示的相关性。 矩阵分解:
Z^{T}c
使用多个向量作为隐式知识的先验,这些隐式先验基Z和系数c将形成隐式表示。 我们还可以进一步对 c 做稀疏约束,将其转化为稀疏表示形式。 此外,我们还可以对 Z 和 c 施加非负约束,将它们转换为非负矩阵分解(NMF)形式。
4.3. 训练
假设我们的模型在开始时没有任何先验的隐性知识,也就是说,它不会对显式表示 fθ(x) 产生任何影响。 当组合运算符\star \in{addition; concatenation },初始隐式先验 \mathbf{Z} \sim N(0, \sigma),以及何时组合算子 \star 是乘法,\mathbf{z} \sim N(1, \sigma)。 这里,σ 是一个非常小的值,接近于零。 对于 z 和 φ,它们都在训练过程中使用反向传播算法进行训练。
4.4. 推理
由于隐式知识与观察x无关,无论隐式模型gφ有多复杂,都可以在推理阶段执行之前将其简化为一组常数张量。 换句话说,隐含信息的形成对我们算法的计算复杂度几乎没有影响。 另外,当上面的算子是乘法的时候,如果后面的层是卷积层,那么我们就用下面的(9)来积分。 当遇到加法算子,如果前一层是卷积层,没有激活函数,那么就用下图的(10)来积分。
5、实验
我们的实验采用了 MSCOCO 数据集 [9],因为它为许多不同的任务提供了真实情况,包括对象检测、实例分割、全景分割、关键点检测、素材分割、图像标题、多标签图像分类和长尾对象识别 . 这些具有丰富注释内容的数据可以帮助训练一个统一的网络,该网络可以支持计算机视觉相关任务以及自然语言处理任务。
5.1. 实验装置
在实验设计中,我们选择将隐式知识应用到三个方面,包括 1FPN 的特征对齐、 预测细化和 单个模型中的多任务学习。 多任务学习涵盖的任务包括目标检测、多标签图像分类和特征嵌入。 我们在实验中选择YOLOv4-CSP [15]作为基线模型,并在图8中箭头所指位置将隐式知识引入模型。所有训练超参数都与ScaledYOLOv4 [15]的默认设置进行比较 。
在 5.2、5.3 和 5.4 节中,我们使用了简单的向量隐式表示和加法运算符来验证引入隐式知识时对各种任务的积极影响。 在 5.5 节中,我们将对显性知识和隐性知识的不同组合使用不同的算子,并讨论这些组合的有效性。 在 5.6 节中,我们将使用不同的方法对隐性知识进行建模。 在 5.7 节中,我们分析了引入和不引入隐式知识的模型。 最后在第 5.8 节中,我们将使用隐式知识训练目标检测器,然后将性能与最先进的方法进行比较。
5.2. FPN 的特征对齐
我们在每个FPN的特征图中加入隐式表示进行特征对齐,相应的实验结果如表1所示。从表1的这些结果我们可以说:使用隐式表示进行特征空间对齐后,所有性能,包括 APS、APM、APL,提升了0.5%左右,是非常显着的提升。
5.3. 对象检测的预测细化
隐式表示被添加到 YOLO 输出层以进行预测细化。 如表 2 所示,我们看到几乎所有指标得分都得到了提高。 图 9 显示了隐式表示的引入如何影响检测结果。 在目标检测的情况下,即使我们没有为隐式表示提供任何先验知识,所提出的学习机制仍然可以自动学习每个锚的 (x, y)、(w, h)、(obj) 和 (classes) 模式 。
5.4.多任务的规范表示
当想要训练一个可以被多个任务同时共享的模型时,由于必须执行损失函数的联合优化过程,所以在执行过程中往往多方相互拉动。上述情况会导致最终的整体性能比单独训练多个模型然后集成它们更差。为了解决上述问题,我们建议为多任务训练一个规范表示。我们的想法是通过在每个任务分支中引入隐式表示来增强表示能力,其造成的影响列于表 3 中。 如表 3 所示的数据,在不引入隐式表示的情况下,一些指标得分在多次迭代后有所提高。任务训练,有的掉线了。将隐式表示引入联合检测与分类(JDC)后,在+iJDC对应的模型类别中,我们可以清楚地看到整体指标得分有了明显的提升,已经超越了单任务训练模型的表现。与未引入隐式表示时相比,我们的模型在中型物体和大型物体上的性能也分别提高了 0.3% 和 0.7%。在联合检测和嵌入(JDE)的实验中,由于特征对齐隐含的隐式表示的特点,提高指标得分的效果更加显着。在表3列出的JDE和+iJDE对应的指标得分中,+iJDE的所有指标得分都超过了没有引入隐式表示的指标。其中,大型物体的AP甚至提升了1.1%。
5.5.不同算子的隐式建模
表4显示了使用图10所示的不同算子结合显式表示和隐式表示的实验结果。在特征对齐实验的隐式知识中,我们看到加法和串联都提高了性能,而乘法实际上降低了性能。特征对齐的实验结果完全符合其物理特性,因为它必须处理全局偏移和所有单个簇的缩放。在预测细化实验的隐性知识中,由于concatenation的算子会改变输出的维度,所以我们只比较实验中使用加法和乘法算子的效果。在这组实验中,应用乘法的性能优于应用加法的性能。分析原因,我们发现center shift在执行预测时使用加法解码,而anchor scale使用乘法解码。由于中心坐标以grid为界,影响较小,人为设置的anchor拥有更大的优化空间,因此提升更显着。
基于上述分析,我们设计了另外两组实验-\left\{\times i \mathrm{FA}^{*}, \times i \mathrm{PR}^{*}\right\}。 在第一组实验– \times i \mathrm{FA}^{*}中,我们将特征空间拆分为anchor cluster level 以进行乘法组合,而在第二组实验– \times i \mathrm{PR}^{*} 中,我们仅对预测中的宽度和高度进行乘法细化。 上述实验的结果如表5所示。从表5所示的数字可以看出,经过相应的修改后,各项指标的得分得到了全面的提升。 实验表明,我们在设计如何组合显隐知识时,首先要考虑组合层的物理意义,以达到事半功倍的效果。
5.6. 以不同方式对隐性知识进行建模
我们尝试以不同的方式对隐性知识进行建模,包括向量、神经网络和矩阵分解。 使用神经网络和矩阵分解建模时,隐式先验维度的默认值是显式表示维度的两倍。 这组实验的结果如表6所示。我们可以看出,无论是使用神经网络还是矩阵分解对隐含知识进行建模,都会提升整体效果。 其中,使用矩阵分解模型取得了最好的结果,将AP、AP50和AP75的性能分别提升了0.2%、0.4%和0.5%。 在这个实验中,我们展示了使用不同建模方式的效果。 同时,我们确认了未来隐式表示的潜力。
5.7. 隐式模型分析
我们分析了带/不带/不带隐含知识的模型的参数数量、FLOPs 和学习过程,结果分别如表 7 和图 11 所示。 从实验数据中我们发现,在带有隐含知识实验集的模型中,我们只增加了不到万分之一的参数量和计算量,可以显着提升模型的性能,训练过程也可以 快速且正确地收敛。
5.8. 物体检测的隐性知识
最后,我们将所提出方法的有效性与对象检测的最新方法进行了比较。 引入隐式知识的好处如表8所示。对于整个训练过程,我们遵循scaled-YOLOv4[15]训练过程,即先从头开始训练300个epochs,然后微调150个epochs。 表 9 说明了与最先进方法的比较。 值得注意的一件事是,我们提出的方法没有额外的训练数据和注释。 通过引入隐式知识的统一网络,我们仍然获得了足以匹配最先进方法的结果。
6、结论 在本文中,我们展示了如何构建一个融合隐性知识和显性知识的统一网络,并证明它对于单一模型架构下的多任务学习仍然非常有效。 将来,我们会将训练扩展到多模态和多任务,如图 12 所示。
- 点赞
- 收藏
- 关注作者
评论(0)