leondgarse / Keras_insightface

Insightface Keras implementation
MIT License
235 stars 56 forks source link

dataset #2

Closed functionlinx closed 3 years ago

functionlinx commented 4 years ago

我看论文里面用casia训练结果很好,可是我自己用casia试了下,不管是resnet还是mobilenet都很差劲。

functionlinx commented 4 years ago

用softmax训练就正常,看来必须得先用softmax预训练一下才行。

leondgarse commented 4 years ago

casia 数据集我也没试过,在 MS1M 数据集上直接用 arcface loss 训练应该是可以的,这里 loss-function-test-on-mobilenet 的记录就是直接用 arcface loss 训练的

functionlinx commented 4 years ago

casia 数据集我也没试过,在 MS1M 数据集上直接用 arcface loss 训练应该是可以的,这里 loss-function-test-on-mobilenet 的记录就是直接用 arcface loss 训练的

  • 最近刚刚发现我的 data.pycache 位置有问题,可能会让 shuffle 失效,可以注释掉 75,76 行试试
  • 可以使用 random_status=0,指定不添加数据的随机变换试试
  • 另外,在 softmax 之后再用 arcface 训练有收敛吗?如果曲线跟我的类似的话,应该是需要先 softmax
  • 另外,在可以正常收敛之后,可以试试 cosine learning rate decay,我还没有测试过
tt = train.Train(data_path, save_path='keras_mobile_facenet_emore.h5', eval_paths=eval_paths, basic_model=basic_model, lr_base=0.001, decay_type='cos', lr_decay=100, lr_min=1e-6, batch_size=768, random_status=0)

arcface loss 不限制y_pred的输入,训练的时候可能会出现nan,梯度的分母等于0,用softmax预训练倒是没出现过,不过我自己还是加上去了。 y_pred_vals=tf.keras.backend.clip(y_pred_vals,-1.0 + tf.keras.backend.epsilon(),1.0 - tf.keras.backend.epsilon())

原文里面还有提到weight_decay,应该是训练一段时间了再加上去会好点吧。

leondgarse commented 4 years ago
leondgarse commented 4 years ago
functionlinx commented 4 years ago

我用casia跑resnet50,用softmax收敛正常,在测试集也正常,转到arcface之后,训练正常收敛,但是在测试集效果不正常,agedb只有0.5,lfw0.6。不知道为什么会这样.....

leondgarse commented 4 years ago
functionlinx commented 4 years ago

batch size 256,lr_base 0.001
train: loss: 9.3808 - accuracy: 0.9566 test: lfw evaluation max accuracy: 0.972833 没有使用bottleneckOnly 训练,可能是因为这个。我先用softmax训练20epoch,lfw测试大概0.96,再直接用arcface loss跑5个epoch之后,lfw测试0.98,继续跑25个epoch,lfw下降到了0.97。 应该不是loss 的问题。

leondgarse commented 4 years ago

我最近刚刚下载了 casia 数据集,跑了下测试,训练了两个 Resnet50 模型,一个 batach_size=512,一个 batch_size=256,区别不大 Figure_2

functionlinx commented 4 years ago

我最近刚刚下载了 casia 数据集,跑了下测试,训练了两个 Resnet50 模型,一个 batach_size=512,一个 batch_size=256,区别不大 Figure_2

  • 这个数据集太小了,不太好有比较好的泛化效果
  • Arcface loss 训练正常,loss 下降比较快,但从验证集效果看,跟验证集的数据差别比较大

这个数据集和别的相比确实小,我主要是想实现一下能不能接近论文的结果。 我和你曲线差不多,换为acrface loss 之后agedb验证集会涨2个点然后就开始下降,个人觉得是学习率的问题,我现在在尝试调整学习率。 泛化的问题,我觉得加上weight decay会有一定程度的改善。

leondgarse commented 4 years ago

我训练时候调整了学习率,使用的是 lr_decay=0.001,下降的太慢了,在 epoch=80 的时候是 0.0009333,对比训练 ms1m 的时候 lr_decay=0.05 在 epoch=80 的时候是 3.01974e-05。。。降低下学习率应该会收敛快一点

functionlinx commented 4 years ago

我发现一个问题,dataset zoo 里面的数据集图像是经过mtcnn aligned过的嘛,我看论文里面都有这一步处理。

leondgarse commented 4 years ago

我最近测试了一些其他的方式,使用 keras 可以复现原版 mxnet 的结果,刚刚发现原版 mxnet 中的 resnet 是不一样的。。 稍等我上传一下 关于你说的这个问题我也再看看

leondgarse commented 4 years ago

我已经上传了,可以参照一下 训练结果 dataset zoo 里面的数据集图像应该都是已经对齐的

leondgarse commented 3 years ago

I would like to close this, as it's solved.