LoMa — MLX weights (unofficial conversion)

MLX-format (.safetensors, NHWC) conversions of the five released LoMa: Local Feature Matching Revisited (ECCV 2026) checkpoints. They are for use with the mlx-swift-LoMa Swift package (LoMaKit), which runs on Apple Silicon.

Unofficial. These files were converted by a third party. They are not produced or endorsed by the LoMa authors. All credit for the models goes to the original authors (see Citation).

Each file bundles the whole pipeline: the DaD keypoint detector, the DeDoDe descriptor (VGG19-BN, plus DINOv2 ViT-L/14 for the dedode_g variants) and the LoMa matcher.

File Upstream checkpoint Matcher (embed / heads) Descriptor Size
loma_b.safetensors loma_B.pt 256 / 4 DeDoDe-G, 256-d 758 MB
loma_b128.safetensors loma_B128.pth 256 / 4 DeDoDe-B, 128-d 127 MB
loma_l.safetensors loma_L.pth 512 / 8 DeDoDe-G, 256-d 900 MB
loma_g.safetensors loma_G.pth 1024 / 16 DeDoDe-G, 256-d 1.47 GB
loma_r.safetensors loma_R.pth (rotation-invariant) 256 / 4 DeDoDe-G, 256-d 758 MB

Each loma_<v>.json holds that variant's configuration, the SHA-256 of the upstream checkpoint it was converted from, and the SHA-256 of the converted file. The same provenance is embedded in each safetensors header (__metadata__).

Provenance and modifications

  • Source: the upstream checkpoints from https://github.com/davnords/storage/releases/download/loma/…, converted against davnords/LoMa at commit 8fb59c458f2a2ef44314f462467b229c27786bf0.
  • Changes, all structural (no retraining, fine-tuning or quantization):
    • Conv kernels transposed from PyTorch NCHW (O, I, kH, kW) to MLX NHWC (O, kH, kW, I).
    • Numeric nn.Sequential / nn.ModuleDict keys renamed (e.g. ffn.3ffn.fc2, decoder.layers.8decoder.scale8, VGG layers.{i}convs.{j} / norms.{j}).
    • num_batches_tracked buffers dropped. Transformer layers beyond n_layers = 9 dropped, as upstream's own loader does.
    • Tensor dtypes kept as stored: fp32, and bf16 for DINOv2.

Verification

The mlx-swift port was checked against the PyTorch reference for all five variants:

  • Exact CPU stream: every stage agrees to a relative error of 1e-5 or better.
  • GPU float32, full resolution: match-set IoU of 0.97–1.0.
  • End to end vs the upstream LoMa.match (MPS, fp16): 88–97% of Python's matches reproduced within 2 px. Most of the remaining gap comes from JPEG decoding (ImageIO vs libjpeg), not the model.

Usage (Swift)

import LoMaKit

let session = try LoMaSession.load(variant: .b, weightsURL: localURL(of: "loma_b.safetensors"))
let result = try session.match(contentsOf: imageA, imageB)
for m in result.matches() { print(m.pointA, m.pointB, m.score) }

Licenses

The files combine components under two permissive licenses:

Component Upstream License
DaD detector Parskatt/dad MIT
DeDoDe descriptor (VGG19 + refiners) Parskatt/DeDoDe MIT
DINOv2 ViT-L/14 backbone facebookresearch/dinov2 Apache-2.0
LoMa matcher davnords/LoMa (derived from LightGlue) Apache-2.0
Everything else in LoMa davnords/LoMa MIT

See LICENSE-MIT (with the upstream copyright notices) and LICENSE-APACHE.

The models were trained by their authors on third-party datasets (e.g. MegaDepth), and the VGG backbones were initialized from ImageNet-pretrained weights. Refer to the upstream papers for data details and any dataset terms.

Citation

If you use these weights, please cite the original works:

@inproceedings{nordstrom2026loma,
  title={LoMa: Local Feature Matching Revisited},
  author={David Nordström and Johan Edstedt and Georg Bökman and Jonathan Astermark and Anders Heyden and Viktor Larsson and Mårten Wadenbäck and Michael Felsberg and Fredrik Kahl},
  booktitle={Proceedings of the European Conference on Computer Vision (ECCV)},
  year={2026}
}

@inproceedings{nordstrom2026who,
  title={Who Handles Orientation? Investigating Invariance in Feature Matching},
  author={David Nordström and Johan Edstedt and Georg Bökman and Fredrik Kahl},
  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) Workshops},
  year={2026}
}

@article{edstedt2025dad,
  title={{DaD: Distilled Reinforcement Learning for Diverse Keypoint Detection}},
  author={Edstedt, Johan and B{\"o}kman, Georg and Wadenb{\"a}ck, M{\aa}rten and Felsberg, Michael},
  journal={arXiv preprint arXiv:2503.07347},
  year={2025}
}

@inproceedings{edstedt2024dedode,
  title={{DeDoDe: Detect, Don't Describe --- Describe, Don't Detect for Local Feature Matching}},
  author={Johan Edstedt and Georg Bökman and Mårten Wadenbäck and Michael Felsberg},
  booktitle={2024 International Conference on 3D Vision (3DV)},
  year={2024},
  organization={IEEE}
}

@misc{oquab2023dinov2,
  title={DINOv2: Learning Robust Visual Features without Supervision},
  author={Oquab, Maxime and Darcet, Timothée and Moutakanni, Theo and Vo, Huy V. and Szafraniec, Marc and Khalidov, Vasil and Fernandez, Pierre and Haziza, Daniel and Massa, Francisco and El-Nouby, Alaaeldin and Howes, Russell and Huang, Po-Yao and Xu, Hu and Sharma, Vasu and Li, Shang-Wen and Galuba, Wojciech and Rabbat, Mike and Assran, Mido and Ballas, Nicolas and Synnaeve, Gabriel and Misra, Ishan and Jegou, Herve and Mairal, Julien and Labatut, Patrick and Joulin, Armand and Bojanowski, Piotr},
  journal={arXiv:2304.07193},
  year={2023}
}

@inproceedings{lindenberger2023lightglue,
  title={{LightGlue: Local Feature Matching at Light Speed}},
  author={Philipp Lindenberger and Paul-Edouard Sarlin and Marc Pollefeys},
  booktitle={ICCV},
  year={2023}
}
Downloads last month

-

Downloads are not tracked for this model. How to track
MLX
Hardware compatibility
Log In to add your hardware

Quantized

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Papers for mnmly/LoMa-mlx