代码解读 | Hybrid Transformers for Music Source Separation[03]

一、背景

        接着上一篇代码解读 | Hybrid Transformers for Music Source Separation[02]文章,继续对Hybrid Transformer Demucs 代码进行解读。

        解读目标:明确数据从进入算法,在算法内部,以及在算法输出 这三个阶段中 数据的大小是如何变换的。例如:算法输入数据大小为[BatchSize,Channels,Length],算法内部的数据大小为[BatchSize,Channels,Freqency,Time],算法输出的数据大小为[BatchSize,Channels,Length]。

二、解读

        在htdemucs.py文件中编写测试代码print,把每个模块输出的数据大小打印出来。控制台打印的结果如下所示。例如:时域[1, 2, 258602] 可以理解成[BatchSize,Channels,Time];频域[1, 4, 2048, 253]可以理解成[BatchSize,Channels,Frequency,Time]

        再具体一些,不管是时域还是频域第一个维度数字1表示批大小(Batch_Size)第二个数字表示通道数(Channels)频域第三个数字可以理解成频域维度属性(对应模型图中的freq)频域第四个数字理解成时间维度属性(对应模型图中的time steps)时域的第三个数字可以理解成时间维度属性(对应模型图中的time steps)。根据这个先知条件,我们再和算法模型图中的Cin、Cout、xxx freq对比便一目了然了。

算法输入 torch.Size([1, 2, 258602])
频域输入(STFT输出) torch.Size([1, 4, 2048, 253])
频域输入(归一化) torch.Size([1, 4, 2048, 253])
时域输入(归一化) torch.Size([1, 2, 258602])
时域第1个编码层输出torch.Size([1, 48, 64651])
频域第1个编码层输出torch.Size([1, 48, 512, 253])
时域第2个编码层输出torch.Size([1, 96, 16163])
频域第2个编码层输出torch.Size([1, 96, 128, 253])
时域第3个编码层输出torch.Size([1, 192, 4041])
频域第3个编码层输出torch.Size([1, 192, 32, 253])
时域第4个编码层输出torch.Size([1, 384, 1011])
频域第4个编码层输出torch.Size([1, 384, 8, 253])
crosstransformer输出频域:torch.Size([1, 384, 8, 253]),时域:torch.Size([1, 384, 1011])
频域第1个解码层输出torch.Size([1, 192, 32, 253])
时域第1个解码层输出torch.Size([1, 192, 4041])
频域第2个解码层输出torch.Size([1, 96, 128, 253])
时域第2个解码层输出torch.Size([1, 96, 16163])
频域第3个解码层输出torch.Size([1, 48, 512, 253])
时域第3个解码层输出torch.Size([1, 48, 64651])
频域第4个解码层输出torch.Size([1, 16, 2048, 253])
时域第4个解码层输出torch.Size([1, 8, 258602])
频域输出(STFT输出) torch.Size([1, 4, 2, 258602])
时域输出(归一化) torch.Size([1, 4, 2, 258602])
算法输出(时域输出+频域输出) torch.Size([1, 4, 2, 258602])

     总结:打印出每个环节的数据大小,这样就能和算法模型图中的参数对应上。至于各个模块更具体的细节还需仔细阅读源码进行理解。


        感谢阅读,最近开始写公众号(分享好用的AI工具),欢迎大家一起见证我的成长(桂圆学AI)

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

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

相关文章

pyqt 进度条QProgressBar

pyqt 进度条 QProgressBar效果代码 QProgressBar 在 PyQt 应用程序中,进度条(通常称为 QProgressBar)是一个用于显示任务进度的控件。它可以显示一个水平或垂直的条形图,条形图的长度会随着进度的增加而增加。 QProgressBar 的主…

Java 8 Stream 用法大全

Java 8 Stream 用法大全 目录 Java 8 Stream 用法大全 一、引言 二、Stream 的基础概念 三、创建Stream 四、Stream的操作类型 五、并行Stream与串行Stream 六、性能调优 七、实战案例分析 八、总结与展望 一、引言 Java 8 引入的 Stream API 是处理集合数据的革新之举…

【Python】使用 Python 查询域名的 IP 地址

我们都已经长大 好多梦正在飞 就像童年看到的 红色的蜻蜓 我们都已经长大 好多梦还要飞 就像现在心目中 红色的蜻蜓 🎵 小虎队《红蜻蜓》 在网络开发和运维中,了解域名对应的 IP 地址是一个常见且重要的需求。Python 提供了多种方法…

分布式数据库架构:从单实例到分布式,开发人员需及早掌握?

现在互联网应用已经普及,数据量不断增大。对淘宝、美团、百度等互联网业务来说,传统单实例数据库很难支撑其性能和存储的要求,所以分布式架构得到了很大发展。而开发人员、项目经理,一定要认识到数据库技术正在经历一场较大的变革,及早掌握好分布式架构设计,帮助公司从古…

小米开放式耳机怎么样?倍思、西圣、小米开放式耳机测评比较!

作为一名热衷于分享真实体验的博主,我在过去两年开始接触开放式耳机,并因此受到许多朋友的咨询,询问哪款开放式耳机更加出色。为了找出最佳的开放式耳机,我进行了深入的调查和实地测试。我发现高价并不总是代表高质量,…

refault distance算法的一点理解

这个算法看了好几次了,都没太理解,今天记录一下,加深一下印象。 引用某个博客对这个算法的介绍 一次访问page cache称为fault,第二次访问该页面称为refault。page cache页面第一次被踢出LRU链表并回收(eviction)的时刻称为E&#…

