反卷积层不接受具有双线性填充的 5D 斑点
Deconvolution Layer does not accept 5D blobs with bilinear filler
有人有解决该问题的方法吗?还有其他类似的填充选项吗?或者我应该省略填料重量选项吗?
我已经调整了文件 github 以便它对 5D 斑点执行双线性填充:
def upsample_filt(size):
"""
Make a 2D bilinear kernel suitable for upsampling of the given (h, w) size.
"""
factor = (size + 1) // 2
if size % 2 == 1:
center = factor - 1
else:
center = factor - 0.5
og = np.ogrid[:size, :size, :size]
return (1 - abs(og[0] - center) / factor) * \
(1 - abs(og[1] - center) / factor) * \
(1 - abs(og[2] - center) / factor)
def interp(net, layers):
"""
Set weights of each layer in layers to bilinear kernels for interpolation.
"""
for l in layers:
m, k, d, h, w = net.params[l][0].data.shape
if m != k and k != 1:
print('input + output channels need to be the same or |output| == 1')
raise
if h != w or h != d or w != d:
print('filters need to be square')
raise
filt = upsample_filt(h)
net.params[l][0].data[range(m), range(k), :, :, :] = filt
caffe.set_device(0)
caffe.set_mode_gpu()
solver = caffe.SGDSolver('solver.prototxt')
# surgeries
interp_layers = [k for k in solver.net.params.keys() if 'Deconv' in k]
interp(solver.net, interp_layers)
#print(interp_layers)
solver.solve();
有人有解决该问题的方法吗?还有其他类似的填充选项吗?或者我应该省略填料重量选项吗?
我已经调整了文件 github 以便它对 5D 斑点执行双线性填充:
def upsample_filt(size):
"""
Make a 2D bilinear kernel suitable for upsampling of the given (h, w) size.
"""
factor = (size + 1) // 2
if size % 2 == 1:
center = factor - 1
else:
center = factor - 0.5
og = np.ogrid[:size, :size, :size]
return (1 - abs(og[0] - center) / factor) * \
(1 - abs(og[1] - center) / factor) * \
(1 - abs(og[2] - center) / factor)
def interp(net, layers):
"""
Set weights of each layer in layers to bilinear kernels for interpolation.
"""
for l in layers:
m, k, d, h, w = net.params[l][0].data.shape
if m != k and k != 1:
print('input + output channels need to be the same or |output| == 1')
raise
if h != w or h != d or w != d:
print('filters need to be square')
raise
filt = upsample_filt(h)
net.params[l][0].data[range(m), range(k), :, :, :] = filt
caffe.set_device(0)
caffe.set_mode_gpu()
solver = caffe.SGDSolver('solver.prototxt')
# surgeries
interp_layers = [k for k in solver.net.params.keys() if 'Deconv' in k]
interp(solver.net, interp_layers)
#print(interp_layers)
solver.solve();