当前位置: 首页 > news >正文

anyloc(2)升级到dinov3版本 - MKT

anyloc(2)升级到dinov3版本

image

 

把这个项目总结成一个文字,方便我保存以后复现出来


• 项目总结

这个项目是一个独立的视觉位置重识别小工程,路径是
/home/dongdong/2project/1salm/py311_AnylocMast3r/dinov3_anyloc_vpr

它的目标是参考 AnyLoc 的思路,用 DINOv3 patch 特征 + VLAD 聚合 + FAISS 检索 做一个可落地的全局位置检索工具。核心用途是:

- 对单张图片提取一个全局描述子并保存
- 对一个图库批量提取描述子并建立 FAISS 索引
- 对一张新图做检索,返回 top-k 匹配结果并可视化

当前已实现的 3 个功能

1. extract-image

- 输入一张图和缩放分辨率
- 提取 patch 特征
- 聚合成单张全局描述子
- 保存 descriptor.npy
- 保存特征图可视化 feature_map.png
- 保存 metadata.json
- 现在还会显示进度条和单张提取时间,并把 extract_time_sec 写进 metadata.json

2. build-map

- 输入一个图片文件夹和缩放分辨率
- 先提取 patch 特征,采样 patch,拟合 VLAD 聚类中心
- 再对每张图聚合出全局描述子
- 保存描述子矩阵、每张图描述子、VLAD 聚类中心、FAISS 索引、地图元数据
- 现在支持两轮进度条,显示当前第几张/总张数、当前图名、单张提取时间

3. query-map

- 输入一张查询图和已经构建好的地图目录
- 自动提取查询图描述子
- 加载地图描述子和 FAISS 索引
- 返回 top-k 匹配结果
- 保存 query_results.json
- 保存 query_feature_map.png
- 保存 topk_matches.png
- 现在会显示查询图提取进度和 top-k 匹配图逐张提取进度,并记录每张匹配图的特征提取时间
- topk_matches.png 现在会显示:
- 查询图
- 查询特征图
- 查询叠加图
- 每个 top-k 匹配图
- 每个匹配图的特征图
- 每个匹配图的叠加图

———

模型与特征方案

项目默认优先使用你本地下载的 DINOv3 模型目录:

/home/dongdong/2project/1salm/py311_AnylocMast3r/dinov3_anyloc_vpr/dinov3_mode/dinov3-vitl16-pretrain-lvd1689m

不是默认去 Hugging Face 拉取。
代码已经改成:

- 如果传入的是本地目录,就自动 local_files_only=True
- 支持本地 DINOv3 权重直接加载
- 兼容 DINOv3 的 register tokens
- 提取 patch token 时会自动跳过 CLS + register tokens

当前默认模型引用位置在:

- /home/dongdong/2project/1salm/py311_AnylocMast3r/dinov3_anyloc_vpr/vpr_dinov3/constants.py
- /home/dongdong/2project/1salm/py311_AnylocMast3r/dinov3_anyloc_vpr/vpr_dinov3/model.py

———

项目结构

主要文件如下:

- /home/dongdong/2project/1salm/py311_AnylocMast3r/dinov3_anyloc_vpr/main.py
项目主入口,支持直接 python main.py ...
- /home/dongdong/2project/1salm/py311_AnylocMast3r/dinov3_anyloc_vpr/vpr_dinov3/cli.py
命令行逻辑,3 个子命令都在这里
- /home/dongdong/2project/1salm/py311_AnylocMast3r/dinov3_anyloc_vpr/vpr_dinov3/model.py
DINOv3 特征提取
- /home/dongdong/2project/1salm/py311_AnylocMast3r/dinov3_anyloc_vpr/vpr_dinov3/aggregation.py
VLAD 聚合和 patch 采样
- /home/dongdong/2project/1salm/py311_AnylocMast3r/dinov3_anyloc_vpr/vpr_dinov3/indexing.py
地图保存/加载,FAISS 索引保存/读取
- /home/dongdong/2project/1salm/py311_AnylocMast3r/dinov3_anyloc_vpr/vpr_dinov3/faiss_compat.py
FAISS 兼容封装,支持 CPU/GPU 路径
- /home/dongdong/2project/1salm/py311_AnylocMast3r/dinov3_anyloc_vpr/vpr_dinov3/visualization.py
特征图和 top-k 结果可视化
- /home/dongdong/2project/1salm/py311_AnylocMast3r/dinov3_anyloc_vpr/pyproject.toml
已补成标准 pip 包配置
- /home/dongdong/2project/1salm/py311_AnylocMast3r/dinov3_anyloc_vpr/requirements.txt
项目依赖

