0%

DIMN

1. 前言

这篇文章和 ECN 那篇有相似的地方:Memory 记录所有的特征,并把这些记录的特征直接当做分类器使用,我觉得这样的使用应该有更合理的解释,不同点在于使用 Memory 的具体方式不同,我暂时觉得这里面还有东西可以挖。我记得我之前读过一篇 也是用 Memory 用于分类的论文,那篇直接把已知的和未知的特征都放在 memory 中,更简单巧妙。

该论文首次提到 meta-learning, few-shot learning,我简单查了查。人工智能的理论进展呈现:

Artificial Intelligence—>Machine Learning—>Deep Learning—>Deep Reinforcement Learning—>Deep Meta Learning

深度学习可以在特定的 task 上得到一个很好的模型,但是在其他 task 上效果就会很差,是否可以理解成过拟合呢?应该和过拟合不是一个角度,过拟合指得的是训练集和测试集不可能同时达到各自的最优解,但是 meta learning 更偏向于当出现一个新的少量的样本的时候,不需要巨量的训练,原始数据训练得到的模型作为先验知识,有助于学习新的样本,有点 FUNIt 的味道,又有点像之前看过的一篇 TIP2019 Progressive Learning for Person Re-Identification with One Example,暂时还说不上来这种感觉。郑哲东那个团队是直接 meta-learing 过来的思路吗?不得而知了。

举个例子:分类器可以很好地区分在各种环境下的猫狗之类的动物,这个时候给一张站着的老虎图片用于二次训练,使得二次训练后的分类器既能对于分猫狗的性能不下降,又对各种环境下的老虎图片也有相同的区分能力。如果直接从头开始训练,训练集为一张老虎+各种环境下的猫狗,显然对于老虎的区分能力很弱。

meta-leaning 现在的研究思路

  • 基于记忆Memory的方法
  • 基于预测梯度的方法
  • 利用Attention注意力机制的方法
  • 借鉴LSTM的方法
  • 面向RL的Meta Learning方法
  • 通过训练一个好的base model的方法,并且同时应用到监督学习和增强学习
  • 利用WaveNet的方法
  • 预测Loss的方法

参考链接: https://zhuanlan.zhihu.com/p/28639662

示例视频: https://zhuanlan.zhihu.com/p/46002992

其他资料: https://www.zhihu.com/topic/20140823/hot

三个趋势: 自动驾驶,强化学习,元学习

作者 Jifei Song,博三,敦煌玛丽女王大学的 SketchX 实验室,16年 BMVC,17年 ICCV,18年 CPVR,19年 CVPR,大佬发文章都白送的吗,刚不过刚不过。

2. Introduction

作者希望可以在 a set of source domains 上一次训练,直接直接应用到 unseen dataset 上,称之为 Domain-Invariant Mapping Network (DIMN),遵循 meta-learning pipeline amd sample a subset of source domain training tasks(identities) during each training episode。

现有的 cross domain person Re-ID 可以分为 unsupervised domain adaptation (UDA),domain generalization(DG)(few-shot meta learning)。

However, existing DG methods [20, 34, 23, 39] assume that the source and target domain have the same label space; whilst existing metalearning models [49, 49, 10, 35, 40] assume a fixed number of classes for target domains and are trained specifically for that number using source data.

补充: 之前看过的 UDA 论文旨在寻找 domain-invariant feature space,而 DG(domain generalization) 旨在更好地模型迅速地适应新的 domain。

DIMN 的目的是学习 a mapping between a person image and its identity classifier weight vector.

DIMN 不同于传统的 meta-learning :

  1. 在 target domain 中不需要更新,这一点和 ECN 有点区别,ECN 使用了 target domain 的信息
  2. 不同的 training tasks share a memory bank, memory bank 使用 running average strategy 的方式更新,这一点和 ECN 差不多
  3. 训练得到的模型可以应用于有任意数量行人的 target domain,这一点和 ECN 不一样,ECN 基本只保证了在哪训练用在哪

感觉这个目标定的要比 ECN 更高一些。

作者在实际实验的时候使用5个 datasets 作为 source domains,另外4个 datasets 作为 target domains,实验结果不是很全,比如没有做只有一个 dataset 的 source domain 的效果。所以不能完全排除因为扩大数据集而造成的性能提高。但是根据现有的使用过 memory 的论文,我觉得还是可信的。

3. Methodology

背景:已知有标签的 M 个 datasets(domains), $D_1, D_2,…, D_M$,每个 domain 有自己的 label space,希望在这些数据集上训练得到的模型直接应用到新的 domain/dataset 得到好的效果,而不需要更新模型。

The network:

  • the encoding subnets: $g_{\phi}$
  • mapping subnets: gallery image embedding—>classifier’s weight vector
  • memory bank: store all classifiers in training domains

Encoding Subnet(最基本的分类损失): MobilenetV2,这个也是 (MobilenetV2,另外一篇 distill 也是) 。假设在融合后的 $M$ 个数据集中一共有 $C$ 个行人,每个 mini-batch 中取 $C_b$ 个行人,对于每个行人 $l_i$,取两张图片,分别设置为 gallery $\tilde{x}_i$ 和 probe $x_i$,所以在每个 batch 中有 $2C_b$ 个行人图片,组成 $2C_b$ pairs(两张图片可以调过来)。

最基本的分类损失:

其中 $xi$ 表示输入图片,$l_i$ 表示标签,$g{\phi}$ 表示 encoding subnet,得到的是 D 维特征向量,$f_{\theta}$表示分类器,$\theta \in R^{D\times C}$

Mapping Subnet:相对于传统的分类权重 $\theta_{\cdot,j}$ 作为模型参数的一部分,作者直接生成分类权重 identity classifier weight vector:

