以源码GLUNet.py为例
1使用self.pyramin来提取图像的金字塔特征,这里使用的是VGG网络。
第一部分是在原图feature上进行金字塔特征提取,分别取原图8倍下采样率,4倍下采样率对应的feature。对应GLU-Net网络的左边部分。第二部分是把原图固定到256分辨率后分别取16分辨率和32分辨率尺度下的feature。
2使用的金字塔特征提取网络-VGG
第一步分用于提取图片的四个尺度的特征,1,1/2, 1/4, 1/8。这个特征特征x_quarter和x_eight用于GLU-Net中的H-Net。 是根据VGG网络的层的结构名字来取的。
第二部分 同理 用于L-Net部分。
torch.nn.functional.interpolate是上采样插值方式,这里0.5是把feature采样到原来0.5倍。
3在固定分辨率(256)的16feature level上进行全局的相关性预估的到flow4。
之后反卷积为1 2 32 32 大小的flow。这里的channel = 2 表示每个像素点在X方向和Y方向预估的displacement变换的数值。
3.1
---
coarsest_resolution_flow
---
self.corr 使用余弦相似度计算连个feature的相关度,MutualMatching中是把coorr4d是在X,Y两个方向上进行优化。得到最后的全局相关corr4。
把corrt输入到Mtop玩了中(一个解码作用的网络)得到预测的 2D dense correspondence map。
之后再得到flow4。
3.2反卷积到32分辨率尺度上
4 level 32
c23是对应32分辨率的feature,我们使用使用这个尺度对应的flow即up_flow_4_warping来对其进行变换得到warp3。
之后使用FunctionCorrlation来计算c13 和 warp3的局部相关性 得到corr3。
warp操作对应黑色六边形。
计算局部相关性是浅绿色块。
讲上面计算的up_flow4与corr3进行concat操作。
输出解码网络decoder3 得到预测的flow:res_flow3 和提取后的特征 x3。
flow3 等于res_flow3 与 up_flow4 的相加。
---
RefineNet
将解码网络提取出来的特征x3 放入RefineNet (精修网络)进一步优化特征预测一个flow 与 flow3叠加。
这个网络作用就是精修 进一步提高精度。
这里有两个shortcut操作,这部分得到flow3 对应途中w2。
之后w2线性上采样插值 到原图1/8 的feature level 进行与之前类似操作。 整个网络最后放回flow1 然后对原图(img_source)进行变换就得到最终变换后的图片。