Advertisement

Deep Metric Learning with Hierarchical Triplet Loss 阅读笔记

阅读量:
创新点和动机

文章提出了 hierarchical triplet loss (HTL) 方法,该方法主要通过定义一个编码上下文信息的树来收集信息样本,改进了在 mini-batch 中随机取样导致的陷入局部最优和收敛速度慢等问题。

解决方法

给定使用传统 triplet loss 预训练的神经网络 \phi_{t}(\cdot, \boldsymbol{\theta})\left(\in \mathbb{R}^{d}\right),样本\boldsymbol{x}_{i}的特征为 \boldsymbol{r}_{i}=\phi_{t}\left(\boldsymbol{x}_{i}, \boldsymbol{\theta}\right),第p个类和第q个类的距离为 d(p, q)=\frac{1}{n_{p} n_{q}} \sum_{i \in p, j \in q}\left\|r_{i}-r_{j}\right\|^{2}


如何构建层次树? 计算不同类之间的距离,将原始图像类作为树的叶子节点,叶子节点代表在第0层。设树为L层,第0层合并节点的阈值为 d_{0}=\frac{1}{\mathcal{C}} \sum\limits_{_{c=1}}^{\mathcal{C}}\left(\frac{1}{n_{c}^{2}-n_{c}} \sum\limits_{_{i \in c, j \in c}}\left\|\boldsymbol{r}_{i}-\boldsymbol{r}_{j}\right\|^{2}\right);第l层的树合并的阈值为d_{l}=\frac{l\left(4-d_{0}\right)}{L}+d_{0}


如何选取Anchor?在层次树的第0层选取l^{\prime}个节点,对每个节点分别选取(m-1)个在第0层最近的类,在每个类随机选取t个图片。因此,mini-batch的数量为n=l^{\prime} m t
Hierarchical triplet loss 的表达式为:
\mathcal{L}_{\mathcal{M}}=\frac{1}{2 Z_{\mathcal{M}}} \sum \limits_{_{\mathcal{T}^{z} \in \mathcal{T} ^{\mathcal{M}}}}\left[\left\|x_{a}^{z}-\boldsymbol{x}_{p}^{z}\right\|-\left\|\boldsymbol{x}_{a}^{z}-\boldsymbol{x}_{n}^{z}\right\|+\alpha_{z}\right]_{+}

\mathcal{T} ^{\mathcal{M}}表示在mini-batch \mathcal{M}中的所有triplets。 Z_{\mathcal{M}}=A_{l^{\prime} m}^{2} A_{t}^{2} C_{t}^{1} 表示triplets的数量,A_{l^{\prime} m}^{2}表示从l^{\prime} m个类中选择两个类,一个为正类一个为负类。A_{t}^{2}表示从正类中选择一个 anchor sample 和 一个 positive sample,C_{t}^{1}表示从负类中选择一个negative sample。
\alpha_{z}表示一个动态margin,\alpha_{z}=\beta+d_{\mathcal{H}\left(y_{a}, y_{n}\right)}-s_{y_{a}}d_{\mathcal{H}\left(y_{a}, y_{n}\right)}表示在层次树H上合并类y_{a}和类y_{n}的阈值,s_{y_{a}}=\frac{1}{n_{y_{a}}^{2}-n_{y_{a}}} \sum\limits_{_{i, j \in y_{a} } } \left\|\boldsymbol{r}_{i}-\boldsymbol{r}_{j}\right\|^{2}表示类y_{a}中samples 的平均距离。


完整的算法为:
在这里插入图片描述

全部评论 (0)

还没有任何评论哟~