其中 mapping subnet $h_w$ 可以理解成 hyper-network(不懂,难道为其他网络生成参数就是 hyper-network),这里可以使用简单的 multi-layer perception (MLP)。

对于给定的 gallery image $\tilde{x}j$ and probe image $x_i$,得到 $\hat{\theta}{\cdot,j}$,进而得到 logit vector $p$:

然后对 $p_j$ 进行softmax,这是表示对于 probe image $x_i$, 所有的 gallery images $\tilde{x}_j$ 根据相似度进行排序,亦或者可以理解成 gallery images 为基本分类向量,判断 probe image 属于哪类,真值为如果 probe image 和 gallery image 是同一类,设为1,否则设为0,根据之前写的 mini-batch 的取法,只有一个为1,剩下都为0,可以理解成基本的分类损失。

这里 logit vector $p$ 有两种写法,一种是 $p\in R^C$,表示 probe image 属于哪类,优点是具有 discriminative power,一种是 $p\in R^{C_b}$,表示 probe image 与 mini-batch 的哪张相似,优点是容易收敛训练。为了兼顾 scalability and discriminativity,引入 memory bank.

Memory Bank:Memory bank is a weight matrix$W\in R^{D\times C}$。每个 mini-batch 的 gallery branch 中,有 $Cb$ 个不同 id 的样本,$[ \tilde{x}_1, \tilde{x}_2,…, \tilde{x}{C b}]$,经过 encoding subnet $g {\phi}$ and the mapping subnet $hw$,得到 $C_b$ 个 predicted weight vector $\lbrace \hat{\theta}{\cdot, j}, j=[ 1,2,…, C_b] \rbrace$,即 $\hat{\theta}\in R^{D\times C_b}$.

然后根据 id 更新 $W$,这里的更新还蛮奇怪的,和 ECN 的更新不一样。

先得到 $\hat{W}$: 复制 $W$,$\hat{W} \gets W$,再复制 $\hat{\theta}$,$\hat{W} {\cdot, L(j)} \gets \hat{\theta}{\cdot, j}, \forall j\in [ 1,2,…,C_b]$($L(j)$ 表示第 $j$ 张图片的 id),

然后用类似 ECN 那样,用分类损失

与 ECN 不同地是,第一,ECN 没有真值,所以只能自己像自己,DIMN 有真值,第二,ECN 用的是未更新的 memory,DIMN 用的是半旧半新的 memory。

最后更新:

作者发现有两个 trick 可以帮助稳定训练:对 $W$ 进行二范约束;$W$ 更新前后变化比较小。

Question: 对 $L_{reg}$ 的出现表示存疑,感觉出现的很勉强

Training Objective: 三元组损失,对于 $xi$,$\tilde{x}_i$ 为正样本,其他的 $\hat{W} {\cdot, j’}| {j’\not = i}$ 为负样本,得到 $p=h_w(g{\phi}(\tilde{xi}))\cdot g{\phi}(xi)$,$n=\hat{W} {\cdot, j’}\cdot g {\phi}(x_i)|{j’\not = i}$,归一化为 $S(xi, \tilde{x}_i)$, $S(x_i, \tilde{x}_j’| {j’\not = i})$,从而有

Overall

备注 ECN:

  1. memory 的使用:ECN 先计算损失后更新, DIMN 半更新计算损失后全更新
  2. 损失函数: ECN 使用 memory 进行了两次分类损失和一次假标签分类损失,DIMN 使用 memory 进行了一次分类损失和一次三元组损失。
  3. memory 的输入: ECN 中 memory 和基本分类损失用的是同一张图片,DIMN 中 memory 和基本分类损失用的不是同一张图片
  4. memory 的特征:ECN 中直接共享网络提取到的,DIMN 又经过了一次 mapping subnet.

Model Testing: 上述的损失函数可以学习到 encoding subnet $g{\phi}(\cdot)$ and mapping subnet $h_w(\cdot)$,在测试阶段,给定 query image $x_i$ and gallery image $\tilde{x}_j$,两张图片的相似度定义为 $h_w(g{\phi}(\tilde{x}j))\cdot g {\phi}(x_i)$.

备注:

  1. DIMN 是一个 DG method 而不是一个 one-shot learning,因为只在 source domain 上训练
  2. 传统的 deep ReID 的相似度计算是 $g{\phi}(\tilde{x}_j)\cdot g {\phi}(x_i)$

4. Experiments

4.1 Datasets and Settings

A Large-Scale ReID benchmark:

  • source datasets: CUHK02, CUHK03, Market-1501, DukeMTMC-ReID, CUHK-SYSU PersonSearch
  • test datasets: VIPeR, PRID, GRID, i-LIDS

Implementation Details:

  • encoding subnet: MobileNetV2, output: 1792
  • mapping subnet: a single fully-connected layer
  • running average parameter $\alpha=0.5$
  • triplet loss margin $\triangle=0.8$
  • weight of loss $\lambda_1=\lambda_3=1, \lambda_2=0.01$

4.3 Ablation Study

Question: 直接使用 memory 进行分类损失和使用 fc 进行分类损失有区别吗?前向计算过程是一样的,memory 的权重等同于 fc 的权重。反向求导过程不一样,memory 使用 running average 并进行二范归一化进行更新,fc 的权重使用链式求导进行更新,memory 和 fc 的 feature 反向求导也是一样的公式。也就是说两种唯一的不同在于权重的更新方式,memory 更新时其权重是固定的,fc 更新时其权重是变化的,memory 更新时会进行二范归一化,fc 更新时没有这个操作。这些区别足以产生这么大的影响吗?可能更需要其他理论上的支持

从 ablation study 上看,缺失每一个对最终结果的影响都不大。