Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use non nested images and batched text Idefics2/3 #34222

Merged
merged 4 commits into from
Oct 25, 2024

Conversation

yonigozlan
Copy link
Member

What does this PR do?

Unlike most other image-text-to-text models, Idefics2 and Idefics3 do not support inputs such as:
images=[image1, image2], text=["text1 <image>", "text2 <image>"]
But needs images to be nested to follow the number of tokens in each prompt:
images=[[image1], [image2]], text=["text1 <image>", "text2 <image>"]

This PR adds support for the former, and also for deducing the nesting of a flat image lists to follow the number of image tokens in each prompt, meaning that this is also supported:
images=[image1, image2, image3], text=["text1 <image>", "text2 <image><image>"]

This is done mostly to have a consistent batching behavior in the image-text-to-text pipeline between Idefics2/3 and other models.

Who can review?

@andimarafioti

@yonigozlan yonigozlan force-pushed the fix-non-nested-images-idefics branch from 564b47d to e45cc3a Compare October 21, 2024 12:29
Copy link
Member

@andimarafioti andimarafioti left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good job! This is a clean way to pass images so it's great that it's supported !

Copy link
Collaborator

@ArthurZucker ArthurZucker left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, can you -properly test the different error scenario as it is done in:

def test_process_interleaved_images_prompts_image_error(self):

Comment on lines 228 to 233
images = [
images[sum(n_images_in_text[:i]) : sum(n_images_in_text[: i + 1])]
for i in range(len(n_images_in_text))
]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

indexes can be determined from a cumsum here no?

@yonigozlan yonigozlan mentioned this pull request Oct 22, 2024
2 tasks
@yonigozlan yonigozlan force-pushed the fix-non-nested-images-idefics branch from e45cc3a to e35203f Compare October 22, 2024 15:28
@HuggingFaceDocBuilderDev

The docs for this PR live here. All of your documentation changes will be reflected on that endpoint. The docs are available until 30 days after the last update.

@yonigozlan
Copy link
Member Author

Added tests @ArthurZucker :)

Copy link
Collaborator

@ArthurZucker ArthurZucker left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, missing one more!

processor(text=text, images=images, padding=True)
images = [self.image1]
with self.assertRaises(ValueError):
processor(text=text, images=images, padding=True)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what about the case when there is 1 image token in 1 prompt, and 1 image:

        text = [
            "This is a test sentence.",
            "In this other sentence we try some good things<image>",
        ]

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmmm I think this won't raise an error here, I will try

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh it does raise an error, because it creates an empty list which is not accepted as an image, my bad!
Added the tests and synced them with a copied from

@yonigozlan yonigozlan force-pushed the fix-non-nested-images-idefics branch from 6b75745 to da0ca3c Compare October 24, 2024 22:59
@yonigozlan yonigozlan merged commit 940a6bd into huggingface:main Oct 25, 2024
12 checks passed
gallilmaimon pushed a commit to gallilmaimon/transformers that referenced this pull request Oct 26, 2024
* add support for non nested images and add tests

* add tests error scenario

* fix style

* added single and no image to error tests
BernardZach pushed a commit to BernardZach/transformers that referenced this pull request Dec 5, 2024
* add support for non nested images and add tests

* add tests error scenario

* fix style

* added single and no image to error tests
BernardZach pushed a commit to innovationcore/transformers that referenced this pull request Dec 6, 2024
* add support for non nested images and add tests

* add tests error scenario

* fix style

* added single and no image to error tests
ylacombe added a commit that referenced this pull request Dec 10, 2024
* Support BatchNorm in Hubert pos_conv_emb as in fairseq

* Correct the new defaults (#34377)

* Correct the new defaults

* CIs

* add check

* Update utils.py

* Update utils.py

* Add the max_length in generate test checking shape without passing length

* style

* CIs

* fix fx CI issue

* [auto. ping] Avoid sending empty info + add more team members (#34383)

* update

* update

---------

Co-authored-by: ydshieh <ydshieh@users.noreply.github.com>

* Fix glm  (#34388)

* Fix duplicated

* fix import

* Use non nested images and batched text Idefics2/3  (#34222)

* add support for non nested images and add tests

* add tests error scenario

* fix style

* added single and no image to error tests

* Fix onnx non-expotable inplace aten op (#34376)

* fix onnx non-expotable inplace op

* mistral, qwen2, qwen2_vl, starcoder2

* fixup copies

* Fix right padding in LLaVA models (#34305)

* fix right pad llavas

* device mismatch

* no filter (#34391)

* no filter

* no filter

* no filter

---------

Co-authored-by: ydshieh <ydshieh@users.noreply.github.com>

* SynthID: better example (#34372)

* better example

* Update src/transformers/generation/configuration_utils.py

* Update src/transformers/generation/logits_process.py

* nits

* Tests: upgrade `test_eager_matches_sdpa_generate` (#34386)

* Fix bnb training test failure (#34414)

* Fix bnb training test: compatibility with OPTSdpaAttention

* Avoid check expected exception when it is on CUDA (#34408)

* update

* update

---------

Co-authored-by: ydshieh <ydshieh@users.noreply.github.com>

* Fix typos in agents_advanced.md (#34405)

* [docs] Cache implementations (#34325)

cache

* [run-slow] hubert

* Support BatchNorm in Hubert pos_conv_emb as in fairseq
Add conversion integration test, and make batchnorm explicit variable

* Support BatchNorm in Hubert pos_conv_emb as in fairseq
fix make fixup styling changes

* [run-slow] hubert

* Support BatchNorm in Hubert pos_conv_emb as in fairseq

* [run-slow] hubert

* Support BatchNorm in Hubert pos_conv_emb as in fairseq
Add conversion integration test, and make batchnorm explicit variable

* Support BatchNorm in Hubert pos_conv_emb as in fairseq
fix make fixup styling changes

* [run-slow] hubert

* [run-slow] hubert

---------

Co-authored-by: Cyril Vallez <cyril.vallez@huggingface.co>
Co-authored-by: Yih-Dar <2521628+ydshieh@users.noreply.github.com>
Co-authored-by: ydshieh <ydshieh@users.noreply.github.com>
Co-authored-by: Yoni Gozlan <74535834+yonigozlan@users.noreply.github.com>
Co-authored-by: Ilyas Moutawwakil <57442720+IlyasMoutawwakil@users.noreply.github.com>
Co-authored-by: Raushan Turganbay <raushan@huggingface.co>
Co-authored-by: Joao Gante <joaofranciscocardosogante@gmail.com>
Co-authored-by: Matthew Douglas <38992547+matthewdouglas@users.noreply.github.com>
Co-authored-by: Rudy Delouya <rudy.delouya@gmail.com>
Co-authored-by: Steven Liu <59462357+stevhliu@users.noreply.github.com>
Co-authored-by: Yoach Lacombe <52246514+ylacombe@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants