-
-
Notifications
You must be signed in to change notification settings - Fork 41
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
关于训练部分对loss的处理不太理解 #23
Comments
纠正理解: # 计算anchor与困难正、负例余弦相似度得分:代表距离。shape=(batch,)
pscore = torch.sum(f * pf_hard, dim=1) # anchor与困难正例对应位相乘并按行求和(×乘)
nscore = torch.sum(f * nf_hard, dim=1) # anchor与困难负例对应位相乘并按行求和
# not opt.PCB
# 正则式
reg = torch.sum((1 + nscore) ** 2) + torch.sum((-1 + pscore) ** 2)
# 这里relu等同于max(·,0); 因为使用余弦相似度,范围在[-1,1],也就是说d(a,p)越大(接近1)越好。
# 所以这里的TripletLoss和原本的式子相反,需要让d(a,p)>d(a,n)+m
loss = torch.sum(torch.nn.functional.relu(nscore + opt.margin - pscore))
loss_triplet = loss + opt.alpha * reg # 损失值+正则化 但还是有几个小问题不明白:
刚学习两个月Re-id的小白,所以问的问题不太成熟,希望郑博士能宽容讲解。 |
有个问题请教一下,pf_hard和nf_hard都是从从相同身份的行人中选取出来的,都是正样本,为什么code里是nes_label=pos_lable呢?详见Ony have anchor and pos_sample #26 |
@Meimeiainaonao 你好,label是一样的,但是组成triplet的时候 顺序换了 , 就是negative sample了。 |
对不起,,,现在才看到。那时候在准备回国。。。。@CynicalHeart
|
感谢回复~,代码还是很好理解的。度量学习验证问题一直是个头疼的问题,后面用了 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
在前向传播部分(forward),已经对每个anchor选取了一个hard-neg和一个hard-pos。
在loss部分,这时候使用nn.MarginRankingLoss将anchor与正负例的距离和y(batch个1)传入进去损失函数即可。但是代码中不是这么处理的。
一个不理解的地方:
我不太懂代码的含义,这个是什么公式吗,有什么理由需要自定义一个损失函数么。
PCB部分遵照了原论文分part使用Softmax和交叉熵进行训练。
还有
for phase in ['train']:
,代码是不是只写了训练,没有验证啊😥。。The text was updated successfully, but these errors were encountered: