Bilinear Pooling

双线性池化的一般计算方法和代码里有很大的不同。

  • 按通道(将通道)和按位置(就是把HW中与图片的位置一一对应)
    • 按通道
# 这是代码计算的方法
X = X.view(N, 512, 28**2)
X = torch.bmm(X, torch.transpose(X, 1, 2)) / (28**2)  # Bilinear
# 假设有512个通道,计算结果等于512*512。那么结果中的第(ij)个就是第i,通道对应相乘然后取平均值。
  • 按位置
# 按位置,先求当前位置的`点成`结果,然后
x=torch.from_numpy(np.arange(28*28*512).reshape(1,512,28*28))
bi=[torch.mm(i.reshape(512,1),i.reshape(1,512)) for i in x[0].T]
for i,v in enumerate(bi):
    if i==0:
        vv=v
    else:
        vv+=v
  • 还真的是一样的诶

    • 通道:结果里的第ij,就是通道i和通道j的乘机在求平均值
    • 位置:只不过是先(Xhw[i]*Xhw[j]) 从11,加到hw,正好等于上式的值。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容