Closed guixuef closed 1 year ago
q_win, k_win = q.mean([2, 3]), kv[..., 0:self.qk_dim].mean([2, 3]) # window-wise qk, (n, p^2, c_qk), (n, p^2, c_qk)
这段代码的作用是什么?把这两个维度做了平均目的是什么呢?
为了得到region-level queries and keys。有了region-level queries and keys才能计算region-level affinity.
非常感谢您的解答。 我对BiFormer其中的前半部分有些不理解。输入的x经过padding和分割,分成了7x7份,然后求x的q 与kv,再把q和kv的两个维度求了平均。我不清楚第一次粗略的筛选是怎么实现的,难道是先用每个区域的x都去计算qk根据大小取前几个构建邻接矩阵吗?您能结合关键的代码描述一下您的思路吗?以便我们更加清晰的理解您的优秀的作品。
感谢您提供的代码。 我用YOLO5s加BiFormer,检测数据集NEU-DET,效果不是很好,跟YOLO5s相比没有提升。是BiFormer参数需要调整吗?
[[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 [-1, 3, C3, [128]], [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 [-1, 6, C3, [256]], [-1,1,nchwBRA,[]], [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 [-1, 9, C3, [512]], [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 [-1, 3, C3, [1024]], [-1, 1, SPPF, [1024, 5]], # 9 ]
不太了解YOLO5s, 也不理解你发的表格和截图的意义。也许你可以试试调整number of regions和topk。
q_win, k_win = q.mean([2, 3]), kv[..., 0:self.qk_dim].mean([2, 3]) # window-wise qk, (n, p^2, c_qk), (n, p^2, c_qk)
这段代码的作用是什么?把这两个维度做了平均目的是什么呢?