【MindSpore】【人脸识别ArcFace】无法正常作为loss函数使用

问题描述:

人脸识别ArcFace无法正常作为loss函数使用。

Model0Zoo的研究网络中有个人脸识别的ArcFace方法。在使用的时候,可能是我操作问题无法正常使用。

【操作步骤&问题现象】

1、定义resnet50的网络,19分类。

net = resnet50(19)

2、自己定义一个loss类。步骤是先将网络输出与标签输入到ArcFace中,然后再将ArcFace的结果输入到SoftMaxCE中,将SoftMaxCE的结果作为loss值返回。

class ArcFaceLoss(LossBase):

    def __init__(self, s=30.0, m=0.5):

        super(ArcFaceLoss, self).__init__()

        self.margin_softmax = ArcFace(world_size=0)

        self.loss = SoftMaxCE(world_size=0)

    def construct(self, logits, labels):

        logits = self.margin_softmax(logits, labels)

        return self.loss(logits, labels)

# loss函数实例化

loss = ArcFaceLoss(0)

3、优化器选择

optimizer = nn.Adam(params=net.trainable_params(), learning_rate=0.001)

4、实例化模型

model = Model(net, loss, optimizer=optimizer, metrics={"Accuracy":nn.Accuracy()})

5、模型训练

    model.train(config["epochs"],

                train_ds,

                callbacks=[eval_cb, TimeMonitor()],

                dataset_sink_mode=config["dataset_sink_mode"])

6、训练的过程中就出现不正常的返回

----------

Epoch 1/200

----------

train Loss: [-266.57397]    

val Acc: 0.05357142857142857

epoch time: 28326.837 ms, per step time: 1770.427 ms

之后训练继续epoch,但train Loss和val Acc一直不变。

我不知道自己操作哪里有问题,希望有大佬能够帮助解答下疑问。

解答:

定义的网络在求margin_softmax 和 loss 之前没有实现108-110的逻辑,可以的参考mindspore/models仓的代码去实现。

https://gitee.com/mindspore/models/tree/master/research/cv/arcface

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值