siriusdemon / Build-Your-Own-Face-Model

Build your own ArcFace, CenterFace/Centernet
334 stars 69 forks source link

关于arcface损失函数的问题 #15

Closed csjunjun closed 3 years ago

csjunjun commented 3 years ago

作者你好, 可以问下为什么arcface.py中init方法中self.weight 是随机初始化呢? 论文中提到的角度应该是最后一层全连接层的权重 也就是fmobilenet 中 self.linear层得到的权重 和 embedding_feature的角度

siriusdemon commented 3 years ago

1、您也可以用其他的初始化方法呀。 2、嗯,您说得对的。

csjunjun commented 3 years ago

哈哈 可能我的表述有些问题。我主要的疑问是论文中提到的角度是fmobilenet 中 self.linear层得到的权重 和 embedding_feature的角度。但是 arcface中实际计算的是init方法中self.weight 和 embedding_feature的角度。 这是为什么呢?按理来说这两个权重值是不一样的。 而且最后模型还没有保存这个权重值。

siriusdemon commented 3 years ago

这里面有两个权重。一个是 embedding,也就是人脸表示的权重,一个是 classification,也就是分类时的权重。前一个在 fmobilenet 中,后一个在 arcface loss 中。根据公式,我们要优先的是在 arcface loss 中的角度。最后没有保存这个权重值,是因为推理的时候并不需要这个分类层。

csjunjun commented 3 years ago

嗯嗯 最后使用model的时候不论是verfication 还是 classificaiton 确实都可以通过计算embedding feature 就可以算出来了。谢谢解答