@@ -1529,21 +1529,30 @@ def test_pipeline_image_to_text(self, model_arch: str):
1529
1529
1530
1530
1531
1531
class OVModelForCustomTasksIntegrationTest (unittest .TestCase ):
1532
- SUPPORTED_ARCHITECTURES = ["vit-with-attentions" ]
1532
+ SUPPORTED_ARCHITECTURES_WITH_ATTENTION = ["vit-with-attentions" ]
1533
+ SUPPORTED_ARCHITECTURES_WITH_HIDDEN_STATES = ["vit-with-hidden-states" ]
1533
1534
1534
- @parameterized .expand (SUPPORTED_ARCHITECTURES )
1535
- def test_compare_to_transformers (self , model_arch ):
1536
- model_id = MODEL_NAMES [model_arch ]
1537
- set_seed (SEED )
1538
- ov_model = OVModelForCustomTasks .from_pretrained (model_id , ov_config = F32_CONFIG )
1539
- self .assertIsInstance (ov_model .config , PretrainedConfig )
1540
- transformers_model = AutoModelForImageClassification .from_pretrained (model_id )
1541
- preprocessor = AutoFeatureExtractor .from_pretrained (model_id )
1535
+ def _get_sample_image (self ):
1542
1536
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
1543
1537
image = Image .open (requests .get (url , stream = True ).raw )
1538
+ return image
1539
+
1540
+ @parameterized .expand (SUPPORTED_ARCHITECTURES_WITH_ATTENTION )
1541
+ def test_compare_output_attentions (self , model_arch ):
1542
+ model_id = MODEL_NAMES [model_arch ]
1543
+
1544
+ image = self ._get_sample_image ()
1545
+ preprocessor = AutoFeatureExtractor .from_pretrained (model_id )
1544
1546
inputs = preprocessor (images = image , return_tensors = "pt" )
1547
+
1548
+ transformers_model = AutoModelForImageClassification .from_pretrained (model_id )
1549
+ transformers_model .eval ()
1545
1550
with torch .no_grad ():
1546
1551
transformers_outputs = transformers_model (** inputs , output_attentions = True )
1552
+
1553
+ ov_model = OVModelForCustomTasks .from_pretrained (model_id , ov_config = F32_CONFIG )
1554
+ self .assertIsInstance (ov_model .config , PretrainedConfig )
1555
+
1547
1556
for input_type in ["pt" , "np" ]:
1548
1557
inputs = preprocessor (images = image , return_tensors = input_type )
1549
1558
ov_outputs = ov_model (** inputs )
@@ -1561,3 +1570,36 @@ def test_compare_to_transformers(self, model_arch):
1561
1570
del transformers_model
1562
1571
del ov_model
1563
1572
gc .collect ()
1573
+
1574
+ @parameterized .expand (SUPPORTED_ARCHITECTURES_WITH_HIDDEN_STATES )
1575
+ def test_compare_output_hidden_states (self , model_arch ):
1576
+ model_id = MODEL_NAMES [model_arch ]
1577
+
1578
+ image = self ._get_sample_image ()
1579
+ preprocessor = AutoFeatureExtractor .from_pretrained (model_id )
1580
+ inputs = preprocessor (images = image , return_tensors = "pt" )
1581
+
1582
+ transformers_model = AutoModelForImageClassification .from_pretrained (model_id )
1583
+ transformers_model .eval ()
1584
+ with torch .no_grad ():
1585
+ transformers_outputs = transformers_model (** inputs , output_hidden_states = True )
1586
+
1587
+ ov_model = OVModelForCustomTasks .from_pretrained (model_id , ov_config = F32_CONFIG )
1588
+ self .assertIsInstance (ov_model .config , PretrainedConfig )
1589
+ for input_type in ["pt" , "np" ]:
1590
+ inputs = preprocessor (images = image , return_tensors = input_type )
1591
+ ov_outputs = ov_model (** inputs )
1592
+ self .assertIn ("logits" , ov_outputs )
1593
+ self .assertIsInstance (ov_outputs .logits , TENSOR_ALIAS_TO_TYPE [input_type ])
1594
+ self .assertTrue (torch .allclose (torch .Tensor (ov_outputs .logits ), transformers_outputs .logits , atol = 1e-4 ))
1595
+ self .assertTrue (
1596
+ all (
1597
+ torch .allclose (
1598
+ torch .Tensor (ov_outputs .hidden_states [i ]), transformers_outputs .hidden_states [i ], atol = 1e-4
1599
+ )
1600
+ for i in range (len (ov_outputs .hidden_states ))
1601
+ )
1602
+ )
1603
+ del transformers_model
1604
+ del ov_model
1605
+ gc .collect ()
0 commit comments