论文笔记 SuDORMRF:EFFICIENT NETWORKS FOR UNIVERSAL AUDIO SOURCE SEPARATION

news2024/11/15 3:31:30

SUDORMRF: EFFICIENT NETWORKS FOR UNIVERSAL AUDIO SOURCE SEPARATION

人的精神寄托可以是音乐,可以是书籍,可以是运动,可以是工作,可以是山川湖海,唯独不可以是人。


Depthwise Separable Convolution 深度分离卷积(前置知识)

相比于常规卷积,可以减少参数和计算量。分为两步:

  1. Depthwise Convolution (DW) 深度卷积:每个卷积核只处理一个输入通道(卷积核深度均为1)。因此输入特征的通道数不变。
  2. Pointwise Convolution (PW) 逐点卷积:卷积核尺寸为 1 × 1 1 \times 1 1×1,输入特征的尺寸不变。

我们以input feature map shape为 [ 12 , 12 , 3 ] ∈ R H × W × C [12,12,3] \in R^{H \times W \times C} [12,12,3]RH×W×C,卷积核shape为 [ 5 , 5 , 3 ] ∈ R k h × k w × C [5,5,3] \in R^{k_h \times k_w \times C} [5,5,3]Rkh×kw×C, stride = 1, padding = 0,卷积核数量为256(输出通道数为256),output feature map shape为 [ 8 , 8 , 256 ] [8,8,256] [8,8,256]的情况为例。

  • 常规卷积中,卷积核的参数量: C in × C out × k h × k w C_\text{in} \times C_\text{out} \times k_\text{h} \times k_\text{w} Cin×Cout×kh×kw
    计算量(FlOPs): C in × C out × k h × k w × O h × O w C_\text{in} \times C_\text{out} \times k_\text{h} \times k_\text{w} \times O_\text{h} \times O_\text{w} Cin×Cout×kh×kw×Oh×Ow
    其中 O h × O w O_\text{h} \times O_\text{w} Oh×Ow为output feature map的高 × \times ×宽, k h × k w k_\text{h} \times k_\text{w} kh×kw为卷积核对应尺寸。(对于PW,DW而言,计算公式稍有变化)
  1. 采用常规卷积:
  • 参数量: 3 × 256 × 5 × 5 = 19200 3 \times 256 \times 5 \times 5 = 19200 3×256×5×5=19200
  • FLOPs: 3 × 256 × 5 × 5 × 8 × 8 = 1228800 3 \times 256 \times 5 \times 5 \times 8 \times 8 = 1228800 3×256×5×5×8×8=1228800
  1. 采用Depthwise Separable Convolution:
    [ 5 , 5 , 3 ] × 256 [5,5,3] \times 256 [5,5,3]×256的卷积层拆分为两个卷积层,先后经过两层卷积以完成同样的维度转换效果:
    1. DW: [ 5 , 5 , 1 ] × 3 [5,5,1] \times 3 [5,5,1]×3
    2. PW: [ 1 , 1 , 3 ] × 256 [1,1,3] \times 256 [1,1,3]×256
  • 参数量:DW: 1 × 3 × 5 × 5 1 \times 3 \times 5 \times 5 1×3×5×5(这里不是 C in C_\text{in} Cin,因为每个卷积核只负责一个通道,即卷积核深度为1);PW: 3 × 256 × 1 × 1 3 \times 256 \times 1 \times 1 3×256×1×1。总计为:843
  • FLOPs: 1 × 3 × 5 × 5 × 8 × 8 + 3 × 256 × 1 × 1 × 8 × 8 = 53952 1 \times 3 \times 5 \times 5 \times 8 \times 8 + 3 \times 256 \times 1 \times 1 \times 8 \times 8 = 53952 1×3×5×5×8×8+3×256×1×1×8×8=53952。(分两步卷积,先DW后PW)

2.Methodology

Overall Architecture

整体算法流程如下:
在这里插入图片描述


