layumi / Person_reID_baseline_pytorch

:bouncing_ball_person: Pytorch ReID: A tiny, friendly, strong pytorch implement of person re-id / vehicle re-id baseline. Tutorial 👉https://github.com/layumi/Person_reID_baseline_pytorch/tree/master/tutorial

Home Page:https://www.zdzheng.xyz

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

在VeRi数据集上的训练问题及测试结果。

fukai001 opened this issue · comments

你好,我用VeRi-776数据集进行训练,其中576类作为训练集,200类作为测试集。
1、在model.py中,将class_num=576。
2、在test.py中,将这里model_structure = ft_net(200),设为测试集的200类,执行python test.py时会报错,说训练模型为576维的,而这里200维,不相符。 但是,将这里model_structure = ft_net(576),设为训练集的576类,执行python test.py不报错,但是rank1,rank5,rank10,map的结果全部是0。这是为什么呀?
3、请问,训练集与测试集的类别数目需要一样吗? 在原始code中 Market数据集,训练和测试都是751类。(请问,我使用VeRi-776,如何分配? 是训练集576,测试集200? 还是训练集388,测试集388呢?)

Hi @fukai001

  1. 你不需要手动设置,train会自动统计class数量。作为模型的输入。
  2. 测试的时候要和训练的模型一致。 我们是提取特征,而不是提取分类结果。所以你测试时,你需要载入训练的模型(包括分类数是一致的),提取的特征纬度应该是2048(如果你用ft_net)。 关于结果是0,你需要检查特征是否都为不同,在测试时normal等操作是否做的对,输出特征是否为float类型等等,看看哪里有bug。
  3. 原始Market模型数量是不同的, 训练是751类,测试是750类。建议你查一下VerRi-776原来的设置。我记得原来就划好了,可以按照原来的划分进行实验。

好的,我再试试,非常感谢!

Hi @fukai001

  1. 你不需要手动设置,train会自动统计class数量。作为模型的输入。
  2. 测试的时候要和训练的模型一致。 我们是提取特征,而不是提取分类结果。所以你测试时,你需要载入训练的模型(包括分类数是一致的),提取的特征纬度应该是2048(如果你用ft_net)。 关于结果是0,你需要检查特征是否都为不同,在测试时normal等操作是否做的对,输出特征是否为float类型等等,看看哪里有bug。
  3. 原始Market模型数量是不同的, 训练是751类,测试是750类。建议你查一下VerRi-776原来的设置。我记得原来就划好了,可以按照原来的划分进行实验。

你好,对于测试结果为0,我发现应该是图片命名的问题。主要问题在摄像头的命名中。我查看特征向量中的gallery_cam与query_cam发现,所有值都是0。 VeRi数据集的命名是:0002_c002_00030600_0.jpg。有两个问题:
1、命名规则需要完全和Market一样吗? 即,每一个下划线隔开的项目中 的数据位数也必须一致吗?
2、VeRi数据集有20个摄像头,我可以写成:0002_c16s1_00030600_0.jpg吗?

不要意思,打扰大神了,我找到问题了,就是图片命名,没有对应上摄像头的名称。 我查看并修改了代码,现在已经解决了,万分感谢。

请问你具体是什么解决的?
谢谢!

https://github.com/layumi/Person_reID_baseline_pytorch/blob/master/test.py#L186
我没跑过VeRi,应该是这一行的0 改成 0:3 来读取 002 或者类似的

对的,大神一看就知道。

是的,大神就是大神!

已解决。非常感谢!

commented

你好,我用VeRi-776数据集进行训练,其中576类作为训练集,200类作为测试集。
1、在model.py中,将class_num=576。
2、在test.py中,将这里model_structure = ft_net(200),设为测试集的200类,执行python test.py时会报错,说训练模型为576维的,而这里200维,不相符。 但是,将这里model_structure = ft_net(576),设为训练集的576类,执行python test.py不报错,但是rank1,rank5,rank10,map的结果全部是0。这是为什么呀?
3、请问,训练集与测试集的类别数目需要一样吗? 在原始code中 Market数据集,训练和测试都是751类。(请问,我使用VeRi-776,如何分配? 是训练集576,测试集200? 还是训练集388,测试集388呢?)

你好 请问使用VERI数据集训练要修改什么呢 请问你有上传你的代码么 谢谢

你好,我用VeRi-776数据集进行训练,其中576类作为训练集,200类作为测试集。
1、在model.py中,将class_num=576。
2、在test.py中,将这里model_structure = ft_net(200),设为测试集的200类,执行python test.py时会报错,说训练模型为576维的,而这里200维,不相符。 但是,将这里model_structure = ft_net(576),设为训练集的576类,执行python test.py不报错,但是rank1,rank5,rank10,map的结果全部是0。这是为什么呀?
3、请问,训练集与测试集的类别数目需要一样吗? 在原始code中 Market数据集,训练和测试都是751类。(请问,我使用VeRi-776,如何分配? 是训练集576,测试集200? 还是训练集388,测试集388呢?)

你好 请问你可以分享一下训练好的pth嘛,暂时在家,我的笔记本训练不了QAQ

Hi @fukai001

  1. 你不需要手动设置,train会自动统计class数量。作为模型的输入。
  2. 测试的时候要和训练的模型一致。 我们是提取特征,而不是提取分类结果。所以你测试时,你需要载入训练的模型(包括分类数是一致的),提取的特征纬度应该是2048(如果你用ft_net)。 关于结果是0,你需要检查特征是否都为不同,在测试时normal等操作是否做的对,输出特征是否为float类型等等,看看哪里有bug。
  3. 原始Market模型数量是不同的, 训练是751类,测试是750类。建议你查一下VerRi-776原来的设置。我记得原来就划好了,可以按照原来的划分进行实验。

您好,想问一下,比如train上的类别为500个ID,val上为200个ID,并且val上的ID在train中不重复,这样train自动统计的class数量是不是不太对?因为从分类的角度来说应该有700个(500+200)

你好,我想问下。训练时是用fp16训练得到的模型,那么测试时不能用fp16吗 我看test.py中将关于fp16的代码都注释掉了

请问有考虑三元组损失吗?我在代码中没有找到