在许多计算机视觉应用中,可以观察到更高容量的网络会催生更好的性能[InceptionV4, SENet,Learning transferable architectures for scalable image recognition,Regularized evolution for image classifier architecture search]。然而,它们通常消耗更多的资源。这使得在推理预算有限的情况下,寻找具有合适精度-速度权衡的模型以部署在边缘设备上具有挑战性。
大量的工作已经投入到边缘设备的轻量级神经架构的手动设计中[MobilenetV1,V2,shufflenet,Antnets]。大失所望得是,依靠人类的专业知识是非常耗时的,并且可能不是最佳的。新硬件平台发布的速度让这个问题变得更加严重。在许多情况下,这些较新的平台具有不同的性能特征,这使得以前开发的模型不是最佳的。
为了解决自动调整神经网络结构的需要,已经提出了许多方法。特别是,神经架构搜索(NAS)方法[ProxylessNAS,Chamnet, MobileNetV3, MnastNet, EfficientNet]已经证明了在特定硬件平台上寻找不仅准确而且有效的模型的卓越能力。
尽管NAS算法取得了许多进步,但值得注意的是,反向瓶颈(IBN) [MobilenetV2,逆残差结构]仍然是最先进的移动模型中的主要构建模块。仅限IBN的搜索空间也是大多数相关NAS工作的首选设置[ProxylessNet,mobilnetV3,MnasNet,EfficientNet]。IBN层严重依赖于深度方向和深度方向可分离卷积。由此产生的模型具有相对较低的FLOPS和参数计数,并且可以在CPU上高效地执行。
然而,对于在移动设备上越来越流行的硬件加速器,如DSP或EdgeTPUs,深度卷积在移动推理中的优势并不明显。例如,对于某些张量形状和核维数, 常 规 卷 积 的 运 行 速 度 可 以 是 E d g e T P U 上 深 度 方 向 变 化 的 3 倍 , 尽 管 常 规 卷 积 比 深 度 卷 积 有 7 倍 多 的 F L O P s \textcolor{#ff0000}{常规卷积的运行速度可以是EdgeTPU上深度方向变化的3倍,尽管常规卷积比深度卷积有7倍多的FLOPs} 常规卷积的运行速度可以是EdgeTPU上深度方向变化的3倍,尽管常规卷积比深度卷积有7倍多的FLOPs。这一观察使本文质疑在大多数当前最先进的移动架构中仅使用IBN搜索空间。
本文的工作旨在重新思考在现代移动加速器上只使用IBN搜索空间的问题。为此,本文提出了MobileDet搜索空间族,它不仅包括IBN,还包括由张量分解结构激发的灵活的全卷积序列[Analysis of individual differences in multidimensional scaling via an n-way generalization of “eckart-young” decomposition,Scaling recurrent models via orthogonal approximations in tensor trains,Some mathematical notes on three-mode factor analysis]。以对象检测任务为例(最受欢迎的移动视觉应用之一),本文展示了MobileDet搜索空间系列使nas方法能够在移动CPU、DSP、EdgeTPUs和edge GPUs上以更好的延迟-准确性权衡来识别模型。
为了评估本文提出的MobileDet搜索空间,本文针对一组不同的移动平台,执行了用于对象检测的延迟感知NAS。实验结果表明,通过使用本文的MobileDet搜索空间系列并直接搜索检测任务, 本 文 可 以 在 所 有 硬 件 平 台 上 持 续 提 高 性 能 \textcolor{#00ff00}{本文可以在所有硬件平台上持续提高性能} 本文可以在所有硬件平台上持续提高性能。
通过利用网络中选定位置的全卷积,本文的方法明显优于仅IBN模型。本文的搜索模型MobileDets在可比的推理延迟下, 在 C P U 上 比 M o b i l e N e t V 2 分 类 主 干 高 出 1.9 m A P , 在 E d g e T P U 上 高 出 3.7 m A P , 在 D S P 上 高 出 3.4 m A P , 在 e d g e G P U 上 高 出 2.7 m A P \textcolor{blue}{在CPU上比MobileNetV2分类主干高出1.9mAP,在EdgeTPU上高出3.7mAP,在DSP上高出3.4mAP,在edge GPU上高出2.7mAP} 在CPU上比MobileNetV2分类主干高出1.9mAP,在EdgeTPU上高出3.7mAP,在DSP上高出3.4mAP,在edgeGPU上高出2.7mAP。
在类似的CPU推理效率下,MobileDets也比最先进的MobileNetV3分类主干高出1.7mAP。此外,搜索到的型号实现了与最先进的移动CPU检测器MnasFPN 相当的性能,而没有利用可能会使部署复杂化的NAS-FPN头。在EdgeTPUs和DSP上,MobileDets都比MnasFPN更准确,但速度却是后者的两倍多。
本文的主要贡献可以总结如下:
Platform-aware NAS and our MobileDet search space work synergistically to boost object detection performance on accelerators.
在移动端上的目标检测架构,目前比较流行的三大派系分别为:谷歌出品的MobileNet系列(v1-v3)、旷视科技产品的ShuffleNet系列(v1-v2)、Facebook出品的FBNet(v1-v3)系列。最近移动端的目标检测通过结合神经网络架构搜索,又新出了三篇移动端目标检测SOTA模型:一篇出自谷歌大牛Quoc V. Le的MixNet;另一篇出自Facebook 出品的FBNet 的升级版本 FBNetV2,就在6月3日,Facebook又推出了FBNetV3。[引用](超越MobileNetV3,谷歌提出MobileDets:移动端目标检测新标杆 - 知乎 (zhihu.com))
这篇论文可以说有着史上最强豪华作者阵营,包括了DARTS的作者-HanXiao Liu、Tan Mingxing(MixNet、MobileNetV3、MnasNet、EfficientNet、EfficientDet都出自他之手)。
对象检测是一个经典的计算机视觉挑战任务,目标是学习识别图像中感兴趣的对象。现有的物体检测器可分为两类:两级检测器和一级单次检测器。
SSDLite 是SSD的一种高效变体,已成为最受欢迎的轻型检测头之一。它非常适合移动设备上的用例。高效的骨干网络,如MobileNetV2 和MobileNetV3 ,与SSDLite配对,实现最先进的移动检测结果。这两个模型都将被用作基线来证明本文提出的搜索空间在不同移动加速器上的有效性。
Search Algorithm.
本文提出的搜索空间是先前神经结构搜索算法的补充。在本文的实验中,本文使用TuNAS [Can weight sharing outperform random architecture search? an investigation with tunas]是因为它的可伸缩性和相对于随机基线的可靠改进。
TuNAS构建了一个一次性模型,包含给定搜索空间中的所有架构选择,以及一个控制器,其目标是选择一个优化平台感知奖励函数的架构。在搜索期间,一次性模型和控制器被一起训练。在每个步骤中,控制器从跨越选择的多项式分布中采样随机架构,然后更新与采样的架构相关联的单次模型的权重部分,最后计算采样的架构的奖励,该奖励用于更新控制器。通过对以下奖励函数应用增强算法[Simple statistical gradient-following algorithms for connectionist reinforcement learning]来进行更新:
R ( M ) = m A P ( M ) + τ ∣ c ( M ) c 0 − 1 ∣ , ( 1 ) R(M)=mAP(M)+\tau|\frac{c(M)}{c_0}-1|,(1) R(M)=mAP(M)+τ∣c0c(M)−1∣,(1)
其中mAP(M)表示架构M的mAP,c(M)是推理成本(在这种情况下是延迟), c 0 c_0 c0是给定的成本预算, τ < 0 \tau < 0 τ<0是一个超参数,它平衡了准确性和推理成本的重要性。搜索质量往往对 τ \tau τ 不敏感,如[Can weight sharing outperform random architecture search? an investigation with tunas]所示。
Cost Models.
**Standalone Training:**本文使用320×320的图像尺寸进行训练和评估。该训练使用32个云TPU v2核心进行。为了与现有模型进行公平的比较,本文在Tensorflow对象检测API中使用标准的预处理,而没有额外的增强,如drop-block或 auto-augment。
本文使用动量为0.9、重量衰减为 5 × 1 0 − 4 5×10^{-4} 5×10−4的SGD。学习率在前2000步预热,然后遵循余弦衰减。所有模型都是从零开始训练的,没有任何ImageNet预训练检查点。本文还考虑两种不同的训练计划:
short schedule 比 long schedule快4倍,但质量稍差。除非另有说明,否则本文使用short schedule进行消融研究,使用长方案获得下表中的最终结果。
Architecture Search.为了避免过度拟合真实的验证数据集,本文分离出10%的COCO训练数据来评估模型并计算搜索期间的奖励。用于训练共享重量的超参数遵循独立训练的短期计划。至于强化学习,我们使用Adam优化器,初始学习率为 5 × 1 0 − 3 5 × 10^{−3} 5×10−3,β = ( 0,0.999), ε = 1 0 − 8 \varepsilon=10^{-8} ε=10−8 。本文在消融研究中搜索50K步,在主结果表中搜索100K步以获得最佳候选值。
本文的搜索空间的整体布局类似于ProxylessNAS和TuNAS。本文考虑三种尺寸递增的变型:
对于上面的所有搜索空间变体,本文还在基本通道大小的(0.5、0.625、0.75、1.0、1.25、1.5、2.0)倍的选项中搜索每个层的输出通道大小(四舍五入到8的倍数,以更加硬件友好)。
同一块中的层共享相同的基本通道大小,尽管它们可能以不同的扩展因子结束。所有块的基本通道大小(从茎到头)是32-16-32-48-96-96-160-192-192。乘法器和基本信道大小被设计为大致包含文献中的几种代表性架构,例如MobileNetV2和MnasNet。
Hardware-Specific Adaptations.
NAS在Pixel-4 DSP上使用不同搜索空间变量的结果。
MobileDet取得[email protected]的性能,以3.2mAP指标优于MobileNetV2+SSDLite;以2.4mAP指标优于MnasFPN,同时具有更快的推理速度。
提出的搜索空间族是专门为CPU、EdgeTPUs和DSP开发的。这仍然是一个有趣的问题,搜索空间是否可以推广到新的硬件。为了回答这个问题,本文对作为“holdout”设备的NVIDIA Jetson GPUs进行了架构搜索。
本文遵循表Test AP scores are based on COCO test-dev中的DSP设置,只是滤波器数量四舍五入为16的倍数。结果见下表。在本文扩展的搜索空间中搜索的模型比MobileNetV2实现了+3.7倍的mAP提升,同时速度更快。
结果证实了所提出的搜索空间族足够通用以处理新的硬件平台。
这两种张量分解算法可以被看做是张量奇异值分解(SVD)的高阶扩展:CP分解将张量分解为秩一张量之和,Tucker分解是主成成分分析(PCA)的高阶形式。
【张量分解(一)】符号与基础知识_BQW_的博客-CSDN博客_张量符号
张量:向量是一维,矩阵是二维,张量就代表三维及以上,也可以将张量理解为高阶矩阵。
Fiber:是矩阵行和列在高阶张量中的类似物。通过固定一个张量的大部分维度只保留其中的一个维度所形成的子数组。
Slice:通过固定一个张量的大部分维度只保留其中的两个维度所形成的子数据,称为Slice。和Fiber类似,张量的不同维度也是对应着不同的切片方式:水平切片、侧面切片、正面切片。
如果扩展到更 n 阶的张量,那么Fiber是固定张量的 n-1 个维度,切片是固定张量的 n-2 个维度。
范数:张量的范数类似于矩阵的Frobenius范数,即对张量中所有元素平方求和后再开方:
内积:两个形状相同的张量的各个分量相乘并求和称为张量的内积,设 X , Y ∈ R I 1 × I 2 . . . × I N \mathcal{X},\mathcal{Y}\in\mathbb{R}^{I_1\times I_2...\times I_N} X,Y∈RI1×I2...×IN,则两张量的内积为:
单秩张量(Rank-one):如果一个N阶张量 X ∈ R I 1 × I 2 . . . × I N \mathcal{X}\in\mathbb{R}^{I_1\times I_2...\times I_N} X∈RI1×I2...×IN ,能够写成N个向量的外积,即:
X = a ( 1 ) ∘ a ( 2 ) ∘ . . . ∘ a ( N ) , 即 x i 1 i 2 . . . i N = a i 1 ( 1 ) a i 2 ( 2 ) . . . a i N ( N ) X=a^{(1)}∘a^{(2)}∘...∘a^{(N)},即x_{i_1i_2...i_N}=a_{i_1}^{(1)}a_{i_2}^{(2)}...a_{i_N}^{(N)} X=a(1)∘a(2)∘...∘a(N),即xi1i2...iN=ai1(1)ai2(2)...aiN(N)
张量的每一个元素都是由对于向量的分量相乘得到的,可以理解为,每个向量表示最终张量的一个维度,向量的分量则是张量维度取值乘积中的一项。
张量对称:如何一个张量的 所 有 维 度 均 相 同 \textcolor{#ff0000}{所有维度均相同} 所有维度均相同,则称该张量为cubical,例如 X ∈ R I × I × . . . × I \mathcal{X}\in\mathbb{R}^{I\times I\times ... \times I} X∈RI×I×...×I,如何一个cubical张量中一组下标任意组合所对应的元素均相等则称该张量超对称。
对角张量(Diagonal tensors):对于张量 X ∈ R I 1 × I 2 . . . × I N \mathcal{X}\in\mathbb{R}^{I_1\times I_2...\times I_N} X∈RI1×I2...×IN ,如果所有下标满足 i 1 = i 2 = . . . = i N i_1=i_2=...=i_N i1=i2=...=iN的元素值不为0,其他元素均为0,则该张量为对角张量。特别地,当对角张量中不为0的元素值均为1时,称为单位张量(identity tensor),用符号 J \mathcal{J} J表示。三阶单位张量间下图:
张量矩阵化(Matricization):张量矩阵化也称为张量展开(unfolding)或者拉平(flattening),是一种将n阶张量中的元素重新排列为矩阵的过程。
张量的n模积乘法:即张量在维度n处乘以矩阵或者向量。
张量与矩阵相乘:
给定一个N阶张量 X ∈ R I 1 × I 2 . . . × I N \mathcal{X}\in\mathbb{R}^{I_1\times I_2...\times I_N} X∈RI1×I2...×IN和矩阵 U ∈ R J × I n \textbf{U}\in\mathbb{R}^{J\times I_n} U∈RJ×In,则二者的n模积可以表示为$ \mathcal{X}\times_n\textbf{U} , 其 结 果 是 一 个 维 度 为 ,其结果是一个维度为 ,其结果是一个维度为I_1\times … \times I_{n-1} \times J \times I_{n+1}\times … \times I_N 的 张 量 , 即 将 维 度 的张量,即将维度 的张量,即将维度I_n$ 转变为 J J J。n模积的结果与乘积的顺序无关,即
X × m A × n B = X × n B × m A X×_mA×_nB=X×_nB×_mA X×mA×nB=X×nB×mA
从slice的角度来看,由于n模slice是一个矩阵,因此n模积可以看做张量 X \mathcal{X} X的所有n模slice乘以矩阵$ \textbf{U} 。 设 。设 。设 \mathcal{Y}=\mathcal{X}\times_n\textbf{U} , 则 张 量 ,则张量 ,则张量\mathcal{Y} 的 n 模 s l i c e , 等 于 的n模slice,等于 的n模slice,等于\mathcal{X} 的 n 模 s l i c e 乘 以 矩 阵 的n模slice乘以矩阵 的n模slice乘以矩阵\textbf{U} , 即 ,即 ,即Y_{(n)}=UX_{(n)}$。
张量与向量相乘
给定一个N阶张量 X ∈ R I 1 × I 2 . . . × I N \mathcal{X}\in\mathbb{R}^{I_1\times I_2...\times I_N} X∈RI1×I2...×IN和向量 v ∈ R I n \textbf{v}\in\mathbb{R}^{I_n} v∈RIn,则二者的n模积可以表示为 X ∙ n v \mathcal{X}\bullet_n\textbf{v} X∙nv,其结果是一个维度为$ I_1\times … \times I_{n-1} \times I_{n+1}\times … \times I_N$的N-1阶张量,即将消除原张量的第n维。
从fiber的角度来看,由于n模fiber是一个向量,因此n模积可以看做张量 X \mathcal{X} X的所有n模fiber乘以向量 v \textbf{v} v。由于向量间乘法使用的是内积,因此导致最终结果为维度为N-1。从微观的角度来看,可以得到:
( X ∙ n v ) i 1 i 2 . . . i n − 1 i n + 1 . . . i N = ∑ i n = 1 I n x i 1 . . . i N v i n (\mathcal{X}∙_nv)_{i_1i_2...i_{n-1}i_{n+1}...i_N}=\sum_{i_n=1}^{I_n}x_{i_1...i_N}v_{i_n} (X∙nv)i1i2...in−1in+1...iN=in=1∑Inxi1...iNvin
与n模矩阵乘法不同,n模向量乘法的顺序会影响最终的结果,例如:
X ∙ m a ∙ n b = ( X ∙ m a ) ∙ n − 1 b = ( X ∙ n b ) ∙ m a , 其 中 m < n \mathcal{X}∙ _ma∙_nb=(\mathcal{X}∙_ma)∙_{n−1}b=(\mathcal{X}∙_nb)∙_ma,其中m
由于m
矩阵的Kronecker、Khatri-Rao、Hadamard积
Kronecker积:Kronecker积是将一个矩阵的所有元素与另一个矩阵相乘,拼接得到更大的矩阵。矩阵$ \textbf{A}\in\mathbb{R}^{I\times J}$ 和 B ∈ R K × L \textbf{B}\in\mathbb{R}^{K\times L} B∈RK×L的Kronecker积表示为$A ⊗ B , 其 结 果 是 一 个 大 小 为 , 其结果是一个大小为 ,其结果是一个大小为 (IK)\times(JL)$的矩阵,即:
KaTeX parse error: Expected 'EOF', got '&' at position 202: …atrix}=[a_1⊗b_1&̲a_1⊗b_2&a_1⊗b_3…
Khatri-Rao积:类似Kronecher积,矩阵$ \textbf{A}\in\mathbb{R}^{I\times K} 和 和 和 \textbf{B}\in\mathbb{R}^{J\times K} 的 K h a t r i − R a o 积 表 示 为 的Khatri-Rao积表示为 的Khatri−Rao积表示为\textbf{A}\odot\textbf{B} , 其 结 果 是 一 个 大 小 为 ,其结果是一个大小为 ,其结果是一个大小为(IJ)×K$的矩阵,详细原理如下:
A ⊙ B = [ a 1 ⊗ b 1 a 2 ⊗ b 2 ⋯ a K ⊗ b K ] A⊙B=[a_1⊗b_1\space a_2⊗b_2\space \cdots a_K⊗b_K ] A⊙B=[a1⊗b1 a2⊗b2 ⋯aK⊗bK]
两个向量的Kronecher积和Khatri-Rao积是完全等价的,例如$a ⊗ b = a ⊙ b $。
Hadamard积:Hadamard积就是两个形状相同的矩阵对应元素相乘得到的矩阵。给定两个矩阵 A,B ∈ R I × J \textbf{A,B}\in\mathbb{R}^{I\times J} A,B∈RI×J,则Hadamard积表示为 A ∗ B \textbf{A}*\textbf{B} A∗B,其结果仍然是一个大小为 I × J I × J I×J的矩阵。详细原理如下:
基本性质:
[CP分解](Tensor Decompositions and Applications | SIAM Review)就是将一个张量分解成多个单秩张量的和。例如,给定一个三阶张量$ \mathcal{X}\in\mathbb{R}^{I\times J\times K}$,则CP分解可以写为:
X ≈ ∑ i = 1 R a r ∘ b r ∘ c r 其 中 , ∘ 是 指 向 量 外 积 , R 是 正 整 数 且 a r ∈ R I , b r ∈ R J , c r ∈ R K \mathcal{X}≈\sum_{i=1}^Ra_r∘b_r∘c_r\\ 其中,∘ 是指向量外积,R是正整数且a_r ∈\Bbb R^I ,b_r ∈\Bbb R^J ,c_r ∈\Bbb R^K X≈i=1∑Rar∘br∘cr其中,∘是指向量外积,R是正整数且ar∈RI,br∈RJ,cr∈RK
下图展示了三阶张量的CP分解:
将上面的CP分解展开,也可以写作
张量矩阵化后的CP分解
首先,定义因子矩阵(factor matrices)为CP分解中组成单秩张量的同一维度的向量合并成的矩阵,就是把所有的 a \textbf{a} a向量合并成一个矩阵$ \textbf{A}=[\textbf{a}_1\quad\textbf{a}_2\quad\dots\quad\textbf{a}_R] 。 同 理 , 还 可 以 合 成 因 子 矩 阵 。同理,还可以合成因子矩阵 。同理,还可以合成因子矩阵\textbf{B} 和 和 和 \textbf{C}$。那么矩阵化后的张量CP分解形式如下:
CP分解则是将待分解张量分解成R个单秩张量,其中R就是待分解张量的秩。因此,计算CP分解的第一个问题就是如何确定张量的秩。
大多数的CP求解思路是尝试不同的R 值来拟合待分解张量,直至找到一个最佳的分解。对于无噪声的数据,那么可以对R的值从1,2,…这样逐步尝试,从而得到一个最优的CP分解。但是,对于张量的低秩近似,一个张量可以被一个更低秩的张量任意逼近。
Tucker分解可以看作是主成分分析(PCA)的一种高阶版本,其将张量分解为一个核张量与每一维度上对应矩阵的乘积。具体来说,以三阶张量$ \mathcal{X}\in\mathbb{R}^{I\times J\times K}$为例,其Tucker分解写为:
X ≈ G × 1 A × 2 B × 3 C = ∑ p = 1 P ∑ q = 1 Q ∑ r = 1 R g p q r a p ∘ b q ∘ c r = ⟮ G ; A , B , C ⟯ X≈\mathcal{G}×_1A×_2B×_3C=\sum_{p=1}^P\sum_{q=1}^Q\sum_{r=1}^Rg_{pqr}a_p∘b_q∘c_r=⟮\mathcal{G};A,B,C⟯ X≈G×1A×2B×3C=p=1∑Pq=1∑Qr=1∑Rgpqrap∘bq∘cr=⟮G;A,B,C⟯
其中,$ \textbf{A}\in\mathbb{R}^{I\times P},\textbf{B}\in\mathbb{R}^{J\times Q},\textbf{C}\in\mathbb{R}^{K\times R} 是 不 同 维 度 上 的 因 子 矩 阵 , 这 些 矩 阵 通 常 被 认 为 是 不 同 维 度 上 的 主 成 分 。 是不同维度上的因子矩阵,这些矩阵通常被认为是不同维度上的主成分。 是不同维度上的因子矩阵,这些矩阵通常被认为是不同维度上的主成分。\mathcal{G}\in\mathbb{R}^{P\times Q\times R}$ 称为核张量,其中的每个元素代表了不同成分之间的交互程度。
从元素的角度看,Tucker分解可以写为:
x i j k ≈ ∑ p = 1 P ∑ q = 1 Q ∑ r = 1 R g p q r a p b q c r , i = 1 , . . . , I , j = 1 , . . . , J , k = 1 , . . . , K x _{ijk} ≈\sum_{p=1}^P\sum_{q=1}^Q\sum_{r=1}^Rg_{pqr}a_pb_qc_r ,i=1,...,I,j=1,...,J,k=1,...,K xijk≈p=1∑Pq=1∑Qr=1∑Rgpqrapbqcr,i=1,...,I,j=1,...,J,k=1,...,K
P,Q和R是因子矩阵$ \textbf{A,B,C} 的 成 分 数 ( 例 如 因 子 矩 阵 的 列 数 ) 。 如 果 P , Q 和 R 小 于 I , J , K 那 么 张 量 的成分数(例如因子矩阵的列数)。如果P , Q 和 R 小于I , J , K那么张量 的成分数(例如因子矩阵的列数)。如果P,Q和R小于I,J,K那么张量\mathcal{G} 可 以 被 认 为 是 张 量 可以被认为是张量 可以被认为是张量 \mathcal{X}$的压缩版本。在某些情况下,压缩版本的张量可以节省大量的存储空间。Tucker分解形象展示如下图:
张量矩阵化后的Tucker分解