@ptrblck We finally did a test that was confirming that MaxUnpool was too powerful.
We fed the encoder with an image to get the indices and then put a random vector before the decoder.
def forward(self, input):
    latent_vector, indices = self.encoder(input)
    # Here we overwrite the latent vector with a random one
    latent_vector = torch.randn(self.dim_latent_vector) 
    output = self.decoder(latent_vector, indices)
    return output

The decoder performed a successful reconstitution of the input expected anyway.
The following paper 1 details the phenomena encountered.