DECUR-transformers / test_decur.py
BiliSakura's picture
Sync updated code and configs (no weight re-upload)
ba1e0da verified
Raw
History Blame Contribute Delete
2.11 kB
#!/usr/bin/env python3
"""Smoke-test converted DeCUR checkpoints."""
from __future__ import annotations
import argparse
from pathlib import Path
import torch
ROOT = Path(__file__).resolve().parent
MODELS = {
"decur-resnet50-s1": {"channels": 2, "hidden": 2048, "seq": 49},
"decur-resnet50-s2c": {"channels": 13, "hidden": 2048, "seq": 49},
"decur-resnet50-rgb": {"channels": 3, "hidden": 2048, "seq": 49},
"decur-resnet50-dem": {"channels": 3, "hidden": 2048, "seq": 49},
"decur-resnet50-rda-s1": {"channels": 2, "hidden": 2048, "seq": 49},
"decur-vit-small-patch16-s1": {"channels": 2, "hidden": 384, "seq": 197},
"decur-vit-small-patch16-s2c": {"channels": 13, "hidden": 384, "seq": 197},
"decur-vit-small-patch16-rgb": {"channels": 3, "hidden": 384, "seq": 197},
"decur-mit-b2-rgb": {"channels": 3, "hidden": 512, "seq": 49},
"decur-mit-b5-rgb": {"channels": 3, "hidden": 512, "seq": 49},
}
def load_model(model_dir: Path):
from decur.models.decur.modeling_decur import DeCURModel
return DeCURModel.from_pretrained(model_dir, local_files_only=True)
def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument(
"--model",
default="decur-mit-b2-rgb",
choices=sorted(MODELS),
help="Converted checkpoint folder name under DECUR-transformers/",
)
parser.add_argument("--all", action="store_true", help="Run all smoke tests")
args = parser.parse_args()
names = sorted(MODELS) if args.all else [args.model]
for name in names:
spec = MODELS[name]
model_dir = ROOT / name
model = load_model(model_dir)
model.eval()
x = torch.randn(1, spec["channels"], 224, 224)
with torch.no_grad():
out = model(pixel_values=x)
pooled = tuple(out.pooler_output.shape)
seq = tuple(out.last_hidden_state.shape)
assert pooled == (1, spec["hidden"]), pooled
assert seq == (1, spec["seq"], spec["hidden"]), seq
print(f"OK {name}: pooler={pooled}, sequence={seq}")
if __name__ == "__main__":
main()