度量学习层特斯拉斯
tf-simple-metric-learning的Python项目详细描述
简单的度量学习via特斯拉斯在
该软件包仅提供了以下几个度量学习损失的指标
- 弧面
- 阿达科斯
- 圆圈
我深受PyTorch Metric Learning的启发。在
安装
$ pip install tf-simple-metric-learning
使用
提供的层通过tf.keras.layers.Layer
API实现,启用
示例笔记本在examples目录中。实现CircleLossCL(Class level label version)EfficientNet的顶层,并对其进行Cars196 dataset的培训
importtensorflowastffromtf_simple_metric_learning.layersimportArcFace,AdaCos,CircleLossCLinputs=tf.keras.layers.Input([*IMAGE_SIZE,3],dtype=tf.uint8)x=tf.cast(inputs,dtype=tf.float32)x=tf.keras.applications.efficientnet.preprocess_input(x)net=tf.keras.applications.EfficientNetB0(include_top=False,weights='imagenet',pooling='avg')embeds=net(x)labels=tf.keras.layers.Input([],dtype=tf.int32)labels_onehot=tf.one_hot(labels,depth=num_classes)# Create metric learning layer# metric_layer = ArcFace(num_classes=num_classes, margin=0.5, scale=64)# metric_layer = AdaCos(num_classes=num_classes)metric_layer=CircleLossCL(num_classes=num_classes,margin=0.25,scale=256)logits=metric_layer([embeds,labels_onehot])model=tf.keras.Model(inputs=[inputs,labels],outputs=logits)model.summary()
请注意,您应该在培训中将标签作为输入输入输入输入到模型中,因为这些层需要标签来转发。在
在评估或预测中,上述模型需要图像和标签,但在这些度量学习层中忽略了标签。我们只需要对目标图像使用虚拟标签(忽略),因为我们无法在评估或预测中访问标签。在
参考文献
- https://github.com/KevinMusgrave/pytorch-metric-learning
- https://github.com/scikit-learn-contrib/metric-learn
- 项目
标签: