ResNetD
# What does this PR do?
This WIP PR adds ResNetD proposed in [Bag of Tricks for Image Classification with Convolutional Neural Networks](https://arxiv.org/abs/1812.01187). 

Currently, the model can be used as follows

```python
import requests
from io import BytesIO
res = requests.get('https://github.com/huggingface/transformers/blob/master/tests/fixtures/tests_samples/COCO/000000039769.png?raw=true')
image = Image.open(BytesIO(res.content))

feature_extractor = AutoFeatureExtractor.from_pretrained("zuppif/resnet-d-50")
model = ResNetForImageClassification.from_pretrained("zuppif/resnet-d-50").eval()

inputs = feature_extractor(image, return_tensors="pt")
outputs = model(**inputs)
print(model.config.id2label[torch.argmax(outputs.logits).item()])
# tiger cat
```

## TODO
- [ ] Transfer weights to amazon
The docs for this PR live [here](https://moon-ci-docs.huggingface.co/docs/transformers/pr_16162). All of your documentation changes will be reflected on that endpoint.<|||||>> Thanks for adding this. I wonder if the ResNet-D architecture shouldn't have switches in its architecture to allow all modifications (A, B, C) independently, since they were all defined in the same paper.
> 
> Apart from that, LGTM! The model outputs just need to refactored in one model output in a separate PR.

So the `d` variant is the only one used in practice because it's the combination of all the empirical improvements they show in the paper (so variant b + c = d). <|||||>I'm aware, but since the paper explores B and C independently too, it might make sense to enable them via config flags (while keeping the default to D).<|||||>> I'm aware, but since the paper explores B and C independently too, it might make sense to enable them via config flags (while keeping the default to D).

This seems impossible with the current setup, the model is called `ResNetD` thus it has to be resnet-d. If we want to have all the variants we should add them to `ResNet` and create `ResNetD` using a specific set of parameters in the `ResNetConfig`. 

For instance, if I want to create `ResNetC` how should I call the `*ShortCut`? `ResNetDCShortCut`?
<|||||>> This seems impossible with the current setup, the model is called ResNetD thus it has to be resnet-d.

Why? It should be called ResNet-D (because that is the final name in the paper) and it can still have config flags to enable the variants.
Anyhow, you don't want to add it so let's stop commenting about it and just merge this.<|||||>Update the codebase and modify one test in `test_config_auto` to check for an exact match (otherwise `resnetd` is matched with `resnet` thus failing the test)<|||||>Due to the incoming changes from #16188 , I want to merge that first and then rebase + update the codebase here<|||||>This issue has been automatically marked as stale because it has not had recent activity. If you think this still needs to be addressed please comment on this thread.

Please note that issues that do not follow the [contributing guidelines](https://github.com/huggingface/transformers/blob/main/CONTRIBUTING.md) are likely to be ignored.