C++基础与深度解析 | 类与面向对象编程 | 数据成员 | 成员函数 | 访问限定符与友元 | 构造、析构成员函数 | 字面值类、成员指针与bind交互

文章目录 一、结构体与对象聚合二、成员函数(方法)三、访问限定符与友元1.访问限定符2.友元(慎用) 四、构造、析构与复制成员函数1.构造函数2.析构函数3.补充 五、字面值类,成员指针与bind交互1.字面值类2.成员指针3.b…

C语言实现三角波生成

C语言实现三角波生成 #include <stdio.h>#define SAMPLE_RATE 10000 // 采样率10kHz=10000Hz 对应100us=0.1ms #define UP_TIME 12.5 //上升时间12.5ms #

golang websocket 数据处理和返回JSON数据示例

golang中websocket数据处理和返回json数据示例&#xff0c; 直接上代码&#xff1a; // author tekintiangmail.com // golang websocket 数据处理和返回JSON数据示例&#xff0c; // 这个函数返回 http.HandlerFunc // 将http请求升级为websocket请求 这个需要依赖第三方包 …

大小堆运用巧解数据流的中位数

​​​​​​​​​​ 一、思路 我们将所有数据平分成两份&#xff0c;前面那一部分用小堆来存&#xff0c;后面的部分用大堆来存&#xff0c;这样我们就能立刻拿到中间位置的值。 如果是奇数个数字&#xff0c;那么我们就将把中间值放在前面的大堆里&#xff0c;所以会有两种…

Windows取证分析 | 如何最大程度提升分析效率

本文由安全研究人员Amr Ashraf发表于Cyber5w的官方博客&#xff0c;研究人员在本文中讨论了如何对可疑设备中的内存映像进行安全调查&#xff0c;并利用了Volatility 3和MemProcFS来最大程度提升Windows取证分析的工作效率。 介绍 内存取证是任何计算机取证分析人员的必备技能…

如何给 MySQL 表和列授予权限?(官方版)

目录 授予表级别权限 授予列级别权限 如何给MySQL表和列授予权限是MySQL数据操作中非常重要的步骤&#xff0c;也是企业级使用MySQL数据库的起步点&#xff0c;以下分别参照官方教程整理的MySQL数据库的权限操作。 以下的语句可以直接使用MySQL的命令行进行操作&#xff08;如何…

3038. 相同分数的最大操作数目 I

题目 给你一个整数数组 nums&#xff0c;如果 nums 至少包含 2 个元素&#xff0c;你可以执行以下操作&#xff1a; 选择 nums 中的前两个元素并将它们删除。一次操作的分数是被删除元素的和。 在确保所有操作分数相同的前提下&#xff0c;请你求出最多能进行多少次操作。 …

排序数组 ---- 分治-归并

题目链接 题目: 分析: 用这道题来回顾一下归并排序的思想找到中间结点, 将数组分成两半, 运用递归的思想, 继续对一半进行分半, 分到最后剩一个元素, 再将左右数组合并, 合并两个有序数组, 是先分解, 再合并的过程在合并两个有序数组时, 需要一个额外的数组来记录, 为了避免每…

java.util.ConcurrentModificationException产生原因及解决办法

现象 第一次遇到此异常是在处理3g.renren.com的好友分组功能中&#xff0c;因为接口提供的好友分组&#xff08;以map的方式提供好友分组的id跟分组名&#xff09;中没有把分组名为空&#xff0c;但是id存在的数据屏蔽掉&#xff0c;所以我在调用接口服务之后&#xff0c;需要…

Unity DOTS技术(九) BufferElement动态缓冲区组件

文章目录 一.简介二.例子 一.简介 在之前的学习中我们发现Entity不能挂载相同的组件的. 当我们需要用相同的组件时则可以使用.IBufferElementData接口 动态缓冲区组件来实现 二.例子 1.创建IBufferElementData组件 using Unity.Entities; using UnityEngine; //[GenerateAu…

three.js官方案例(animation / multiple)webgl_animation_multiple.html学习笔记

目录 ​编辑 1 骨架工具&#xff08;SkeletonUtils&#xff09; 1.1 clone方法 2 蒙皮网格&#xff08;SkinnedMesh&#xff09; 3 自测 4 webgl_animation_multiple.html全部脚本 1 骨架工具&#xff08;SkeletonUtils&#xff09; 用于操控 Skeleton、 SkinnedMesh、和…

网络编程: 高级IO与多路转接select,poll,epoll的使用与介绍

网络编程: 高级IO与多路转接select,poll,epoll的使用与介绍 前言一.五种IO模型1.IO的本质2.五种IO模型1.五种IO模型2.同步IO与异步IO3.IO效率 二.非阻塞IO1.系统调用介绍2.验证代码 三.select多路转接1.系统调用接口2.写代码 : 基于select的TCP服务器1.封装的Socket接口2.开始写…

1-Maven-settings配置

1-Maven-settings配置 整理下Maven工具的使用。 【本地仓库、私服、镜像仓库、远程仓库、中央仓库】 本文基于阅读其他博客和对公司Maven配置的学习整理出来的。希望通过本此学习能对Maven有个整体性的掌控。 顺序&#xff1a;profile.repository > pom文件中的repository &…

asp.net core使用httpclient

主要讲解常见的get请求和post请求 GET var client new HttpClient(); //3秒钟不响应就超时 client.TimeoutTimeSpan.FromSeconds(3); using HttpResponseMessage response await client.GetAsync("todos/3"); var jsonResponse await response.Content.ReadAsSt…