定义输入输出尺寸
x ∈ R T \mathbf{x}\in\mathbb{R}^T xRT为混合音频信号, E \mathcal{E} E为Encoder,对输入 x \mathbf{x} x处理得到特征向量: v x = E ( x ) ∈ R C ε × L \mathbf{v}_{\mathbf{x}}=\mathcal{E}\left(\mathbf{x}\right)\in\mathbb{R}^{C_{\mathbf{\varepsilon}}\times L} vx=E(x)RCε×L。将 v x \mathbf{v}_{\mathbf{x}} vx送入Separation Module S S S当中得到 m ^ i ∈ R C ε × L \hat{\mathbf{m}}_i\in\mathbb{R}^{C_{\mathcal{\varepsilon}}\times L} m^iRCε×L为第 i i i个音源的mask, i = 1 , 2 , ⋯   , N i = 1,2,\cdots,N i=1,2,,N。假设共有 N N N个音源产生的音频信号 s 1 , s 2 , ⋯   , s N ∈ R T \mathbf{s}_1,\mathbf{s}_2,\cdots,\mathbf{s}_N \in \mathbb{R}^T s1,s2,,sNRT共同组成 x \mathbf{x} x。将 v x \mathbf{v}_{\mathbf{x}} vx m i ^ \hat{\mathbf{m}_i} mi^逐项相乘得到第 i i i音源的特征向量 v i ^ \hat{\mathbf{v}_i} vi^
v i ^ = v x ⊙ m i ^ \hat{\mathbf{v}_i} = \mathbf{v}_{\mathbf{x}} \odot \hat{\mathbf{m}_i} vi^=vxmi^
再经过解码器 D \mathcal{D} D得到 s ^ i = D ( v i ^ ) \hat{\mathbf{s}}_i = \mathcal{D}(\hat{\mathbf{v}_i}) s^i=D(vi^)

  • 定义1: Conv1D C , K , S : R C i n × L i n → R C × L \text{Conv1D}_{C, K, S}: \mathbb{R} ^{C_{in}\times L_{in}}\to \mathbb{R} ^{C\times L} Conv1DC,K,S:RCin×LinRC×L。表示一维常规卷积。将输入shape从 R C i n × L i n \mathbb{R} ^{C_{in}\times L_{in}} RCin×Lin转为 R C × L \mathbb{R} ^{C\times L} RC×L。其中 C C C为output channel, S S S为stride, K K K为kernel size,L为尺度(时间)。

  • 定义2: ConvTr1D C , K , S : R C i n × L i n → R C × L \text{ConvTr1D}_{C, K, S}: \mathbb{R} ^{C_{in}\times L_{in}}\to \mathbb{R} ^{C\times L} ConvTr1DC,K,S:RCin×LinRC×L。转置卷积。需要注意的一点是,转置卷积的运算过程,相当于原卷积核对input求梯度(具体过程参看参考链接)。

  • 定义3: DWConv1D C , K , S : R C i n × L i n → R C × L \text{DWConv1D}_{C, K, S}: \mathbb{R} ^{C_{in}\times L_{in}}\to \mathbb{R} ^{C\times L} DWConv1DC,K,S:RCin×LinRC×L。一维Depthwise Convolution深度卷积。
    本质是将原始卷积层拆分成 G = C in G = C_\text{in} G=Cin 个Conv1D: F ^ i = [ Conv1D C G , K , S ] i \hat{\mathcal{F}} _i= [\text{Conv1D} _{C_G, K, S}] _i F^i=[Conv1DCG,K,S]i,其中 i ∈ { 1 , ⋯   , G } , C G = [ C / G ] i\in \{ 1, \cdots , G\},C_G = [C / G] i{1,,G}CG=[C/G]。每一个卷积核 F ^ \hat{\mathcal{F}} F^对输出贡献 C G C_G CG个通道。最终将 { F ^ i ∣ i = 1 , 2 , ⋯   , G } \{\hat{\mathcal{F}}_i | i = 1,2,\cdots,G \} {F^ii=1,2,,G}的输出结果按通道拼接:
    D W C o n v 1 D C , K , S ( x ) = C o n c a t ( { F i ( x i ) , ∀ i } ) , (2) \mathrm{DWConv}1\mathrm{D}_{C,K,S}\left(\mathbf{x}\right)=\mathrm{Concat}\left(\left\{\mathcal{F}_i\left(\mathbf{x}_i\right), \forall i\right\}\right),\tag2 DWConv1DC,K,S(x)=Concat({Fi(xi),i}),(2)
    Concat ( ⋅ ) \text{Concat}(\cdot) Concat()表示拼接。

2.1 Encoder

Encoder用 E \mathcal{E} E表示,包含一个一维卷积,kernel size为 K E K_{\mathcal{E}} KE, stride为 K E / 2 K_{\mathcal{E}}/2 KE/2,使用公式表示Encoder的具体操作如下:
v x = E ( x ) = R e L U ( C o n v 1 D C E , K E , K E / 2 ( x ) ) ∈ R C E × L (3) \mathbf{v}_{\mathbf{x}}=\mathcal{E}\left(\mathbf{x}\right)=\mathrm{ReLU}\left(\mathrm{Conv}1\mathrm{D}_{C_{\mathcal{E}},K_{\mathcal{E}},K_{\mathcal{E}/2}}\left(\mathbf{x}\right)\right)\in\mathbb{R}^{C_{\mathcal{E}}\times L} \tag3 vx=E(x)=ReLU(Conv1DCE,KE,KE/2(x))RCE×L(3)

