Add DeiT (PyTorch)
Author: NielsRogge
Pull request: yes

# What does this PR do?

This PR adds [DeiT (Data-efficient Image Transformers)](https://ai.facebook.com/blog/data-efficient-image-transformers-a-promising-new-technique-for-image-classification/) by Facebook AI.

It's a near-copy of ViT, with only some slight changes:

- DeiT add a distillation token, besides the class token, to the patch sequences to effectively learn from a teacher (CNN).
- Fine-tuning DeiT models can happen in two ways: either as is done in ViT, by only placing a linear layer on top of the final hidden state of the class token, or with a teacher (by placing a linear layer on top of both the final hidden states of the class and distillation tokens). I've defined both models as `DeiTForImageClassification` and `DeiTForImageClassificationWithTeacher`. Currently, the latter supports inference-only. I think that fine-tuning this model with a teacher is something than can be placed in the `examples/research_projects` directory. 
- `DeiTFeatureExtractor` is a bit different compared to `ViTFeatureExtractor`. It uses a different interpolation scheme when resizing images, uses the ImageNet mean/std when normalizing and uses center cropping. 

To do:

- [x] Upload remaining DeiT distilled checkpoints, once `DeiTForImageClassificationWithTeacher` design has been approved.
- [x] Fix integration tests, based on those.
- [x] Update `DeiTFeatureExtractor`, based on functions defined in `image_utils.py`.
- [x] Add `DeiTForImageClassificationWithTeacher` to `modeling_auto.py`. However, we have 2 models with the same key (`DeiTConfig`) in an `OrderedDict`..
- [x] Add model cards.

cc @sgugger @LysandreJik @patil-suraj 


Comments:
Thanks for the review, I've addressed your comments.

However, I'm getting the following error when running `make quality`:
```
Exception: Found the following copy inconsistencies:
- src/transformers\models\deit\modeling_deit.py: copy does not match models.vit.modeling_vit.ViTSelfOutput at line 177
- src/transformers\models\deit\modeling_deit.py: copy does not match models.vit.modeling_vit.ViTPreTrainedModel at line 372
```

Even though they are exact copies.. 

Update: when running `make fix-copies` I see why, the first one has "DeiTLayer" in its docstring instead of "ViTLayer". The other one is not an exact copy as it has "deit" as `base_model_prefix` instead of "vit". How to resolve this?

Also, I'd like to add a `# copied from` to `DeiTModel`, should I place this comment above the `@add_start_docstrings` annotator?


> I see why, the first one has "DeiTLayer" in its docstring instead of "ViTLayer".

Not the Vit one has "VitLayer" which is why the fix-copy fails.

> The other one is not an exact copy as it has "deit" as base_model_prefix instead of "vit". How to resolve this?

You can add `all-casing` at the end of your Copied from statement so it replaces the lowercase version of ViT by DeiT

> Also, I'd like to add a # copied from to DeiTModel, should I place this comment above the @add_start_docstrings annotator?

It should be between the add_start_docstrings and the class.

Thanks, `make fix-copies` is ok now. 

@LysandreJik let me know if you agree on the design of `DeiTForImageClassificationWithTeacher` (which raises a `NotImplementedError` if one specifies labels since this model supports inference only), then I can finish this PR today.