矢量量化(Vector Quantization)(转)

矢量量化(VQ,Vector Quantization)是一种极其重要的信号压缩方法。VQ在语音信号处理中占十分重要的地位。广泛应用于语音编码、语音识别和语音合成等领域。

一、概述

VectorQuantization (VQ)是一种基于块编码规则的有损数据压缩方法。事实上,在 JPEG 和 MPEG-4 等多媒体压缩格式里都有 VQ 这一步。它的基本思想是:将若干个标量数据组构成一个矢量,然后在矢量空间给以整体量化,从而压缩了数据而不损失多少信息。

在以前,VQ运用的一个难点在于它要要解决一个多维积分(multi-dimensional integration)的问题。后来,在1980年,Linde, Buzo和Gray(LBG,这个缩写也是LBG算法的命名)提出一种基于训练序列的VQ设计算法,对训练序列的运用绕开了多维积分的求解,使得世上又诞生了一种经典的被世人称为LBG-VQ的算法!它一直延绵至今,经典永不褪色。

二、知识准备

VQ实际上就是一种逼近。它的思想和“四舍五入”有异曲同工之妙,都是用一个和一个数最接近的整数来近似表示这个数。我们先来看看一个一维VQ的例子:

这里,小于-2的数都近似为-3,在-2和0之间的数都近似为-1,在0和2之间的数都近似为1,大于2的数都近似为3。这样任意的一个数都会被近似为-3、-1、1或者3这四个数中的其中一个。而我们编码这四个数只需要两个二进制位就行了。所以这是1-dimensional,2-bit VQ,它的 rate(量化速率?)为2bits/dimension。

我们再看一个二维的例子:

在这里,我们用蓝色实线将这张图划分为16个区域。任意的一对数(也就是横轴x和纵轴y组成的任意的一个坐标点(x, y))都会落到上面这张图中的某一特定区域。然后它就会被该区域的红星的点近似。这里有16块不同区域,就是16个红星点。然后这16个值就可以用4位的二进制码来编码表示(2^4=16)。因此,这是个2-dimensional, 4-bit VQ,它的速率同样是2bits/dimension。上面这些红星点就是量化矢量,表示图中的任意一个点都可以量化为这16个矢量中的其中一个。

对于二维,我们还可以用图像压缩来说明。类似于将图像的每个像素点当作一个数据,跑一下 K-means 聚类,假设将图像聚为k类,就会得到每类的质心centroids,共k个,然后用这些质心的像素值来代替对应的类里的所有点的像素值。这样就起到压缩的目的了,因为只需要编码k个像素值(和图像每个像素点的对这k个值得索引)就可以表示整张图像了。当然,这会存在失真了,失真的程度就是k的个数了。最偏激的就是原图像每个像素就是一个类,那就没有失真了,当然这也没有了压缩(这点说的我感觉有问题吧,我觉得这样的压缩率最大)。

以上的两个例子,红星被称为码矢(code vectors)。而由蓝色边定义的区域叫做编码区域(encoding regions)。所有码矢的集合称为码书(code book),所有编码区域的集合称为空间的划分(partition of thespace)。

三、VQ设计问题

VQ问题可以这样描述:给定一个已知统计属性的矢量源(也就是训练样本集,每一个样本是一个矢量)和一个失真测度。还给定了码矢的数量(也就是我们要把这个矢量空间划分为多少部分,或者说量化为多少种值),然后寻找一个具有最小平均失真度(数据压缩,肯定是失真越小越好)的码书(所有码矢的集合,也就是上面的那些所有红色星星点)和空间的划分(图中所有蓝色线的集合)。

假定我们有一个有M个矢量源(训练样本)的训练序列(训练集):T={x1, x2,…, xM};

这个训练序列可以通过一些大数据库得到。例如如果这个矢量源是语音的话,那么我们就可以对一些电话录音裁剪得到。我们假设M足够大(训练样本足够多),这样才可以保证这个训练序列包含了源的所有统计特性。我们假设源矢量是k维的:

xm=(xm,1,xm,2, …, xm,k), m=1,2,…,M

