SearchTransfer起源于图像超分辨率的纸质学习纹理变压器网络的代码
本文记录了变压器模块复制中遇到的一些用法
关键功能
展开展开以促进块之间的注意力,然后使用类似的图计算索引来计算ref_unfold中的信息,最后用折叠还原以还原
使用相同的滑动窗口将输入分为一个块一个块
X的形状为(批处理,通道,H,W),您可以看到x_unfold的形状(批次,k x k x channel,number_blocks)
k是kernel_size,k x k x通道指示块中的像素数
如果kernel_size,填充,大步,number_blocks是几个块
折叠的用法与展开相反。
可以看出,尽管恢复了形状,但x和x_fold的值域已更改。这是因为在展开时,位置(1x1xchannel)可以出现在多个块中。因此,导致数据不一致。因此,在获得x_fold后,需要通过重叠数字将其删除以获得原始数据范围。K= 6,s = 2,位置将出现在3*3 = 9个块中(滑动块)在窗口中的上下和向右和向右)。
从sum()可以看出,只有一些数据才能恢复。其他准确计算除数的方法(例如3. x 3.)是用torch.ones输入。
使用尺寸可以使用以保持不变的尺寸
用法,效果如下
使用时,首先使用会扩展以使索引的大小等于输入。
例如,使用展开将索引转换为[b,c x c x k,blocks],这是一个1D张量,每个元素值等于之前展开。
这样,当j发生变化时,它不会改变,因此在周期中,k块输入和输入对应中的块中的第一个点(traversed j)。
收集在BIS中的解释:使用聚集时,首先使用以使索引的大小等于输入。
例如,使用扩展将变为[B,C X C X K,块],即1D张量,每个元素值等于之前展开
这样,当j发生变化时,它不会改变,因此在周期中,k块输入和输入对应中的块中的第一个点(traversed j)。
https://pytorch.org/docs/stable/index.html
https://github.com/researchmm/ttsr