This concept is simple. Its something like the Squeeze-and-Excitation Block (SE Block) because of the bottleneck concept. But note that both bottlenecks are used for different purposes.
Process
What happens here is that a 512 by 512 image ([512,512]), first gets shrunk into a 1D-vector of a smaller representation ([256]) via the encoder. This 1D-vector takes up a particular point in latent space.
This shrinking of the matrix into the 1D-vector is the bottleneck portion. This 1D-vector is basically a vector embedding of a smaller dimension that (hopefully) contains the spatial information of the image. This vector embedding is known to be in the latent space.
The latent space of dimension is a space where each embedded dimension vector have their "unique point" in this particular latent space.
From this latent space representation, the decoder will then output a full 512 by 512 matrix, aiming to recreate the original image. The difference between this output image and the original image is calculated via MSE (mean squared error) between each pixel value. This difference is the loss value to be used for loss function calculation.
There is no real bottleneck stage. It is more like the action of bottleneck. This is because the output from the encoder is the input to the decoder.