system: [SYSTEM]

user: 3. 方法 在本节中，详细介绍了改进的无监督行人重识别学习框架，该框架如图1所示，它是基于ResNet-50的卷积神经网络。 首先，是一个多维注意力模块，将ResNet-50分解为两个部分，即P1 (from conv1 to layer2)与P2 (from layer3 to GAP)。P1用于将给定的图像从原始像素空间编码为中层特征空间，P2用于将注意信息编码为高层特征空间，可以对数据进行分类。在P1与P2之间放置不同维度的注意力模块，生成多样化的注意力特征，强化所学知识的丰富性。在Sec.3.1中详细介绍。 其次，使用一个改进的STN形成三个分支，在每个分支后加入一个部件关注模块，并使用带有标签的数据集来预训练部件关注模块，使得每个分支可以关注人体不同的部件，包括头部特征，上半身特征和下半身特征。在本节中的Sec.3.2详细介绍。 最后是损失函数模块，首先使用了一个存储器来存储部件的更新特征，然后是一系列的损失函数来引导部件关注网络学习未标记数据集上的部件特征。在本节的Sec.3.3中详细介绍。 图1. 网络结构图 3.1. 多维注意力模块 注意力机制在行人重识别中变得更有吸引力，因为它能够将可用资源分配给输入信号中信息最丰富的部分，同时我们可以得到注意力方法的一般情况。具体的说，对于给定的三维张量X，我们可以得到一个卷积激活输出。其中 X ∈ R C × H × W ，C、H、W分别表示通道数，高度和宽度。我们的目标是将卷积激活输出进行重新加权，将此过程表述为： y = F ( X ) ⊙ X (1) 其中 y ∈ R C × H × W 是注意力模块的激活输出， ⊙ 表示两个矩阵对应元素相乘， F ( X ) 是一个权重项，每个元素的值在区间 [ 0 ， 1 ] 之间。 然而，目前这些常用的注意力方法要么是粗糙的，要么是一维的，如图2中 D = 1 所示，仅限于挖掘简单而粗糙的信息。为此我们提出了高维注意力模块，如图2所示。以 D = 3 为例，它有三个分支，对于第r个分支，我们使用r组通道数相同的1 × 1的卷积核 { U s r } s = 1 ， ⋯ ， r 生成通道为 D r 的一组特征图 { Z s r } s = 1 ， ⋯ ， r 。操作如下： Z s r = W s r ∗ X (2) 其中 W s r ∈ ℝ 1 × 1 × C × D r 为卷积核的权重，X为输入的一个三维张量。 将这组特征图结合在一起可得第r个分支的特征图为： Z r = Z r 1 ⊙ ⋯ ⊙ Z r r (3) 然后再使用一组1 × 1的卷积核 α r 来生成通道数为C的特征图，可以得到： F ( X ) = sigmoid ( ∑ r = 1 3 α r T δ ( z r ) ) (4) 其中 δ 代表ReLU激活函数， F ( X ) 作为一个权重项，使用sigmoid激活函数将其中的每个元素值映射到 [ 0 ， 1 ] 的区间，将 F ( X ) 代入公式(1)就可以得到高维注意力激活特征。 最后，将不同维度的注意力模块组合在一起，共同学习更具鲁棒性的特征。 图2. 多维注意力模块 3.2. 部件关注模块 我们首先使用一个改进的STN形成三个分支，在每个分支后加入一个部件关注模块，使得每个分支可以关注人体不同的部件。该模块由两部分组成，如图3所示。对于第一个分支，它关注部件的空间信息，对于第二个分支，它关注着部件的通道信息。 图3. 部件关注网络 对于第一个分支，假设输入层的特征图为U，令 U = [ u 1 ， 1 ， u 1 ， 2 ， ⋯ ， u i ， j ， ⋯ ， u H ， W ] ， u i ， j ∈ ℝ 1 × 1 × C 对应着 ( i ， j ) 的空间位置，其中 i ∈ { 1 ， 2 ， ⋯ ， H } ， j ∈ { 1 ， 2 ， ⋯ ， W } 。通过通道数为1的1×1卷积实现空间压缩操作，如下： q = W s q ∗ U ，其中 W s q ∈ ℝ 1 × 1 × C × 1 为权重，生成一个映射张量 q ∈ ℝ H × W 。映射的每一个 q i ， j 表示空间位置 ( i ， j ) 的所有通道C的线性组合，再经过sigmod对其进行归一化操作到 [ 0 ， 1 ] 。操作如下： U ^ 1 = [ σ ( q 1 ， 1 ) u 1 ， 1 ， ⋯ ， σ ( q i ， j ) u i ， j ， ⋯ ， σ ( q H ， W ) u H ， W ] (5) 每一个 σ ( q i ， j ) 的值代表着特征图中空间位置坐标 ( i ， j ) 的重要性。 对于第二个分支，将输入层特征图 U = [ u 1 ， u 2 ， ⋯ ， u C ] 看作是信道 u i ∈ ℝ H × W 的组合，经过全局池化层之后得到向量 z ∈ ℝ 1 × 1 × C ，每个位置k的值为： z k = 1 H × W ∑ i H ∑ j W u k ( i ， j ) (6) 然后经过两次全连接层，过程如下： z ^ = W 1 ( δ ( W 2 z ) ) (7) 其中 W 1 ∈ ℝ C × C 2 ， W 2 ∈ ℝ C 2 × C ， W 1 ， W 2 分别为全连接层的权重， δ ( ⋅ ) 代表着RelU激活操作。再经过sigmod对 z ^ 进行归一化操作到 [ 0 ， 1 ] 。操作如下： U ^ 2 = [ σ ( z ^ 1 ) u 1 ， σ ( z ^ 2 ) u 2 ， ⋯ ， σ ( z ^ i ) u i ， ⋯ ， σ ( z ^ C ) u C ] (8) σ ( z ^ i ) 代表的信息就是第i个通道 u i 的重要性程度。 最后，将上述的两个模块结合从而得到此时的部件特征图 U ^ = U ^ 1 + U ^ 2 。 为了更好地学习到行人的部件特征，我们使用带有标签的数据集MSMT17 [ 43 ] 对部件关注网络进行预训练。对于每一张标签为t的训练图像I，其中t为目标类的索引。对于每个分支i，可以得到部件特征图，即， M i ∈ ℝ h × w × c ，为了使部件关注模块能够更好的关注我们感兴趣的部件，我们在每一个分支后添加1 × 1卷积和一个Sigmoid函数将值映射到(0，1)来获得每个部件的掩码 a i ∈ ℝ h × w 。 a i ( x ， y ) = 1 1 + exp ( − ( W s q ∗ M i ) ) (9) 其中W为1 × 1卷积的权重。由于目标是引导不同的分支来关注不同的身体区域，因此不同分支 a i 的非零区域应该是不重叠的。因此，我们提出了一个损失函数来对重叠区域进行惩罚，定义如下： L o = 1 N ∑ x ， y ( a 1 ⊙ a 2 ⊙ ⋯ ⊙ a N ) (10) 其中 ⊙ 表示逐元素乘法，N表示分支数。 对部件特征 M i 进行全局平均池化后，可以得到部件的类分数 S i ，通过Softmax函数进一步归一化为概率分布 y i ∈ ℝ C ，因此第i个分支的分类损失被计算为预测概率 y i 与真实值之间的交叉熵。 L i d i = − log ( y t i ) (11) 其中t是目标类的索引，所有分支的损失相加构成了识别损失， L i d = ∑ i = 1 N L i d i 。 最终的损失函数是 L i d 和 L o 的加权和。 L t o t a l = L i d + α L o (12) 其中 α 是权重，并且在后面的实验中我们令 α = 1 。 3.3. 损失函数 3.3.1. 特征存储 在此我们使用存储器来存储部件的最新特征，存储器是一个键值对结构(key-value， K-V)。K用来存储每个图像的索引。V用来存储每一张图片的部件特征，包括三部分，分别用来存储行人的头部特 征，上半身特征和下半身特征。如图所示，每个部件特征的存储特征可以表示为： V m = { v j m } j = 1 N 其中 m ∈ { 1 ， 2 ， 3 } 分别代表着三个部件特征，N表示训练图片的个数。我们通过以下公式对存储体进行更新： v j ， t m = { ( 1 − l ) × v j ， t − 1 m + l × x j ， t m ，         t > 0 x j ， t m ，                                                       t = 0 (13) 其中t是训练轮回数(epoch)， t = 0 表示存储器的初始状态。l是 v j ， t m 的学习率， x j ， t m 是第t个轮回时第j张图片的第m个部件的特征。 3.3.2. 基于部件的损失 我们提出了一种基于部件的损失函数(PBL)，通过将相似部件的特征拉在一起，将不同的部件推开，从而引导部件提取网络学习未标记数据集上的部件特征。我们可以使用式13对存储器进行不断的更新，在此过程中，我们计算每个x与每个v的差异。详细的说，对于每一个 x i m ，通过计算 x i m 与存储体 V m = { v j m } j = 1 N 之间的 l 2 距离从而获得 x i m 的k个最近的集合 K i m ，为了拉近特征相似的部件，推远特征不 相似的部件，我们提出了一个基于部件的损失函数，通过下式计算PBL： L p m = − log ∑ v j m ∈ K i m     e − s 2 ‖ x i m − v j m ‖ 2 2 ∑ j = 1 ， j ≠ i N     e − s 2 ‖ x i m − v j m ‖ 2 2 (14) 其中s是比例数，最小化 L p m 会促使模型将与 x i m 相似的部件 K i m 拉近，同时在特征空间中将与 x i m 不相似的部件 { v j m | v j m ∉ K i m } 推离。 为了对所有的部件进行约束，我们提出了基于部件约束的损失(BC)，它包含三部分，头部与上半身的约束，上半身与下半身的约束及整体的约束。这些约束就是将人体的部件进行融合，从而得到部 件的约束特征。此时的样本约束特征可以表示为 { x i n } ，存储体可以表示为 { v j n } j = 1 N 。可以得到基于部件 约束的损失函数为： L p c n = − log ∑ v j ∈ K i     e − s 2 ‖ x i n − v j n ‖ 2 2 ∑ j = 1 ， j ≠ i N     e − s 2 ‖ x i n − v j n ‖ 2 2 (15) 其中s是比例数， n = 1 表示头部与上半身的约束， n = 2 表示上半身与下半身的约束， n = 3 表示整体的约束。 3.3.3. 基于图像级的损失 为了进一步挖掘图像间的潜在信息并最小化类内差异同时最大化类间差异，我们提出了一个三元组损失对全局特征进一步的约束。在我们的实验中，我们定义了一系列随机变换来生成代理正样本，包括图像的裁剪、缩放、旋转、亮度、对比度和饱和度。然后为每个真实样本生成一个代理正样本。 同时我们通过循环排序挖掘到负样本对，如图4所示：给定一小批量样本特征 { x i } i = 1 B ，每个样本 x i 的排序结果可以基于成对相似度度量来得到。我们使用 l 2 距离来度量成对的相似性，从而得到图像 x i 的排序列表 N i 。然后我们按顺序遍历排序列表 N i 。对于每个候选样本 x j ∈ N i ，我们使用相同的方法来计算排序列表。最后，如果 x i 不是 x j 的top-r最近邻，那么我们认为 x j 很可能是 x i 的负样本。此外，由于难分的负样本对可以更有效地学习判别特征，因此我们只考虑第一个符合上述条件的候选样本 x j 。我们把这个负的候选项表示成负样本 n i 。在这里我们给定三元组损失的定义： L v = max { ‖ x i − p i ‖ 2 − ‖ x i − n i ‖ 2 + m ， 0 } (16) 其中m代表着三元组损失的间隔(margin)， p i 代表正样本， n i 代表负样本。 图4. 循环排序模块 3.3.4. 最终的损失 因此，我们模型中的每一幅图像的总体损失函数可以表示为： L = L v + λ 1 M ∑ i = 1 M     L p m + μ 1 N ∑ i = 1 N     L p c n (17) 其中 λ 是部件损失的权重系数， μ 是部件约束损失的权重系数。