evalscope 0.14.0__py3-none-any.whl → 0.15.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of evalscope might be problematic. Click here for more details.

Files changed (181) hide show
  1. evalscope/arguments.py +2 -1
  2. evalscope/benchmarks/__init__.py +2 -2
  3. evalscope/benchmarks/aigc/__init__.py +0 -0
  4. evalscope/benchmarks/aigc/t2i/__init__.py +0 -0
  5. evalscope/benchmarks/aigc/t2i/base.py +56 -0
  6. evalscope/benchmarks/aigc/t2i/evalmuse_adapter.py +77 -0
  7. evalscope/benchmarks/aigc/t2i/genai_bench_adapter.py +58 -0
  8. evalscope/benchmarks/aigc/t2i/general_t2i_adapter.py +58 -0
  9. evalscope/benchmarks/aigc/t2i/hpdv2_adapter.py +57 -0
  10. evalscope/benchmarks/aigc/t2i/tifa_adapter.py +37 -0
  11. evalscope/benchmarks/aime/aime24_adapter.py +1 -1
  12. evalscope/benchmarks/aime/aime25_adapter.py +4 -4
  13. evalscope/benchmarks/alpaca_eval/alpaca_eval_adapter.py +1 -2
  14. evalscope/benchmarks/arc/arc_adapter.py +1 -1
  15. evalscope/benchmarks/arena_hard/arena_hard_adapter.py +1 -3
  16. evalscope/benchmarks/ceval/ceval_adapter.py +2 -2
  17. evalscope/benchmarks/chinese_simple_qa/csimple_qa_adapter.py +1 -3
  18. evalscope/benchmarks/cmmlu/cmmlu_adapter.py +1 -1
  19. evalscope/benchmarks/competition_math/competition_math_adapter.py +1 -2
  20. evalscope/benchmarks/data_adapter.py +16 -9
  21. evalscope/benchmarks/data_collection/data_collection_adapter.py +6 -4
  22. evalscope/benchmarks/general_mcq/general_mcq_adapter.py +2 -2
  23. evalscope/benchmarks/general_qa/general_qa_adapter.py +3 -3
  24. evalscope/benchmarks/live_code_bench/evaluate_utils.py +16 -21
  25. evalscope/benchmarks/live_code_bench/live_code_bench_adapter.py +4 -1
  26. evalscope/benchmarks/live_code_bench/testing_util.py +6 -3
  27. evalscope/benchmarks/math_500/math_500_adapter.py +1 -1
  28. evalscope/benchmarks/mmlu/mmlu_adapter.py +3 -1
  29. evalscope/benchmarks/simple_qa/simple_qa_adapter.py +1 -2
  30. evalscope/benchmarks/utils.py +7 -16
  31. evalscope/cli/start_app.py +1 -1
  32. evalscope/collections/evaluator.py +16 -4
  33. evalscope/config.py +7 -3
  34. evalscope/constants.py +11 -0
  35. evalscope/evaluator/evaluator.py +9 -3
  36. evalscope/evaluator/reviewer/auto_reviewer.py +1 -1
  37. evalscope/metrics/__init__.py +49 -4
  38. evalscope/metrics/llm_judge.py +1 -1
  39. evalscope/metrics/named_metrics.py +13 -0
  40. evalscope/metrics/t2v_metrics/__init__.py +66 -0
  41. evalscope/metrics/t2v_metrics/clipscore.py +14 -0
  42. evalscope/metrics/t2v_metrics/constants.py +12 -0
  43. evalscope/metrics/t2v_metrics/itmscore.py +14 -0
  44. evalscope/metrics/t2v_metrics/models/__init__.py +0 -0
  45. evalscope/metrics/t2v_metrics/models/clipscore_models/__init__.py +30 -0
  46. evalscope/metrics/t2v_metrics/models/clipscore_models/build_mps_model/__init__.py +0 -0
  47. evalscope/metrics/t2v_metrics/models/clipscore_models/build_mps_model/base_model.py +6 -0
  48. evalscope/metrics/t2v_metrics/models/clipscore_models/build_mps_model/clip_model.py +132 -0
  49. evalscope/metrics/t2v_metrics/models/clipscore_models/build_mps_model/cross_modeling.py +286 -0
  50. evalscope/metrics/t2v_metrics/models/clipscore_models/clip_model.py +114 -0
  51. evalscope/metrics/t2v_metrics/models/clipscore_models/hpsv2_model.py +86 -0
  52. evalscope/metrics/t2v_metrics/models/clipscore_models/mps_model.py +85 -0
  53. evalscope/metrics/t2v_metrics/models/clipscore_models/pickscore_model.py +62 -0
  54. evalscope/metrics/t2v_metrics/models/itmscore_models/__init__.py +26 -0
  55. evalscope/metrics/t2v_metrics/models/itmscore_models/blip2_itm_model.py +84 -0
  56. evalscope/metrics/t2v_metrics/models/itmscore_models/fga_blip2_model.py +97 -0
  57. evalscope/metrics/t2v_metrics/models/itmscore_models/image_reward/ImageReward.py +171 -0
  58. evalscope/metrics/t2v_metrics/models/itmscore_models/image_reward/__init__.py +0 -0
  59. evalscope/metrics/t2v_metrics/models/itmscore_models/image_reward/blip_pretrain.py +80 -0
  60. evalscope/metrics/t2v_metrics/models/itmscore_models/image_reward_model.py +73 -0
  61. evalscope/metrics/t2v_metrics/models/model.py +45 -0
  62. evalscope/metrics/t2v_metrics/models/utils.py +25 -0
  63. evalscope/metrics/t2v_metrics/models/vqascore_models/__init__.py +22 -0
  64. evalscope/metrics/t2v_metrics/models/vqascore_models/clip_t5/__init__.py +0 -0
  65. evalscope/metrics/t2v_metrics/models/vqascore_models/clip_t5/model/__init__.py +1 -0
  66. evalscope/metrics/t2v_metrics/models/vqascore_models/clip_t5/model/language_model/clip_t5.py +300 -0
  67. evalscope/metrics/t2v_metrics/models/vqascore_models/clip_t5/model/multimodal_encoder/builder.py +12 -0
  68. evalscope/metrics/t2v_metrics/models/vqascore_models/clip_t5/model/multimodal_encoder/clip_encoder.py +82 -0
  69. evalscope/metrics/t2v_metrics/models/vqascore_models/clip_t5/model/multimodal_projector/builder.py +50 -0
  70. evalscope/metrics/t2v_metrics/models/vqascore_models/clip_t5_model.py +218 -0
  71. evalscope/metrics/t2v_metrics/models/vqascore_models/gpt4v_model.py +150 -0
  72. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/__init__.py +26 -0
  73. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/common/config.py +465 -0
  74. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/common/dist_utils.py +141 -0
  75. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/common/gradcam.py +22 -0
  76. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/common/logger.py +188 -0
  77. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/common/optims.py +106 -0
  78. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/common/registry.py +307 -0
  79. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/common/utils.py +416 -0
  80. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/common/vqa_tools/__init__.py +8 -0
  81. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/common/vqa_tools/vqa.py +191 -0
  82. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/common/vqa_tools/vqa_eval.py +318 -0
  83. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/default.yaml +10 -0
  84. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_caption_flant5xl.yaml +42 -0
  85. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_caption_opt2.7b.yaml +42 -0
  86. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_caption_opt6.7b.yaml +42 -0
  87. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_coco.yaml +36 -0
  88. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_instruct_flant5xl.yaml +43 -0
  89. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_instruct_flant5xxl.yaml +43 -0
  90. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_instruct_vicuna13b.yaml +43 -0
  91. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_instruct_vicuna7b.yaml +43 -0
  92. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_pretrain.yaml +36 -0
  93. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_pretrain_flant5xl.yaml +42 -0
  94. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_pretrain_flant5xl_iter_80k_total_100k_no_prefix.yaml +42 -0
  95. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_pretrain_flant5xl_iter_80k_total_100k_prefix.yaml +42 -0
  96. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_pretrain_flant5xl_vitL.yaml +43 -0
  97. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_pretrain_flant5xxl.yaml +42 -0
  98. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_pretrain_opt2.7b.yaml +42 -0
  99. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_pretrain_opt6.7b.yaml +42 -0
  100. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_pretrain_vitL.yaml +37 -0
  101. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_vicuna13b.yaml +43 -0
  102. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/blip2/blip2_vicuna7b.yaml +43 -0
  103. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/med_config.json +21 -0
  104. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/med_config_albef.json +22 -0
  105. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/configs/models/med_large_config.json +21 -0
  106. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/__init__.py +208 -0
  107. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/base_model.py +231 -0
  108. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip2_models/Qformer.py +1093 -0
  109. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip2_models/__init__.py +0 -0
  110. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip2_models/blip2.py +211 -0
  111. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip2_models/blip2_image_text_matching.py +109 -0
  112. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip2_models/blip2_qformer.py +452 -0
  113. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip2_models/blip2_t5.py +364 -0
  114. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip2_models/blip2_t5_instruct.py +755 -0
  115. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip2_models/fga_blip2.py +273 -0
  116. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip2_models/modeling_llama.py +880 -0
  117. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip2_models/modeling_t5.py +1844 -0
  118. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip_models/__init__.py +81 -0
  119. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip_models/blip.py +56 -0
  120. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip_models/blip_caption.py +212 -0
  121. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip_models/blip_classification.py +164 -0
  122. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip_models/blip_feature_extractor.py +202 -0
  123. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip_models/blip_image_text_matching.py +185 -0
  124. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip_models/blip_nlvr.py +178 -0
  125. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip_models/blip_outputs.py +112 -0
  126. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip_models/blip_pretrain.py +371 -0
  127. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip_models/blip_vqa.py +344 -0
  128. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/blip_models/nlvr_encoder.py +858 -0
  129. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/clip_vit.py +271 -0
  130. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/eva_vit.py +503 -0
  131. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/med.py +1270 -0
  132. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/models/vit.py +473 -0
  133. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/processors/__init__.py +31 -0
  134. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/processors/base_processor.py +27 -0
  135. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/processors/blip_processors.py +233 -0
  136. evalscope/metrics/t2v_metrics/models/vqascore_models/lavis/processors/randaugment.py +392 -0
  137. evalscope/metrics/t2v_metrics/models/vqascore_models/mm_utils.py +127 -0
  138. evalscope/metrics/t2v_metrics/models/vqascore_models/vqa_model.py +17 -0
  139. evalscope/metrics/t2v_metrics/score.py +78 -0
  140. evalscope/metrics/t2v_metrics/vqascore.py +14 -0
  141. evalscope/models/__init__.py +50 -14
  142. evalscope/models/adapters/__init__.py +17 -0
  143. evalscope/models/{base_adapter.py → adapters/base_adapter.py} +17 -17
  144. evalscope/models/{chat_adapter.py → adapters/chat_adapter.py} +10 -7
  145. evalscope/models/{choice_adapter.py → adapters/choice_adapter.py} +2 -6
  146. evalscope/models/{custom_adapter.py → adapters/custom_adapter.py} +2 -4
  147. evalscope/models/{server_adapter.py → adapters/server_adapter.py} +1 -3
  148. evalscope/models/adapters/t2i_adapter.py +76 -0
  149. evalscope/models/custom/__init__.py +2 -1
  150. evalscope/models/custom/dummy_model.py +11 -13
  151. evalscope/models/local_model.py +82 -33
  152. evalscope/models/model.py +2 -42
  153. evalscope/models/register.py +26 -0
  154. evalscope/perf/benchmark.py +4 -3
  155. evalscope/perf/main.py +4 -2
  156. evalscope/perf/plugin/datasets/flickr8k.py +2 -1
  157. evalscope/perf/utils/benchmark_util.py +2 -2
  158. evalscope/perf/utils/db_util.py +16 -8
  159. evalscope/report/__init__.py +1 -0
  160. evalscope/report/app.py +117 -67
  161. evalscope/report/app_arguments.py +11 -0
  162. evalscope/report/generator.py +1 -1
  163. evalscope/run.py +3 -3
  164. evalscope/third_party/thinkbench/eval.py +19 -7
  165. evalscope/utils/chat_service.py +2 -2
  166. evalscope/utils/import_utils.py +66 -0
  167. evalscope/utils/utils.py +12 -4
  168. evalscope/version.py +2 -2
  169. {evalscope-0.14.0.dist-info → evalscope-0.15.1.dist-info}/METADATA +20 -3
  170. {evalscope-0.14.0.dist-info → evalscope-0.15.1.dist-info}/RECORD +178 -66
  171. tests/aigc/__init__.py +1 -0
  172. tests/aigc/test_t2i.py +87 -0
  173. tests/cli/test_run.py +20 -7
  174. tests/perf/test_perf.py +6 -3
  175. evalscope/metrics/code_metric.py +0 -98
  176. evalscope/metrics/resources/gpt2-zhcn3-v4.bpe +0 -58485
  177. evalscope/metrics/resources/gpt2-zhcn3-v4.json +0 -1
  178. {evalscope-0.14.0.dist-info → evalscope-0.15.1.dist-info}/LICENSE +0 -0
  179. {evalscope-0.14.0.dist-info → evalscope-0.15.1.dist-info}/WHEEL +0 -0
  180. {evalscope-0.14.0.dist-info → evalscope-0.15.1.dist-info}/entry_points.txt +0 -0
  181. {evalscope-0.14.0.dist-info → evalscope-0.15.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,273 @@
1
+ """
2
+ Copyright (c) 2022, salesforce.com, inc.
3
+ All rights reserved.
4
+ SPDX-License-Identifier: BSD-3-Clause
5
+ For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause
6
+ """
7
+
8
+ import torch
9
+ import torch.nn as nn
10
+ import torch.nn.functional as F
11
+
12
+ from ...common.registry import registry
13
+ from ..blip_models.blip_outputs import BlipOutput
14
+ from .blip2_qformer import Blip2Qformer
15
+
16
+
17
+ class MLP(nn.Module):
18
+
19
+ def __init__(self, input_size):
20
+ super().__init__()
21
+ self.input_size = input_size
22
+
23
+ self.layers = nn.Sequential(
24
+ nn.Linear(self.input_size, 256),
25
+ nn.ReLU(),
26
+ # nn.Dropout(0.2),
27
+ nn.Linear(256, 128),
28
+ nn.ReLU(),
29
+ # nn.Dropout(0.2),
30
+ nn.Linear(128, 64),
31
+ nn.ReLU(),
32
+ # nn.Dropout(0.1),
33
+ nn.Linear(64, 16),
34
+ nn.ReLU(),
35
+ nn.Linear(16, 1))
36
+
37
+ # initial MLP param
38
+ for name, param in self.layers.named_parameters():
39
+ if 'weight' in name:
40
+ nn.init.normal_(param, mean=0.0, std=1.0 / (self.input_size + 1))
41
+ if 'bias' in name:
42
+ nn.init.constant_(param, val=0)
43
+
44
+ def forward(self, input):
45
+ return torch.sigmoid(self.layers(input))
46
+
47
+
48
+ @registry.register_model('fga_blip2')
49
+ class FGA_Blip2(Blip2Qformer):
50
+ """
51
+ BLIP Image-Text Matching (ITM) model.
52
+ Supported model types:
53
+ - pretrained: pretrained model
54
+ - coco: fintuned model on coco
55
+ Usage:
56
+ >>> from lavis.models import load_model
57
+ >>> model = load_model("blip2_image_text_matching", "pretrained")
58
+ >>> model = load_model("blip2_image_text_matching", "coco")
59
+ """
60
+
61
+ def __init__(
62
+ self,
63
+ vit_model='eva_clip_g',
64
+ img_size=224,
65
+ drop_path_rate=0,
66
+ use_grad_checkpoint=False,
67
+ vit_precision='fp16',
68
+ freeze_vit=True,
69
+ num_query_token=32,
70
+ cross_attention_freq=2,
71
+ embed_dim=256,
72
+ max_txt_len=32,
73
+ ):
74
+ super().__init__(
75
+ vit_model=vit_model,
76
+ img_size=img_size,
77
+ drop_path_rate=drop_path_rate,
78
+ use_grad_checkpoint=use_grad_checkpoint,
79
+ vit_precision=vit_precision,
80
+ freeze_vit=freeze_vit,
81
+ num_query_token=num_query_token,
82
+ cross_attention_freq=cross_attention_freq,
83
+ embed_dim=embed_dim,
84
+ max_txt_len=max_txt_len,
85
+ )
86
+ # self.mask_proj = torch.nn.Linear(self.Qformer.config.hidden_size, 1)
87
+ # self.weight_proj = MLP(self.Qformer.config.hidden_size)
88
+ self.mask_proj = MLP(self.Qformer.config.hidden_size)
89
+ # for name, parms in self.named_parameters():
90
+ # if '_proj' not in name:
91
+ # parms.requires_grad_(False)
92
+
93
+ def element_score(self, image, caption):
94
+ with self.maybe_autocast():
95
+ image_embeds = self.ln_vision(self.visual_encoder(image))
96
+ image_embeds = image_embeds.float()
97
+ image_atts = torch.ones(image_embeds.size()[:-1], dtype=torch.long).to(image.device)
98
+
99
+ text = self.tokenizer(
100
+ caption,
101
+ # padding="max_length",
102
+ truncation=False,
103
+ max_length=self.max_txt_len,
104
+ return_tensors='pt',
105
+ ).to(image.device)
106
+
107
+ query_tokens = self.query_tokens.expand(image_embeds.shape[0], -1, -1)
108
+ query_atts = torch.ones(query_tokens.size()[:-1], dtype=torch.long).to(image.device)
109
+ attention_mask = torch.cat([query_atts, text.attention_mask], dim=1)
110
+ output_itm = self.Qformer.bert(
111
+ text.input_ids,
112
+ query_embeds=query_tokens,
113
+ attention_mask=attention_mask,
114
+ encoder_hidden_states=image_embeds,
115
+ encoder_attention_mask=image_atts,
116
+ return_dict=True,
117
+ )
118
+ itm_embeddings = output_itm.last_hidden_state[:, :, :]
119
+ itm_logit = self.itm_head(itm_embeddings)
120
+ itm_scores = torch.nn.functional.softmax(itm_logit, dim=2)[:, :, 1]
121
+ # itm_score = (itm_scores * mask).sum(dim=1) / mask.sum(dim=1)
122
+ alignment_score = itm_scores[:, :query_tokens.size(1)].mean(dim=1) * 4 + 1
123
+
124
+ return alignment_score, itm_scores[:, query_tokens.size(1):]
125
+
126
+ def forward(self, samples, match_head='itm', inference=False):
127
+ # breakpoint()
128
+ image = samples['image']
129
+ caption = samples['text_input']
130
+
131
+ if inference == False:
132
+ mask_gt = torch.tensor(samples['mask']).to(image.device)
133
+ token_score = torch.tensor(samples['token_score']).to(image.device)
134
+ score = torch.tensor(samples['score']).to(image.device)
135
+ var = torch.tensor(samples['var']).to(image.device)
136
+ image_embeds = self.ln_vision(self.visual_encoder(image))
137
+ else:
138
+ with self.maybe_autocast():
139
+ image_embeds = self.ln_vision(self.visual_encoder(image))
140
+ image_embeds = image_embeds.float()
141
+ image_atts = torch.ones(image_embeds.size()[:-1], dtype=torch.long).to(image.device)
142
+ # breakpoint()
143
+ text = self.tokenizer(
144
+ caption,
145
+ padding='max_length',
146
+ truncation=True,
147
+ max_length=self.max_txt_len,
148
+ return_tensors='pt',
149
+ ).to(image.device)
150
+
151
+ if match_head == 'itm':
152
+ query_tokens = self.query_tokens.expand(image_embeds.shape[0], -1, -1)
153
+ query_atts = torch.ones(query_tokens.size()[:-1], dtype=torch.long).to(image.device)
154
+ attention_mask = torch.cat([query_atts, text.attention_mask], dim=1)
155
+ output_itm = self.Qformer.bert(
156
+ text.input_ids,
157
+ query_embeds=query_tokens,
158
+ attention_mask=attention_mask,
159
+ encoder_hidden_states=image_embeds,
160
+ encoder_attention_mask=image_atts,
161
+ return_dict=True,
162
+ )
163
+ itm_embeddings = output_itm.last_hidden_state[:, :, :]
164
+ itm_logit = self.itm_head(itm_embeddings)
165
+ itm_scores = torch.nn.functional.softmax(itm_logit, dim=2)[:, :, 1]
166
+
167
+ # mask = self.mask_proj(itm_embeddings).squeeze(dim=2)
168
+ # mask = torch.sigmoid(mask)
169
+ # mask = mask * text.attention_mask
170
+
171
+ # mask = torch.sigmoid(mask)
172
+ # mask = mask * text.attention_mask
173
+ # ############## stage 1 #################
174
+ text_output = self.Qformer.bert(
175
+ text.input_ids,
176
+ attention_mask=text.attention_mask,
177
+ return_dict=True,
178
+ )
179
+ mask = self.mask_proj(text_output.last_hidden_state).squeeze(dim=2)
180
+ itm_score = itm_scores[:, :query_tokens.size(1)].mean(dim=1) * 4 + 1
181
+ # itm_score = (itm_scores * mask).sum(dim=1) / mask.sum(dim=1) * 4 + 1
182
+ # itm_logit = (itm_logit * mask).sum(dim=1) / mask.sum(dim=1)
183
+ # breakpoint()
184
+ # itm_scores = torch.nn.functional.softmax(itm_logit, dim=1) * 4 + 1
185
+
186
+ # breakpoint()
187
+ # itm_scores = self.mlp(itm_embeddings).mean(dim=1) * 4 + 1
188
+ if inference:
189
+ # mask = torch.cat([torch.ones(mask.shape).to(mask.device),mask.detach() > 0.5],dim=1)
190
+ # itm_score = (itm_scores * mask).sum(dim=1) / mask.sum(dim=1) * 4 + 1
191
+
192
+ # mask = mask.detach() > 0.5
193
+ # itm_score = (itm_scores[:, query_tokens.size(1):] * mask).sum(dim=1) / mask.sum(dim=1) * 4 + 1
194
+
195
+ return itm_score
196
+ l1_loss = torch.nn.L1Loss(reduction='mean')
197
+ diff_score = torch.abs(itm_score - score)
198
+ diff_token_score = torch.abs(itm_scores[:, query_tokens.size(1):] * mask_gt - token_score).mean(dim=1)
199
+ diff_mask = torch.abs(mask - mask_gt).mean(dim=1)
200
+ loss_itm = torch.mean((diff_score + 0.1 * diff_token_score + 0.1 * diff_mask))
201
+ # loss_itm = (itm_scores[:, 1] - score) * (itm_scores[:, 1] - score)
202
+ # breakpoint()
203
+ # loss_itm = loss_itm.mean()
204
+ return BlipOutput(loss=loss_itm, loss_itm=loss_itm)
205
+
206
+ ############## stage 2 #################
207
+ # text_output = self.Qformer.bert(
208
+ # text.input_ids,
209
+ # attention_mask=text.attention_mask,
210
+ # return_dict=True,
211
+ # )
212
+ # # breakpoint()
213
+
214
+ # mask = self.mask_proj(text_output.last_hidden_state).squeeze(dim=2)
215
+ # # print(mask[0])
216
+ # weight = self.weight_proj(itm_embeddings).squeeze(dim=2)
217
+ # weight = weight * torch.cat([torch.ones(mask.shape).to(mask.device),mask.detach() > 0.5],dim=1)
218
+
219
+ # itm_score = (itm_scores * weight).sum(dim=1) / weight.sum(dim=1) * 4 + 1
220
+ # # itm_score = itm_scores[:, :query_tokens.size(1)].mean(dim=1) * 4 + 1
221
+ # # itm_score = (itm_scores * mask).sum(dim=1) / mask.sum(dim=1) * 4 + 1
222
+ # # itm_logit = (itm_logit * mask).sum(dim=1) / mask.sum(dim=1)
223
+ # # breakpoint()
224
+ # # itm_scores = torch.nn.functional.softmax(itm_logit, dim=1) * 4 + 1
225
+
226
+ # # itm_scores = self.mlp(itm_embeddings).mean(dim=1) * 4 + 1
227
+ # if inference:
228
+ # return itm_score
229
+ # l1_loss = torch.nn.L1Loss(reduction='mean')
230
+ # loss_itm = torch.mean(torch.exp(var) * (torch.abs(itm_score - score))) + l1_loss(mask, mask_gt)
231
+ # # loss_itm = (itm_scores[:, 1] - score) * (itm_scores[:, 1] - score)
232
+ # # breakpoint()
233
+ # # loss_itm = loss_itm.mean()
234
+ # return BlipOutput(loss=loss_itm, loss_itm=loss_itm)
235
+ elif match_head == 'itc':
236
+ query_tokens = self.query_tokens.expand(image_embeds.shape[0], -1, -1)
237
+
238
+ query_output = self.Qformer.bert(
239
+ query_embeds=query_tokens,
240
+ encoder_hidden_states=image_embeds,
241
+ encoder_attention_mask=image_atts,
242
+ return_dict=True,
243
+ )
244
+ image_feats = F.normalize(self.vision_proj(query_output.last_hidden_state), dim=-1)
245
+
246
+ text_output = self.Qformer.bert(
247
+ text.input_ids,
248
+ attention_mask=text.attention_mask,
249
+ return_dict=True,
250
+ )
251
+ # text_feat = F.normalize(
252
+ # self.text_proj(text_output.last_hidden_state), dim=-1
253
+ # )
254
+
255
+ # mask = self.mask_proj(text_output.last_hidden_state)
256
+ # mask = torch.softmax(mask.squeeze(), dim=1)
257
+ # sims = torch.bmm(image_feats, text_feat.transpose(1, 2))
258
+ # sims, _ = torch.max(sims, dim=1)
259
+ # sim = torch.sum(sims * mask, dim=1)
260
+
261
+ text_feat = F.normalize(self.text_proj(text_output.last_hidden_state[:, 0, :]), dim=-1)
262
+
263
+ sims = torch.bmm(image_feats, text_feat.unsqueeze(-1))
264
+ sim, _ = torch.max(sims, dim=1)
265
+
266
+ itc_scores = sim * 5
267
+ if inference:
268
+ # print(itc_scores.shape)
269
+ return itc_scores.squeeze()
270
+ loss_itc = (itc_scores - score) * (itc_scores - score)
271
+ # print(loss_itc.shape)
272
+ loss_itc = loss_itc.mean()
273
+ return BlipOutput(loss=loss_itc, loss_itc=loss_itc)