假设码矢的数目是N(也就是我们要把这个矢量空间划分为N个部分,或者说量化为N种值),码书(所有码矢的集合)表示为:C={c1, c2,…, cN};

每一个码矢是个k维向量:cn=(cn,1, cn,2, …, cn,k),n=1,2,…,N;

与码矢cn对应的编码区域表示为Sn,然后将空间的划分表示为:P={S1, S2,…,SN};

如果源矢量xm在Sn内,那么它的近似(用Q(xm)表示)就是cn,

Q(xm)=cn, 如果xm 属于Sn

假设我们采用均分误差失真度量,那么平均失真度表示如下:

这里||e||2为欧式距离。

那么设计问题就可以简单的描述为:给定T(训练集)和N(码矢数目),找到能使Dave(平均失真度)最小的C(码书)和P(空间划分)。

四、优化准则

如果C和P是上面这个最小化问题的一个解,那么这个解需要满足以下两个条件:

1)Nearest NeighborCondition 最近邻条件:

这个条件的意思是编码区域Sn应该包含所有与cn最接近的矢量(相比于与其他码矢的距离)。对于在边界(蓝色线)上面的矢量,需要采用一些决策方法(any tie-breaking procedure)。

2)Centroid Condition质心条件:

这个条件要求码矢cn是编码区域Sn内所有的训练样本向量的平均向量。在实现中,需要保证每个编码区域至少要有一个训练样本向量,这样上面这条式的分母才不为0。

LBG算法:

1、给定训练集T。固定ɛ(失真阈值)为一个很小的正数。

2、让N=1(码矢数量),将这一个码矢设置为所有训练样本的平均值:

计算总失真度(这时候的总失真很明显是最大的):

3、分裂:对i=1,2,…,N,他们的码矢分别为:

(问题:C2*是怎么算出来的?以下步骤都有点不明白了。)

让N=2N,就是每个码矢分裂(乘以扰乱系数1+ɛ和1-ɛ)为两个,这种每一次分裂后的码矢数量就是前一次的两倍。

4、迭代:让初始失真度为: 。将迭代索引或者迭代计数器置零i=0.

1)对于训练集T中的每一个训练样本m=1,2,…,M。在所有码矢中寻找的最小值,也就是看这个训练样本和哪个码矢距离最近。我们用n*记录这个最小值的索引。然后用这个码矢来近似这个训练样本:

2)对于n=1,2,…,N,通过以下方式更新所有码矢:

也就是将所有属于cn所在的编码区域Sn的训练样本取平均作为这个编码区域的新的码矢。

3)迭代计数器加1:i=i+1.

4)计算在现阶段的C和P基础上的总失真度:

5)如果失真度相比上一次的失真度(相对失真改进量)还大于可以接受的失真阈值ɛ(如果是小于就表明再进行迭代运算失真得减小是有限的以停止迭代运算了),那么继续迭代,返回步骤1)。

6)否则最终失真度为 。对n=1,2,…,N,最终码矢为:

5、重复步骤3和4至到码矢的数目达到要求的个数。

六、二维模拟

二维模拟动画点击这里http://www.data-compression.com/vqanim.shtml(这里吐槽一下,为什么CSDN不支持gif动画的插入呢?)

1)训练样本集是由零均值(零均值,表示一批数的平均值为0。)和单位方差的高斯分布产生。

2)小的绿色的点就是这些训练样本。有4096个。

3)我们把阈值设置为ɛ=0.001。

4)这个算法会保证得到一个局部最小解。

5)训练序列需要足够的大,建议M>=1000N。

七、参考资料:

[1]http://www.data-compression.com/vq.html

[2]漫谈Clustering (番外篇): Vector Quantization: http://blog.pluskid.org/?p=57

[3] lbgvq.c --- C program forLBG VQ design

