From 99324b6087462149f7a6a8ec1f710db50a4f3fe6 Mon Sep 17 00:00:00 2001 From: wxywb Date: Wed, 22 Jun 2022 11:36:26 +0800 Subject: [PATCH] init the operator. Signed-off-by: wxywb --- README.md | 107 ++- __init__.py | 19 + blip.py | 72 ++ configs/med_config.json | 22 + models/__pycache__/blip.cpython-38.pyc | Bin 0 -> 7054 bytes models/__pycache__/med.cpython-38.pyc | Bin 0 -> 28160 bytes models/__pycache__/vit.cpython-38.pyc | Bin 0 -> 12221 bytes models/blip.py | 240 +++++++ models/med.py | 955 +++++++++++++++++++++++++ models/vit.py | 305 ++++++++ requirements.txt | 6 + tabular1.png | Bin 0 -> 179845 bytes tabular2.png | Bin 0 -> 22954 bytes vec1.png | Bin 0 -> 12487 bytes vec2.png | Bin 0 -> 12250 bytes 15 files changed, 1725 insertions(+), 1 deletion(-) create mode 100644 __init__.py create mode 100644 blip.py create mode 100644 configs/med_config.json create mode 100644 models/__pycache__/blip.cpython-38.pyc create mode 100644 models/__pycache__/med.cpython-38.pyc create mode 100644 models/__pycache__/vit.cpython-38.pyc create mode 100644 models/blip.py create mode 100644 models/med.py create mode 100644 models/vit.py create mode 100644 requirements.txt create mode 100644 tabular1.png create mode 100644 tabular2.png create mode 100644 vec1.png create mode 100644 vec2.png diff --git a/README.md b/README.md index cfb1ee8..f72af4a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,107 @@ -# blip +# Image-Text Retrieval Embdding with BLIP + +*author: David Wang* + + +
+ + + +## Description + +This operator extracts features for image or text with [BLIP](https://arxiv.org/abs/2201.12086) which can generate embeddings for text and image by jointly training an image encoder and text encoder to maximize the cosine similarity. This is a adaptation from [salesforce/BLIP](https://github.com/salesforce/BLIP). + + +
+ + +## Code Example + +Load an image from path './teddy.jpg' to generate an image embedding. + +Read the text 'A teddybear on a skateboard in Times Square.' to generate an text embedding. + + *Write the pipeline in simplified style*: + +```python +import towhee + +towhee.glob('./teddy.jpg') \ + .image_decode() \ + .image_text_embedding.blip(model_name='blip_base', modality='image') \ + .show() + +towhee.dc(["A teddybear on a skateboard in Times Square."]) \ + .image_text_embedding.blip(model_name='blip_base', modality='text') \ + .show() +``` +result1 +result2 + +*Write a same pipeline with explicit inputs/outputs name specifications:* + +```python +import towhee + +towhee.glob['path']('./teddy.jpg') \ + .image_decode['path', 'img']() \ + .image_text_embedding.blip['img', 'vec'](model_name='blip_base', modality='image') \ + .select['img', 'vec']() \ + .show() + +towhee.dc['text'](["A teddybear on a skateboard in Times Square."]) \ + .image_text_embedding.blip['text','vec'](model_name='blip_base', modality='text') \ + .select['text', 'vec']() \ + .show() +``` +result1 +result2 + + +
+ + + +## Factory Constructor + +Create the operator via the following factory method + +***blip(model_name, modality)*** + +**Parameters:** + +​ ***model_name:*** *str* + +​ The model name of BLIP. Supported model names: +- blip_base + + +​ ***modality:*** *str* + +​ Which modality(*image* or *text*) is used to generate the embedding. + +
+ + + +## Interface + +An image-text embedding operator takes a [towhee image](link/to/towhee/image/api/doc) or string as input and generate an embedding in ndarray. + + +**Parameters:** + +​ ***data:*** *towhee.types.Image (a sub-class of numpy.ndarray)* or *str* + +​ The data (image or text based on specified modality) to generate embedding. + + + +**Returns:** *numpy.ndarray* + +​ The data embedding extracted by model. + + + + diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..3a4024d --- /dev/null +++ b/__init__.py @@ -0,0 +1,19 @@ +# Copyright 2021 Zilliz. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .blip import Blip + + +def blip(model_name: str, modality: str): + return Blip(model_name, modality) diff --git a/blip.py b/blip.py new file mode 100644 index 0000000..b58066a --- /dev/null +++ b/blip.py @@ -0,0 +1,72 @@ +# Copyright 2021 Zilliz. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import sys +from pathlib import Path + +import torch +from torchvision import transforms +from torchvision.transforms.functional import InterpolationMode + +from towhee import register +from towhee.operator.base import NNOperator, OperatorFlag +from towhee.types.arg import arg, to_image_color +from towhee.types.image_utils import from_pil, to_pil + +@register(output_schema=['vec']) +class Blip(NNOperator): + """ + BLIP multi-modal embedding operator + """ + def __init__(self, model_name: str): + super().__init__() + sys.path.append(str(Path(__file__).parent)) + from models.blip import blip_decoder + image_size = 384 + model_url = self._configs()[model_name]['weights'] + self.model = blip_decoder(pretrained=model_url, image_size=image_size, vit='base') + + self._modality = modality + self.device = "cuda" if torch.cuda.is_available() else "cpu" + self.model.to(self.device) + self.model.eval() + + self.tfms = transforms.Compose([ + transforms.Resize((image_size,image_size),interpolation=InterpolationMode.BICUBIC), + transforms.ToTensor(), + transforms.Normalize((0.48145466, 0.4578275, 0.40821073), (0.26862954, 0.26130258, 0.27577711)) + ]) + + @arg(1, to_image_color('RGB')) + def __call__(self, data:): + vec = self._inference_from_image(data) + return vec + + @arg(1, to_image_color('RGB')) + def _inference_from_image(self, img): + img = self._preprocess(img) + caption = model.generate(img, sample=False, num_beams=3, max_length=20, min_length=5) + return caption[0] + + def _preprocess(self, img): + img = to_pil(img) + processed_img = self.tfms(img).unsqueeze(0).to(self.device) + return processed_img + + def _configs(self): + config = {} + config['blip_base'] = {} + config['blip_base']['weights'] = 'https://storage.googleapis.com/sfr-vision-language-research/BLIP/models/model_base_capfilt_large.pth' + return config + diff --git a/configs/med_config.json b/configs/med_config.json new file mode 100644 index 0000000..d9031d2 --- /dev/null +++ b/configs/med_config.json @@ -0,0 +1,22 @@ +{ + "architectures": [ + "BertModel" + ], + "attention_probs_dropout_prob": 0.1, + "hidden_act": "gelu", + "hidden_dropout_prob": 0.1, + "hidden_size": 768, + "initializer_range": 0.02, + "intermediate_size": 3072, + "layer_norm_eps": 1e-12, + "max_position_embeddings": 512, + "model_type": "bert", + "num_attention_heads": 12, + "num_hidden_layers": 12, + "pad_token_id": 0, + "type_vocab_size": 2, + "vocab_size": 30524, + "encoder_width": 768, + "add_cross_attention": true +} + diff --git a/models/__pycache__/blip.cpython-38.pyc b/models/__pycache__/blip.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c413bad2f0bb0634584e1efd1037fc50414fb845 GIT binary patch literal 7054 zcmb_hNsQ#ydFEr0EEbDZy-d%lkwjTzYf8~{+vCKrC$h(y&6YFjD4uZ^S`x#q$F62I zmzwujvvgQM;2yznf(Zg2WF*j`=cr2#0dfeCV~|6T0J-E4UJ@V&r-2|yE?LGwl<$A6 zrF)F{6gK$R@6U*nAH3G-RR z4s_ml${5ucNh39UBQv8>#*7NrM#qnPEuIHmiA|C7%-o<{;yZrgfm*4PYm_%|r7yW3xpQmqlan@g_zHcRo zr}|1yL^2ZhBd+T2ynEx+2c-wIjfvH#QL|`<^J(1^yhp{_FF_Kp{Hu4cz zD9`w#xl;cyCTeJw`nA* zlW|r=Vw5Lg5e1`M22r{d@m`~Hu0^7_o@d+fplVV1ot#HWwM50+?|d@~xvJ=~szX(G z^W7+m_acD`JAqUG+(^NqF0T(| zo*n)JCajDt^tmM%%6$uD_Sh&8>jqxQK?-eOJ77;CzlB~j3S*xQ&7rx^CRS;2c3La( zPFP`;jZ!a-(%d)R(@QOAPMU?iuc6c`oP&1Bp0Wumnv97NH=q5z z<4vEp#6Vt|e^KRP1Kvehh~5=%gj4l!c}iB&_+c>?k(Y0KQP#%=iAy|Ezg|k$^_ukR z?TKD8;uK3)q7Nbto!{KYEv&nF;G2-{e2}_Ua=6Z z`M76n;}(R^s#oH#gq%at@+8g%K@vWS#Aa`)GUa##akPUV&f+2nss^|S0yU~5F+rUL zIfAZLPG3YMuUJjh1?O>?1k?RjT{XU#iDT887X@8z)!i0(8jv)oS*y-;VDKR3#f~6> zs9e(0*^E8AGGvr&SI*)xDra$SRfCq%0SN|zBzt$HR#m7{y~C=>V?j4px%ENS+&*Dd zD+u~YC}j|QqCNY{#&-ZRa$_$}l6Y@py~rQzMA631cxz)?+)ConMjFQ1hB|(^K^5x& zw3Ar(S-f%?MC&+gnYnC@+00=U+gqLM#`^4l`!g-0{&dbwyw~x{zXT~8ob6h2xzM=2 z&%Vb>ZOBRpE;pX&2M~6Mw240Et}d>W+Cf7JIn?3~jkHkv0Y*S2h9+LIqXXy3kbZdPR**1GZ0^-p`EJxmV^Ki-Tf+MTGNE6f2 zMF->zUP%mXa)au>pL9>Fwx6xI=c2pP0Hqrm}$0yWU#m zs@>kG4S?F_;cr8xj%@Q;C-g>;!KuyYlg`hcpK1P{GjR==I768@v#<_e+U6$CE?O{g z>3xApB+v@S#fwyWi3n|C3fWWR2SWjn2MjloC=+i|d#A1mP%(g8V%M_!3XT5^kynXa zAo5uvze40SBI-Wp@~9R?jWy189eswet`3|%dGrPrP)i=g>}jDuN3Edtk5Rzkz>~lM zHVQV>%f>-Nfgn>L$c6^j0fJ`9h8Fr5IL2lT#M~rj=!rRRqa$t(Z9rse3X!&gNPHhS zRIA$CyE<<@)h8AQ;733%pHH7&%5g7C&J%S1f5C}MS z@k$a~4G4BYKd+zC&#+Va9JQGK6RT;Ws;fx#iUYucoZnpW9X5~&ZJ`537Fur+L#?o`s4lCjyB#=&VD z#(v_Ky7(KC!eM7yD_!!YxeeJPnQcK5i7s)6w?A%`&X4rpW0Owy`tkmd)+2q(CU-w> z&iW3tNw@6W(B5C4EU8}0wVEHtmO>cbHOnvYITZA(yGrna%r zO5Y`iDhYPsCk$i_-3s%YwLZ$qo_Z%z+@j%1sgL^^B1Xga@XBw2Xw1HlH7vwBtc%xLQWWwi|WARJYigLS%(Kx6weiB3D6P$3lZ{GUy(nSFv6oASktc{XKo6!*;=P4I9uOwyVqa z!a&G?oXaQrX01DB&0wjH{dXb+NjW4;U3=xGv6K`I?naNKxB^a}7?m@EDhNb65wEQJ zYAaJ+bk#`Z;K(Lvf0avtP%s7JKcW>oAh<}lgI%`D#6x`je{WBWFeywId3xd=5fWn| zh|o5KB(k^;wbD~+rQ6UkcwqtJ5fS#`aQ_LqKELKis3T>bKXg5GEeg`fRu)K55Cl&M z+;vJV#Q0+Mm%+^en|%)vmz_m@02czF*4*4%*+QsriIO3g$U@7A`>nb4+%vy>jzAUG%YsZdcyn~Q zG!U@b6Dzxjkrb?Mapy?SHu_Ufcl6$@C!Ae#oAQjEO<0Cy@T|;)JcPYhDQoi6Ats$X z<@i)5H6SK^JEWn9WVq|2wJSSL2P#G5JIEpQcT~A*sfa3oNkaS>jgVVVkiUb>9O6Xe zAE)Vvxw1jSkU2qiVw#iaazSc6tzq(*q>g-W|S;rX@ozo(!!L> zOmHdoi99Cq8W9y|K6h*6!v8s5c>#pNH*$6Wni~F?^*^?8{M#}FjX0*OIt|2o9j`*L z0vC!z94>B1kVEm0j$^M3N|;urN}FQgZS;pFL8>vO{O1x{}K6CXSHFc?o*d{8$#88RlD~Qcy+;v!RtqqP%Lp| zFi+vI2~n@Jd!MXN#gPl zhm$3-SBcD6BHwsFOkytX;{^B49M9&h&ok0{=Z?1o>7otXEMyB2*Y2Gr1LGZGMu6mf zR`!BjlByBg3H*bGUQLGFI-l$4K0yQJp}c+pqm1M`d83Zj`|xL**|& zzak_tcfwIr)mH9Ee{&=#x7t*D6h9#L?fxPGK0V0VB7Q`z4KNT7i1%~4L`LTC@T$}} ziDiv|%SeCN2t}1{eQHC;T(~W^-o>vnOaRmz!)8B?I_psb%qvwh2zcH{=EH^yl>sLt z(xh<$OqhN9jxxP+9Z)73v@klEc`Y)dbyQ9%j9EawNCitl)}i(zDgLGCu-HlBEtTN) zPpEv;dX}wk!w}WRrgDyy*)8!y8sJ3%S8zl6I=*Qbj^qEy{*Wxb>FH??6V z*G8FtLH1M`3xzPXL@2YpIAv8*cG`Xuvmy!fH8Q%AJSn4zbSkBvn2UhT#oucEtFL}} P^#iBrG;P~iv5o%)bkPNT literal 0 HcmV?d00001 diff --git a/models/__pycache__/med.cpython-38.pyc b/models/__pycache__/med.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e177a3b1485afe9c520c677bc21948e9e5a4ce06 GIT binary patch literal 28160 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 IkH%j7e|`g5LI3~& literal 0 HcmV?d00001 diff --git a/models/__pycache__/vit.cpython-38.pyc b/models/__pycache__/vit.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..14596182be1299d004b1f736f3e8e27992775b5f GIT binary patch literal 12221 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 T!kj!jIX5{w`IW4g`NIDKAwbI2 literal 0 HcmV?d00001 diff --git a/models/blip.py b/models/blip.py new file mode 100644 index 0000000..5d3619f --- /dev/null +++ b/models/blip.py @@ -0,0 +1,240 @@ +''' + * Copyright (c) 2022, salesforce.com, inc. + * All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause + * By Junnan Li +''' +import warnings +warnings.filterwarnings("ignore") + +from models.vit import VisionTransformer, interpolate_pos_embed +from models.med import BertConfig, BertModel, BertLMHeadModel +from transformers import BertTokenizer + +import torch +from torch import nn +from pathlib import Path +import torch.nn.functional as F + +import os +from urllib.parse import urlparse +from timm.models.hub import download_cached_file + +class BLIP_Base(nn.Module): + def __init__(self, + med_config = 'configs/med_config.json', + image_size = 224, + vit = 'base', + vit_grad_ckpt = False, + vit_ckpt_layer = 0, + ): + """ + Args: + med_config (str): path for the mixture of encoder-decoder model's configuration file + image_size (int): input image size + vit (str): model size of vision transformer + """ + super().__init__() + dirpath = str(Path(__file__).parent.parent) + med_config = dirpath + '/' + med_config + self.visual_encoder, vision_width = create_vit(vit,image_size, vit_grad_ckpt, vit_ckpt_layer) + self.tokenizer = init_tokenizer() + med_config = BertConfig.from_json_file(med_config) + med_config.encoder_width = vision_width + self.text_encoder = BertModel(config=med_config, add_pooling_layer=False) + + + def forward(self, image, caption, mode, device): + + assert mode in ['image', 'text', 'multimodal'], "mode parameter must be image, text, or multimodal" + text = self.tokenizer(caption, return_tensors="pt").to(device) + + if mode=='image': + # return image features + image_embeds = self.visual_encoder(image) + return image_embeds + + elif mode=='text': + # return text features + text_output = self.text_encoder(text.input_ids, attention_mask = text.attention_mask, + return_dict = True, mode = 'text') + return text_output.last_hidden_state + + elif mode=='multimodal': + # return multimodel features + image_embeds = self.visual_encoder(image) + image_atts = torch.ones(image_embeds.size()[:-1],dtype=torch.long).to(device) + + text.input_ids[:,0] = self.tokenizer.enc_token_id + output = self.text_encoder(text.input_ids, + attention_mask = text.attention_mask, + encoder_hidden_states = image_embeds, + encoder_attention_mask = image_atts, + return_dict = True, + ) + return output.last_hidden_state + + + +class BLIP_Decoder(nn.Module): + def __init__(self, + med_config = 'configs/med_config.json', + image_size = 384, + vit = 'base', + vit_grad_ckpt = False, + vit_ckpt_layer = 0, + prompt = 'a picture of ', + ): + """ + Args: + med_config (str): path for the mixture of encoder-decoder model's configuration file + image_size (int): input image size + vit (str): model size of vision transformer + """ + super().__init__() + + self.visual_encoder, vision_width = create_vit(vit,image_size, vit_grad_ckpt, vit_ckpt_layer) + self.tokenizer = init_tokenizer() + med_config = BertConfig.from_json_file(med_config) + med_config.encoder_width = vision_width + self.text_decoder = BertLMHeadModel(config=med_config) + + self.prompt = prompt + self.prompt_length = len(self.tokenizer(self.prompt).input_ids)-1 + + + def forward(self, image, caption): + + image_embeds = self.visual_encoder(image) + image_atts = torch.ones(image_embeds.size()[:-1],dtype=torch.long).to(image.device) + + text = self.tokenizer(caption, padding='longest', truncation=True, max_length=40, return_tensors="pt").to(image.device) + + text.input_ids[:,0] = self.tokenizer.bos_token_id + + decoder_targets = text.input_ids.masked_fill(text.input_ids == self.tokenizer.pad_token_id, -100) + decoder_targets[:,:self.prompt_length] = -100 + + decoder_output = self.text_decoder(text.input_ids, + attention_mask = text.attention_mask, + encoder_hidden_states = image_embeds, + encoder_attention_mask = image_atts, + labels = decoder_targets, + return_dict = True, + ) + loss_lm = decoder_output.loss + + return loss_lm + + def generate(self, image, sample=False, num_beams=3, max_length=30, min_length=10, top_p=0.9, repetition_penalty=1.0): + image_embeds = self.visual_encoder(image) + + if not sample: + image_embeds = image_embeds.repeat_interleave(num_beams,dim=0) + + image_atts = torch.ones(image_embeds.size()[:-1],dtype=torch.long).to(image.device) + model_kwargs = {"encoder_hidden_states": image_embeds, "encoder_attention_mask":image_atts} + + prompt = [self.prompt] * image.size(0) + input_ids = self.tokenizer(prompt, return_tensors="pt").input_ids.to(image.device) + input_ids[:,0] = self.tokenizer.bos_token_id + input_ids = input_ids[:, :-1] + + if sample: + #nucleus sampling + outputs = self.text_decoder.generate(input_ids=input_ids, + max_length=max_length, + min_length=min_length, + do_sample=True, + top_p=top_p, + num_return_sequences=1, + eos_token_id=self.tokenizer.sep_token_id, + pad_token_id=self.tokenizer.pad_token_id, + repetition_penalty=1.1, + **model_kwargs) + else: + #beam search + outputs = self.text_decoder.generate(input_ids=input_ids, + max_length=max_length, + min_length=min_length, + num_beams=num_beams, + eos_token_id=self.tokenizer.sep_token_id, + pad_token_id=self.tokenizer.pad_token_id, + repetition_penalty=repetition_penalty, + **model_kwargs) + + captions = [] + for output in outputs: + caption = self.tokenizer.decode(output, skip_special_tokens=True) + captions.append(caption[len(self.prompt):]) + return captions + + +def blip_decoder(pretrained='',**kwargs): + model = BLIP_Decoder(**kwargs) + if pretrained: + model,msg = load_checkpoint(model,pretrained) + assert(len(msg.missing_keys)==0) + return model + +def blip_feature_extractor(pretrained='',**kwargs): + model = BLIP_Base(**kwargs) + if pretrained: + model,msg = load_checkpoint(model,pretrained) + assert(len(msg.missing_keys)==0) + return model + +def init_tokenizer(): + tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') + tokenizer.add_special_tokens({'bos_token':'[DEC]'}) + tokenizer.add_special_tokens({'additional_special_tokens':['[ENC]']}) + tokenizer.enc_token_id = tokenizer.additional_special_tokens_ids[0] + return tokenizer + + +def create_vit(vit, image_size, use_grad_checkpointing=False, ckpt_layer=0, drop_path_rate=0): + + assert vit in ['base', 'large'], "vit parameter must be base or large" + if vit=='base': + vision_width = 768 + visual_encoder = VisionTransformer(img_size=image_size, patch_size=16, embed_dim=vision_width, depth=12, + num_heads=12, use_grad_checkpointing=use_grad_checkpointing, ckpt_layer=ckpt_layer, + drop_path_rate=0 or drop_path_rate + ) + elif vit=='large': + vision_width = 1024 + visual_encoder = VisionTransformer(img_size=image_size, patch_size=16, embed_dim=vision_width, depth=24, + num_heads=16, use_grad_checkpointing=use_grad_checkpointing, ckpt_layer=ckpt_layer, + drop_path_rate=0.1 or drop_path_rate + ) + return visual_encoder, vision_width + +def is_url(url_or_filename): + parsed = urlparse(url_or_filename) + return parsed.scheme in ("http", "https") + +def load_checkpoint(model,url_or_filename): + if is_url(url_or_filename): + cached_file = download_cached_file(url_or_filename, check_hash=False, progress=True) + checkpoint = torch.load(cached_file, map_location='cpu') + elif os.path.isfile(url_or_filename): + checkpoint = torch.load(url_or_filename, map_location='cpu') + else: + raise RuntimeError('checkpoint url or path is invalid') + + state_dict = checkpoint['model'] + + state_dict['visual_encoder.pos_embed'] = interpolate_pos_embed(state_dict['visual_encoder.pos_embed'],model.visual_encoder) + if 'visual_encoder_m.pos_embed' in model.state_dict().keys(): + state_dict['visual_encoder_m.pos_embed'] = interpolate_pos_embed(state_dict['visual_encoder_m.pos_embed'], + model.visual_encoder_m) + for key in model.state_dict().keys(): + if key in state_dict.keys(): + if state_dict[key].shape!=model.state_dict()[key].shape: + del state_dict[key] + + msg = model.load_state_dict(state_dict,strict=False) + print('load checkpoint from %s'%url_or_filename) + return model,msg + diff --git a/models/med.py b/models/med.py new file mode 100644 index 0000000..7b00a35 --- /dev/null +++ b/models/med.py @@ -0,0 +1,955 @@ +''' + * Copyright (c) 2022, salesforce.com, inc. + * All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause + * By Junnan Li + * Based on huggingface code base + * https://github.com/huggingface/transformers/blob/v4.15.0/src/transformers/models/bert +''' + +import math +import os +import warnings +from dataclasses import dataclass +from typing import Optional, Tuple + +import torch +from torch import Tensor, device, dtype, nn +import torch.utils.checkpoint +from torch import nn +from torch.nn import CrossEntropyLoss +import torch.nn.functional as F + +from transformers.activations import ACT2FN +from transformers.file_utils import ( + ModelOutput, +) +from transformers.modeling_outputs import ( + BaseModelOutputWithPastAndCrossAttentions, + BaseModelOutputWithPoolingAndCrossAttentions, + CausalLMOutputWithCrossAttentions, + MaskedLMOutput, + MultipleChoiceModelOutput, + NextSentencePredictorOutput, + QuestionAnsweringModelOutput, + SequenceClassifierOutput, + TokenClassifierOutput, +) +from transformers.modeling_utils import ( + PreTrainedModel, + apply_chunking_to_forward, + find_pruneable_heads_and_indices, + prune_linear_layer, +) +from transformers.utils import logging +from transformers.models.bert.configuration_bert import BertConfig + + +logger = logging.get_logger(__name__) + + +class BertEmbeddings(nn.Module): + """Construct the embeddings from word and position embeddings.""" + + def __init__(self, config): + super().__init__() + self.word_embeddings = nn.Embedding(config.vocab_size, config.hidden_size, padding_idx=config.pad_token_id) + self.position_embeddings = nn.Embedding(config.max_position_embeddings, config.hidden_size) + + # self.LayerNorm is not snake-cased to stick with TensorFlow model variable name and be able to load + # any TensorFlow checkpoint file + self.LayerNorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.dropout = nn.Dropout(config.hidden_dropout_prob) + + # position_ids (1, len position emb) is contiguous in memory and exported when serialized + self.register_buffer("position_ids", torch.arange(config.max_position_embeddings).expand((1, -1))) + self.position_embedding_type = getattr(config, "position_embedding_type", "absolute") + + self.config = config + + def forward( + self, input_ids=None, position_ids=None, inputs_embeds=None, past_key_values_length=0 + ): + if input_ids is not None: + input_shape = input_ids.size() + else: + input_shape = inputs_embeds.size()[:-1] + + seq_length = input_shape[1] + + if position_ids is None: + position_ids = self.position_ids[:, past_key_values_length : seq_length + past_key_values_length] + + if inputs_embeds is None: + inputs_embeds = self.word_embeddings(input_ids) + + embeddings = inputs_embeds + + if self.position_embedding_type == "absolute": + position_embeddings = self.position_embeddings(position_ids) + embeddings += position_embeddings + embeddings = self.LayerNorm(embeddings) + embeddings = self.dropout(embeddings) + return embeddings + + +class BertSelfAttention(nn.Module): + def __init__(self, config, is_cross_attention): + super().__init__() + self.config = config + if config.hidden_size % config.num_attention_heads != 0 and not hasattr(config, "embedding_size"): + raise ValueError( + "The hidden size (%d) is not a multiple of the number of attention " + "heads (%d)" % (config.hidden_size, config.num_attention_heads) + ) + + self.num_attention_heads = config.num_attention_heads + self.attention_head_size = int(config.hidden_size / config.num_attention_heads) + self.all_head_size = self.num_attention_heads * self.attention_head_size + + self.query = nn.Linear(config.hidden_size, self.all_head_size) + if is_cross_attention: + self.key = nn.Linear(config.encoder_width, self.all_head_size) + self.value = nn.Linear(config.encoder_width, self.all_head_size) + else: + self.key = nn.Linear(config.hidden_size, self.all_head_size) + self.value = nn.Linear(config.hidden_size, self.all_head_size) + + self.dropout = nn.Dropout(config.attention_probs_dropout_prob) + self.position_embedding_type = getattr(config, "position_embedding_type", "absolute") + if self.position_embedding_type == "relative_key" or self.position_embedding_type == "relative_key_query": + self.max_position_embeddings = config.max_position_embeddings + self.distance_embedding = nn.Embedding(2 * config.max_position_embeddings - 1, self.attention_head_size) + self.save_attention = False + + def save_attn_gradients(self, attn_gradients): + self.attn_gradients = attn_gradients + + def get_attn_gradients(self): + return self.attn_gradients + + def save_attention_map(self, attention_map): + self.attention_map = attention_map + + def get_attention_map(self): + return self.attention_map + + def transpose_for_scores(self, x): + new_x_shape = x.size()[:-1] + (self.num_attention_heads, self.attention_head_size) + x = x.view(*new_x_shape) + return x.permute(0, 2, 1, 3) + + def forward( + self, + hidden_states, + attention_mask=None, + head_mask=None, + encoder_hidden_states=None, + encoder_attention_mask=None, + past_key_value=None, + output_attentions=False, + ): + mixed_query_layer = self.query(hidden_states) + + # If this is instantiated as a cross-attention module, the keys + # and values come from an encoder; the attention mask needs to be + # such that the encoder's padding tokens are not attended to. + is_cross_attention = encoder_hidden_states is not None + + if is_cross_attention: + key_layer = self.transpose_for_scores(self.key(encoder_hidden_states)) + value_layer = self.transpose_for_scores(self.value(encoder_hidden_states)) + attention_mask = encoder_attention_mask + elif past_key_value is not None: + key_layer = self.transpose_for_scores(self.key(hidden_states)) + value_layer = self.transpose_for_scores(self.value(hidden_states)) + key_layer = torch.cat([past_key_value[0], key_layer], dim=2) + value_layer = torch.cat([past_key_value[1], value_layer], dim=2) + else: + key_layer = self.transpose_for_scores(self.key(hidden_states)) + value_layer = self.transpose_for_scores(self.value(hidden_states)) + + query_layer = self.transpose_for_scores(mixed_query_layer) + + past_key_value = (key_layer, value_layer) + + # Take the dot product between "query" and "key" to get the raw attention scores. + attention_scores = torch.matmul(query_layer, key_layer.transpose(-1, -2)) + + if self.position_embedding_type == "relative_key" or self.position_embedding_type == "relative_key_query": + seq_length = hidden_states.size()[1] + position_ids_l = torch.arange(seq_length, dtype=torch.long, device=hidden_states.device).view(-1, 1) + position_ids_r = torch.arange(seq_length, dtype=torch.long, device=hidden_states.device).view(1, -1) + distance = position_ids_l - position_ids_r + positional_embedding = self.distance_embedding(distance + self.max_position_embeddings - 1) + positional_embedding = positional_embedding.to(dtype=query_layer.dtype) # fp16 compatibility + + if self.position_embedding_type == "relative_key": + relative_position_scores = torch.einsum("bhld,lrd->bhlr", query_layer, positional_embedding) + attention_scores = attention_scores + relative_position_scores + elif self.position_embedding_type == "relative_key_query": + relative_position_scores_query = torch.einsum("bhld,lrd->bhlr", query_layer, positional_embedding) + relative_position_scores_key = torch.einsum("bhrd,lrd->bhlr", key_layer, positional_embedding) + attention_scores = attention_scores + relative_position_scores_query + relative_position_scores_key + + attention_scores = attention_scores / math.sqrt(self.attention_head_size) + if attention_mask is not None: + # Apply the attention mask is (precomputed for all layers in BertModel forward() function) + attention_scores = attention_scores + attention_mask + + # Normalize the attention scores to probabilities. + attention_probs = nn.Softmax(dim=-1)(attention_scores) + + if is_cross_attention and self.save_attention: + self.save_attention_map(attention_probs) + attention_probs.register_hook(self.save_attn_gradients) + + # This is actually dropping out entire tokens to attend to, which might + # seem a bit unusual, but is taken from the original Transformer paper. + attention_probs_dropped = self.dropout(attention_probs) + + # Mask heads if we want to + if head_mask is not None: + attention_probs_dropped = attention_probs_dropped * head_mask + + context_layer = torch.matmul(attention_probs_dropped, value_layer) + + context_layer = context_layer.permute(0, 2, 1, 3).contiguous() + new_context_layer_shape = context_layer.size()[:-2] + (self.all_head_size,) + context_layer = context_layer.view(*new_context_layer_shape) + + outputs = (context_layer, attention_probs) if output_attentions else (context_layer,) + + outputs = outputs + (past_key_value,) + return outputs + + +class BertSelfOutput(nn.Module): + def __init__(self, config): + super().__init__() + self.dense = nn.Linear(config.hidden_size, config.hidden_size) + self.LayerNorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.dropout = nn.Dropout(config.hidden_dropout_prob) + + def forward(self, hidden_states, input_tensor): + hidden_states = self.dense(hidden_states) + hidden_states = self.dropout(hidden_states) + hidden_states = self.LayerNorm(hidden_states + input_tensor) + return hidden_states + + +class BertAttention(nn.Module): + def __init__(self, config, is_cross_attention=False): + super().__init__() + self.self = BertSelfAttention(config, is_cross_attention) + self.output = BertSelfOutput(config) + self.pruned_heads = set() + + def prune_heads(self, heads): + if len(heads) == 0: + return + heads, index = find_pruneable_heads_and_indices( + heads, self.self.num_attention_heads, self.self.attention_head_size, self.pruned_heads + ) + + # Prune linear layers + self.self.query = prune_linear_layer(self.self.query, index) + self.self.key = prune_linear_layer(self.self.key, index) + self.self.value = prune_linear_layer(self.self.value, index) + self.output.dense = prune_linear_layer(self.output.dense, index, dim=1) + + # Update hyper params and store pruned heads + self.self.num_attention_heads = self.self.num_attention_heads - len(heads) + self.self.all_head_size = self.self.attention_head_size * self.self.num_attention_heads + self.pruned_heads = self.pruned_heads.union(heads) + + def forward( + self, + hidden_states, + attention_mask=None, + head_mask=None, + encoder_hidden_states=None, + encoder_attention_mask=None, + past_key_value=None, + output_attentions=False, + ): + self_outputs = self.self( + hidden_states, + attention_mask, + head_mask, + encoder_hidden_states, + encoder_attention_mask, + past_key_value, + output_attentions, + ) + attention_output = self.output(self_outputs[0], hidden_states) + outputs = (attention_output,) + self_outputs[1:] # add attentions if we output them + return outputs + + +class BertIntermediate(nn.Module): + def __init__(self, config): + super().__init__() + self.dense = nn.Linear(config.hidden_size, config.intermediate_size) + if isinstance(config.hidden_act, str): + self.intermediate_act_fn = ACT2FN[config.hidden_act] + else: + self.intermediate_act_fn = config.hidden_act + + def forward(self, hidden_states): + hidden_states = self.dense(hidden_states) + hidden_states = self.intermediate_act_fn(hidden_states) + return hidden_states + + +class BertOutput(nn.Module): + def __init__(self, config): + super().__init__() + self.dense = nn.Linear(config.intermediate_size, config.hidden_size) + self.LayerNorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.dropout = nn.Dropout(config.hidden_dropout_prob) + + def forward(self, hidden_states, input_tensor): + hidden_states = self.dense(hidden_states) + hidden_states = self.dropout(hidden_states) + hidden_states = self.LayerNorm(hidden_states + input_tensor) + return hidden_states + + +class BertLayer(nn.Module): + def __init__(self, config, layer_num): + super().__init__() + self.config = config + self.chunk_size_feed_forward = config.chunk_size_feed_forward + self.seq_len_dim = 1 + self.attention = BertAttention(config) + self.layer_num = layer_num + if self.config.add_cross_attention: + self.crossattention = BertAttention(config, is_cross_attention=self.config.add_cross_attention) + self.intermediate = BertIntermediate(config) + self.output = BertOutput(config) + + def forward( + self, + hidden_states, + attention_mask=None, + head_mask=None, + encoder_hidden_states=None, + encoder_attention_mask=None, + past_key_value=None, + output_attentions=False, + mode=None, + ): + # decoder uni-directional self-attention cached key/values tuple is at positions 1,2 + self_attn_past_key_value = past_key_value[:2] if past_key_value is not None else None + self_attention_outputs = self.attention( + hidden_states, + attention_mask, + head_mask, + output_attentions=output_attentions, + past_key_value=self_attn_past_key_value, + ) + attention_output = self_attention_outputs[0] + + outputs = self_attention_outputs[1:-1] + present_key_value = self_attention_outputs[-1] + + if mode=='multimodal': + assert encoder_hidden_states is not None, "encoder_hidden_states must be given for cross-attention layers" + + cross_attention_outputs = self.crossattention( + attention_output, + attention_mask, + head_mask, + encoder_hidden_states, + encoder_attention_mask, + output_attentions=output_attentions, + ) + attention_output = cross_attention_outputs[0] + outputs = outputs + cross_attention_outputs[1:-1] # add cross attentions if we output attention weights + layer_output = apply_chunking_to_forward( + self.feed_forward_chunk, self.chunk_size_feed_forward, self.seq_len_dim, attention_output + ) + outputs = (layer_output,) + outputs + + outputs = outputs + (present_key_value,) + + return outputs + + def feed_forward_chunk(self, attention_output): + intermediate_output = self.intermediate(attention_output) + layer_output = self.output(intermediate_output, attention_output) + return layer_output + + +class BertEncoder(nn.Module): + def __init__(self, config): + super().__init__() + self.config = config + self.layer = nn.ModuleList([BertLayer(config,i) for i in range(config.num_hidden_layers)]) + self.gradient_checkpointing = False + + def forward( + self, + hidden_states, + attention_mask=None, + head_mask=None, + encoder_hidden_states=None, + encoder_attention_mask=None, + past_key_values=None, + use_cache=None, + output_attentions=False, + output_hidden_states=False, + return_dict=True, + mode='multimodal', + ): + all_hidden_states = () if output_hidden_states else None + all_self_attentions = () if output_attentions else None + all_cross_attentions = () if output_attentions and self.config.add_cross_attention else None + + next_decoder_cache = () if use_cache else None + + for i in range(self.config.num_hidden_layers): + layer_module = self.layer[i] + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + layer_head_mask = head_mask[i] if head_mask is not None else None + past_key_value = past_key_values[i] if past_key_values is not None else None + + if self.gradient_checkpointing and self.training: + + if use_cache: + logger.warn( + "`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`..." + ) + use_cache = False + + def create_custom_forward(module): + def custom_forward(*inputs): + return module(*inputs, past_key_value, output_attentions) + + return custom_forward + + layer_outputs = torch.utils.checkpoint.checkpoint( + create_custom_forward(layer_module), + hidden_states, + attention_mask, + layer_head_mask, + encoder_hidden_states, + encoder_attention_mask, + mode=mode, + ) + else: + layer_outputs = layer_module( + hidden_states, + attention_mask, + layer_head_mask, + encoder_hidden_states, + encoder_attention_mask, + past_key_value, + output_attentions, + mode=mode, + ) + + hidden_states = layer_outputs[0] + if use_cache: + next_decoder_cache += (layer_outputs[-1],) + if output_attentions: + all_self_attentions = all_self_attentions + (layer_outputs[1],) + + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if not return_dict: + return tuple( + v + for v in [ + hidden_states, + next_decoder_cache, + all_hidden_states, + all_self_attentions, + all_cross_attentions, + ] + if v is not None + ) + return BaseModelOutputWithPastAndCrossAttentions( + last_hidden_state=hidden_states, + past_key_values=next_decoder_cache, + hidden_states=all_hidden_states, + attentions=all_self_attentions, + cross_attentions=all_cross_attentions, + ) + + +class BertPooler(nn.Module): + def __init__(self, config): + super().__init__() + self.dense = nn.Linear(config.hidden_size, config.hidden_size) + self.activation = nn.Tanh() + + def forward(self, hidden_states): + # We "pool" the model by simply taking the hidden state corresponding + # to the first token. + first_token_tensor = hidden_states[:, 0] + pooled_output = self.dense(first_token_tensor) + pooled_output = self.activation(pooled_output) + return pooled_output + + +class BertPredictionHeadTransform(nn.Module): + def __init__(self, config): + super().__init__() + self.dense = nn.Linear(config.hidden_size, config.hidden_size) + if isinstance(config.hidden_act, str): + self.transform_act_fn = ACT2FN[config.hidden_act] + else: + self.transform_act_fn = config.hidden_act + self.LayerNorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + + def forward(self, hidden_states): + hidden_states = self.dense(hidden_states) + hidden_states = self.transform_act_fn(hidden_states) + hidden_states = self.LayerNorm(hidden_states) + return hidden_states + + +class BertLMPredictionHead(nn.Module): + def __init__(self, config): + super().__init__() + self.transform = BertPredictionHeadTransform(config) + + # The output weights are the same as the input embeddings, but there is + # an output-only bias for each token. + self.decoder = nn.Linear(config.hidden_size, config.vocab_size, bias=False) + + self.bias = nn.Parameter(torch.zeros(config.vocab_size)) + + # Need a link between the two variables so that the bias is correctly resized with `resize_token_embeddings` + self.decoder.bias = self.bias + + def forward(self, hidden_states): + hidden_states = self.transform(hidden_states) + hidden_states = self.decoder(hidden_states) + return hidden_states + + +class BertOnlyMLMHead(nn.Module): + def __init__(self, config): + super().__init__() + self.predictions = BertLMPredictionHead(config) + + def forward(self, sequence_output): + prediction_scores = self.predictions(sequence_output) + return prediction_scores + + +class BertPreTrainedModel(PreTrainedModel): + """ + An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained + models. + """ + + config_class = BertConfig + base_model_prefix = "bert" + _keys_to_ignore_on_load_missing = [r"position_ids"] + + def _init_weights(self, module): + """ Initialize the weights """ + if isinstance(module, (nn.Linear, nn.Embedding)): + # Slightly different from the TF version which uses truncated_normal for initialization + # cf https://github.com/pytorch/pytorch/pull/5617 + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + elif isinstance(module, nn.LayerNorm): + module.bias.data.zero_() + module.weight.data.fill_(1.0) + if isinstance(module, nn.Linear) and module.bias is not None: + module.bias.data.zero_() + + +class BertModel(BertPreTrainedModel): + """ + The model can behave as an encoder (with only self-attention) as well as a decoder, in which case a layer of + cross-attention is added between the self-attention layers, following the architecture described in `Attention is + all you need `__ by Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, + Llion Jones, Aidan N. Gomez, Lukasz Kaiser and Illia Polosukhin. + argument and :obj:`add_cross_attention` set to :obj:`True`; an :obj:`encoder_hidden_states` is then expected as an + input to the forward pass. + """ + + def __init__(self, config, add_pooling_layer=True): + super().__init__(config) + self.config = config + + self.embeddings = BertEmbeddings(config) + + self.encoder = BertEncoder(config) + + self.pooler = BertPooler(config) if add_pooling_layer else None + + self.init_weights() + + + def get_input_embeddings(self): + return self.embeddings.word_embeddings + + def set_input_embeddings(self, value): + self.embeddings.word_embeddings = value + + def _prune_heads(self, heads_to_prune): + """ + Prunes heads of the model. heads_to_prune: dict of {layer_num: list of heads to prune in this layer} See base + class PreTrainedModel + """ + for layer, heads in heads_to_prune.items(): + self.encoder.layer[layer].attention.prune_heads(heads) + + + def get_extended_attention_mask(self, attention_mask: Tensor, input_shape: Tuple[int], device: device, is_decoder: bool) -> Tensor: + """ + Makes broadcastable attention and causal masks so that future and masked tokens are ignored. + + Arguments: + attention_mask (:obj:`torch.Tensor`): + Mask with ones indicating tokens to attend to, zeros for tokens to ignore. + input_shape (:obj:`Tuple[int]`): + The shape of the input to the model. + device: (:obj:`torch.device`): + The device of the input to the model. + + Returns: + :obj:`torch.Tensor` The extended attention mask, with a the same dtype as :obj:`attention_mask.dtype`. + """ + # We can provide a self-attention mask of dimensions [batch_size, from_seq_length, to_seq_length] + # ourselves in which case we just need to make it broadcastable to all heads. + if attention_mask.dim() == 3: + extended_attention_mask = attention_mask[:, None, :, :] + elif attention_mask.dim() == 2: + # Provided a padding mask of dimensions [batch_size, seq_length] + # - if the model is a decoder, apply a causal mask in addition to the padding mask + # - if the model is an encoder, make the mask broadcastable to [batch_size, num_heads, seq_length, seq_length] + if is_decoder: + batch_size, seq_length = input_shape + + seq_ids = torch.arange(seq_length, device=device) + causal_mask = seq_ids[None, None, :].repeat(batch_size, seq_length, 1) <= seq_ids[None, :, None] + # in case past_key_values are used we need to add a prefix ones mask to the causal mask + # causal and attention masks must have same type with pytorch version < 1.3 + causal_mask = causal_mask.to(attention_mask.dtype) + + if causal_mask.shape[1] < attention_mask.shape[1]: + prefix_seq_len = attention_mask.shape[1] - causal_mask.shape[1] + causal_mask = torch.cat( + [ + torch.ones((batch_size, seq_length, prefix_seq_len), device=device, dtype=causal_mask.dtype), + causal_mask, + ], + axis=-1, + ) + + extended_attention_mask = causal_mask[:, None, :, :] * attention_mask[:, None, None, :] + else: + extended_attention_mask = attention_mask[:, None, None, :] + else: + raise ValueError( + "Wrong shape for input_ids (shape {}) or attention_mask (shape {})".format( + input_shape, attention_mask.shape + ) + ) + + # Since attention_mask is 1.0 for positions we want to attend and 0.0 for + # masked positions, this operation will create a tensor which is 0.0 for + # positions we want to attend and -10000.0 for masked positions. + # Since we are adding it to the raw scores before the softmax, this is + # effectively the same as removing these entirely. + extended_attention_mask = extended_attention_mask.to(dtype=self.dtype) # fp16 compatibility + extended_attention_mask = (1.0 - extended_attention_mask) * -10000.0 + return extended_attention_mask + + def forward( + self, + input_ids=None, + attention_mask=None, + position_ids=None, + head_mask=None, + inputs_embeds=None, + encoder_embeds=None, + encoder_hidden_states=None, + encoder_attention_mask=None, + past_key_values=None, + use_cache=None, + output_attentions=None, + output_hidden_states=None, + return_dict=None, + is_decoder=False, + mode='multimodal', + ): + r""" + encoder_hidden_states (:obj:`torch.FloatTensor` of shape :obj:`(batch_size, sequence_length, hidden_size)`, `optional`): + Sequence of hidden-states at the output of the last layer of the encoder. Used in the cross-attention if + the model is configured as a decoder. + encoder_attention_mask (:obj:`torch.FloatTensor` of shape :obj:`(batch_size, sequence_length)`, `optional`): + Mask to avoid performing attention on the padding token indices of the encoder input. This mask is used in + the cross-attention if the model is configured as a decoder. Mask values selected in ``[0, 1]``: + - 1 for tokens that are **not masked**, + - 0 for tokens that are **masked**. + past_key_values (:obj:`tuple(tuple(torch.FloatTensor))` of length :obj:`config.n_layers` with each tuple having 4 tensors of shape :obj:`(batch_size, num_heads, sequence_length - 1, embed_size_per_head)`): + Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding. + If :obj:`past_key_values` are used, the user can optionally input only the last :obj:`decoder_input_ids` + (those that don't have their past key value states given to this model) of shape :obj:`(batch_size, 1)` + instead of all :obj:`decoder_input_ids` of shape :obj:`(batch_size, sequence_length)`. + use_cache (:obj:`bool`, `optional`): + If set to :obj:`True`, :obj:`past_key_values` key value states are returned and can be used to speed up + decoding (see :obj:`past_key_values`). + """ + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + if is_decoder: + use_cache = use_cache if use_cache is not None else self.config.use_cache + else: + use_cache = False + + if input_ids is not None and inputs_embeds is not None: + raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time") + elif input_ids is not None: + input_shape = input_ids.size() + batch_size, seq_length = input_shape + device = input_ids.device + elif inputs_embeds is not None: + input_shape = inputs_embeds.size()[:-1] + batch_size, seq_length = input_shape + device = inputs_embeds.device + elif encoder_embeds is not None: + input_shape = encoder_embeds.size()[:-1] + batch_size, seq_length = input_shape + device = encoder_embeds.device + else: + raise ValueError("You have to specify either input_ids or inputs_embeds or encoder_embeds") + + # past_key_values_length + past_key_values_length = past_key_values[0][0].shape[2] if past_key_values is not None else 0 + + if attention_mask is None: + attention_mask = torch.ones(((batch_size, seq_length + past_key_values_length)), device=device) + + # We can provide a self-attention mask of dimensions [batch_size, from_seq_length, to_seq_length] + # ourselves in which case we just need to make it broadcastable to all heads. + extended_attention_mask: torch.Tensor = self.get_extended_attention_mask(attention_mask, input_shape, + device, is_decoder) + + # If a 2D or 3D attention mask is provided for the cross-attention + # we need to make broadcastable to [batch_size, num_heads, seq_length, seq_length] + if encoder_hidden_states is not None: + if type(encoder_hidden_states) == list: + encoder_batch_size, encoder_sequence_length, _ = encoder_hidden_states[0].size() + else: + encoder_batch_size, encoder_sequence_length, _ = encoder_hidden_states.size() + encoder_hidden_shape = (encoder_batch_size, encoder_sequence_length) + + if type(encoder_attention_mask) == list: + encoder_extended_attention_mask = [self.invert_attention_mask(mask) for mask in encoder_attention_mask] + elif encoder_attention_mask is None: + encoder_attention_mask = torch.ones(encoder_hidden_shape, device=device) + encoder_extended_attention_mask = self.invert_attention_mask(encoder_attention_mask) + else: + encoder_extended_attention_mask = self.invert_attention_mask(encoder_attention_mask) + else: + encoder_extended_attention_mask = None + + # Prepare head mask if needed + # 1.0 in head_mask indicate we keep the head + # attention_probs has shape bsz x n_heads x N x N + # input head_mask has shape [num_heads] or [num_hidden_layers x num_heads] + # and head_mask is converted to shape [num_hidden_layers x batch x num_heads x seq_length x seq_length] + head_mask = self.get_head_mask(head_mask, self.config.num_hidden_layers) + + if encoder_embeds is None: + embedding_output = self.embeddings( + input_ids=input_ids, + position_ids=position_ids, + inputs_embeds=inputs_embeds, + past_key_values_length=past_key_values_length, + ) + else: + embedding_output = encoder_embeds + + encoder_outputs = self.encoder( + embedding_output, + attention_mask=extended_attention_mask, + head_mask=head_mask, + encoder_hidden_states=encoder_hidden_states, + encoder_attention_mask=encoder_extended_attention_mask, + past_key_values=past_key_values, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + mode=mode, + ) + sequence_output = encoder_outputs[0] + pooled_output = self.pooler(sequence_output) if self.pooler is not None else None + + if not return_dict: + return (sequence_output, pooled_output) + encoder_outputs[1:] + + return BaseModelOutputWithPoolingAndCrossAttentions( + last_hidden_state=sequence_output, + pooler_output=pooled_output, + past_key_values=encoder_outputs.past_key_values, + hidden_states=encoder_outputs.hidden_states, + attentions=encoder_outputs.attentions, + cross_attentions=encoder_outputs.cross_attentions, + ) + + + +class BertLMHeadModel(BertPreTrainedModel): + + _keys_to_ignore_on_load_unexpected = [r"pooler"] + _keys_to_ignore_on_load_missing = [r"position_ids", r"predictions.decoder.bias"] + + def __init__(self, config): + super().__init__(config) + + self.bert = BertModel(config, add_pooling_layer=False) + self.cls = BertOnlyMLMHead(config) + + self.init_weights() + + def get_output_embeddings(self): + return self.cls.predictions.decoder + + def set_output_embeddings(self, new_embeddings): + self.cls.predictions.decoder = new_embeddings + + def forward( + self, + input_ids=None, + attention_mask=None, + position_ids=None, + head_mask=None, + inputs_embeds=None, + encoder_hidden_states=None, + encoder_attention_mask=None, + labels=None, + past_key_values=None, + use_cache=None, + output_attentions=None, + output_hidden_states=None, + return_dict=None, + return_logits=False, + is_decoder=True, + reduction='mean', + mode='multimodal', + ): + r""" + encoder_hidden_states (:obj:`torch.FloatTensor` of shape :obj:`(batch_size, sequence_length, hidden_size)`, `optional`): + Sequence of hidden-states at the output of the last layer of the encoder. Used in the cross-attention if + the model is configured as a decoder. + encoder_attention_mask (:obj:`torch.FloatTensor` of shape :obj:`(batch_size, sequence_length)`, `optional`): + Mask to avoid performing attention on the padding token indices of the encoder input. This mask is used in + the cross-attention if the model is configured as a decoder. Mask values selected in ``[0, 1]``: + - 1 for tokens that are **not masked**, + - 0 for tokens that are **masked**. + labels (:obj:`torch.LongTensor` of shape :obj:`(batch_size, sequence_length)`, `optional`): + Labels for computing the left-to-right language modeling loss (next word prediction). Indices should be in + ``[-100, 0, ..., config.vocab_size]`` (see ``input_ids`` docstring) Tokens with indices set to ``-100`` are + ignored (masked), the loss is only computed for the tokens with labels n ``[0, ..., config.vocab_size]`` + past_key_values (:obj:`tuple(tuple(torch.FloatTensor))` of length :obj:`config.n_layers` with each tuple having 4 tensors of shape :obj:`(batch_size, num_heads, sequence_length - 1, embed_size_per_head)`): + Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding. + If :obj:`past_key_values` are used, the user can optionally input only the last :obj:`decoder_input_ids` + (those that don't have their past key value states given to this model) of shape :obj:`(batch_size, 1)` + instead of all :obj:`decoder_input_ids` of shape :obj:`(batch_size, sequence_length)`. + use_cache (:obj:`bool`, `optional`): + If set to :obj:`True`, :obj:`past_key_values` key value states are returned and can be used to speed up + decoding (see :obj:`past_key_values`). + Returns: + Example:: + >>> from transformers import BertTokenizer, BertLMHeadModel, BertConfig + >>> import torch + >>> tokenizer = BertTokenizer.from_pretrained('bert-base-cased') + >>> config = BertConfig.from_pretrained("bert-base-cased") + >>> model = BertLMHeadModel.from_pretrained('bert-base-cased', config=config) + >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt") + >>> outputs = model(**inputs) + >>> prediction_logits = outputs.logits + """ + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + if labels is not None: + use_cache = False + + outputs = self.bert( + input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + head_mask=head_mask, + inputs_embeds=inputs_embeds, + encoder_hidden_states=encoder_hidden_states, + encoder_attention_mask=encoder_attention_mask, + past_key_values=past_key_values, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + is_decoder=is_decoder, + mode=mode, + ) + + sequence_output = outputs[0] + prediction_scores = self.cls(sequence_output) + + if return_logits: + return prediction_scores[:, :-1, :].contiguous() + + lm_loss = None + if labels is not None: + # we are doing next-token prediction; shift prediction scores and input ids by one + shifted_prediction_scores = prediction_scores[:, :-1, :].contiguous() + labels = labels[:, 1:].contiguous() + loss_fct = CrossEntropyLoss(reduction=reduction, label_smoothing=0.1) + lm_loss = loss_fct(shifted_prediction_scores.view(-1, self.config.vocab_size), labels.view(-1)) + if reduction=='none': + lm_loss = lm_loss.view(prediction_scores.size(0),-1).sum(1) + + if not return_dict: + output = (prediction_scores,) + outputs[2:] + return ((lm_loss,) + output) if lm_loss is not None else output + + return CausalLMOutputWithCrossAttentions( + loss=lm_loss, + logits=prediction_scores, + past_key_values=outputs.past_key_values, + hidden_states=outputs.hidden_states, + attentions=outputs.attentions, + cross_attentions=outputs.cross_attentions, + ) + + def prepare_inputs_for_generation(self, input_ids, past=None, attention_mask=None, **model_kwargs): + input_shape = input_ids.shape + # if model is used as a decoder in encoder-decoder model, the decoder attention mask is created on the fly + if attention_mask is None: + attention_mask = input_ids.new_ones(input_shape) + + # cut decoder_input_ids if past is used + if past is not None: + input_ids = input_ids[:, -1:] + + return { + "input_ids": input_ids, + "attention_mask": attention_mask, + "past_key_values": past, + "encoder_hidden_states": model_kwargs.get("encoder_hidden_states", None), + "encoder_attention_mask": model_kwargs.get("encoder_attention_mask", None), + "is_decoder": True, + } + + def _reorder_cache(self, past, beam_idx): + reordered_past = () + for layer_past in past: + reordered_past += (tuple(past_state.index_select(0, beam_idx) for past_state in layer_past),) + return reordered_past diff --git a/models/vit.py b/models/vit.py new file mode 100644 index 0000000..135c0d5 --- /dev/null +++ b/models/vit.py @@ -0,0 +1,305 @@ +''' + * Copyright (c) 2022, salesforce.com, inc. + * All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause + * By Junnan Li + * Based on timm code base + * https://github.com/rwightman/pytorch-image-models/tree/master/timm +''' + +import torch +import torch.nn as nn +import torch.nn.functional as F +from functools import partial + +from timm.models.vision_transformer import _cfg, PatchEmbed +from timm.models.registry import register_model +from timm.models.layers import trunc_normal_, DropPath +from timm.models.helpers import named_apply, adapt_input_conv + +#from fairscale.nn.checkpoint.checkpoint_activations import checkpoint_wrapper + +class Mlp(nn.Module): + """ MLP as used in Vision Transformer, MLP-Mixer and related networks + """ + def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.GELU, drop=0.): + super().__init__() + out_features = out_features or in_features + hidden_features = hidden_features or in_features + self.fc1 = nn.Linear(in_features, hidden_features) + self.act = act_layer() + self.fc2 = nn.Linear(hidden_features, out_features) + self.drop = nn.Dropout(drop) + + def forward(self, x): + x = self.fc1(x) + x = self.act(x) + x = self.drop(x) + x = self.fc2(x) + x = self.drop(x) + return x + + +class Attention(nn.Module): + def __init__(self, dim, num_heads=8, qkv_bias=False, qk_scale=None, attn_drop=0., proj_drop=0.): + super().__init__() + self.num_heads = num_heads + head_dim = dim // num_heads + # NOTE scale factor was wrong in my original version, can set manually to be compat with prev weights + self.scale = qk_scale or head_dim ** -0.5 + self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias) + self.attn_drop = nn.Dropout(attn_drop) + self.proj = nn.Linear(dim, dim) + self.proj_drop = nn.Dropout(proj_drop) + self.attn_gradients = None + self.attention_map = None + + def save_attn_gradients(self, attn_gradients): + self.attn_gradients = attn_gradients + + def get_attn_gradients(self): + return self.attn_gradients + + def save_attention_map(self, attention_map): + self.attention_map = attention_map + + def get_attention_map(self): + return self.attention_map + + def forward(self, x, register_hook=False): + B, N, C = x.shape + qkv = self.qkv(x).reshape(B, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4) + q, k, v = qkv[0], qkv[1], qkv[2] # make torchscript happy (cannot use tensor as tuple) + + attn = (q @ k.transpose(-2, -1)) * self.scale + attn = attn.softmax(dim=-1) + attn = self.attn_drop(attn) + + if register_hook: + self.save_attention_map(attn) + attn.register_hook(self.save_attn_gradients) + + x = (attn @ v).transpose(1, 2).reshape(B, N, C) + x = self.proj(x) + x = self.proj_drop(x) + return x + + +class Block(nn.Module): + + def __init__(self, dim, num_heads, mlp_ratio=4., qkv_bias=False, qk_scale=None, drop=0., attn_drop=0., + drop_path=0., act_layer=nn.GELU, norm_layer=nn.LayerNorm, use_grad_checkpointing=False): + super().__init__() + self.norm1 = norm_layer(dim) + self.attn = Attention( + dim, num_heads=num_heads, qkv_bias=qkv_bias, qk_scale=qk_scale, attn_drop=attn_drop, proj_drop=drop) + # NOTE: drop path for stochastic depth, we shall see if this is better than dropout here + self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity() + self.norm2 = norm_layer(dim) + mlp_hidden_dim = int(dim * mlp_ratio) + self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop) + + #if use_grad_checkpointing: + # self.attn = checkpoint_wrapper(self.attn) + # self.mlp = checkpoint_wrapper(self.mlp) + + def forward(self, x, register_hook=False): + x = x + self.drop_path(self.attn(self.norm1(x), register_hook=register_hook)) + x = x + self.drop_path(self.mlp(self.norm2(x))) + return x + + +class VisionTransformer(nn.Module): + """ Vision Transformer + A PyTorch impl of : `An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale` - + https://arxiv.org/abs/2010.11929 + """ + def __init__(self, img_size=224, patch_size=16, in_chans=3, num_classes=1000, embed_dim=768, depth=12, + num_heads=12, mlp_ratio=4., qkv_bias=True, qk_scale=None, representation_size=None, + drop_rate=0., attn_drop_rate=0., drop_path_rate=0., norm_layer=None, + use_grad_checkpointing=False, ckpt_layer=0): + """ + Args: + img_size (int, tuple): input image size + patch_size (int, tuple): patch size + in_chans (int): number of input channels + num_classes (int): number of classes for classification head + embed_dim (int): embedding dimension + depth (int): depth of transformer + num_heads (int): number of attention heads + mlp_ratio (int): ratio of mlp hidden dim to embedding dim + qkv_bias (bool): enable bias for qkv if True + qk_scale (float): override default qk scale of head_dim ** -0.5 if set + representation_size (Optional[int]): enable and set representation layer (pre-logits) to this value if set + drop_rate (float): dropout rate + attn_drop_rate (float): attention dropout rate + drop_path_rate (float): stochastic depth rate + norm_layer: (nn.Module): normalization layer + """ + super().__init__() + self.num_features = self.embed_dim = embed_dim # num_features for consistency with other models + norm_layer = norm_layer or partial(nn.LayerNorm, eps=1e-6) + + self.patch_embed = PatchEmbed( + img_size=img_size, patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim) + + num_patches = self.patch_embed.num_patches + + self.cls_token = nn.Parameter(torch.zeros(1, 1, embed_dim)) + self.pos_embed = nn.Parameter(torch.zeros(1, num_patches + 1, embed_dim)) + self.pos_drop = nn.Dropout(p=drop_rate) + + dpr = [x.item() for x in torch.linspace(0, drop_path_rate, depth)] # stochastic depth decay rule + self.blocks = nn.ModuleList([ + Block( + dim=embed_dim, num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, qk_scale=qk_scale, + drop=drop_rate, attn_drop=attn_drop_rate, drop_path=dpr[i], norm_layer=norm_layer, + use_grad_checkpointing=(use_grad_checkpointing and i>=depth-ckpt_layer) + ) + for i in range(depth)]) + self.norm = norm_layer(embed_dim) + + trunc_normal_(self.pos_embed, std=.02) + trunc_normal_(self.cls_token, std=.02) + self.apply(self._init_weights) + + def _init_weights(self, m): + if isinstance(m, nn.Linear): + trunc_normal_(m.weight, std=.02) + if isinstance(m, nn.Linear) and m.bias is not None: + nn.init.constant_(m.bias, 0) + elif isinstance(m, nn.LayerNorm): + nn.init.constant_(m.bias, 0) + nn.init.constant_(m.weight, 1.0) + + @torch.jit.ignore + def no_weight_decay(self): + return {'pos_embed', 'cls_token'} + + def forward(self, x, register_blk=-1): + B = x.shape[0] + x = self.patch_embed(x) + + cls_tokens = self.cls_token.expand(B, -1, -1) # stole cls_tokens impl from Phil Wang, thanks + x = torch.cat((cls_tokens, x), dim=1) + + x = x + self.pos_embed[:,:x.size(1),:] + x = self.pos_drop(x) + + for i,blk in enumerate(self.blocks): + x = blk(x, register_blk==i) + x = self.norm(x) + + return x + + @torch.jit.ignore() + def load_pretrained(self, checkpoint_path, prefix=''): + _load_weights(self, checkpoint_path, prefix) + + +@torch.no_grad() +def _load_weights(model: VisionTransformer, checkpoint_path: str, prefix: str = ''): + """ Load weights from .npz checkpoints for official Google Brain Flax implementation + """ + import numpy as np + + def _n2p(w, t=True): + if w.ndim == 4 and w.shape[0] == w.shape[1] == w.shape[2] == 1: + w = w.flatten() + if t: + if w.ndim == 4: + w = w.transpose([3, 2, 0, 1]) + elif w.ndim == 3: + w = w.transpose([2, 0, 1]) + elif w.ndim == 2: + w = w.transpose([1, 0]) + return torch.from_numpy(w) + + w = np.load(checkpoint_path) + if not prefix and 'opt/target/embedding/kernel' in w: + prefix = 'opt/target/' + + if hasattr(model.patch_embed, 'backbone'): + # hybrid + backbone = model.patch_embed.backbone + stem_only = not hasattr(backbone, 'stem') + stem = backbone if stem_only else backbone.stem + stem.conv.weight.copy_(adapt_input_conv(stem.conv.weight.shape[1], _n2p(w[f'{prefix}conv_root/kernel']))) + stem.norm.weight.copy_(_n2p(w[f'{prefix}gn_root/scale'])) + stem.norm.bias.copy_(_n2p(w[f'{prefix}gn_root/bias'])) + if not stem_only: + for i, stage in enumerate(backbone.stages): + for j, block in enumerate(stage.blocks): + bp = f'{prefix}block{i + 1}/unit{j + 1}/' + for r in range(3): + getattr(block, f'conv{r + 1}').weight.copy_(_n2p(w[f'{bp}conv{r + 1}/kernel'])) + getattr(block, f'norm{r + 1}').weight.copy_(_n2p(w[f'{bp}gn{r + 1}/scale'])) + getattr(block, f'norm{r + 1}').bias.copy_(_n2p(w[f'{bp}gn{r + 1}/bias'])) + if block.downsample is not None: + block.downsample.conv.weight.copy_(_n2p(w[f'{bp}conv_proj/kernel'])) + block.downsample.norm.weight.copy_(_n2p(w[f'{bp}gn_proj/scale'])) + block.downsample.norm.bias.copy_(_n2p(w[f'{bp}gn_proj/bias'])) + embed_conv_w = _n2p(w[f'{prefix}embedding/kernel']) + else: + embed_conv_w = adapt_input_conv( + model.patch_embed.proj.weight.shape[1], _n2p(w[f'{prefix}embedding/kernel'])) + model.patch_embed.proj.weight.copy_(embed_conv_w) + model.patch_embed.proj.bias.copy_(_n2p(w[f'{prefix}embedding/bias'])) + model.cls_token.copy_(_n2p(w[f'{prefix}cls'], t=False)) + pos_embed_w = _n2p(w[f'{prefix}Transformer/posembed_input/pos_embedding'], t=False) + if pos_embed_w.shape != model.pos_embed.shape: + pos_embed_w = resize_pos_embed( # resize pos embedding when different size from pretrained weights + pos_embed_w, model.pos_embed, getattr(model, 'num_tokens', 1), model.patch_embed.grid_size) + model.pos_embed.copy_(pos_embed_w) + model.norm.weight.copy_(_n2p(w[f'{prefix}Transformer/encoder_norm/scale'])) + model.norm.bias.copy_(_n2p(w[f'{prefix}Transformer/encoder_norm/bias'])) +# if isinstance(model.head, nn.Linear) and model.head.bias.shape[0] == w[f'{prefix}head/bias'].shape[-1]: +# model.head.weight.copy_(_n2p(w[f'{prefix}head/kernel'])) +# model.head.bias.copy_(_n2p(w[f'{prefix}head/bias'])) +# if isinstance(getattr(model.pre_logits, 'fc', None), nn.Linear) and f'{prefix}pre_logits/bias' in w: +# model.pre_logits.fc.weight.copy_(_n2p(w[f'{prefix}pre_logits/kernel'])) +# model.pre_logits.fc.bias.copy_(_n2p(w[f'{prefix}pre_logits/bias'])) + for i, block in enumerate(model.blocks.children()): + block_prefix = f'{prefix}Transformer/encoderblock_{i}/' + mha_prefix = block_prefix + 'MultiHeadDotProductAttention_1/' + block.norm1.weight.copy_(_n2p(w[f'{block_prefix}LayerNorm_0/scale'])) + block.norm1.bias.copy_(_n2p(w[f'{block_prefix}LayerNorm_0/bias'])) + block.attn.qkv.weight.copy_(torch.cat([ + _n2p(w[f'{mha_prefix}{n}/kernel'], t=False).flatten(1).T for n in ('query', 'key', 'value')])) + block.attn.qkv.bias.copy_(torch.cat([ + _n2p(w[f'{mha_prefix}{n}/bias'], t=False).reshape(-1) for n in ('query', 'key', 'value')])) + block.attn.proj.weight.copy_(_n2p(w[f'{mha_prefix}out/kernel']).flatten(1)) + block.attn.proj.bias.copy_(_n2p(w[f'{mha_prefix}out/bias'])) + for r in range(2): + getattr(block.mlp, f'fc{r + 1}').weight.copy_(_n2p(w[f'{block_prefix}MlpBlock_3/Dense_{r}/kernel'])) + getattr(block.mlp, f'fc{r + 1}').bias.copy_(_n2p(w[f'{block_prefix}MlpBlock_3/Dense_{r}/bias'])) + block.norm2.weight.copy_(_n2p(w[f'{block_prefix}LayerNorm_2/scale'])) + block.norm2.bias.copy_(_n2p(w[f'{block_prefix}LayerNorm_2/bias'])) + + +def interpolate_pos_embed(pos_embed_checkpoint, visual_encoder): + # interpolate position embedding + embedding_size = pos_embed_checkpoint.shape[-1] + num_patches = visual_encoder.patch_embed.num_patches + num_extra_tokens = visual_encoder.pos_embed.shape[-2] - num_patches + # height (== width) for the checkpoint position embedding + orig_size = int((pos_embed_checkpoint.shape[-2] - num_extra_tokens) ** 0.5) + # height (== width) for the new position embedding + new_size = int(num_patches ** 0.5) + + if orig_size!=new_size: + # class_token and dist_token are kept unchanged + extra_tokens = pos_embed_checkpoint[:, :num_extra_tokens] + # only the position tokens are interpolated + pos_tokens = pos_embed_checkpoint[:, num_extra_tokens:] + pos_tokens = pos_tokens.reshape(-1, orig_size, orig_size, embedding_size).permute(0, 3, 1, 2) + pos_tokens = torch.nn.functional.interpolate( + pos_tokens, size=(new_size, new_size), mode='bicubic', align_corners=False) + pos_tokens = pos_tokens.permute(0, 2, 3, 1).flatten(1, 2) + new_pos_embed = torch.cat((extra_tokens, pos_tokens), dim=1) + print('reshape position embedding from %d to %d'%(orig_size ** 2,new_size ** 2)) + + return new_pos_embed + else: + return pos_embed_checkpoint diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..9c8c547 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,6 @@ +torch>=1.9.0 +torchvision>=0.10.0 +Pillow +towhee +timm +transformers>=4.15.0 diff --git a/tabular1.png b/tabular1.png new file mode 100644 index 0000000000000000000000000000000000000000..8d1db625bd94432c5312a9c83dc9f85782aa9dfc GIT binary patch literal 179845 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 z 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

