Why do the inputs and outputs of a convolutional layer usually have the same depth? Here's the famous VGG-16 model.

Do the inputs and outputs of a convolutional layer, before pooling, usually have the same depth?  What's the reason for that?
Is there a theory or paper trying to explain this kind of setting?
Keeping the same channel size allows the model to maintain rank but i would say the main reason is convenience. Its easier book keeping.

Also in many model cases output features need some form of alignment with the input (example being all models using residual units -- $\hat{x} = F(x) + x$