Add Image Processor Fast Deformable DETR
Author: yonigozlan
Pull request: yes
Labels: name: Vision

name: optimization

name: Processing

# What does this PR do?
Adds a fast image processor for Deformable DETR. Follows issue https://github.com/huggingface/transformers/issues/33810.
This image processor is a result of [this work](https://www.notion.so/huggingface2/OptimVision-Optimize-preprocessing-time-10f1384ebcac8091a12debb87fe5f591) on comparing different image processing method.

The diffs look bad but this PR is almost exclusively made up of `# Copied from` based on the fast image processor for DETR!

## Implementation
See https://github.com/huggingface/transformers/pull/34063

## Usage
Except for the fact that it only returns torch tensors, this fast processor is fully compatible with the current one.
It can be instantiated through AutoImageProcessor with use_fast=True, or through the Class directly:
```python
from transformers import AutoImageProcessor

processor = AutoImageProcessor.from_pretrained("SenseTime/deformable-detr", use_fast=True)
```
```python
from transformers import DeformableDetrImageProcessorFast

processor = DeformableDetrImageProcessorFast.from_pretrained("SenseTime/deformable-detr")
```

Usage is the same as the current processor, except for the `device` kwarg:
```python
from torchvision.io import read_image
images = torchvision.io.read_image(image_path)
processor = DeformableDetrImageProcessorFast.from_pretrained("SenseTime/deformable-detr")
images_processed = processor(images , return_tensors="pt", device="cuda")
```
If `device` is not specified:
- If the input images are tensors, the processing will be done on the device of the images.
- If the inputs are PIL or Numpy images, the processing is done on CPU.

## Performance gains

- Average over 100 runs on the same 480x640 image. No padding needed, as "all" the images have the same size.

![benchmark_results_full_pipeline_deformable_detr_fast_single](https://github.com/user-attachments/assets/f16b78ef-849a-44a8-a2b0-94b236fd3ce2)

---

- Average over 10% of the COCO 2017 validation dataset, with `batch_size=8`. Forcing padding to 1333x1333 (="longest_edge"), as otherwise torch.compile needs to recompile if the different batches have different max sizes.

![benchmark_results_full_pipeline_deformable_detr_fast_batched_compiled](https://github.com/user-attachments/assets/ac201f68-0fbf-459c-87be-50909f7dc2cd)


---

- Average over 10% of the COCO 2017 validation dataset, with `batch_size=1`. Forcing padding to 1333x1333.
![benchmark_results_full_pipeline_deformable_detr_fast_padded](https://github.com/user-attachments/assets/066de4b1-0742-484d-bdc9-8a24b21a1154)


---

## Tests
- The new image processor is tested on all the tests of the current processor.
- I have also added two consistency tests (panoptic and detection) for processing on GPU vs CPU.


<!--
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.
-->

## Who can review?

@ArthurZucker Pinging you directly as there is almost no "new" code here.

<!-- Your PR will be replied to more quickly if you can figure out the right person to tag with @

 If you know how to use git blame, that is the easiest way, otherwise, here is a rough guide of **who to tag**.
 Please tag fewer than 3 people.

Models:

- text models: @ArthurZucker
- vision models: @amyeroberts, @qubvel
- speech models: @ylacombe, @eustlb
- graph models: @clefourrier

Library:

- flax: @sanchit-gandhi
- generate: @zucchini-nlp (visual-language models) or @gante (all others)
- pipelines: @Rocketknight1
- tensorflow: @gante and @Rocketknight1
- tokenizers: @ArthurZucker
- trainer: @muellerzr and @SunMarc
- chat templates: @Rocketknight1

Integrations:

- deepspeed: HF Trainer/Accelerate: @muellerzr
- ray/raytune: @richardliaw, @amogkam
- Big Model Inference: @SunMarc
- quantization (bitsandbytes, autogpt): @SunMarc @MekkCyber

Documentation: @stevhliu

HF projects:

- accelerate: [different repo](https://github.com/huggingface/accelerate)
- datasets: [different repo](https://github.com/huggingface/datasets)
- diffusers: [different repo](https://github.com/huggingface/diffusers)
- rust tokenizers: [different repo](https://github.com/huggingface/tokenizers)

Maintained examples (not research project or legacy):

- Flax: @sanchit-gandhi
- PyTorch: See Models above and tag the person corresponding to the modality of the example.
- TensorFlow: @Rocketknight1

 -->


Comments:
The docs for this PR live [here](https://moon-ci-docs.huggingface.co/docs/transformers/pr_34353). All of your documentation changes will be reflected on that endpoint. The docs are available until 30 days after the last update.

Will make the modifications once this PR https://github.com/huggingface/transformers/pull/34354 is merged, as most of them will be copied from :)

> One thing I don't understand: literally everything is copied from. Why not directy map to use the detr class?

All pre-processing functions are copied from `image_processing_detr_fast`, but the post-processing function are copied from `image_processing_deformable_detr`. I guess the post-processing functions are also the reasons why there is a base `DeformableDetrImageProcessorFast` in the first place, as all the base pre-processing functions are also copied from `image_processing_detr`