《Global2Local》算法论文详解
文章地址:《Global2Local: Effificient Structure Search for Video Action Segmentation》
代码地址:https://github.com/ShangHua-Gao/G2L-search
文章来自于南开大学程明明团队和腾讯、中科院,文章发表在CVPR2021。
文章认为当前的视频动作分割算法中,网络的感受野是很重要的,大的感受野有利于观察long-term relations,而小的感受野有利于提取局部特征。现有的网络都是人工设计的感受野,文章提出一种依靠搜索的方法来找到合适的感受野,从而提高网络的性能。文章提出global-to-local search方法,先采用global search找到一种较合适的感受野组合,再采用local search找到一个精度更高的感受野组合。
为了便于理解,这里需要强调一下一个感受野组合就代表一个网络结构
一、网络结构
假设一个TCN网络有L层卷积,每层卷积的dilation-rates/receptive-fields可选择的集合定义为 D = { d 1 , d 2 , . . . , d N } D=\{d_1,d_2,...,d_N\} D={d1,d2,...,dN},所有层感受野的组合为 C = c 1 , . . . , c l , . . . , c L C={c_1, ...,c_l,...,c_L} C=c1,...,cl,...,cL,其中 l ∈ [ 1 , L ] l\in [1,L] l∈[1,L]为空洞卷积的层号索引,且 c l ∈ D c_l\in D cl∈D。所以这里可以有 ∣ D ∣ L |D|^L ∣D∣L个感受野组合。对于MS-TCN来说就有 102 4 40 1024^{40} 102440个感受野组合。(详情请看MS-TCN)直接对这些感受野组合进行搜索是不太实际的所以文章使用global-to-local的方法来提出一种可行的搜索方式。
1.1 Global Search
首先是降低感受野的搜索空间,global search的搜索空间定义如下:
D g = { d i = k i , i ∈ [ 0 , 1 , . . . , T ] } D_g = \{d_i = k^i,i\in[0,1,...,T]\} Dg={di=ki,i∈[0,1,...,T]}
其中k是表示搜索空间稀疏程度的控制因子,T表示搜索空间的最大值。在相同最大值的情况下,可以看出 ∣ D g ∣ ≪ ∣ D ∣ |D_g|\ll|D| ∣Dg∣≪∣D∣,即global search的搜索空间远小于原始的搜索空间。比如在k=2的情况下,MS-TCN最大的感受野为1024,搜索空间从 102 4 40 1024^{40} 102440降低到 1 1 40 11^{40} 1140。
即使做了这样的一个降低搜索空间的操作,但可以看出搜索空间仍然很大,暴力搜索还是很困难的。文章提出一种基于遗传算法的方法来寻找由于人工设计感受野组合的coarse combinations。基于遗传算法的global search方法如下图所示:
下面来分别介绍图中的selection、crossover、mutation操作。
1.1.1 selection
感受野组合的候选(即候选的网络结构)用公式表示如下:
P = { C i , i ∈ [ 1 , M ] } ( 1 ) P=\{C_i, i\in [1, M]\}\quad (1) P={Ci,i∈[1,M]}(1)
其中, C i C_i Ci表示一个global search的一个候选结构,M表示总的候选结构数量。
selection操作则是在P这个候选空间中选择需要的组合出来,选择方式则是通过acc的评价结果来选择的:
E ( C i ) = f ( V ∣ C i , θ n ) ( 2 ) E(C_i)=f(V|C_i, \theta_n)\quad (2) E(Ci)=f(V∣Ci,θn)(2)
其中 E ( C i ) E(C_i) E(Ci)表示结构 C i C_i Ci的评价结果, f ( ⋅ ) f(\cdot) f(⋅)表示评价指标(这里使用的是每一帧是否分割正确的一个acc指标),V表示在验证集, θ n \theta_n θn表示训练了n个epochs的模型。
注意:selection操作在代码中为filter函数而不是select函数,选择出较好的配置结构
1.1.2 crossover
这个步骤目的是为了产生一些新的感受野组合结构。将已有的候选每两个进行组合,然后将这两个候选网络中随机取一段,进行感受野互换,从而获取到新的感受野组合。
上述说过的每两个是怎么选择出来的,是按照下式选择的:
p ( C i ) = E ( C i ) ∑ i M E ( C i ) ( 3 ) p(C_i)=\frac{E(C_i)}{\sum^M_iE(C_i)}\quad (3) p(Ci)=∑iME(Ci)E(Ci)(3)
即根据计算出来的 p ( C i ) p(C_i) p(Ci)随机的选择两两配对的感受野组合。(详情请查看代码中的select函数)
crossover操作请查看代码中的cross函数。
1.1.3 mutation
这个步骤是为了避免算法走到局部最优解,所以引入mutation。
mutation会通过一个预设的概率 p m p_m pm来定义有多大的几率需要进行mutation操作,并且随机的将要变异的一个感受野组合中的一定量的感受野(这个一定量文章设置的是0.2)进行改变,改变的值也是随机的。
1.1.4 global search的伪代码
Global search
输入:search算法总共迭代N次,每个结构训练n个epoch,随机初始化P,变异概率为pm,P的总个数为M;
for iter in [i, N] do
1.利用公式(3)选择出一些感受野组合出来,并且每两个间进行cross操作
2.根据概率p_m来变异出新的感受野组合
3.每个组合训练n个epochs
4.利用公式(2)选择出M个感受野组合出来,如果不够那么随机生产一些补上,作为新的感受野组合的集合
end for
return P
1.2 Local Search
该部分全称为基于期望指导的local search(Expectation Guided Iterative Local Search)。
我们希望在当前数据集上获得dilation rates的概率质量分布(probability mass distribution),那么就可以获得这个数据集上一个dilation rate的期望来更好的适应当前数据集。但是数据集上dilation rates的概率质量分布是不可以获得的。因此,文章采用共享卷积参数改变dilation rate来学习得到近似的概率质量函数。
为了得到方便搜索,我们定义待学习的dilation rate是从区间 [ D l − Δ D l , D l + Δ D l ] [D_l-\Delta D_l, D_l+\Delta D_l] [Dl−ΔDl,Dl+ΔDl]采样出S个值进行学习。采样出来的dilation rate集合定义为 T l = { d i ∣ i ∈ [ 1 , S ] } T_l=\{d_i|i\in[1,S]\} Tl={di∣i∈[1,S]}其中 d i = D l − Δ D l + ( i − 1 ) ⋅ 2 Δ D l / ( S − 1 ) d_i=D_l-\Delta D_l+(i-1)\cdot2\Delta D_l/(S-1) di=Dl−ΔDl+(i−1)⋅2ΔDl/(S−1), Δ D l \Delta D_l ΔDl为控制搜索精度的值。公式其实就是想表达在区间 [ D l − Δ D l , D l + Δ D l ] [D_l-\Delta D_l, D_l+\Delta D_l] [Dl−ΔDl,Dl+ΔDl]进行均匀采样,比如文章 Δ D l = 0.1 D l \Delta D_l=0.1D_l ΔDl=0.1Dl,S=3(即在区间中采样3个点)那么 T l = { D l − Δ D l , D l , D l + Δ D l } T_l=\{D_l-\Delta D_l, D_l, D_l+\Delta D_l\} Tl={Dl−ΔDl,Dl,Dl+ΔDl}
可以理解为一个卷积现在分成了S个卷积,这S个卷积的权重共享,只是dilation rate不一样。S个dilation rate都要学习它们对应的权重,权重定义为 W = { w 1 , w 2 , . . . , w i , i ∈ [ 1 , S ] } W=\{w_1, w_2,...,w_i,i\in [1,S]\} W={w1,w2,...,wi,i∈[1,S]},通过这些权重来反应这些dilation rate的重要性。由于W的值是没有界的,所以将它们归一化,归一化后其实就是上面提到的近似的概率质量函数 P M F ( d i ) PMF(d_i) PMF(di):
P M F ( d i ) = α i = ∣ w i ∣ ∑ i S ∣ w i ∣ ( 4 ) PMF(d_i)=\alpha_i=\frac{|w_i|}{\sum^S_i |w_i|} (4) PMF(di)=αi=∑iS∣wi∣∣wi∣(4)
得到这个概率质量函数后,我们可以计算期望来表示一个新的dilation rate D l ′ D'_l Dl′
D l ′ = ⌊ ∑ d i ∈ T l P M F ( d i ) ⋅ d i ⌋ ( 5 ) D'_l=\lfloor \sum_{d_i\in T_l} PMF(d_i)\cdot d_i\rfloor (5) Dl′=⌊∑di∈TlPMF(di)⋅di⌋(5)
上述计算如下图所示:
训练网络时对于输入x来说,输出y可以表示为:
y = ∑ i S α i ψ ( x , d i , θ ) ( 6 ) y=\sum^S_i\alpha_i\psi(x,d_i,\theta) (6) y=∑iSαiψ(x,di,θ)(6)
其中 ψ ( x , d i , θ ) \psi(x,d_i,\theta) ψ(x,di,θ)表示一个权重为 θ \theta θ,dilation rate为 d i d_i di的卷积操作。
1.2.1 local search的伪代码
Expectation Guided Iterative Local Search
输入:迭代N,初始化感受野D;使用D初始化模型;
for iter in [1,N] do
对每一层在D的基础上构建Tl
训练模型并根据公式(4)获得PMF
根据公式(5)计算出新的dilation rate
更新D
end for
return local-searched D
算法核心就这些,具体实验流程和实验结果请查看原文。
视频算法交流qq群:657626967