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

name: optimization

name: Processing

# What does this PR do?
Adds a fast image processor for RT-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("PekingU/rtdetr_r50vd", use_fast=True)
```
```python
from transformers import RTDetrImageProcessorFast

processor = RTDetrImageProcessorFast.from_pretrained("PekingU/rtdetr_r50vd")
```

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 = RTDetrImageProcessorFast.from_pretrained("PekingU/rtdetr_r50vd")
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 10% of the COCO 2017 validation dataset, with `batch_size=1`.

![benchmark_results_full_pipeline_rt_detr_fast_single](https://github.com/user-attachments/assets/0c88b8c2-49ae-487e-8d0e-9be01cae70d3)


---

- Average over 10% of the COCO 2017 validation dataset, with `batch_size=8`.


![benchmark_results_full_pipeline_rt_detr_fast_batched](https://github.com/user-attachments/assets/a0d31c96-1194-4f6b-abcf-e5ae8088ed6d)


---

## Tests
- The new image processor is tested on all the tests of the current processor.
- I have also added a consistency test 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_34354). All of your documentation changes will be reflected on that endpoint. The docs are available until 30 days after the last update.

@ArthurZucker Refactored DETR and RT-DETR image processor fast to loop as few times as possible over annotations and images, and added some docs!

Does this improve the perf you saw? 😉 

> Thanks for iterating with me! 🤗

Thank you!

> Does this improve the perf you saw? 😉

Hmm hard to tell, maybe very slightly when on GPU, as on CPU the potential gains are overshadowed by the processing time. But at least it's cleaner that way! :)