十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

NetVLAD输出向量布局详解: (KxD)结构组织方式与乘积量化PQ压缩最佳实践

NetVLAD输出向量布局详解: (KxD)结构组织方式与乘积量化PQ压缩最佳实践 NetVLAD输出向量布局详解: (KxD)结构组织方式与乘积量化PQ压缩最佳实践【免费下载链接】netvladNetVLAD: CNN architecture for weakly supervised place recognition项目地址: https://gitcode.com/gh_mirrors/ne/netvladNetVLAD 是弱监督地点识别领域的经典 CNN 架构其输出向量布局K×D 结构直接决定了后续乘积量化 PQ 压缩的效率与效果。本文带你彻底搞懂 NetVLAD 向量的组织方式、常见维度大小以及如何正确地为 PQ 压缩做重排——避免踩坑的完整指南。 NetVLAD 是什么一句话理解NetVLAD 卷积神经网络提取局部描述子 可学习的 VLAD 聚合层把成千上万个局部描述子投票汇总成一个整图向量。它只需图像级标签即可训练弱监督无需人工框出地标一张图片最终变成一个固定长度的向量向量越像两张图越可能拍摄于同一地点核心实现就在 layerVLAD.m 和 layerVLADv2.m 两个文件中。两个版本输出维度完全相同区别仅在学习方式版本特点layerVLAD偏移量 b_k 固定仅学 w_k收敛更快官方实验所用layerVLADv2严格复现论文w_k 与 b_k 全部可学习表达能力更强 (K×D) 向量是怎么来的分配 聚合两步走理解布局前先理解生成过程见 layerVLADv2.m 的forward_方法软分配对每个局部描述子计算它与 K 个聚类中心的相似度经 softmax 得到一组投票权重加权聚合把每个描述子与其聚类中心的差值乘以投票权重后按簇累加。最终得到的是一张K×D 矩阵K 聚类中心数D 描述子维度再压平成(K×D)×1的向量。其中每个 k 行D 个数表达的是被投给第 k 个簇的那部分视觉信息相对该簇中心的偏差总和——偏差越接近 0说明图像内容与该簇越熟悉。以官方配置为例addLayers.m 中固定k64骨干网络KD输出维度 K×DVGG-16conv5_36451232768AlexNetconv56425616384 关键三种组织方式对比最容易踩坑的地方同样是 32768 个数存储顺序不同语义完全不同。以 K64、D512 为例组织方式形态第 1 个簇的值在哪适用场景① 层内张量[1, K, D, batch]第 1 行的 512 个数网络内部② 默认压平列优先(K×D)×1下标1, 65, 129, …间隔 K 交错直接取网络输出时③ 转置后压平按簇分块(K×D)×1连续下标1:512整块 512 维PQ 压缩前必做⚠️ 注意 ②由于按列优先展平同一个簇的 D 个值是交错分布的间隔 K而不是连续的。官方文档 README_more.md 特别强调了这一点——如果你不了解布局就直接做 PQ等于把每个簇的信息打散到各子量化器里压缩效果会变差。✨ 乘积量化 PQ 压缩最佳实践PQ 的思路把长向量切成若干小段子向量每段用独立的码本量化成一个字节。为了让量化更准应让每个子量化器恰好对应一个聚类中心的 D 维块——因为同一簇内的维度天然强相关分块后每段内部方差小、码本更精准。所以压缩前先做一次按簇重排只需一行转置% netvlad: 原始 (K*D)×1 输出交错布局 netvladForPQ reshape(reshape(netvlad, [K, D]), [K*D, 1]); % 现在第 1 个簇 [1:D]第 2 个簇 [D1:2D]依此类推一个直观的量级例子VGG-16 K64、D512表示形式每图大小说明原始 float32 向量32768 × 4 B 128 KB精确存储PQ64 个子量化器 × 256 码本8 bit64 字节每簇 512 维量化为 1 字节压缩约 2000 倍 小贴士官方同时推荐用PCA 白化进一步降维见下文两者是互补的——PQ 用于原始 VLAD 向量白化向量则靠低维截断压缩。 归一化链路与降维从 32768 到 4096 再到 256一个完整的 NetVLAD 网络向量要经过多级整形见 addLayers.m 与 addPCA.m层作用preL2对每个局部描述子做逐特征 L2 归一化vlad:coreVLAD 聚合输出 K×Dvlad:intranorm簇内归一化对每个簇自己的 D 维块单独做 L2归一化窗口参数2*D即为此服务postL2对整个 (K×D) 向量做整体 L2WPCA可选推荐PCA 白化降到 4096 维再整体 L2白化之后还有更狠的压缩手段由于白化向量的能量集中在前部维度直接截断前 D 维再 L2 归一化即可测试更低维度testFromFn 的cropToDim选项。demo.m 中给出了 64~4096 各维度下 Recall5 的扫描示例。各形态存储体积一览VGG-16 配置形态维度float32 大小原始 VLAD 向量32768128 KBPCA 白化409616 KB白化 截断2561 KBPQ重排后64 字节码本索引64 B批量提取时建议用 serialAllFeats.m支持 GPU 批处理输出为连续 float32 二进制文件维度 × 图片数 × 4字节用fread直接读入即可方便后续批量做 PQ 预训练。✅ 动手前检查清单确认布局直接取的网络输出是交错布局第 1 簇在下标1:K:end不是按簇连续存放做 PQ 前必转置reshape(reshape(v, [K, D]), [K*D, 1])让子量化器与簇对齐K 和 D 从网络属性读两个 VLAD 层类都保存了K、D、vladDim属性别硬编码归一化别漏截断维度后要重新 L2 归一化先白化再谈压缩官方最佳实践是 PCA白化到 4096检索效果和内存占用双收益。 相关源码速查文件内容layerVLAD.m / layerVLADv2.mVLAD 前向/反向K、D、vladDim定义addLayers.m组装 preL2 → VLAD → intra → postL2 各层addPCA.mPCA 白化降维层computeRepresentation.m单图快速提取表示serialAllFeats.m批量提取二进制输出格式README_more.md官方对输出向量布局与 PQ 的原始说明理解了交错 vs 分块这一布局差异你就掌握了 NetVLAD 向量压缩的第一性原理——无论是 PQ、降维还是自定义索引都能从容应对。【免费下载链接】netvladNetVLAD: CNN architecture for weakly supervised place recognition项目地址: https://gitcode.com/gh_mirrors/ne/netvlad创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表