我想使用caffe实现https://arxiv.org/abs/1609.05158中定义的超分辨率算法。有TF实现但尚未实现caffe:https://github.com/tetrachrome/subpixel
总结算法:我希望将图像超级分解为3.我想在网络末端而不是在开头进行上采样。要做到这一点,我将在网络的末尾有9个图像(批量x 9 x高x宽)。
然后我想做的是从相同坐标的每个图像中选取一个像素,并将它们放在3x3的正方形内,以完成尺寸为3 *高度* 3 *宽度的图像。相近:
1)我可以使用反卷积层将图像放大3,在两者之间填充零,如果是,如何?
2)我正在考虑使用切片层来提取9张图像。
3)有没有办法循环移动一些图像以对齐它们,如图所示,如果是,如何?
4)在圆形移位和eltwise求和之前我是否真的需要切片层或者我可以在不需要切片层的情况下以其他方式进行切割:我可以单独循环移位通道吗?我可以通过求和合并图像通道吗?
5)这可以用一种我无法想象的更容易的方式完成。
我问了很多问题,我希望我不会满溢这些问题。
提前谢谢。
编辑:
我想在caffe中实现这个Tensorflow代码:
def _phase_shift(I, r):
bsize, a, b, c = I.get_shape().as_list()
bsize = tf.shape(I)[0] # Handling Dimension(None) type for undefined batch dim
X = tf.reshape(I, (bsize, a, b, r, r))
X = tf.transpose(X, (0, 1, 2, 4, 3)) # bsize, a, b, 1, 1
X = tf.split(1, a, X) # a, [bsize, b, r, r]
X = tf.concat(2, [tf.squeeze(x, axis=1) for x in X]) # bsize, b, a*r, r
X = tf.split(1, b, X) # b, [bsize, a*r, r]
X = tf.concat(2, [tf.squeeze(x, axis=1) for x in X]) # bsize, a*r, b*r
return tf.reshape(X, (bsize, a*r, b*r, 1))