———

环境与安装

当前使用环境:

- conda 环境名:py311_AnylocMast3r
- Python:3.11
- PyTorch:保留原环境,不主动升级
- CUDA:按你原来的 11.8 体系兼容

安装方式:

conda activate py311_AnylocMast3r
cd /home/dongdong/2project/1salm/py311_AnylocMast3r/dinov3_anyloc_vpr
pip install -e . --no-deps

说明:

- 已支持标准 pip install -e .
- 也可以不装包,直接 python main.py ...

———

运行方式

1. 单图提取

conda run -n py311_AnylocMast3r python main.py extract-image \
--image /home/dongdong/2project/1salm/py311_AnylocMast3r/dinov3_anyloc_vpr/image/DJI_0001.jpg \
--resize 640 \
--output-dir /tmp/dinov3_extract_progress_test

输出:

- descriptor.npy
- feature_map.png
- metadata.json

2. 建图库

conda run -n py311_AnylocMast3r python main.py build-map \
--image-dir /home/dongdong/2project/1salm/py311_AnylocMast3r/dinov3_anyloc_vpr/image/images \
--resize 640 \
--output-dir /tmp/dinov3_map_progress_test

输出:

- descriptors.npy
- faiss.index
- vocab_centers.npy
- map_metadata.json
- per_image_descriptors/*.npy

3. 查询图库

conda run -n py311_AnylocMast3r python main.py query-map \
--image /home/dongdong/2project/1salm/py311_AnylocMast3r/dinov3_anyloc_vpr/image/DJI_0001.jpg \
--map-dir /tmp/dinov3_map_progress_test \
--output-dir /tmp/dinov3_query_progress_test

输出:

- query_descriptor.npy
- query_feature_map.png
- query_results.json
- topk_matches.png

———

我做过的关键改动

1. 本地 DINOv3 模型支持

- 默认模型改成本地目录优先
- 兼容 DINOv3 register tokens
- 避免必须联网拉权重

2. 包化

- 增加 pyproject.toml
- 支持 pip install -e .
- 已修正 console script 入口

3. 直接脚本执行兼容

- main.py 已支持直接:

python main.py ...

4. FAISS 改造

- 从 faiss-cpu 改成 faiss-gpu-cu11
- 增加 faiss_compat.py
- 当前环境里虽然装了 GPU 版包,但运行时没检测到 GPU,所以实际仍走 CPU 检索路径

5. 进度条与计时

- extract-image、build-map、query-map 都加了 tqdm
- 会显示当前处理张数和单张提取时间

6. 查询可视化增强

- query-map 除了查询图本身,也会显示查询特征图
- 每个 top-k 匹配图也会显示自己的特征图和叠加图

———

已经验证成功的内容

我已经用你的图片实际跑通过:

- 单图提取:DJI_0001.jpg
- 地图构建:image/images
- top-5 查询:DJI_0001.jpg against built map

当前验证通过的产物包括:

- feature_map.png
- topk_matches.png
- query_results.json

并确认:

- 进度条正常显示
- 单张提取时间正常输出
- query_results.json 正常写入时间字段
- topk_matches.png 确实显示了查询图和匹配图对应的特征图

———

当前注意事项

1. GPU FAISS 包已安装,但当前运行环境看不到 GPU
所以检索仍按 CPU 路径执行,不影响功能,只影响速度。
2. 查询结果质量目前取决于:

- DINOv3 特征
- VLAD 聚类数
- resize 分辨率
- 地图图片质量与视角差异

3. 这个工程目前是“全局检索工具”,不是完整 SLAM 重定位系统。
如果后面要和 DROID-SLAM 接起来,推荐流程是:

- 白天离线建图库
- 查询图做 top-k 检索
- 再做几何验证或 PnP
- 成功后把结果作为重定位初值交给 SLAM

———

一句话概括

这是一个已经能实际运行的、基于 DINOv3 + AnyLoc 风格 VLAD + FAISS 的轻量级全局位置检索工程,支持单图描述子提取、地图批量构建、
top-k 检索和特征图可视化,并且已经适配你本地 DINOv3 模型与 py311_AnylocMast3r 环境。

如果你要,我下一条可以把这份总结整理成一个可以直接保存的 README_复现说明.md。


› Implement {feature}

gpt-5.4 high · ~/2project/1salm/DROID-SLAM

http://www.jsqmd.com/news/680075/

相关文章:

  • 2026年3月礼品盒门店口碑推荐,高档礼盒/特产礼盒/天地盖礼盒/礼品盒/节庆礼盒/手提礼盒,礼品盒品牌哪家好 - 品牌推荐师
  • Vitis 2020.1编译MicroBlaze程序报错?别急着找CPU,先看看你的BRAM够不够用
  • Hotkey Detective:3步快速解决Windows热键冲突的终极工具
  • Linux DTS配置避坑指南:以GC8034/OV系列Camera的I2C地址和引脚复用为例
  • ROS与ABB机器人联调:如何通过RoboStudio信号与系统输出来实时监控机器人状态
  • GraalVM静态镜像内存优化避坑清单(含Spring Boot 3.2+、Quarkus 3.13+、Micrometer Native兼容方案),错过=生产事故
  • 2026年Q2集装箱房屋厂家选型:液冷矿箱、矿箱厂家推荐、矿箱厂家联系电话、算力矿箱联系方式、集装箱办公室、集装箱卫生间选择指南 - 优质品牌商家
  • 2026成都挤塑板厂家标杆名录:防水基层板厂家、阻燃挤塑板厂家电话、阻燃挤塑板厂家直销、附近岩棉板厂家直销、附近抗裂砂浆厂家选择指南 - 优质品牌商家
  • 用STM32CubeMX和HAL库驱动RC522 NFC模块,从零实现一个简易门禁(附完整代码)
  • 异步电路后端实现:从CDC约束到SignOff的实战解析
  • AnyFlip电子书离线化解决方案:突破网络限制的知识保存革命
  • 用Open3D处理点云数据?从“灯.pcd”开始你的第一个3D数据分析项目
  • 2026金属滤袋品牌大揭秘,帮你轻松抉择,金属滤袋/粉尘超低排放/高温滤袋,金属滤袋品牌选哪家 - 品牌推荐师
  • 从Thread到VirtualThread:高并发架构演进关键转折点(附JDK21→JDK25迁移checklist、性能对比基准测试数据集、SLA保障SOP)
  • 用DBSCAN给你的数据‘抓虫子’:一个Python实例搞定信用卡欺诈检测(附完整代码)
  • LVGL Spinner控件调参避坑指南:从卡顿到丝滑,我只改了这两个参数
  • 用Python实现切比雪夫距离:从国际象棋到KNN算法的实战指南
  • Spring Boot 2.x 升级 3.x / 4.x 怎么做?一次讲清 JDK、Jakarta、依赖兼容与上线策略
  • RAG系统设计与优化实战指南
  • Podman网络配置与开机自启的联动实战:如何让你的容器服务在重启后网络也不掉线?
  • 怎么打开后缀名为 .md 的 Markdown 文件?(推荐一个超好用的在线工具)
  • 【Docker AI调度调试实战指南】:20年SRE亲授5大高频故障定位法与3分钟热修复技巧
  • CSS如何利用Sass定义全局阴影方案_通过变量实现统一CSS风格
  • DIY智能家居控制面板:用ESP8266和TM1629A打造低成本数码管时钟/温湿度显示器
  • Unity游戏开发:用ShaderGraph 10分钟搞定角色透视X光效果(附避坑指南)
  • PCIe LTSSM状态机实战:用Graphviz DOT脚本可视化你的调试过程
  • Spring Boot 4.0 Agent-Ready架构深度解析(仅限首批Early Access用户开放的5大插件入口)
  • 机器学习必备:线性代数核心应用与实践指南
  • 告别sc.exe!用NSSM把任意exe变成Windows服务(附Frpc实战配置)
  • STM32+FreeModbus实战:用AHT20传感器搭建低成本温湿度监测从机(附完整代码)