矢量量化(Vector Quantization)(转)相关推荐

  1. LBG 矢量量化算法

    LBG矢量化算法 矢量量化VQVector Quantization是70年代后期发展起来的一种数据压缩技术是一种高效的有损数据压缩技术它具有压缩比大.解码简单和失真较小等优点.其基本思想是将若 ...

  2. 语音信号处理之(三)矢量量化(Vector Quantization)

    语音信号处理之(三)矢量量化(Vector Quantization) zouxy09@qq.com http://blog.csdn.net/zouxy09 这学期有<语音信号处理>这门 ...

  3. 矢量量化(Vector Quantization)

    矢量量化(Vector Quantization) 矢量量化(Vector Quantization):是一种极其重要的信号压缩方法==[连续信息到数字信号的转化].也是一种基于块编码规则的有损压缩方 ...

  4. 学习矢量量化(Learning Vector Quantization, LVQ)

    学习矢量量化(Learning Vector Quantization,LVQ),是一种用于模式分类的有监督的学习算法,也是一种结构简单.功能强大的有监督的神经网络分类算法.主要的类型有LVQ1.LV ...

  5. Soft-to-Hard Vector Quantization for End-to-End Learning Compressible Representations

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Abstract: 我们提出了一种新的方法,通过端到端的训练策略来学习深度架构中的可压缩表征.我们的方法是基于量化和熵的软(连续)松弛,我 ...

  6. matlab 图像矢量量化,MATLAB环境下基于矢量量化的说话人识别系统(1)

    第21卷第6期湖 北 工 业 大 学 学 报2006年12月 Vol.21No.6 Journal of Hubei Univer sity of Technology Dec.2006 [收稿日期] ...

  7. 语音识别学习笔记(二)【基于矢量量化的识别技术】

    语音识别学习笔记(二)[基于矢量量化的识别技术] 概述  量化分为标量量化和矢量量化(Vector Quantization,VQ).标量量化是将采样后的信号值逐个进行量化,而适量量化是将若干个采样信 ...

  8. VQ矢量量化 LBG算法 c++代码实现 详细注释

    参考: 1.语音信号处理之(三)矢量量化(Vector Quantization) 这篇真的是非常厉害,在CSDN很多矢量量化的文章都是参考了这篇文章 2.矢量量化 百度文库的PPT,详细的描述了矢量 ...

  9. 闲话模型压缩之量化(Quantization)篇

    1. 前言 这些年来,深度学习在众多领域亮眼的表现使其成为了如今机器学习的主流方向,但其巨大的计算量仍为人诟病.尤其是近几年,随着端设备算力增强,业界涌现出越来越多基于深度神经网络的智能应用.为了弥补 ...

最新文章

  1. 创建一个表单,输入数据并且存入到数据库
  2. Arrays.binarySearch返回值
  3. 基于注解的IOC案例
  4. debian8.8安装谷歌浏览器
  5. 中学教师计算机技术培训资料,教师信息技术能力培养
  6. 【高等数学】连续可导可微(定义+证明+记忆方法)
  7. php self this static,php面向对象中self和static的区别
  8. matlab中频谱的实现,如何在MATLAB中实现频谱核函数?
  9. 希捷固件门终极解决方法
  10. 微服务/分布式面试题与基础知识总结汇总
  11. 大三期末网页设计作业 以旅游景点风景主题介绍网站设计与实现 (广东名胜古迹)
  12. Unity TileMap 存档 保存地图
  13. 关于zip压缩包日志查询、统计、导出
  14. 南卡和三星蓝牙耳机哪个戴着舒服?佩戴舒适的蓝牙耳机推荐
  15. MFC控件绘制透明png图片或者半透明图片
  16. 实现用户登录权限验证
  17. Java 打印堆栈的几种方法
  18. android读取hex文件格式,轻松解包MIUI备份bak文件 还原出明文数据
  19. 通过cmd注销服务器,如何通过cmd命令远程重启或远程关闭Windows服务器
  20. 中移动MM定位最大业务平台

热门文章

  1. 【檀越剑指大厂--并发编程】并发编程总结
  2. CPU之CPU一级\二级\三级缓存
  3. ssm+java计算机毕业设计拼团旅游系统ldv25(程序+lw+源码+远程部署)
  4. springboot整合ftp
  5. Python办公自动化之Word文档自动化:全网最全,看这一篇就够了
  6. 前端编程编辑器都有哪些 ?
  7. centos7软件仓库资源的修改与配置
  8. hmmlearn安装
  9. unity3d刀光剑影的制作
  10. 《高效的秘密》第三,四章读后感