CVPR2021上将NAS与ReID结合的文章,搜索到了一个轻量网络,在ReID任务上取得了很高的精度。
文章标题:Combined Depth Space based Architecture Search For Person Re-identification
论文地址:https://arxiv.org/abs/2104.04163
代码地址:暂未开源
目录
1 简介
曾经调研过神经架构搜索(NAS)方法,该方法可以搜索到针对指定任务的最优网络结构,这篇文章便介绍了一个通过NAS得到的用于ReID的轻量网络,该网络的参数量仅有1.8M,且在公开数据集上取得了较高的精度,这种轻量网络的出现对ReID系统在移动端的部署具有重要意义。
原来的ReID方法多基于大型网络如ResNet实现,但是这些网络是设计用于图像分类的,可能不是最适用于ReID的网络。本文作者旨在使用NAS技术搜索一个轻量的ReID网络,作者设计了一个新颖的搜索空间——Combined Depth Space (CDS),基于此,作者使用可微架构搜索算法搜索了一种高效的网络结构,名为CDNet。此外,作者提出了一个名为Top-k Sample Search的低代价搜索策略,以充分利用搜索空间,避免出现局部最优的情况。 最后,作者介绍了一个有效的Fine-grained Balance Neck (FBLNeck),以平衡训练过程中triplet损失和softmax损失的影响。
2 贡献
- 提出CDS搜索空间,其中的CBlock能显示学习组合模式特征,更适合ReID;
- 提出一个分层的Top-k Sample Search搜索策略,降低了搜索成本,同时充分利用了搜索空间;
- 提出Fine-grained Balance Neck (FBLNeck)平衡三元组和softmax损失。
3 内容
3.1 Combined Depth Space
作者提出了一个搜索空间叫做组合深度空间(CDS),基于CDS,搜索网络的深度可以在特定范围内自适应地变化。如下图(a),作者采用来自OSNet[1]的轻量(Lite) 3×3网络作为基本块。
CBlock: 如上图,CBlock利用两个不同感受野的不同的核来学习多尺度模式,然后对学习到的特征进行精细融合得到更具辨别性的特征,因此,设
C
K
=
{
(
3
,
5
)
,
(
3
,
7
)
,
(
3
,
9
)
,
(
5
,
7
)
,
(
5
,
9
)
,
(
7
,
9
)
}
C K=\{(3,5),(3,7),(3,9),(5,7),(5,9),(7,9)\}
CK={(3,5),(3,7),(3,9),(5,7),(5,9),(7,9)},给定组合
(
k
i
,
k
j
)
∈
C
K
\left(k_{i}, k_{j}\right) \in C K
(ki,kj)∈CK,可以得到6种CBlock。为了减少参数量和计算量,作者用
⌊
k
2
⌋
\left\lfloor\frac{k}{2}\right\rfloor
⌊2k⌋的轻量3×3代替depthwise的
k
×
k
k \times k
k×k卷积(如上图(b)所示),因为它们的最终特征图共享相同的感受野且后者比前者参数少。用
g
g
g表示Lite 3×3,给定输入大小
x
x
x和kernel size
k
k
k,Lite
k
k
k的计算过程如公式(1)所示,op
∘
\circ
∘表示操作连续运行t次。由于从两个核中学到的特征是异构的,所以简单相加它们是不妥的,作者根据输入计算每个通道的权重,然后计算
L
i
t
e
(
x
,
k
1
)
{Lite}\left(x, k_{1}\right)
Lite(x,k1)和
L
i
t
e
(
x
,
k
2
)
{Lite}\left(x, k_{2}\right)
Lite(x,k2)的通道加权和,两个1×1卷积以比例
r
r
r来压缩和恢复通道。
Lite
(
x
,
k
)
=
g
(
x
)
∘
⌊
k
2
⌋
(1)
\operatorname{Lite}(x, k)=g(x) \circ\left\lfloor\frac{k}{2}\right\rfloor \tag{1}
Lite(x,k)=g(x)∘⌊2k⌋(1)
MBlock: MBlock相当于DARTS[2]中的cell,与其不同的是,作者简化了搜索单元,且只需选择kernel的适当组合,而不用确定内部节点之间的复杂连接,这里的CBlocks属于CK集合,即MBlock只有6个候选操作,就和前面提到的一样,如上图(a)所示,每个分支都有自己的权重 a i j a_{ij} aij,代表CBlock j {j} j的重要性。DARTS搜索一个normal cell和reduction cell并在不同层之间共享内部结构,作者认为不同深度的神经网络块可能关注不同的信息,因此简单地搜索并堆叠两个cell可能得到的是次优结果。根据作者提出的高效搜索策略( 3.2节所述),他们首先设计了如下图所示的宏观框架,,并在神经架构搜索过程中为每一层搜索独立的cell,在搜索网络的初始阶段,作者采用了一个由步长为2的7×7标准卷积和步长为2的3×3最大池化组成的正常卷积stem(茎)。可以看到,在不同的深度有6个MBlock需要搜索,与DARTS不同,作者使用固定的reduction块——DownSample块(如上图(b) )。基于上述搜索空间——组合空间(CS),作者称搜索到的网络为CNet,因为每个MBlock有6个候选操作,所以CS搜索空间的大小为 6 6 ≈ 1 0 4.7 6^6 \approx 10^{4.7} 66≈104.7,和普通的方法相比,CS比较小但是却高效。
CDBlock: 前面提到搜索网络只有6个MBlocks,这比ResNet的16个blocks要浅,可以简单地在每个阶段添加1-2个MBlocks来加深网络,但这也会增加参数量,为了有效地加深网络,应该在每个阶段分配适当数量的block,而不是随机或均匀地分配。为此,作者在CS中引入深度因子,组成一个新的搜索空间——Combined Depth Space (CDS),将 C K CK CK重新定义为:
C D K = { ( 3 , 5 , 1 ) , ( 3 , 7 , 1 ) , ( 3 , 9 , 1 ) , ( 5 , 7 , 1 ) , ( 7 , 9 , 1 ) , ( 3 , 5 , 2 ) , ( 3 , 7 , 2 ) , ( 3 , 9 , 2 ) , ( 5 , 7 , 2 ) , ( 7 , 9 , 2 ) } CDK=\begin{array}{l} \{(3,5,1),(3,7,1),(3,9,1),(5,7,1),(7,9,1),(3,5,2),(3,7,2),(3,9,2),(5,7,2),(7,9,2)\} \end{array} CDK={(3,5,1),(3,7,1),(3,9,1),(5,7,1),(7,9,1),(3,5,2),(3,7,2),(3,9,2),(5,7,2),(7,9,2)},让元组 ( k 1 , k 2 , r ) ∈ C D K \left(k_{1}, k_{2}, r\right) \in C D K (k1,k2,r)∈CDK, k 1 , k 2 k_1,k_2 k1,k2表示CBlock中两个分支的kernel大小, r r r表示CBlocks重复的次数,给定 C D K CDK CDK,可以构建上上图中©中所示的CDBlock,因此,可以将原MBlock中的CBlock替换为CDBlock来构造新的MBlock。CDS的大小为 1 2 6 ≈ 1 0 6.5 12^{6} \approx 10^{6.5} 126≈106.5,所以网络的深度在6~12之间,更加灵活,而不用再手动确定网络深度。
3.2 Top-k Sample Search
定义结构参数
α
=
{
α
1
,
α
2
,
…
,
α
6
}
\alpha=\left\{\alpha_{1}, \alpha_{2}, \ldots, \alpha_{6}\right\}
α={α1,α2,…,α6},
α
\alpha
α是
n
n
n维向量,表示第
i
i
i个MBlock中每个分支的权重,对于CS和CDS,
n
n
n分别为6和12。搜索网络的网络参数表示为
w
w
w,所以目标是通过最小化训练损失
L
T
L_T
LT找到更新
w
w
w后能够达到最小验证损失
L
V
L_V
LV的最优架构参数
α
∗
\alpha*
α∗,如公式(2),求解该方程,第一步:更新
w
w
w直到其收敛于训练集,第二步:更新
α
\alpha
α直到其收敛于验证集,交替进行直到搜索网络收敛。但是每次搜索都迭代到收敛是很耗时的,了解NAS的都知道这一点,故前述解方程法不适用于寻最优结果,故
w
w
w使用单batch的训练数据更新,
α
\alpha
α在每个epoch使用单批验证数据更新,在交替更新足够epoch的
w
w
w和
α
\alpha
α之后,得以逼近公式(2)的最优值
α
∗
\alpha *
α∗。
min
α
L
V
(
w
∗
(
α
)
,
α
)
s.t.
w
∗
(
α
)
=
argmin
w
L
T
(
w
,
α
)
(2)
\begin{aligned} \min _{\alpha} & L_{V}\left(w^{*}(\alpha), \alpha\right) \\ & \text { s.t. } \quad w^{*}(\alpha)=\operatorname{argmin}_{w} L_{T}(w, \alpha) \end{aligned}\tag{2}
αminLV(w∗(α),α) s.t. w∗(α)=argminwLT(w,α)(2)
搜索期间,根据MBlock
i
i
i的
α
i
\alpha_i
αi来计算top-k分支,给定输入
x
x
x和MBlock i,
F
(
i
,
x
)
F(i, x)
F(i,x)表示前向传播,MBlock中的第
j
j
j个分支表示为
f
j
f_j
fj,
n
n
n为分支数,MBlock
i
i
i的概率分布
p
i
=
[
p
i
1
,
p
i
2
,
…
,
p
i
n
]
p_i=\left[p_{i 1}, p_{i 2}, \ldots, p_{i n}\right]
pi=[pi1,pi2,…,pin],由公式(3)得到:
p
i
j
=
exp
(
α
i
j
)
∑
j
=
1
n
exp
(
α
i
j
)
(3)
p_{i j}=\frac{\exp \left(\alpha_{i j}\right)}{\sum_{j=1}^{n} \exp \left(\alpha_{i j}\right)}\tag{3}
pij=∑j=1nexp(αij)exp(αij)(3)
然后由公式(4)构造一个二进制向量
h
i
=
[
h
i
1
,
h
i
2
,
…
,
h
i
n
]
h_{i}=\left[h_{i 1}, h_{i 2}, \ldots, h_{i n}\right]
hi=[hi1,hi2,…,hin],前向传播中,如果选择了第
j
j
j个分支那么
h
i
j
h_ij
hij为1,否则为
0
0
0。其中
v
k
v_k
vk表示
p
i
p_i
pi中第
k
k
k个最大值,然后MBlock
i
i
i前向传播的公式如(5)所示,
h
i
j
=
{
1
,
p
i
j
≥
v
k
0
,
p
i
j
<
v
k
(4)
h_{i j}=\left\{\begin{array}{ll} 1, & p_{i j} \geq v_{k} \\ 0, & p_{i j}<v_{k} \end{array}\right.\tag{4}
hij={1,0,pij≥vkpij<vk(4)
F ( i , x ) = ∑ j = 1 n h i j f j ( x ) (5) F(i, x)=\sum_{j=1}^{n} h_{i j} f_{j}(x)\tag{5} F(i,x)=j=1∑nhijfj(x)(5)
但是
h
i
h_i
hi是离散分布,不好反向传播,为了能通过
h
i
h_i
hi将梯度反向传播给
α
i
\alpha_i
αi,需要构建
h
h
h和
α
\alpha
α之间的关系如式(6),其中
p
i
∗
,
h
i
∗
p_{i}^{*}, h_{i}^{*}
pi∗,hi∗代表
p
i
,
h
i
p_i,h_i
pi,hi的无梯度copy,
m
i
m_i
mi是无梯度法向量,然后用
h
i
j
^
\hat{h_{i j}}
hij^替代公式(5)中的
h
i
j
h_{ij}
hij,式(6)中
p
i
p_i
pi和
h
i
^
\hat{h_{i}}
hi^的梯度也需要被计算,于是MBlock
i
i
i中
α
i
j
\alpha_{ij}
αij的梯度计算如公式(7)所示。
m
i
=
h
i
∗
−
p
i
∗
h
i
^
=
m
i
+
p
i
(6)
\begin{array}{l} m_{i}=h_{i}^{*}-p_{i}^{*} \\ \hat{h_{i}}=m_{i}+p_{i} \end{array}\tag{6}
mi=hi∗−pi∗hi^=mi+pi(6)
∂ F ( i , x ) ∂ α i j = ∑ k ∈ topk ( ∂ F ( i , x ) ∂ h i k ^ ∂ h i k ∂ p i k ∂ p i k ∂ α i j ) (7) \frac{\partial F(i, x)}{\partial \alpha_{i j}}=\sum_{k \in \text { topk }}\left(\frac{\partial F(i, x)}{\partial \hat{h_{i k}}} \frac{\partial h_{i k}}{\partial p_{i k}} \frac{\partial p_{i k}}{\partial \alpha_{i j}}\right)\tag{7} ∂αij∂F(i,x)=k∈ topk ∑(∂hik^∂F(i,x)∂pik∂hik∂αij∂pik)(7)
公式(5)和(7)说明了作者在前向传播期间平等对待top-k分支(权重均为1),但根据其实际权重 p p p更新结构参数,搜索算法可以概述为算法1,即下图:
3.3 Fine-grained Balance Neck
为了有效解决嵌入空间中三元组和softmax损失目标不一致的问题,作者提出了有效的细粒度平衡neck( FBLNeck )。如下图所示,FBLNeck由两部分组成,上部分是仅利用全局信息的平衡neck (BLNeck),下部分是细粒度neck (FNeck),它将fmap2分成两个条纹,并提取局部信息。
对于前述损失,FNeck也有与BLNeck相似的结构,需要说明的是,在相对较浅的层提取局部特征,而不像大多数工作那样在最后一层提取,这是因为浅层的感受野较小,能提取到更细粒度的特征。此外,作者希望不使用与上述相同的全局特征,而是充分利用早期的特征,这更具辨别性,fc层主要将BLNeck和FNeck中的triplet-friendly嵌入空间转化为softmax-friendly嵌入空间。
在搜索的训练阶段,不使用FNeck,所以搜索损失如公式(8)所示:
L
search
=
L
t
r
i
1
+
L
i
d
1
(8)
L_{\text {search }}=L_{t r i 1}+L_{i d 1}\tag{8}
Lsearch =Ltri1+Lid1(8)
在计算CNet或CDNet时,目标损失函数如公式(9)所示:
L
train
=
L
t
r
i
1
+
L
i
d
1
+
L
t
r
i
2
+
L
i
d
2
(9)
L_{\text {train }}=L_{t r i 1}+L_{i d 1}+L_{t r i 2}+L_{i d 2}\tag{9}
Ltrain =Ltri1+Lid1+Ltri2+Lid2(9)
3.4 实验
作者根据算法1,在Market-1501上搜索网络结构。所有的图片Resize为256×128,使用随机擦除来增强,其他训练机制同OSNet[1],FNeck的条纹数量为2,下图为Market-1501上不同搜索架构的性能,时间是搜索期间处理一张图片的平均时间。
下图为CDNet和其他ReID方法的对比:
4 总结
之前将NAS和ReID结合的工作很少很少,这些新方法也值得学习,搜索到的网络这么小,是可以用于移动端的,但是像本文作者一样设计搜索空间和搜索策略则需要一定的数学功底和试错成本。
参考文献
- Zhou K, Yang Y, Cavallaro A, et al. Omni-scale feature learning for person re-identification[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2019: 3702-3712.
- Liu H, Simonyan K, Yang Y. Darts: Differentiable architecture search[J]. arXiv preprint arXiv:1806.09055, 2018.