其中ReLU为逐项激活, C E C_{\mathcal{E}} CE为Encoder的输出通道数。

2.2 分离模块

分离模块 S S S v x \mathbf{v}_x vx做以下处理

  1. 使用LN和Pointwise Conv将 v x \mathbf{v}_x vx映射到新的通道空间当中:
    y 0 = C o n v 1 D C , 1 , 1 ( L N ( v x ) ) ∈ R C × L (4) \mathbf{y}_0=\mathrm{Conv}1\mathrm{D}_{C,1,1}\left(\mathrm{LN}\left(\mathbf{v}_\mathbf{x}\right)\right)\in\mathbb{R}^{C\times L} \tag4 y0=Conv1DC,1,1(LN(vx))RC×L(4)

    LN ( v x ) \text{LN}(\mathbf{v_x}) LN(vx)为layer-norm layer。

  2. 使用多个BU-convolutional blocks(U-ConvBlocks)拼接在一起。其中第 i i i个Block的输出作为第 i + 1 i+1 i+1个Block的输入。U-ConvBlock的具体细节参考Sec2.2.1,类似TDA-Net和U-Net,利用了多尺度信息,Block输入输出尺度一致。

  3. 使用最后的Block输出 y B T ∈ R L × C \mathbf{y}_B^T\in\mathbb{R}^{L\times C} yBTRL×C,针对每一个音源设置一个Conv1D层,以得到对应音源的中间特征向量 z i \mathbf{z}_i zi(比如有N个音源,则对应N个Conv1D,随后使用 z i \mathbf{z}_i zi获得 m i ^ \hat{\mathbf{m}_i} mi^):
    z i = Conv 1 D C , C E , 1 ( y B T ) T ∈ R C E × L (5) \mathbf{z}_i=\text{Conv}1\text{D}_{C,C_{\mathcal{E}},1}\left(\mathbf{y}_B^T\right)^T\in\mathbb{R}^{C_{\mathcal{E}}\times L} \tag5 zi=Conv1DC,CE,1(yBT)TRCE×L(5)
    其中 y B T \mathbf{y}_B^T yBT表示 y B \mathbf{y}_B yB的转置。

  4. 使用 z i \mathbf{z}_i zi 求解 m i ^ \hat{\mathbf{m}_i} mi^
    m ^ i = v e c − 1 ( exp ⁡ ( v e c ( z i ) ) ∑ j = 1 N exp ⁡ ( v e c ( z j ) ) ) ∈ R C E × L (6) \hat{\mathbf{m}}_i=\mathrm{vec}^{-1}\left(\frac{\exp\left(\mathrm{vec}\left(\mathbf{z}_\mathrm{i}\right)\right)}{\sum_{j=1}^N\exp\left(\mathrm{vec}\left(\mathbf{z}_j\right)\right)}\right)\in\mathbb{R}^{C_{\mathcal{E}}\times L} \tag6 m^i=vec1(j=1Nexp(vec(zj))exp(vec(zi)))RCE×L(6)

其中 m ^ i ∈ [ 0 , 1 ] C E × L \hat{\mathbf{m}}_{i} \in [0,1]^{C_{\mathcal{E}}\times L} m^i[0,1]CE×L。 vec ( ⋅ ) : R K × N → R K ⋅ N \left ( \cdot \right ) : \mathbb{R} ^{K\times N}\to \mathbb{R} ^{K\cdot N} ():RK×NRKN,表示向量化。 v e c − 1 ( ⋅ ) : R K ⋅ N → \mathrm{vec}^{- 1}\left ( \cdot \right ) : \mathbb{R} ^{K\cdot N}\to vec1():RKN R K × N \mathbb{R}^{K\times N} RK×N表示反向量化。可以发现,对于所有mask的同一位置,求和为1:
∑ i N m i ^ ( x , y ) = 1 \sum\limits_i^N {\hat{\mathbf{m_{i}}}_{ (x,y)}} = 1 iNmi^(x,y)=1
其中 ( x , y ) (x,y) (x,y)表示mask的某个元素的坐标。

  1. 利用 m ^ i \hat{\mathbf{m}}_i m^i以及特征向量 v x \mathbf{v}_x vx得到每个音源的特征向量 v ^ i \hat{\mathbf{v}}_i v^i
    v ^ i = v x ⊙ m ^ i ∈ R C E × L (7) \hat{\mathbf{v}}_i=\mathbf{v}_\mathbf{x} \odot \hat{\mathbf{m}}_i\in\mathbb{R}^{C_{\mathcal{E}}\times L} \tag7 v^i=vxm^iRCE×L(7)

