|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import os |
|
import torch |
|
import tempfile |
|
from contextlib import nullcontext |
|
|
|
from mast3r.demo import get_args_parser, main_demo |
|
|
|
from mast3r.model import AsymmetricMASt3R |
|
from mast3r.utils.misc import hash_md5 |
|
|
|
import matplotlib.pyplot as pl |
|
pl.ion() |
|
|
|
torch.backends.cuda.matmul.allow_tf32 = True |
|
|
|
import argparse |
|
|
|
def get_args_parser(): |
|
parser = argparse.ArgumentParser(description="MASt3R Demo") |
|
parser.add_argument("--weights", type=str, default=None, help="Path to the weights file.") |
|
parser.add_argument("--model_name", type=str, default=None, choices=[ |
|
'MASt3R_ViTLarge_BaseDecoder_512_catmlpdpt_metric'], help="Name of the model to use.") |
|
parser.add_argument("--device", type=str, default='cuda', help="Device to run the model on.") |
|
parser.add_argument("--server_name", type=str, default=None, help="Server name to use.") |
|
parser.add_argument("--local_network", action='store_true', help="Run on local network.") |
|
parser.add_argument("--image_size", type=int, choices=[512, 224], default=512, help="Size of the images.") |
|
parser.add_argument("--server_port", type=int, default=None, help="Port for the server.") |
|
parser.add_argument("--tmp_dir", type=str, default=None, help="Temporary directory.") |
|
parser.add_argument("--silent", action='store_true', help="Run silently.") |
|
parser.add_argument("--share", action='store_true', help="Share the application.") |
|
parser.add_argument("--gradio_delete_cache", action='store_true', help="Delete Gradio cache.") |
|
return parser |
|
|
|
def get_default_weights_path(model_name): |
|
|
|
return f"naver/{model_name}" |
|
if __name__ == '__main__': |
|
parser = get_args_parser() |
|
args = parser.parse_args() |
|
|
|
|
|
if args.weights is None and args.model_name is None: |
|
args.model_name = 'MASt3R_ViTLarge_BaseDecoder_512_catmlpdpt_metric' |
|
|
|
if args.weights is None: |
|
args.weights = f"naver/{args.model_name}" |
|
|
|
|
|
server_name = args.server_name or ('0.0.0.0' if args.local_network else '127.0.0.1') |
|
weights_path = args.weights |
|
|
|
|
|
model = AsymmetricMASt3R.from_pretrained(weights_path).to(args.device) |
|
chkpt_tag = hash_md5(weights_path) |
|
|
|
def get_context(tmp_dir): |
|
return tempfile.TemporaryDirectory(suffix='_mast3r_gradio_demo') if tmp_dir is None \ |
|
else nullcontext(tmp_dir) |
|
|
|
with get_context(args.tmp_dir) as tmpdirname: |
|
cache_path = os.path.join(tmpdirname, chkpt_tag) |
|
os.makedirs(cache_path, exist_ok=True) |
|
main_demo(cache_path, model, args.device, args.image_size, server_name, args.server_port, silent=args.silent, |
|
share=args.share, gradio_delete_cache=args.gradio_delete_cache) |
|
|