Adding GroupViT Models
# What does this PR do?

This PR implements paper [GroupViT: Semantic Segmentation Emerges from Text Supervision](https://arxiv.org/abs/2202.11094), the model is converted from [official implementation](https://github.com/NVlabs/GroupViT).

- [x] Inference accuracy matched
- [x] Complete docstring and model cards

<!--
Congratulations! You've made it this far! You're not quite done yet though.

Once merged, your PR is going to appear in the release notes with the title you set, so make sure it's a great title that fully reflects the extent of your awesome contribution.

Then, please replace this with a description of the change and which issue is fixed (if applicable). Please also include relevant motivation and context. List any dependencies (if any) that are required for this change.

Once you're done, someone will review your PR shortly (see the section "Who can review?" below to tag some potential reviewers). They may suggest changes to make the code even better. If no one reviewed your PR after a week has passed, don't hesitate to post a new comment @-mentioning the same persons---sometimes notifications get lost.
-->

<!-- Remove if not applicable -->

## Who can review?

Anyone in the community is free to review the PR once the tests have passed. Feel free to tag
members/contributors who may be interested in your PR.

@NielsRogge 


_The documentation is not available anymore as the PR was closed or merged._<|||||>CI somehow failed due to connection issue. Could you please restart it?<|||||>Hi @NielsRogge 
I have resolved all the comments. 

Regarding your concern, I think it's a little bit hard to combine them since `GroupViTVisionLayer` follows `ViT` and `GroupViTTextEncoderLayer` follows `CLIP`. <|||||>Btw, I still don't know why PR doc build failed. Any idea?<|||||>@patil-suraj are you fine with the fact that the vision and text encoder use separate classes (`GroupViTVisionLayer` and `GroupViTTextEncoderLayer` respectively), even though they do the same thing? The only reason we keep `GroupViTVisionLayer` is because the vision encoder implementation is copied from ViT.

So either we keep the two separate classes with `# Copied from` statements, or we remove the copied from and just create a single `GroupViTEncoderLayer` class (as is done in CLIP).

Pinging @mishig25 regarding the build_documentation CI issue
<|||||>Sorry to only reply now.

> are you fine with the fact that the vision and text encoder use separate classes (GroupViTVisionLayer and GroupViTTextEncoderLayer respectively), even though they do the same thing? The only reason we keep GroupViTVisionLayer is because the vision encoder implementation is copied from ViT.

If  `GroupViTVisionLayer` and `GroupViTTextEncoderLayer` are exactly similar then IMO it's better to just have one `GroupViTEncoderLayer`, this will make the code much more readable.  I am not in favor of adding extra modules just for `#copied from..` statememts.<|||||>Yes same, so @xvjiarui you can remove the copied from statements from the vision encoder in favor of simpler code. <|||||>Awesome work, thanks a lot!! Merging :)