Zhongdao / gcn_clustering

Code for CVPR'19 paper Linkage-based Face Clustering via GCN

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

模型测试效果不理想

lichanglin3445667 opened this issue · comments

您好,我按照论文中的步骤,用CASIA数据集抽样5000个类(总共22万个样本)做训练集,用512,1024,1845三个数据集做测试集,用train.py的默认参数训练的模型,测试时达不到best.ckpt模型的效果。和best.ckpt比,我的训练结果的precision只有不到0.8。请问您有没有什么建议?

作者的best.ckpt也没有到0.8吧,移除单聚类结点才有。我正常训练完,结果和作者的很贴近了,甚至还略好

@lichanglin3445667 F-score是多少呢

@Zhongdao Precision, Recall, F-score, NMI分别是:0.7518,0.8088,0.7793,0.9101

@Zhongdao 抱歉之前写错了,是recall比较低,best.ckpt能达到0.9080,但我训练的结果只有0.8左右

@Zhongdao 作者你好,我想将分类问题利用您这个聚类方法来解决,在训练阶段出现accuracy很高,但是precision和recall都很低,几乎为0,出现这样情况的原因可能是什么呢?在构造knn_graph时,k的选择有什么依据呢?

还有一个疑问,您构造的IPS子图中,positive节点数似乎非常少,在这样的情况下,训练时,recall和precision为何会很高,几乎为1呢?

谢谢!

@lichanglin3445667 准确的knn graph效果比较好,ANN graph会稍微差一点,是这个原因吗?

@xxx2974 K的选择要根据数据的情况,比如你可以测试一下在某个K的条件下,如果用ground truth连接,那么最终的效果如何,这可以作为一个上界参考。
第二个问题是那个recall和precision是pair-wise的R和P, 不是最终的评测指标,仅供参考,它们在数值上往往偏高。

@xxx2974 K的选择要根据数据的情况,比如你可以测试一下在某个K的条件下,如果用ground truth连接,那么最终的效果如何,这可以作为一个上界参考。
第二个问题是那个recall和precision是pair-wise的R和P, 不是最终的评测指标,仅供参考,它们在数值上往往偏高。

谢谢答疑!
那像我这样的就是accuracy很高,precision和recall几乎为0的现象是为什么呢?

@xxx2974 可能是你的knn graph中的负样本太多,虽然正样本预测错误,导致precision和recall都很低,但是负样本对的,accuracy仍然很高

@xxx2974 可能是你的knn graph中的负样本太多,虽然正样本预测错误,导致precision和recall都很低,但是负样本对的,accuracy仍然很高

谢谢,我一开始也觉得是这个原因。但后来我发现作者提供的数据构造的IPS子图,大多是也都是负样本,正样本也很少呢!

另外,knn_graph里面的正样本数目太少,应该还是和通过网络提取到的特征有关吧?我是用预训练的resnet50提取的数据特征,有点不知道问题出在哪里,为什么构造的knn_graph里面的负样本会那么多。

commented

在训练阶段出现accuracy很高,但是precision和recall都很低,几乎为0,出现这样情况的原因可能是什么呢?在构造knn_graph时,k的选择有什么依据呢?

@xxx2974 我在使用作者提供的训练集训练时也发现了这个问题,在100batch左右二分类就偏到一边去了,具体表现就是你说的这样,你可以测试下我们碰到的情形是不是一样的。

在训练阶段出现accuracy很高,但是precision和recall都很低,几乎为0,出现这样情况的原因可能是什么呢?在构造knn_graph时,k的选择有什么依据呢?

@xxx2974 我在使用作者提供的训练集训练时也发现了这个问题,在100batch左右二分类就偏到一边去了,具体表现就是你说的这样,你可以测试下我们碰到的情形是不是一样的。

我发现了,这个precision和recall的确和你提取特征的方式有关,如果提取的特征好,knn_graph构造的就比较好,训练的结果也比较好。只是不清楚作者是用什么样的方式提取的特征。

