Zhongdao / gcn_clustering

Code for CVPR'19 paper Linkage-based Face Clustering via GCN
MIT License
360 stars 86 forks source link

模型测试效果不理想 #11

Open lichanglin3445667 opened 5 years ago

lichanglin3445667 commented 5 years ago

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

CaiQiuYu commented 5 years ago

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

Zhongdao commented 5 years ago

@lichanglin3445667 F-score是多少呢

lichanglin3445667 commented 5 years ago

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

lichanglin3445667 commented 5 years ago

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

xxx2974 commented 5 years ago

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

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

谢谢!

Zhongdao commented 5 years ago

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

Zhongdao commented 5 years ago

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

xxx2974 commented 5 years ago

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

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

JingweiZhang12 commented 5 years ago

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

xxx2974 commented 5 years ago

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

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

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

jxyecn commented 5 years ago

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

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

xxx2974 commented 5 years ago

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

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

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

lijinchao2007 commented 5 years ago

我对比这个方法的时候, 我用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

lijinchao2007 commented 5 years ago

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

smallsheep666 commented 5 years ago

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

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

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

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

zhufq00 commented 4 years ago

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

zhufq00 commented 4 years ago

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

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

谢谢!

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

RyanCV commented 4 years ago

@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.

liupengcnu commented 3 years ago

作者的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,谢谢!