mq)<5k}%FN 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 VVta0EOV|Q@ObspJ#Ri!0{{amUEh7K` literal 0 HcmV?d00001 diff --git a/vec1.png b/vec1.png new file mode 100644 index 0000000000000000000000000000000000000000..b0022d1869a4fdb656100d72a71761575c8319e2 GIT binary patch literal 12487 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 literal 0 HcmV?d00001 diff --git a/vec2.png b/vec2.png new file mode 100644 index 0000000000000000000000000000000000000000..1e2adc09f8b4457456b9c8cb3e7161993128f775 GIT binary patch literal 12250 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®V8dv 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 z%0DW2mFeVx@3z~)M~y4Al-pXJg}M!9kP99=6|pKIhFFOW=6hBCcnoSJR@qf!mEQg$ z$_&l;4q#*(rL26vN}>73p-()rco|x}Rpzpc>?+&uA~3Ffb;J8#S7e>X+lTt&lQPO_ zc~iJ#snt^CsjWU6Qb&2Du$Ix9EUS<&7KNaz@4pX31@;T3Zp&6msjx#7h0v*Qf0FGo zhtf)6EvJp7sbE~8`Q!Ose1C>R|JL!ot=|HhN>(Q&q;8fVTIdymA4;ik(cG0vCpDdm z3Z5Y{$skc>`zjveyxUZ9O4G_?r)($_vFl%S#2nIKxh{!KtEt zzlv#h1O|vxHl=+TM2#5j=0JJrj(!d8o$7_QOwXSo(MEJoftdf9eJ71PET3`uRBuUfl~+xv>ng^07MuH#~{=|3CH zMX{))3?+vS@l>`yaI81o)gSsm>Q%TT^TJmL!%~uz(W>-!5NyrDs4!*+$jMdFOQj7^ z&j*&X_dOQ`L-O4PK1>4wAy4xGwL025$GJO8C^-c&XL5l+c0(V=G=s#W5>Oq({6uAP z@5PZ{-O?yOk3a5^LY$dA=g@4B{b!V{`I%zGIu{#gU~f4>lIf7m9g)BCZf-d}MLX#e zZ9-+hOk{vw@hB7fjS5vmiv|Lkkoai&F-L9HHr!)45dzZqWs-K2YG&l>>{4;dbQ^~o z4ajA)JJ2Qr`Mr%~X@eWck2Wbgq^|}a4|KJ?dn{cQAcsrD7)2Gk9sdvk)?5QiBy(4< zp{f#C?i6w_P71S#41bM`MynhS8SL6#!=de>wvewqf7p0eyk(APZFCd4d}m@~BqQlk z@BjPFhVb*<$r3wxy6I9GTUtLmx-G?@uUskCV?U4=L<0Z)K}18IC`cbF?gJ65tYHEmQhW5N`dBA8j)W3bm?<&`0qRg{TH+CiJ? zAecY?*bKxQQPf~0oa3WJ!Gil=zXKO6xG0PC<0R#Re_{Vp;7lekU)y8C53%uov;4ow f;6#`98;U+u{n6*UO9=SGCO}3~Q35Dt9Q1zxrYIf~ literal 0 HcmV?d00001