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

什么是残差矢量量化?

一、说明

        基于残差矢量量化的神经音频压缩方法正在重塑现代音频编解码器的格局。在本指南中,了解 RVQ 背后的基本思想以及它如何增强神经压缩。

        数据压缩在当今的数字世界中发挥着关键作用,促进信息的高效存储和传输。由于当今超过 80% 的互联网流量来自音频和视频流,因此开发更高效的数据压缩可以产生相当大的影响 - 降低成本并显着改善网络的整体能源和碳足迹。

        传统的压缩算法一直致力于减少数据序列中的冗余(无论是图像、视频还是音频),同时大幅减小文件大小,但代价是丢失一些原始信息。MP3 编码算法极大地改变了我们存储和共享音乐数据的方式,这是一个著名的例子。

        神经压缩技术作为一种新方法正在迅速兴起,它利用神经网络来表示、压缩和重建数据,有可能实现高压缩率和几乎为零的感知信息损失

用于重建的神经压缩放大和超分辨率技术

        当与重建的放大和超分辨率技术相结合时,神经压缩方法可以实现近乎无损的功能(来源)。
        特别是在音频领域,基于残差矢量量化的神经音频编解码器取代了传统的手工制作的管道。最先进的人工智能模型,如 Google 的SoundStream和Meta AI 的EnCodec,已经能够熟练地在广泛的比特率范围内编码音频信号,这标志着可学习编解码器向前迈出了重要一步。

        在这篇博文中,我们将概述神经压缩和残差矢量量化背后的主要思想。

二、神经压缩

神经压缩旨在将各种数据类型(无论是像素形式(图像)、波形(音频)还是帧序列(视频))转换为更紧凑的表示形式,例如向量

像素、波形和帧通过神经压缩映射到矢量。

        关键是,这种转换不仅仅是简单地减小大小:它产生数据的表示,其中模式被自动识别、存储,然后用于重建。这种表示称为嵌入,广泛用于从语言模型到图像生成器的深度学习中。

        例如,在图像压缩的背景下,神经压缩不是记录每个像素值,而是学习识别关键特征或视觉模式。与自动编码器一样,学习到的特征随后用于高精度地重建图像。类似地,波形可以转换为矢量格式并解码以重新生成声音。

        关于神经压缩的学术讨论强调了其无损接近无损压缩能力的潜力,即以最小的质量下降来压缩和解压缩数据的能力。事实上,当这些模型与迭代去噪和扩散相结合以进行放大或超分辨率技术时,它们可以以高度忠实于原始数据的方式重新创建数据。

使用基于扩散的恢复模型去模糊图像(来源)。

        鉴于人类视觉和听觉系统往往比其他细节更容易注意到某些细节,这种方法更加重视和强调知觉损失。此外,该技术允许基于相同的矢量表示将内容自适应转换为不同的质量(分辨率、比特率或帧速率)。

        在下一节中,我们将了解如何应用这些一般思想来使用神经音频编解码器压缩音频数据。最后,我们讨论了一个缺失的关键组件,残差矢量量化,以实现高压缩率。

三、神经音频编解码器和 RVQ

        本质上,音频编解码器将录制的声音(数字音频信号)转换为给定的内容格式。目标是保持声音的原始品质,同时减小文件大小和比特率。最先进的神经音频压缩(或神经音频编解码器)采用深度神经网络来实现相同的目标。

        基于自动编码器的简单方法没有帮助,因为音频信号具有非常高的信息密度并且需要正确表示高维向量。因此,需要采用量化技术来降低这些向量的维数。现在让我们概述一下量化的工作原理。

