Spaces:
Build error
Build error
| import torch | |
| from hloc import logger | |
| from ..utils.base_model import BaseModel | |
| class XFeatLightGlue(BaseModel): | |
| default_conf = { | |
| "keypoint_threshold": 0.005, | |
| "max_keypoints": 8000, | |
| } | |
| required_inputs = [ | |
| "image0", | |
| "image1", | |
| ] | |
| def _init(self, conf): | |
| self.net = torch.hub.load( | |
| "verlab/accelerated_features", | |
| "XFeat", | |
| pretrained=True, | |
| top_k=self.conf["max_keypoints"], | |
| ) | |
| logger.info("Load XFeat(dense) model done.") | |
| def _forward(self, data): | |
| # we use results from one batch | |
| im0 = data["image0"] | |
| im1 = data["image1"] | |
| # Compute coarse feats | |
| out0 = self.net.detectAndCompute(im0, top_k=self.conf["max_keypoints"])[ | |
| 0 | |
| ] | |
| out1 = self.net.detectAndCompute(im1, top_k=self.conf["max_keypoints"])[ | |
| 0 | |
| ] | |
| out0.update({"image_size": (im0.shape[-1], im0.shape[-2])}) # W H | |
| out1.update({"image_size": (im1.shape[-1], im1.shape[-2])}) # W H | |
| mkpts_0, mkpts_1 = self.net.match_lighterglue(out0, out1) | |
| mkpts_0 = torch.from_numpy(mkpts_0) # n x 2 | |
| mkpts_1 = torch.from_numpy(mkpts_1) # n x 2 | |
| pred = { | |
| "keypoints0": mkpts_0, | |
| "keypoints1": mkpts_1, | |
| "mconf": torch.ones_like(mkpts_0[:, 0]), | |
| } | |
| return pred | |