2.2.1 U-ConvBlock

U-ConvBlock整体架构与算法流程如下图所示:
在这里插入图片描述

在这里插入图片描述

整体而言与U-Net类似,但与TDA-Net更相似,也是连续的下采样,上采样。

  • 定义4: P R e L U C : R C × L → R C × L \mathrm{PReLU}_C:\mathbb{R}^{C\times L}\to\mathbb{R}^{C\times L} PReLUC:RC×LRC×L。(parametric
    rectified linear unit):
    P R e L U C ( y ) i , j = max ⁡ ( 0 , y i , j ) + a i ⋅ min ⁡ ( 0 , y i , j ) (8) \mathrm{PReLU}_C\left(\mathbf{y}\right)_{i,j}=\max\left(0,\mathbf{y}_{i,j}\right)+\mathbf{a}_i \cdot \min\left(0,\mathbf{y}_{i,j}\right) \tag8 PReLUC(y)i,j=max(0,yi,j)+aimin(0,yi,j)(8)
    a i \mathbf{a}_i ai为可学习的参数, y \mathbf{y} y为输入。

  • 定义5: I M : R C × L → R C × M ⋅ L \mathcal{I}_M:\mathbb{R}^{C\times L}\to\mathbb{R}^{C\times M\cdot L} IM:RC×LRC×ML。上采样操作,最邻近插值, M M M为缩放系数。

2.3 Decoder

D \mathcal{D} D表示Decoder,将 v ^ i \hat{\mathbf{v}}_i v^i转换到时域空间当中,以得到最终的音频分离结果:

s ^ i = D i ( v ^ i ) = ConvTr 1 D C E , K E , K E / 2 ( v ^ i ) \hat{\mathbf{s}}_i=\mathcal{D}_i\left(\hat{\mathbf{v}}_i\right)=\text{ConvTr}1\text{D}_{C_{\mathcal{E}},K_{\mathcal{E}},K_{\mathcal{E}/2}}\left(\hat{\mathbf{v}}_i\right) s^i=Di(v^i)=ConvTr1DCE,KE,KE/2(v^i)


参考链接

  1. 【PyTorch】卷积层、池化层梯度计算 https://blog.csdn.net/weixin_44246009/article/details/119379516
  2. 卷积神经网络-转置卷积 https://blog.csdn.net/weixin_38498942/article/details/106824520

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2240570.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【HarmonyOS】鸿蒙系统在租房项目中的项目实战(一)

从今天开始,博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”,对于刚接触这项技术的小伙伴在学习鸿蒙开发之前,有必要先了解一下鸿蒙,从你的角度来讲,你认为什么是鸿蒙呢?它出现的意义又是…

/// ts中的三斜线指令 | 前端

第一次看到注意到这行代码,不知道的还以为是注释呢,查了资料才知道这是typescript中的三斜线指令,那有什么作用呢? 1. 这行代码是TypeScript中的一个三斜线指令(Triple-Slash Directive),用于…

学习日记_20241110_聚类方法(K-Means)

前言 提醒: 文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。 其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展…

SMA-BP基于黏菌算法优化BP神经网络时间序列预测

项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

ssm103宠物领养系统+vue(论文+源码)_kaic

毕业设计(论文) 宠物领养系统的设计与实现 学生姓名: 二级学院: 班级名称: 指导教师: 年 月 日 录 摘 …

Elasticsearch如果集群出现节点故障,我应该如何快速定位问题?

当 Elasticsearch (ES) 集群发生故障时,快速定位问题源头非常重要。Elasticsearch 是一个分布式系统,故障可能由多种原因引起,涉及到硬件、配置、网络、集群本身的健康状况等多个层面。以下是一些定位问题的步骤和工具: 检查集群…

k8s-service、endpoints、pod之间是怎么进行网络互通的

k8s-service、endpoints、pod之间是怎么进行网络互通的 1、service2、endpoints3、service、endpoints、pod通信图4、不同服务pod内部间访问 1、service 在K8S中,Service是一种抽象,定义了一组Pod的逻辑集合和访问这些Pod的策略。首先,我们需…