EnCodec 架构(来源)。

        上图描绘了 EnCodec 架构,它反映了 SoundStream 的架构。其核心是一种基于端到端神经网络的方法。它由编码器、量化器和解码器组成,全部同时训练。

        以下是管道运行方式的分步概述:

  1. 编码将每个固定长度的样本(仅几毫秒的音频波形)转换为预先确定的固定维度的向量。
  2. 然后,量化通过称为残差矢量量化的过程来压缩该编码矢量,该过程源自数字信号处理。
  3. 最后,解码器获取该压缩信号并将其重建为音频流。然后使用鉴别器组件将此重建的音频与原始音频进行比较。鉴别器测量两者之间的数值差异,称为鉴别器/生成器损失。
  4. 除了鉴别器损失之外,该模型还计算其他类型的损失。这些损失包括将重建的波形和梅尔谱图与原始波形和梅尔谱图进行比较,并评估承诺损失以稳定编码器的输出。最终目标是确保音频输出密切反映初始输入。

        数据压缩的关键发生在量化器级别。下图说明了这个想法:

        该图概述了单个量化步骤的逻辑,该步骤将 128 维向量减少为单个数字(码本中的索引),从而压缩信息。


        考虑编码器将音频样本转换为 128 维向量。

  • 第一量化器层具有包含固定数量的相同维度的可学习向量的码本表。
  • 将输入向量与码本中的向量进行比较,并提取最相似向量的索引。
  • 这是压缩阶段:我们刚刚用一个数字(密码本中的相应索引)替换了 128 个数字的向量。

        实际上,单个量化器层需要非常大(实际上是指数级大)的码本来准确表示压缩数据。

        残差矢量量化 (RVQ)提供了一个优雅的解决方案。RVQ 可以通过使用级联码本为这些高维向量提供逐渐更精细的近似。

        这个想法很简单:主码本提供输入向量的一阶量化。然后使用辅助码本进一步量化残差或数据向量与其量化表示之间的差异

        RVQ 将量化过程分解为多个层,每一层都处理前一层的残余误差。这允许系统缩放以在不同的比特率上运行(通过缩放层数)。 


        这种分层方法仍在继续,每个阶段都专注于前一阶段的残差,如上图所示。因此,RVQ 不是尝试直接使用单个庞大的码本量化高维向量,而是解决了这个问题,在显着降低计算成本的情况下实现了高精度。

四、进一步阅读

        要在 Pytorch 中试验 RVQ,您可以使用lucidrains的优秀开源VQ 存储库。

        我们推荐R. Kumar 等人最近发表的论文《采用改进的 RVQGAN 的高保真音频压缩》 。(以及其中的文献)以了解神经音频压缩的最新进展。作者介绍了一种高保真“通用”神经音频压缩算法,可以用单个通用模型压缩所有音频域(语音、环境、音乐等),使其适用于所有音频的生成建模。提供开源代码和模型权重(以及演示页面)。

五、最后的话

        基于残差矢量量化的神经压缩方法正在彻底改变音频(并且可能很快还会改变视频)编解码器,提供近乎无损的压缩功能,同时减少计算开销。RVQ 等量化技术对于文本转语音和文本转音乐生成器已变得至关重要。

        更广泛地说,神经压缩的创新不仅意味着技术的进步,而且意味着迈向更高效、更可持续的数字生态系统的飞跃。

参考资料:

  • 音频生成人工智能的最新发展
  • 生成人工智能的大型语言模型简介
  • 使用 Python 中的 LLM 进行自动摘要

相关文章:

什么是残差矢量量化?

一、说明 基于残差矢量量化的神经音频压缩方法正在重塑现代音频编解码器的格局。在本指南中,了解 RVQ 背后的基本思想以及它如何增强神经压缩。 数据压缩在当今的数字世界中发挥着关键作用,促进信息的高效存储和传输。由于当今超过 80% 的互联网流量来自…...

计算机网络(第六版)复习提纲2

二、物理层 2.1 物理层基本概念 物理层协议常常成为物理层规程 物理层的主要任务为确定与传输媒体的接口有关的一些特性: 1.机械特性:指明接口所用接线器的尺寸等; 2.电气特性:指明接口电缆各条线上的电压范围; 3.功能…...

11k+star 开源笔记应用真香 centos部署教程

leanote binary installation on Mac and Linux (En) life edited this page on Jul 21, 2017 10 revisions Pages 26 Home How to develop leanote 如何开发leanote How to install leanote on Ubuntu? How to Upgrade Leanote Install Mongodb leanote api leanote …...

win下安装tensorflow

1首先ctrlaltdelete打开任务管理器查看GPU型号 2或者右键我的电脑然后如下方式查看显卡发现没有navida没有GPU...

SpringBoot 入门

1.SpringBoot介绍 1.1.什么是SpringBoot Spring Boot是由Pivotal团队提供的全新框架,其中“Boot”的意思就是“引导”,Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速开发 Spring应用的方式。 1.2.Spring Boot 特点 • 嵌…...

使用WebFlux处理WebSocket连接的全生命周期案例

使用WebFlux处理WebSocket连接的全生命周期案例 简介: 在Web应用程序开发中,WebSocket是一种用于实现双向通信的协议。Spring WebFlux提供了对WebSocket的支持,使您能够轻松地处理WebSocket连接和消息。本博客将介绍如何使用WebFlux处理WebS…...

