孪生网络(Siamese Networks) 属于二分类,基于相似性的先验知识。
参考论文:
1、Siamese Neural Networks for One-shot Image Recognition
2、FaceNet: A Unified Embedding for Face Recognition and Clustering
简单来说,Siamese network就是“连体的神经网络”,神经网络的“连体”是通过共享权值来实现的,如下图所示。
训练连体网络的两种方法:
1、每次取一对样本,比较他们的相似度。
Siamese Neural Networks for One-shot Image Recognition
使用一个大的数据集,每一类里面有很多样本。用训练集构造正样本和负样本。正样本告诉神经网络什么是同一类,负样本告诉神经网络不同样本的区别。
1.1 数据集的获取 (正负样本的构造)
从同一类图片随机抽取两张图片,并设置标签1,表示同一类。
从不同类中随机抽取两张图片,设置标签为0,表示不同的类别。
1.2、网络架构
1.3 训练:衡量不同图片的相似度(为什么叫连体网络:共享权值,公用一个CNN框架)
1.4损失:
target 和 sim 的损失,来更新参数。
1.4、测试位置的数据
逐一将support set里面的图片分别和query求相似度,取其最高的那个。
2、每次取三个样本( anchor ,+,-),比较他们的相似度。
FaceNet: A Unified Embedding for Face Recognition and Clustering
2.1数据集处理:
从数据集中随机抽取一张图片,作为锚点anchor,再从该类别中随机去一张正样本 ,从除了该类以外的图片中抽取一个负样本作为sample
2.2训练:共享网络
2.3损失函数:
模板d+越小,d-越大
2.4 测试:选择模型输出距离最小的。
总结: