def forward(self, x): logit_list = [] x = self.enco1(x) x, ind1 = F.max_pool2d(x, kernel_size=2, stride=2, return_mask=True) size1 = x.shape x = self.enco2(x) x, ind2 = F.max_pool2d(x, kernel_size=2, stride=2, return_mask=True) size2 = x.shape x = self.enco3(x) x, ind3 = F.max_pool2d(x, kernel_size=2, stride=2, return_mask=True) size3 = x.shape x = self.enco4(x) x, ind4 = F.max_pool2d(x, kernel_size=2, stride=2, return_mask=True) size4 = x.shape x = self.enco5(x) x, ind5 = F.max_pool2d(x, kernel_size=2, stride=2, return_mask=True) size5 = x.shape x = F.max_unpool2d(x, indices=ind5, kernel_size=2, stride=2, output_size=size4) x = self.deco1(x) x = F.max_unpool2d(x, indices=ind4, kernel_size=2, stride=2, output_size=size3) x = self.deco2(x) x = F.max_unpool2d(x, indices=ind3, kernel_size=2, stride=2, output_size=size2) x = self.deco3(x) x = F.max_unpool2d(x, indices=ind2, kernel_size=2, stride=2, output_size=size1) x = self.deco4(x) x = F.max_unpool2d(x, indices=ind1, kernel_size=2, stride=2) x = self.deco5(x) logit_list.append(x) return logit_list
def test_case(self): import paddle import paddle.nn.functional as F import paddle.fluid.core as core import paddle.fluid as fluid import numpy as np if core.is_compiled_with_cuda(): place = core.CUDAPlace(0) else: place = core.CPUPlace() with fluid.dygraph.guard(place): input_data = np.array([[[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]]]).astype("float32") input_x = paddle.to_tensor(input_data) output, indices = F.max_pool2d(input_x, kernel_size=2, stride=2, return_mask=True) out_pp = F.max_unpool2d(output, indices, kernel_size=2, stride=None, output_size=(5, 5)) output_np = output.numpy() indices_np = indices.numpy() expect_res =unpool2dmax_forward_naive(output_np, indices_np, [2,2], \ [2,2], [0,0], [5,5]).astype("float64") self.assertTrue(np.allclose(out_pp.numpy(), expect_res))
def test_case(self): import paddle import paddle.nn.functional as F import paddle.fluid.core as core import paddle.fluid as fluid paddle.enable_static() input_data = np.array([[[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]]]).astype("float32") x = fluid.data(name="x", shape=[1, 1, 4, 4], dtype="float32") output, indices = F.max_pool2d( x, kernel_size=2, stride=2, return_mask=True) unpool_out = F.max_unpool2d( output, indices, kernel_size=2, stride=None, output_size=(5, 5)) if core.is_compiled_with_cuda(): place = core.CUDAPlace(0) else: place = core.CPUPlace() exe = fluid.Executor(place) exe.run(fluid.default_startup_program()) results = exe.run(paddle.fluid.default_main_program(),\ feed={"x":input_data}, fetch_list=[unpool_out], return_numpy=True) pool_out_np = np.array([[[[6., 8.], [14., 16.]]]]).astype("float32") indices_np = np.array([[[[5, 7], [13, 15]]]]).astype("int32") expect_res =unpool2dmax_forward_naive(pool_out_np, indices_np, [2,2], \ [2,2], [0,0], [5,5]).astype("float64") self.assertTrue(np.allclose(results[0], expect_res))
def forward(self, x, max_indices, output_size): main = self.main_conv1(x) main = F.max_unpool2d(main, max_indices, kernel_size=2, output_size=output_size) ext = self.ext_conv1(x) ext = self.ext_tconv1(ext, output_size=output_size[2:]) ext = self.ext_tconv1_bnorm(ext) ext = self.ext_tconv1_activation(ext) ext = self.ext_conv2(ext) ext = self.ext_regul(ext) out = main + ext return self.out_activation(out)