Facenet即triplet network模型训练,loss不收敛的问题?
14 个回答
兄弟,我调整了网络结构,后来发现自己并没有做L2 normalize,但是现在做training依旧是有问题,loss一直在0.5左右,margin取1。原先以为是样本没有做hard-positive的筛选,现在做了,但是依旧是没有收敛,不知道是什么原因了,我的data有6000张的人脸,471个identity。按理说应该这么小的数据集,应该很容易就收敛才对……
========华丽的分割线==========
通过在minibatch中加入a-p的组对,实现online的sample triplet select。
有兴趣的朋友请参见
GitHub - pinguo-luhaofang/tripletloss: tripletloss in caffe看了各位老大的评论收益很多。从我个人的经验来说,提出几点总结:
1.样本要多,其中人数要在12000人以上,最好有2000-3000个东方人,每个人的样本数量要均衡,不均衡就用各种随机的图像处理算法去生成,别怕麻烦
2.batchnorm一定要加,而且不要相信论文里说的可以去掉dropout或减小weight_decay,batchnorm的抗过拟合能力实际上是不足的,所以dropout建议设在60%以上
3.处理样本用的人脸检测算法非常重要,关键点检测算法次之,因为前者是后者存在的基础,总之,尽可能对齐更多的脸。
4.度量学习是必要的,但是千万不要重头训练,要在现有模型上加上embedding层进行微调训练,这一层的学习率要是前面层次的10-30倍不等,但总学习率要小,当然每个模型情况不同。
5.triplet loss有先天的弊端,但是大家可以去尝试其它几种度量学习啊,你们懂得......。
7.如果你想在lfw上一决高下,多个网络共同决策是必要的,可以在脸上切子区域,也可以同一数据集不同网络,也可以不同数据集不同网络,要试验再试验。
6.lfw99.5%不是梦想,大家努力.