【REST2SQL】10 REST2SQL操作指南

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 【REST2SQL】07 GO 操作 Mysql 数据库 【RE…...

199_二叉树的右视图

描述 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 思路 对树进行深度优先搜索,在搜索过程中,我们总是先访问右子树。那么对于每一层来说,…...

第七讲_css浮动

css浮动 1. 设置浮动2. 浮动的特点3. 浮动的影响4. 解决浮动的影响4.1 解决父元素高度塌陷的问题4.2 解决对兄弟元素影响问题 1. 设置浮动 浮动是通过float属性设置,float取值范围: none:不浮动,默认值。left:向左浮…...

2024秋招,顺丰科技测试开发工程师一面

前言 今天回顾一下,一个被捞的全流程面试经历 时间线 9月21日测评 10月26日技术一面,本来是11点半开始,我正做另一个笔试呢,突然给我打电话开面 20分钟结束,一开始以为KPI,结果给过了 10月31日技术二…...

基于apache的http文件服务配置

背景: 公司的产品使用的第三方模组可以OTA,厂家提供的是window开启软件,这样就可以在本机做http下载服务器,然后使用端口映射的方式,公开到外网,这样就可以进行4G网络访问内网服务器了。但这个有个弊端&am…...

连铸工艺和模铸工艺有什么区别。

问题描述:连铸工艺和模铸工艺有什么区别。 问题解答: 连铸工艺和模铸工艺在多个方面存在显著差异: 指代不同: 模铸是成批大量生产锻件的锻造方法。连铸即为连续铸钢的锻造方法。 工艺不同: 模铸在锻压机械的作用…...

pyqt treeWidget树生成

生成treeWidget树与获取treeWidget树节点的数据 # encodingUTF-8 import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QApplication, QTreeWidgetItem, QLineEdit, QSpinBox, QComboBox from PyQt5.QtWidgets import QWidget from release_test import Ui_F…...

DataFunSummit:2023年云原生大数据峰会:核心内容与学习收获(附大会核心PPT下载)

随着数字化转型的深入推进,大数据技术已经成为企业获取竞争优势的关键因素之一。本次峰会汇聚了业界顶尖的大数据专家、企业领袖和技术精英,共同探讨云原生大数据领域的最新技术和趋势。本文将深入分析峰会的核心内容,并探讨参会者从中能学到…...

docker 容器添加指定网络地址

docker 容器添加指定网络地址 在搭建halo博客时,准备让 halo、mysql8.1、nginx 三个容器在同一个网段中,并指定IP。 实现docker内部容器之间网络互通。 查看容器网络信息命令 docker inspect 容器名各容器部署成功后网络效果如下: nginx …...

后端怎样防止重复提交订单?

参考文章 通常我们可以在前端通过防抖和节流来解决短时间内请求重复提交的问题, 如果因网络问题、Nginx重试机制、微服务Feign重试机制或者用户故意绕过前端防抖和节流设置,直接频繁发起请求,都会导致系统防重请求失败,甚至导致后…...

数据结构之二叉搜索树

二叉搜索树 满足条件: 1.对于根节点:左子树中所有节点的值小于右子树中所有节点的值 2.任意节点的左右子树也是二叉搜索树,同样满足条件1 二叉搜索树的常用操作 我们将二叉搜索树封装为一个类 BinarySearchTree ,并声明一个成员变…...

《设计模式的艺术》笔记 - 抽象工厂模式

介绍 提供了一个创建一系列相关或相互依赖的对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,它是一种对象创建型模式。 在抽象工厂模式中,每个具体工厂都提供了多个工厂方法用于产生多种不同类型的产品,这些产品构…...

7.11、Kali Linux中文版虚拟机安装运行教程

目录 一、资源下载准备工作 二、安装教程 三、kali linux换源 四、apt-get update 报错 一、资源下载准备工作 linux 中文版镜像历史版本下载:http://old.kali.org/kali-images/ 大家可以自行选择版本下载,本人下载的是2021版本 二、安装教程 打开vmvare wokst…...

Go+快速开始详细指南

Go快速开始 Go编程语言是为工程、STEM教育和数据科学设计的。 对于工程:用儿童能掌握的最简单的语言工作。对于STEM教育:学习一门可以在未来工作中使用的工程语言。对于数据科学:用同一种语言与工程师交流。 安装方法 现在,我们建议您从源代码安装Go。 注意:需…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...