Spaces:
Runtime error
Runtime error
| """Compute depth maps for images in the input folder. | |
| """ | |
| import os | |
| import ntpath | |
| import glob | |
| import torch | |
| import utils | |
| import cv2 | |
| import numpy as np | |
| from torchvision.transforms import Compose, Normalize | |
| from torchvision import transforms | |
| from shutil import copyfile | |
| import fileinput | |
| import sys | |
| sys.path.append(os.getcwd() + '/..') | |
| def modify_file(): | |
| modify_filename = '../midas/blocks.py' | |
| copyfile(modify_filename, modify_filename+'.bak') | |
| with open(modify_filename, 'r') as file : | |
| filedata = file.read() | |
| filedata = filedata.replace('align_corners=True', 'align_corners=False') | |
| filedata = filedata.replace('import torch.nn as nn', 'import torch.nn as nn\nimport torchvision.models as models') | |
| filedata = filedata.replace('torch.hub.load("facebookresearch/WSL-Images", "resnext101_32x8d_wsl")', 'models.resnext101_32x8d()') | |
| with open(modify_filename, 'w') as file: | |
| file.write(filedata) | |
| def restore_file(): | |
| modify_filename = '../midas/blocks.py' | |
| copyfile(modify_filename+'.bak', modify_filename) | |
| modify_file() | |
| from midas.midas_net import MidasNet | |
| from midas.transforms import Resize, NormalizeImage, PrepareForNet | |
| restore_file() | |
| class MidasNet_preprocessing(MidasNet): | |
| """Network for monocular depth estimation. | |
| """ | |
| def forward(self, x): | |
| """Forward pass. | |
| Args: | |
| x (tensor): input data (image) | |
| Returns: | |
| tensor: depth | |
| """ | |
| mean = torch.tensor([0.485, 0.456, 0.406]) | |
| std = torch.tensor([0.229, 0.224, 0.225]) | |
| x.sub_(mean[None, :, None, None]).div_(std[None, :, None, None]) | |
| return MidasNet.forward(self, x) | |
| def run(model_path): | |
| """Run MonoDepthNN to compute depth maps. | |
| Args: | |
| model_path (str): path to saved model | |
| """ | |
| print("initialize") | |
| # select device | |
| # load network | |
| #model = MidasNet(model_path, non_negative=True) | |
| model = MidasNet_preprocessing(model_path, non_negative=True) | |
| model.eval() | |
| print("start processing") | |
| # input | |
| img_input = np.zeros((3, 384, 384), np.float32) | |
| # compute | |
| with torch.no_grad(): | |
| sample = torch.from_numpy(img_input).unsqueeze(0) | |
| prediction = model.forward(sample) | |
| prediction = ( | |
| torch.nn.functional.interpolate( | |
| prediction.unsqueeze(1), | |
| size=img_input.shape[:2], | |
| mode="bicubic", | |
| align_corners=False, | |
| ) | |
| .squeeze() | |
| .cpu() | |
| .numpy() | |
| ) | |
| torch.onnx.export(model, sample, ntpath.basename(model_path).rsplit('.', 1)[0]+'.onnx', opset_version=9) | |
| print("finished") | |
| if __name__ == "__main__": | |
| # set paths | |
| # MODEL_PATH = "model.pt" | |
| MODEL_PATH = "../model-f6b98070.pt" | |
| # compute depth maps | |
| run(MODEL_PATH) | |