我对比这个方法的时候
我用LTC的训练和测试数据,验证的结果为(注意修改模型输入的dim)

mx_sz:900 step=0.6

Number of nodes: 584013
Precision Recall F-Sore NMI
/home/lijc08/miniconda3/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/cluster/supervised.py:844: FutureWarning: The behavior of NMI will change in version 0.22. To match the behavior of 'v_measure_score', NMI will use average_method='arithmetic' by default.
FutureWarning)
0.4561 0.8628 0.5967 0.9460

After removing singleton culsters, number of nodes: 548747
Precision Recall F-Sore NMI
0.9652 0.4561 0.6195 0.9608

mx_sz:300 step=0.6


Number of nodes: 584013
Precision Recall F-Sore NMI
/home/lijc08/miniconda3/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/cluster/supervised.py:844: FutureWarning: The behavior of NMI will change in version 0.22. To match the behavior of 'v_measure_score', NMI will use average_method='arithmetic' by default.
FutureWarning)
0.6805 0.8153 0.7418 0.9550

After removing singleton culsters, number of nodes: 542319
Precision Recall F-Sore NMI
0.9586 0.6805 0.7959 0.9736

graph_propagation在生成最终聚类结果的时候,max_sz参数影响很大,而且难以确定。 @Zhongdao

在训练阶段出现accuracy很高,但是precision和recall都很低,几乎为0,出现这样情况的原因可能是什么呢?在构造knn_graph时,k的选择有什么依据呢?

@xxx2974 我在使用作者提供的训练集训练时也发现了这个问题,在100batch左右二分类就偏到一边去了,具体表现就是你说的这样,你可以测试下我们碰到的情形是不是一样的。

我发现了,这个precision和recall的确和你提取特征的方式有关,如果提取的特征好,knn_graph构造的就比较好,训练的结果也比较好。只是不清楚作者是用什么样的方式提取的特征。

请问一下 他这个knn_graph 是根据特征算相似度 然后取top 构成的图嘛?我看作者给出的例子里面,knn_graph的值看起来像是index,但是我随便算了几个cos距离,好像不是我想的这么回事儿

commented

所以precision和recall都很低,几乎为0的时候该怎么解决啊

commented

@Zhongdao 作者你好,我想将分类问题利用您这个聚类方法来解决,在训练阶段出现accuracy很高,但是precision和recall都很低,几乎为0,出现这样情况的原因可能是什么呢?在构造knn_graph时,k的选择有什么依据呢?

还有一个疑问,您构造的IPS子图中,positive节点数似乎非常少,在这样的情况下,训练时,recall和precision为何会很高,几乎为1呢?

谢谢!

请问你的问题解决了吗,我在将这个方法应用到新数据集的时候也训练不出来

@lijinchao2007
@Zhongdao

graph_propagation在生成最终聚类结果的时候,max_sz参数影响很大,而且难以确定。

I also found the same issue, if max_sz=900, then it gives two clusters; if max_sz=850, the it gives 35 clusters. Any idea how to tune max_sz?
Thanks.

作者的best.ckpt也没有到0.8吧,移除单聚类结点才有。我正常训练完,结果和作者的很贴近了,甚至还略好

您好,我现在用我自己的数据在训练的时候发现我的acc极高,为1, 但是precision和recall都为0,请问我应该怎么调整,我是用了2万5个ID,每个ID有10张图,先用与训练好的模型进行特征提取,并且将feature和label都保存到两个npy文件,然后用knsw得到knn_graph, 然后用于训练。在这里我同样有另外一个疑问,就是因为我的训练数据是每个ID有10张图,所以我的knn_graph里面第一个值是label0的临近点,第二个值也是label0的临近点,第三个也是,直到第十一个才是label1的临近点,请问这样构造数据对吗,我看作者的好像是第几个值对应的就是label几,请问是否可以加个联系方式请教一下您,我的微信是13810332182,谢谢!