特征量化编码入门指南
推荐论文: https://arxiv.org/abs/2211.13745
论文摘要:本文研究了设备边缘协同推理系统中 CNN 推理的计算卸载。受新兴语义通信范式的启发,我们提出了一种新颖的基于自动编码器的 CNN 架构(AECNN),用于在终端设备上进行有效的特征提取。我们基于CNN中的通道注意方法设计了一个特征压缩模块,通过选择最重要的特征来压缩中间数据。为了进一步减少通信开销,我们可以使用熵编码来去除压缩数据中的统计冗余。在接收端,我们设计了一个轻量级解码器,通过学习接收到的压缩数据来重建中间数据,以提高准确性。为了加快收敛速度,我们使用分步方法来训练基于 ResNet-50 架构获得的神经网络。实验结果表明,AECNN 可以将中间数据压缩超过 256 倍,而精度损失仅为约 4%,优于最先进的工作 BottleNet++。与直接将推理任务卸载到边缘服务器相比,AECNN 可以更早地完成推理任务,特别是在无线信道条件较差的情况下,这凸显了 AECNN 在保证时间限制内更高准确性方面的有效性。
推荐论文+代码合集: https://paperswithcode.com/task/feature-compression
特征量化编码
量化编码目的就是压缩特征来节省它的存储空间的特征,这种高维的特征,它是个高维的浮点数把它变换成什么通过量化编码变成码字的一个ID,就是一个整数,这样不仅节省了空间,同时整数的运算要比浮点运算来得快,进行距离相似度的计算的时候效率高。量化编码之后的值通常是放在的特征索引的索引项里面。
量化方法:
比如像向量量化,k-means 这种算法,迪卡尔集型的码子空间的,比如像积量化,PQ,OPQ,LOPQ 都属于这种积量化,还有直和型的残差向量量化 RVQ,还有 ELVQ ,增强型的向量量化,还有线性组合型的加性量化 AQ ,组合量化 CQ
整个的量化编码的目标就是使均方误差 MSE 最小,不能说量化之后是压缩了,但是误差很大,但它也就失去了出这个压缩的目的。量化的目的是数据变小,但是它的误差也要尽可能的小。方法不同,近20年有很多的算法出来,专门有一篇综述是讲的量化,感兴趣可以了解这篇综述。
量化编码
目的:压缩特征,节省存储空间
- 向量(高维浮点)—-->码字的ID(一个整数)
- 通常放在索引项中
量化方法
- 向量量化VQ:k-means
- 迪卡尔积型(码字空间)直和型:残差向量量化:RVQ
- >积量化(PQ)/OPQ/LOPQ
- 线性组合型:加性量化(AQ)、组合量化(CQ)
量化器目标:使均方误差(MSE)最小化
关于矢量量化(VQ):
矢量量化(VQ)是语音编码和图像编码节省带宽和存储的非常有效的方法。传统的矢量量化方法根据其码本生成过程主要可分为树形VQ、直和VQ、笛卡尔积VQ、格VQ、分类VQ、反馈VQ和模糊VQ七种类型。在过去的十年中,基于量化的近似最近邻(ANN)搜索发展非常迅速,并且出现了许多用于在大规模数据集的内存中搜索具有二进制代码的图像的方法。它们最令人印象深刻的特点是使用多个密码本。这就导致了两种码本的出现:线性组合码本和联合码本。这可能是未来的一个趋势。然而,这些方法只是在 ANN 搜索的速度、准确性和内存消耗之间寻找平衡,有时这三者之一会受到影响。因此,寻找一种能够在速度和精度之间取得平衡并且占用内存大小适中的矢量量化方法仍然是一个需要研究的问题。
以这种笛卡尔积型,积量化那么为例:
积量化是一个分段量化方法,每一段,它有一个 VQ 的量化器。比如说原始的 SIFT 特征,把它分成若干段。分成多少段,通常这个段的数量要要能够整除原来的这种特征的维数。
迪卡尔积型(码字空间):积量化(Product Quantizer,PQ)
• 分段量化,每段一个VQ量化器
• 量化结果=各子量化结果的串连
• 码字空间=各子码书空间的直积
• 效果
以较小的空间开销得到了较大的码字空间
这是一个 N 乘128位,比如说 N 幅图像,分了很多的块,一幅图像分成 N 块,就有 N 个N 乘以128维的特征向量。
有了这个以后,就把这个特征分段,比如说这里边分成四段,原来的128位分成四段,每一段就是32位,在每一段里边对他进行量化,比如说在 PQ 里面,K 等于256,就是取 K 均值。
相当于把这个特征聚类成256个集合。这样的组合成这不就有4乘256个。最终的集合那么最终出来的这样话以后就把一个 N 乘 128 维的特征转换成了 N 乘以4 的整数。二百五十六可以用二进制数值八位表示。如果是十进制数就是0到256,最后这个值其实就是这么一个矩阵。250 , N 乘以 4,里首先他为数原来是 N 乘以128,现在维数大幅降低,降低了三十二倍,原来是 128 ,现在是 4 。里面原来存在的浮点数现在是八位的二进制数。这里面的数字其实就是聚类的集合它的符号,是哪个集合, K 取得越大特征分的这个集合越小,它的误差就越小,因此K 不能取太小,小了以后分的太粗,误差就会很大。那么这样做完之后,就对每一个特征,都给它分配了应的集合。256个C 的中心其实就是这样的数字。就把这128维这样的特征转换成了量化编码后的整数。
索引里面检索里面用起来就方便,如果说觉得只保留了它集合的至心的话。相当于集合的编号,它的数字还不够准确,还可以继续,比如说直和型就是残差量化,就是存的不是这个集合的至心,是实际的这个落在这个集合里面,再去跟那个中心求一个差,把这个差值求下来,如果这个差值,再对它进行 k-means 的量化,又对这个差进行分组,逐级去分可以叠加,最终使这个误差就会更就是多层级量化,后层以前层的残差作为输入,量化结果就等于各层量化结果的和。码字空间就等于各层的码数空间的和,这么做是准确性会提高,但是占用的空间也会增大,但是它是和关系,不是积的关系。
直和型:残差向量量化(RVQ)
- 多层级联量化
- 后层以前层的残差作为输入
- 量化结果=各层量化结果之和
- 码字空间=各层码书空间的直和
- 层数越多,量化误差越小
层数越多量化的误差就越小,还有像线性组合 AQ 它就有多个码书,量化结果就是各个码书量化结果之和。码数的空间就等于各个码数空间的直接相加。比如说量化方法不同就生成了多个码书。
线性组合型:AQ
• 具有多个码书
• 量化结果=各码书量化结果之和
• 码字空间=各子码书空间的直和
这是不同的量化方法在同一个这种数据集上它的效果,比如说检测图像,它的准确率,它的召回率,它的性能。
比如说 R 它的 @ ,100个里面。能够反馈个多少真实的结果,它性能的对比,不同的量化方法它的性能是不一样的。比如说 RVQ那么它的效果是不错的,但是它的 data怎样。再往后看 CompQ .它不同的算法,有的是层数不同,有的是里面的这种量化器的设计不同,就是说最后的效果也不尽相同。
在选择的时候注意,是牺牲空间,还是适当的牺牲一点点的精度。如果把整个的量化方法复杂度提高了,但这个倍数太大,提高的这个精度很小,建议不要把这量化的这个方法搞得太复杂,除非牺牲算法的复杂度,空间的这种复杂度提高的换来的是值得的查询精度。关于量化还可以去深入的分析,这篇综述介绍了截止到去年到现在,不同的量化方法的优缺点。
相关网站:
(1) TRECVID:
, Digital Video Retrieval at NIST
(2) Video Olympics:
(3) Video Collection:
(4) Leonardo’ s Project:
(5) MPEG:
(6) Information Organization & Retrieval:
http://www2.sims.berkeley.edu/courses/is202/f01/index.html
(7) Movie Tools:
http://www.ricoh.co.jp/src/multimedia/MovieTool/index.html
(8) vdbms Project:
http://www.cs.purdue.edu/vdbms/
(9) DirectShow:
http://www.codeproject.com/KB/directx/directshownet.aspx
如果这篇文章帮助到了你,你可以请作者喝一杯咖啡

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2021-01-05 Python Socket 网络编程之粘包现象
2021-01-05 Socket 通信流程和 Python 网络编程基础
2019-01-05 Caffe SSD的resize过程解析