triplet loss 的高效硬数据采样

Efficient hard data sampling for triplet loss

我正在尝试在 Caffe 中为三元组损失实现一个深度网络。 当我 select 三个样本随机用于 anchor、positive、negative 图像时,它几乎产生零损失。所以我尝试了以下策略:

If I have 15,000 training images,
1. extract features of 15,000 images with the current weights.
2. calculate the triplet losses with all possible triplet combinations.
3. use the hard samples with n largest losses, and update the network n times.
4. iterate the above steps every k iterations to get new hard samples.

步骤1很快,但是我觉得步骤2很费时间,效率很低。所以,我想知道是否还有其他有效的硬数据采样策略。

谢谢。

实际上,如果你的数据集很大,从整个数据集中抽取硬三元组是不可行的。事实上,您可以只为训练数据集的一小部分选择硬三元组,这样会更节省时间。在使用为 K 次迭代生成的硬三元组训练网络之后。您将数据集中的下一批图像输入网络并生成新的硬三元组。

这样,计算成本是可以接受的,并且随着训练的进行,网络也在逐渐完善。

有关更多参考,请参阅 article here。(第 5.1 节)