wyctorfogos's picture
Deploy Space
961cf0c
Raw
History Blame Contribute Delete
1.9 kB
import torch
from models import multimodalIntraInterModal
def _strip_module_prefix(state_dict):
keys = list(state_dict.keys())
if keys and keys[0].startswith("module."):
return {k.replace("module.","",1):v for k,v in state_dict.items()}
return state_dict
def _load_checkpoint(model_path, device):
try:
return torch.load(model_path, map_location=device)
except (RuntimeError, OSError) as exc:
msg = str(exc)
if "PytorchStreamReader failed reading zip archive" in msg:
raise RuntimeError(
f"Checkpoint file is not a readable PyTorch archive: {model_path}. "
"The file is likely truncated, corrupted, or was not exported correctly."
) from exc
raise RuntimeError(
f"Failed to load checkpoint from {model_path}: {exc}"
) from exc
def load_model(
device="cuda",
model_path:str=None,
num_classes=6,
cnn_model_name="densenet169",
attention_mecanism="gfcam",
vocab_size=91,
num_heads=8,
n=2,
text_model_name="one-hot-encoder",
unfreeze_weights="frozen_weights"
):
model = multimodalIntraInterModal.MultimodalModel(
num_classes=num_classes, device=device, cnn_model_name=cnn_model_name,
text_model_name=text_model_name, vocab_size=vocab_size, num_heads=num_heads,
attention_mecanism=attention_mecanism, n=n, unfreeze_weights=unfreeze_weights
)
ckpt = _load_checkpoint(model_path, device)
state_dict = ckpt["model_state_dict"] if "model_state_dict" in ckpt else ckpt
model.load_state_dict(state_dict, strict=False)
model.to(device=device).eval()
return model
def find_last_conv(module):
last_conv = None
for m in module.modules():
if isinstance(m, torch.nn.Conv2d):
last_conv = m
return last_conv