Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/source/openvino/models.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ Here is the list of the supported architectures :
- DeepSeek
- DeepSeek-V2
- DeepSeek-V3
- DINOv3 (ConvNeXt variant)
- DistilBERT
- ERNIE 4.5
- ELECTRA
Expand Down
6 changes: 5 additions & 1 deletion optimum/exporters/openvino/model_configs.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,6 @@
NormalizedVisionConfig,
)


COMMON_TEXT_TASKS = [
"feature-extraction",
"fill-mask",
Expand Down Expand Up @@ -5842,6 +5841,11 @@ class ConvNextOpenVINOConfig(ViTOpenVINOConfig):
pass


@register_in_tasks_manager("dinov3_convnext", *["feature-extraction"])
class DINOv3ConvNextOpenVINOConfig(ViTOpenVINOConfig):
pass


@register_in_tasks_manager("resnet", *["feature-extraction", "image-classification"])
class ResNetOpenVINOConfig(ViTOpenVINOConfig):
pass
Expand Down
37 changes: 36 additions & 1 deletion tests/openvino/test_modeling.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,6 @@
)
from optimum.utils.testing_utils import require_diffusers


os.environ["TOKENIZERS_PARALLELISM"] = "false"


Expand Down Expand Up @@ -1545,6 +1544,9 @@ def test_compare_to_transformers(self, model_arch):
class OVModelForCustomTasksIntegrationTest(unittest.TestCase):
SUPPORTED_ARCHITECTURES_WITH_ATTENTION = ["vit-with-attentions"]
SUPPORTED_ARCHITECTURES_WITH_HIDDEN_STATES = ["vit-with-hidden-states"]
# Vision feature-extraction backbones (pixel_values -> last_hidden_state, no classification
# head), unlike OVModelForFeatureExtraction which is hard-coded for text inputs.
SUPPORTED_ARCHITECTURES_VISION_FEATURE_EXTRACTION = ["dinov3_convnext"]

def _get_sample_image(self):
url = TEST_IMAGE_URL
Expand Down Expand Up @@ -1627,6 +1629,39 @@ def test_compare_output_hidden_states(self, model_arch):
del ov_model
gc.collect()

@parameterized.expand(SUPPORTED_ARCHITECTURES_VISION_FEATURE_EXTRACTION)
def test_compare_output_vision_feature_extraction(self, model_arch):
model_id = MODEL_NAMES[model_arch]

image = self._get_sample_image()
preprocessor = AutoImageProcessor.from_pretrained(model_id)
inputs = preprocessor(images=image, return_tensors="pt")

transformers_model = AutoModel.from_pretrained(model_id)
transformers_model.eval()
with torch.no_grad():
transformers_outputs = transformers_model(**inputs)

ov_model = OVModelForCustomTasks.from_pretrained(
model_id, export=True, task="feature-extraction", ov_config=F32_CONFIG, device=OPENVINO_DEVICE
)
self.assertIsInstance(ov_model.config, PretrainedConfig)

for input_type in ["pt", "np"]:
inputs = preprocessor(images=image, return_tensors=input_type)
ov_outputs = ov_model(**inputs)
self.assertIn("last_hidden_state", ov_outputs)
self.assertIsInstance(ov_outputs.last_hidden_state, TENSOR_ALIAS_TO_TYPE[input_type])
self.assertTrue(
torch.allclose(
torch.Tensor(ov_outputs.last_hidden_state), transformers_outputs.last_hidden_state, atol=1e-4
)
)

del transformers_model
del ov_model
gc.collect()


class OVModelForOpenCLIPZeroShortImageClassificationTest(unittest.TestCase):
OV_MODEL_ID = HUB_MODEL_NAMES["open-clip"]
Expand Down
1 change: 1 addition & 0 deletions tests/openvino/utils_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,7 @@ def _create_tiny_kokoro_model():
"deit": "optimum-intel-internal-testing/tiny-random-DeiTModel",
"convnext": "optimum-intel-internal-testing/tiny-random-convnext",
"convnextv2": "optimum-intel-internal-testing/tiny-random-ConvNextV2Model",
"dinov3_convnext": "optimum-intel-internal-testing/tiny-random-dinov3_convnext",
"distilbert": "optimum-intel-internal-testing/tiny-random-distilbert",
"distilbert-ov": "optimum-intel-internal-testing/ov-tiny-random-distilbert",
"donut": "optimum-internal-testing/tiny-random-VisionEncoderDecoderModel-donut",
Expand Down