michuanhaohao / reid-strong-baseline

Bag of Tricks and A Strong Baseline for Deep Person Re-identification
http://openaccess.thecvf.com/content_CVPRW_2019/papers/TRMTMCT/Luo_Bag_of_Tricks_and_a_Strong_Baseline_for_Deep_Person_CVPRW_2019_paper.pdf
MIT License
2.26k stars 576 forks source link

关于加入triplet_loss以后出现RuntimeError: shape '[32, -1]' is invalid for input of size 50 #201

Open henrysun1996 opened 3 years ago

henrysun1996 commented 3 years ago

你好老师,我在加入您reid-strong-master开源代码里面的triplet代码的时候,batchsize设置为64,num-instances设置为4,可以整除的情况下出现一下错误。 image

麻烦老师帮忙解决下疑惑,不知道如何解决了

michuanhaohao commented 3 years ago

这个看不出问题呢,可以在这里打个断点调试一下

henrysun1996 commented 3 years ago

老师,我已经调好了。但是我是用的triplt_loss是您在B站课上讲的代码。不是您在论文里面发表的代码,不知道行不行。我网上百度发现这种方式别人说都一样,但是我在使用的时候论文里面会报错(可能需要我再改),然后课上讲解的代码不需要调试。所以我也不太确定问题所在了。

carlfu127 commented 3 years ago

老师,我已经调好了。但是我是用的triplt_loss是您在B站课上讲的代码。不是您在论文里面发表的代码,不知道行不行。我网上百度发现这种方式别人说都一样,但是我在使用的时候论文里面会报错(可能需要我再改),然后课上讲解的代码不需要调试。所以我也不太确定问题所在了。

我也出现这种问题了,能否告知你是怎么解决的,谢谢!

henrysun1996 commented 3 years ago

可以加个联系方式私聊

syh-hue commented 3 years ago

可以加个联系方式私聊

你好,可以探讨一下这个问题吗,我也遇到了。我的q:843781804

DJever23 commented 2 years ago

可以告知该如何解决吗?我的qq:1371579547,谢谢!

LuFan31 commented 2 years ago

可以加个联系方式私聊

您好,我将这篇论文里的triplet_loss用进自己的方法中时也遇到了这个问题,可以请教是如何解决的吗。我的Q:2431010278

yutianhe12345 commented 1 year ago

您好,这个问题我也遇到了,我经过推导,已经成功地分析出了问题的所在 它问题的根源在于tensor.view(N,-1) 打个比方,比如batch_size为4,即N=4。如果这一个batch中的所有数据都属于不同的行人类别,即可以假设这个batch的label为[1,2,3,4],那么dist_mat[is_pos]得到的结果就是一个1x4的tensor,这时进行tensor.view(4,-1)就不会报错 但是,假如这个batch中含有相同的行人样本,既可以假设这个batch的label为[1,1,3,4],这时dist_mat[is_pos]得到的结果就是一个1x6的tensor,这时这个tensor就不能进行view获得一个4行的tensor

作者的难例挖掘的核心思想,就是在这个batch中找到每个样本的相距最远的正样本距离以及相距最近的负样本距离,对于batch中的一个样本来说,若在这个batch中没有与之所属行人类别相同的样本,那么就将该样本本身作为其正样本;但一般batch只要足够大,而且dataloader的shuffle为True,每个样本在一个batch中都会有负样本。

按照这个核心思想,我把作者之前的代码进行了一些修改,成功地解决了问题 image

如果有问题,可以与我联系,我的QQ:2656377829