I want to extend your get_deconv_filter from 2D to 3D. In CAFFE, it can be implemented as
int f = ceil(blob->shape(-1) / 2.);
float c = (2 * f - 1 - f % 2) / (2. * f);
for (int i = 0; i < blob->count(); ++i) {
float x = i % blob->shape(-1);
float y = (i / blob->shape(-1)) % blob->shape(-2);
float z = (i/(blob->shape(-1)*blob->shape(-2))) % blob->shape(-3);
data[i] = (1 - fabs(x / f - c)) * (1 - fabs(y / f - c)) * (1-fabs(z / f - c));
So, the get_deconv_filter function will be changed as
def get_deconv_filter(self, f_shape):
width = f_shape[0]
heigh = f_shape[0]
depth = f_shape[0]
f = ceil(width/2.0)
c = (2 * f - 1 - f % 2) / (2.0 * f)
bilinear = np.zeros([f_shape[0], f_shape[1],f_shape[2]])
for x in range(width):
for y in range(heigh):
for z in range(depth):
value = (1 - abs(x / f - c)) * (1 - abs(y / f - c))*(1 - abs(z / f - c))
bilinear[x, y, z] = value
weights = np.zeros(f_shape)
for i in range(f_shape[2]):
weights[:, :, :, i, i] = bilinear
init = tf.constant_initializer(value=weights,
dtype=tf.float32)
return tf.get_variable(name="up_filter", initializer=init,
shape=weights.shape)
Could you please look at my code and correct help me if it wrong? Thanks
I want to extend your get_deconv_filter from 2D to 3D. In CAFFE, it can be implemented as
So, the get_deconv_filter function will be changed as
Could you please look at my code and correct help me if it wrong? Thanks