2026/8/22 14:54:26

NetVLAD评估指南: recall@N指标原理与Tokyo 24/7白天、黄昏、夜间分场景测试方法

NetVLAD评估指南: recall@N指标原理与Tokyo 24/7白天、黄昏、夜间分场景测试方法 NetVLAD评估指南: recallN指标原理与Tokyo 24/7白天、黄昏、夜间分场景测试方法【免费下载链接】netvladNetVLAD: CNN architecture for weakly supervised place recognition项目地址: https://gitcode.com/gh_mirrors/ne/netvladNetVLAD 是一个用于**弱监督地物识别place recognition**的经典卷积神经网络架构只需图片与地点标签即可训练无需逐像素标注。本指南面向新手讲清楚评估核心指标recallN的计算原理并手把手演示在Tokyo 24/7数据集上如何跑通白天 / 黄昏 / 夜间分场景测试结果帮你完整掌握 NetVLAD 评估指南的每一步。一、recallN 指标原理3步看懂它怎么算 很多新手拿到评估结果不知道数字从哪来。recallN 的计算链路在源码中非常清晰特征检索testFromFn.m读取数据库图与查询图的特征文件.bin交给 testCore.m 构造检索器实际最近邻搜索由 rawNnSearch.m 调用yael_nn完成返回距离最近的 Top-N 张数据库图。判定正样本数据集对象继承自 datasets/dbBase.m内置isPosQ方法——若某张数据库图的 GPS 坐标UTM与查询图坐标距离小于posDistThr米就视为正样本。统计命中率核心逻辑就在 recallAtN.m 一行代码中thisRecall cumsum( isPos(iTest, ids) ) 0;含义对 Top-N 结果做累计求和只要前 N 张里出现至少 1 张正样本该查询的 recallN 就记 1。最后对所有查询取平均即得到最终的 recallN 值。 默认评估的 N 取值为[1:5, 10:5:100]见testFromFn.m中的recallNs所以你会看到一条从 recall1 到 recall100 的完整曲线。Tokyo 24/7 的特殊处理非极大值抑制Tokyo 24/7 的数据库每幅全景图被切成12 个小图若不去重Top-N 可能全是同一全景的碎片。因此 datasets/dbTokyo247.m 重写了nnSearchPostprocess先检索12×N张再按每个全景最多取 1 张去重后截取前 N 张。这是官方标准测试流程无需你额外处理。二、Tokyo 24/7 完整测试流程从克隆仓库到画出曲线 整个流程分 5 步全部命令来自官方README.md的示例第 1 步准备环境。克隆仓库后复制localPaths.m.setup为localPaths.m配置依赖库relja_matlab、MatConvNet、可选 Yael与数据集路径然后运行setup;第 2 步加载官方预训练网络。Tokyo 24/7 对应网络 ID 为vd16_tokyo247_conv5_3_vlad_preL2_intra_whiteVGG-16 骨干 NetVLAD 层 白化从项目页下载后加载netID vd16_tokyo247_conv5_3_vlad_preL2_intra_white; paths localPaths(); load( sprintf(%s%s.mat, paths.ourCNNs, netID), net ); net relja_simplenn_tidy(net);第 3 步批量提取特征。serialAllFeats以批处理方式把整库/整组查询图过一遍前向传播结果存为二进制文件dbTest dbTokyo247(); dbFeatFn sprintf(%s%s_%s_db.bin, paths.outPrefix, netID, dbTest.name); qFeatFn sprintf(%s%s_%s_q.bin, paths.outPrefix, netID, dbTest.name); serialAllFeats(net, dbTest.dbPath, dbTest.dbImageFns, dbFeatFn, batchSize, 10); serialAllFeats(net, dbTest.qPath, dbTest.qImageFns, qFeatFn, batchSize, 1);⚠️ 注意查询图分辨率各不相同batchSize必须设为 1数据库图尺寸一致可用 10。第 4 步计算 recallN 并绘图[recall, ~, ~, opts] testFromFn(dbTest, dbFeatFn, qFeatFn); plot(opts.recallNs, recall, ro-); grid on; xlabel(N); ylabel(RecallN); title(netID, Interpreter, none);第 5 步可选测试更低维度。对带白化的网络只需保留前 D 维再 L2 归一化即可测试小维度表示例如 256 维recall testFromFn(dbTest, dbFeatFn, qFeatFn, [], cropToDim, 256);三、白天/黄昏/夜间分场景测试3行代码拆出每类结果 Tokyo 24/7 最大的特点是同时考验模型在白天、黄昏、夜间三种光照下的识别能力。官方README.md的示例只给出三类查询混合后的总体曲线README_more.md则透露了如何拆分查询图按固定顺序排列iQuery mod 3为 1 是白天、2 是黄昏、0 是夜间。操作只需多取一个输出allRecalls每个查询 × 每个 N 的召回率矩阵然后按模运算筛选行即可[recall, ~, allRecalls, opts] testFromFn(dbTest, dbFeatFn, qFeatFn); % 仅白天查询 recallDay mean( allRecalls(1:3:end,:), 1); % 黄昏 夜间查询合并 recallSunsetNight mean( allRecalls([2:3:end, 3:3:end],:), 1);三类场景的含义对比如下场景查询索引规律典型挑战白天iQuery mod 3 1光照充足基线场景黄昏iQuery mod 3 2逆光、阴影变化大夜间iQuery mod 3 0暗光、路灯高光最难把三条曲线画在一起就能直观看出网络尤其是白化版本对光照变化的鲁棒性——这正是 Tokyo 24/7 基准的设计初衷。四、常见坑与实用技巧清单 ✅中断后要删损坏文件特征提取若中途失败GPU 爆内存、手动停止输出的.bin是不完整的而代码发现文件已存在就不会重算会导致测试直接报错。重跑前先删除损坏的*_db.bin/*_q.bin。CPU 太慢所有涉及 GPU 的函数serialAllFeats、computeRepresentation等可加useGPU, false改用 CPU但官方明确提示 CPU 下训练非常慢评估也建议用 GPU。训练期间选模型训练会周期性保存会话ID_epNNNNNN_latest.mat用pickBestNet(sessionID)自动挑出验证集 recall5 最高的网络再配addPCA加 PCA白化可进一步提升效果。快速验证单张图想先看单张图的表示效果用computeRepresentation(net, im)一行即可无需整库提取详见demo.m示例。五、相关源码文件速查文件作用testFromFn.m从特征文件出发的一站式评估入口含cropToDim降维testCore.m/recallAtN.m检索 recallN 统计核心实现datasets/dbTokyo247.mTokyo 24/7 数据集定义与非极大值抑制后处理datasets/dbBase.m数据集基类GPS 正样本判定、负样本采样serialAllFeats.m批量 GPU 特征提取demo.m/demoRetrieval.m官方完整训练/测试示例按照以上步骤你就可以在 Tokyo 24/7 上得到与论文口径一致的 recallN 曲线并进一步拆分白天/黄昏/夜间的分场景表现用于对比不同网络结构NetVLAD vs 平均/最大池化或不同表示维度。【免费下载链接】netvladNetVLAD: CNN architecture for weakly supervised place recognition项目地址: https://gitcode.com/gh_mirrors/ne/netvlad创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考