Chinese-CLIP icon indicating copy to clipboard operation
Chinese-CLIP copied to clipboard

关于ACC和R@5的问题

Open EasonTuT opened this issue 10 months ago • 14 comments

验证集和训练集的ACC都达到了80+,但是在测试集和验证集中R@5评分只有18分和9分,请问是什么问题呢?应该如何解决呢

EasonTuT avatar Apr 16 '24 09:04 EasonTuT

给下你的valid_texts.jsonl中的2-3条数据看看,我之前遇到这样的问题是,在json里面,一个文本只对应了少部分数据,但实际一个文本应该对应所有数据。例如,在验证集中,如果你的一个文本,对应了 5 个图片,那么这5个图片都要放在image_ids里面,你可以看实现逻辑:即 ground_truth_ids里面的数据少了,所以导致recall分数低 image

ChesonHuang avatar Apr 16 '24 10:04 ChesonHuang

@ChesonHuang 我get到你的意思,但是我用的数据集中一张图片只对应一个image_ids,train、valid和test都是如此,而在fitfune过程中ACC是显示80多的,我用R@1计算出来更低只有0.几分,下面是我的训练记录和对应的json情况。 这是微调记录: image 下面是valid的json: image 下面是train的json: image 我不知道什么原因导致如此ACC和R@间的分数相差如此之大

EasonTuT avatar Apr 16 '24 11:04 EasonTuT

验证集和训练集的ACC都达到了80+,但是在测试集和验证集中R@5分只有18分和9分,请问是什么问题呢?应该如何解决呢?

请问你的参数设在是怎样的

keminze avatar Apr 16 '24 11:04 keminze

@ChesonHuang @keminze image 这是我运行脚本得出来的召回分数 是用微调后的权重的

EasonTuT avatar Apr 16 '24 13:04 EasonTuT

@keminze image

EasonTuT avatar Apr 16 '24 14:04 EasonTuT

@ChesonHuang @keminze image 这是我运行脚本得出来的召回分数 是用微调后的权重的

你好,我遇到了同样的问题,请问您发现错误 解决了吗? 感谢!

timecoderr avatar Apr 19 '24 08:04 timecoderr

@ChesonHuang @keminze image 这是我运行脚本得出来的召回分数 是用微调后的权重的

你好,我遇到了同样的问题,请问您发现错误 解决了吗? 感谢!

建议你在 cn_clip/eval/evaluation.py 或 cn_clip/eval/evaluation_tr.py, 打印下 ground_truth_ids 和 top10_pred_ids 看看,或许它可以告诉真相

ChesonHuang avatar Apr 19 '24 09:04 ChesonHuang

Snipaste_2024-04-21_18-46-40 dan'qi'shi但其实我输出后也就是这样,应该没问题吧,因为他标签都是一对一的

hkxxxxx avatar Apr 21 '24 10:04 hkxxxxx

Snipaste_2024-04-21_18-46-40 dan'qi'shi但其实我输出后也就是这样,应该没问题吧,因为他标签都是一对一的

有问题的,你的图片id是: 140010041888, 但你模型预测的top10里面没有这个图片id,所以r@x都是0;说明你训练的模型预测不准确

update: 还有一种可能是,输入的图片必须存在valid数据集对应文本的image_ids里面,但140010041888这个图片并没有在image_ids中

ChesonHuang avatar Apr 21 '24 13:04 ChesonHuang

嗯,应该是模型训练的问题,查140010041888上面是有的,不然他就会报错了

hkxxxxx avatar Apr 21 '24 14:04 hkxxxxx

@ChesonHuang @keminze image 这是我运行脚本得出来的召回分数 是用微调后的权重的

你的训练集和验证集的文本处理方式是一样的吗

keminze avatar Apr 22 '24 05:04 keminze

是一样的,我一起处理的

hkxxxxx avatar Apr 23 '24 06:04 hkxxxxx

所以他这个Acc到底是怎么计算的?是什么的准确率?Acc和R@N之间有必然的联系吗

hkxxxxx avatar Apr 23 '24 07:04 hkxxxxx

这个应该是这样的,训练的时候,那些acc指标都是在一个batch内做召回,因为候选池比较小所以指标数值很大。训练完后那个evaluation.py是在全量测试集中做recall@k的召回,自然指标降了

hellomuyi avatar Aug 26 '24 09:08 hellomuyi