dbeaver 连接日常是数据库工具类似navicat

官网下载安装包 DBeaver Community | Free Universal Database Tool 登录mysql为例 字体调整 sql 美化,关键字大写 快捷键 执行 ctrlenter 单个语句执行 alt x 执行sql脚本 事务提交,默认自动,可以改成手动 创建数据库 新建表 添加主键 …

Chromium 中chrome.webRequest扩展接口定义c++

一、chrome.webRequest 注意 :从 Manifest V3 开始,"webRequestBlocking" 权限不再适用于大多数扩展程序。以 "declarativeNetRequest" 为例,它允许使用 declarativeNetRequest API。除了 "webRequestBlocking&quo…

【MySQL】数据库必备知识:全面整合表的约束与深度解析

前言:本节内容讲述表的约束的相关内容。 表的约束博主将会通过两篇文章进行讲解, 这是第一篇上半部分。 讲到了约束概念。 以及几种常见约束。下面友友们开始学习吧! ps:友友们使用了mysql就可以放心观看喽! 目录 表的约束概念 …

堆排序,学习笔记

目录 一、概念 二、堆排序的基本思路 三、堆排序的基本步骤 1. 构建初始堆: 2. 排序过程 四、示例 五、应用场景 1. 优先级队列相关场景 2. TopK 值问题 一、概念 堆排序是一种基于二叉堆数据结构的排序算法。二叉堆是一种完全二叉树,它分为两种…

分享 pdf 转 word 的免费平台

背景 找了很多 pdf 转 word 的平台都骗进去要会员,终于找到一个真正免费的,遂分享。 网址 PDF转Word转换器 - 100%免费市面上最优质的PDF转Word转换器 - 免费且易于使用。无附加水印 - 快速将PDF转成Word。https://smallpdf.com/cn/pdf-to-word

llama-cpp模型轻量化部署与量化

一、定义 定义配置环境遇到的问题,交互模式下模型一直输出,不会停止模型量化Qwen1.5-7B 案例demo 二、实现 定义 主要应用与cpu 上的部署框架。由c完成。配置环境 https://github.com/ggerganov/llama.cpp https://github.com/echonoshy/cgft-llm/blo…

2024最新版JavaScript逆向爬虫教程-------基础篇之Proxy与Reflect详解

目录 一、监听对象的操作二、Proxy基本使用2.1 创建空代理2.2 定义捕获器2.2.1 Proxy的set和get捕获器2.2.2 Proxy(handler)的13个捕获器 三、Reflect的作用3.1 Reflect的使用3.2 Reflect其余方法(9个)3.3 Proxy与Reflect中的receiver参数3.4 Reflect中的construct方法 ECMAScr…

Ceph层次架构分析

Ceph的层次结构可以从逻辑上自下向上分为以下几个层次: 一、基础存储系统RADOS层 功能:RADOS(Reliable Autonomic Distributed Object Store)是Ceph的底层存储系统,提供了分布式存储的核心功能。它是一个完整的对象存…

webpack指南

​🌈个人主页:前端青山 🔥系列专栏:webpack篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来webpack篇专栏内容:webpack-指南 概念 中文: webpack | webpack中文文档 | webpack中文网 英文&…

网站架构知识之nginx第三天(day026 )

1.状态模块 使用方法:location /status/{ stub_$status; } 任意一个虚拟主机添加这个,就可以查看nginx状态。 对应指标及其说明

新的恶意软件活动通过游戏应用程序瞄准 Windows 用户

一种新的恶意软件 Winos4.0 被积极用于网络攻击活动。FortiGuard实验室发现,这种先进的恶意框架是从臭名昭著的 Gh0strat 演变而来的,配备了模块化组件,可在受感染的设备上进行一系列恶意活动。 这些攻击已在游戏相关应用程序中发现&#xf…

Redis - 集群(Cluster)

一、基本概念 上述的哨兵模式,提⾼了系统的可⽤性.但是真正⽤来存储数据的还是master和slave节点.所有的数 据都需要存储在单个master和slave节点中. 如果数据量很⼤,接近超出了master/slave所在机器的物理内存,就可能出现严重问题了. 如何获取更⼤的空间?加机器即可!所谓&q…

WebRTC项目一对一视频

开发步骤 1.客户端显示界面 2.打开摄像头并显示到页面 3.websocket连接 4.join、new-peer、resp-join信令实现 5.leave、peer-leave信令实现 6.offer、answer、candidate信令实现 7.综合调试和完善 1.客户端显示界面 步骤:创建html页面 主要是input、button、vide…