pengyuLPY / Virtual-Fully-Connected-Layer

23 stars 2 forks source link

为什么没有和partial-fc做对比? #1

Open ZHAIXINGZHAIYUE opened 3 years ago

pengyuLPY commented 3 years ago

非常感性您对本工作的兴趣,以及问题。其实我们原文中有说到没有对比的原因,概括来讲主要有两点:

  1. 我们认为partial-fc以及model parallel等方法主要是把算力分配到了不同的GPU上,但本质上计算量没有减少(figure 1)。这个可以通过partial-fc的原理以及作者源代码可以看到,他所维护的那个FC层的参数依然是D*N。我们希望讨论的并不是说怎么进行更高效的GPU资源利用,而是在非常少的GPU下也能进行使用,这个是partial fc以及model parallel等方法没有做到的。这个是我们没有直接对比的主要原因
  2. 根据partial-fc的原文可以看出,它的性能几乎和model/data parallel一致,而model/data parallel是我们方法中的upperboundary,我们认为没有必要重复对比。当然,相较于原因1来讲,这是一个次要原因
ZHAIXINGZHAIYUE commented 3 years ago

您好,非常感谢您的回复。我有一些另外的疑问。 如果我训练的时候,随机选取不把训练集分成M部分。只是组Batch 的时候,要求每一类必须包含K个样本,去迭代训练。分类层的权重也用Batch中每类的平均特征更新。这和您论文中的方法是一样的吧?

pengyuLPY commented 3 years ago

我想是可以的。不过可能您需要注意意见事情。就是假设第N个人,第t个iteration的时候label 是N,然后把N列(anchor)的权重更新成了第N个人的特征质心。在第t+1个iteration的时候,把第N个人的label是M,然后把第M列(anchor)的权重也更新成了N人的质心。这样M和N就会冲突。这个是需要避免的。在我们的文章中,我们是通过分组+re-grouping的具体策略来解决呢~

ZHAIXINGZHAIYUE commented 3 years ago

能否提供一份训练日志以做参考?

pengyuLPY commented 3 years ago

当然可以。不过我这边并没有注意训练log的管理,所以我能确定的是提供给你的是resnet101, virutan-fc的neurons是1000的版本。但具体他是用centroid作参数,还是MLP之后的加权平均值作参数的log了。 不过日志也就仅供参考吧。因为我自己觉得在人脸识别中,learning curve可以很好的告诉我们训练是否收敛。但收敛后性能好或者不好,无论是loss或者所谓的accuracy的参考意义都非常有限呢。

我在这里没有找到可以提供附件的方法,所以就直接给你一个下载链接吧。如果有什么问题,欢迎一起讨论 https://jinzhiyong.oss-cn-hangzhou.aliyuncs.com/pengyuli/tmp/resnet101_1604901611.700994.log?OSSAccessKeyId=LTAIYI4WjiAgqyrx&Expires=1662917816&Signature=XPrUjxgTrZ6tMqBYw4UidgHUDQU%3D

ZHAIXINGZHAIYUE commented 3 years ago

您好,该方法不使用预训练模型是否可以?我按照论文中的描述进行了实现,不使用预训练模型,发现模型收敛到一定程度,就无法继续收敛了,并且在测试集上的表现很差。

pengyuLPY commented 3 years ago

我们的正文中有写过呢。如果不用multi-task的方法,直接scratch开始训练性能下降的还是比较多的,这个也称为了我们的future work撒。不过如果是用multi-task的方法是可以从scratch开始训练,且收敛的。我们用了标准的FC训练CASIA-WebFace,用了virtual-FC训练了MS,都是收敛的来着。 我刨出来一份log,供您参考哈。下载链接如下: https://jinzhiyong.oss-cn-hangzhou.aliyuncs.com/pengyuli/tmp/resnet101_1600324782.704288.log?OSSAccessKeyId=LTAIYI4WjiAgqyrx&Expires=1627646591&Signature=oOZQ%2BBAoUPV6xjJAbNx8SneMmyg%3D