本文主要是介绍DN-DETR的原理和源码解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在decoder中:
query就是代表tgt信息,
于是用gt+noise生成几个known_query,known_query无需匈牙利直接和gt匹配.使得模型可以去噪.
一些骚操作:
1.box偏移不能太过,否在假如跑到别的gt上去了,那就说不通了.
解决方法:box的xy偏移小于wh的一半就好啦
2.decoder的自注意力,ori_query如果提取到known_query信息等于给了gt的先验,不利于模型学习.
known_query如果跨组提取了对应的box信息也等于给了gt的先验,不利于噪声学习.因次设置att_mask,防止以上两种干扰.
3:每一张图的gt数量不一致,那么cat(query,known_query)数量不一致,无法batch训练.
解决方法:老一套,少的图补零.
心得体会:
拿知识蒸馏来对比,最后一层的known_query先当于teacher生成的soft_label,两个loss共同指导模型收敛.
源码解读:
假设batch为2,
b_id=0 gt=[l0,dim],
b_id=1 gt=[l1,dim],
合并gt_all=[l0+l1,dim]
对dim维度信息进行适当的offset,就是noise
拆分batch,合并ori_query_pos=[l_ori,dim]
考虑目标最多的图的目标数量lmax
最后的query_pos=[b,lmax+l_ori,dim],为什么不搞个mask标记补充的000
att_mask用于上述的骚操作2
这篇关于DN-DETR的原理和源码解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!