【研0日记】23.12.27

ok,按照昨天第一个想法改完代码,开始跑了,and给老师的ppt也做完发给他了,爽,怎么今天感觉可以稍微玩一玩哎嘻嘻嘻

先去吃饭吧,下午把另一个idea的代码也改了,虽然我感觉大概率改不好,因为本人代码能力低下,必须要一次次debug,现在在跑实验又不能动

改代码期间倒是遇到了个有意思的问题。上一次改匈牙利匹配的时候,cost1是原本匈牙利算的,cost2是我人为设定的,之前想法就是说,想保留一点匈牙利的存在让他有点作用,就直接cost = cost1 + cost2,然后用总cost去做匹配,但是其实跟我一开始的想法有点差别。因为最后做匹配的时候,比如cost矩阵shape = [num_query, num_gt],然后匹配得到row_indices、col_indices,并且这俩长度len(row_indices)都等于min(num_query, num_gt),就是说比如我有100个kernel,2个gt,那最后就是选出来2个cost最小的kernel和这2个gt匹配,只不过由于cost2的作用,选出来的这2个kernel也大概率本身就是和这2个gt对应的。但是我之前想的是,因为100个kernel都是知道自己跟谁对应的,我希望100个kernel都去和对应gt匹配,所以之前写的代码就有点问题。并且也如愿,喜提0.251降到0.249。但是之前这种代码的写法,也确实是个想法,并且还挺有意思的

新的这一次这个算法(还是假设100个kernel,2个gt),就是首先保留cost1,让他自己去选出来2个kernel去和gt对应(假设选出来k0对应gt0,k1对应gt1),这个部分和匈牙利匹配完全一样,但是我希望要有更多的匹配信息,让所有kernel都得到训练,于是在此基础上,保留k0—gt0、k1—gt1的匹配关系不变,其他的kernel(k2~k99)就按照他自己的类别去对应gt

下面第一张图就是原始匈牙利匹配,第二张图就是建立索引匹配

完了刚刚跟老师也汇报了一下,他让我按照这几个idea分别写一条contribution,真的开始上压力了呜呜呜


tmd很难评,这真的很难评,刚开始跑就结束了,根本没必要跑下去,结果太差了

再看了两眼paper,我之前的想法就是有问题的,要训练的kernel,就相当于是一个位置先验,用dab-detr的话来说就是学习box的 [x, y, w, h],而在之后knet的kernel update中,就相当于是transformer里面的decoder,一层一层,要学习的是先验的偏差 [dx, dy, dw, dh]_i,i表示层数,每次都是 [x, y, w, h] +  [dx, dy, dw, dh]_i得到最终的结果 [x', y', w', h']。学到的kernel先验,在inference过程中就是初始的k0,是先验。关键就在于kernel作为先验,每个kernel都要包含不同的位置信息,你看人家knet对于所有kernel的可视化。那问题就来了,确实我知道这100个kernel都对应哪个类别,但是如果我每次都把这100个kernel都去和他对应的gt做匹配,然后算loss,那他怎么可能能学到不同的先验,那和全部初始化成一样的又有啥区别。其实匹配算法,比如100个kernel、2个gt,就是在选出跟gt最接近的 “2个” kernel,说明这2个kernel就是学这个gt对应的先验信息,然后在下一次,又会选其他别的kernel,跟别的gt对应,学别的先验,这才是真谛

所以现在又改了一下,保留匈牙利匹配不变,比如还是选出2个kernel和2个gt对应,然后再选出cost最小的(其实也可以随便选,只不过这样好实现)、和gt数量一致的2个kernel,但是这两个kernel是按照本身类别来对应。就相当于有2*num_gt个kernel,num_gt个按照匈牙利匹配对应,另外num_gt个就按照自己类别来对应

淦,所以跑了一下午白浪费时间了


完蛋,没卡了hhh学长的老师出去开会了,vpn没了,今晚把clip的先写了吧,其他明天再说

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值