八度

音程关系

从科学的角度讲:在音乐中,相邻的音组中相同音名的两个音,包括变化音级,称之为八度。

 

  八度包括了纯八度如C-c,D-d,减八度如B1-bB,E1-bE和增八度如F-#f,C-#c。

 

  音数为6的八度是纯八度。

 

  音数为5又2分之1的八度是减八度。

 

  音数为6又2分之1的八度是增八度。

 

  在钢琴上最低音与最高音分别是A*和G7 所以排列来看就长的这个样子:

 

  C7 D7 E7 F7 G7 -- --(->高)

 

  C6 D6 E6 F6 G6 A6 B6

 

  C5 D5 E5 F5 G5 A5 B5

 

  C4 D4 E4 F4 G4 A4 B4

 

  C3 D3 E3 F3 G3 A3 B3

 

  C2 D2 E2 F2 G2 A2 B2

 

  C1 D1 E1 F1 G1 A1 B1

 

  以上1为最低,7为最高。

 

  通俗点解释:

 

  八度就是指音程关系

 

  简单一点讲,就是你唱1 2 3 4 5 6 7 1

 

  (注释:1234567对应的音名分别是CDEFGAB)

 

  第一个1就是最后一个1的低八度

 

  最后一个1就是第一个1的高八度

 

  其他音也一样。 一个八度(有时略作8ve8va古代中国音乐谱记称为)是一种音程,也就是2个不同音高的音符之音高差异或音高距离。这种名为八度的音高差异,对应于频率的差异,并非一个固定的赫兹数,而是一个固定的频率比率,该比率为2:1。举例而言,钢琴中央A音高对应之频率为440赫兹,其高八度之A音对应之频率为880赫兹;其低八度之A音对应之频率则为220赫兹。

 

  八度是和声学中第二简单的音程关系(最简单的是完全一度)。由于人耳在听到八度和声时,有将两个音当成同一个音的倾向;因此,音程差为八度的两音在西方音乐记谱法中有相同的音名。这个“音程差为八度的两音有相同音名”的关系称作等价八度(octave equivalence) 

### 八度卷积概述 八度卷积(Octave Convolution, OctConv)是一种旨在降低计算成本并提高模型效率的卷积方法。它通过将特征图分为高分辨率和低分辨率两部分来减少冗余计算,从而优化资源利用[^4]。 具体来说,在传统的卷积神经网络中,每一层都会对整个输入图像进行密集的操作,这可能导致大量的重复计算以及不必要的内存消耗。而八度卷积则引入了一种分层次的方法:一部分数据保持较高的分辨率用于捕捉细节信息;另一部分被下采样到较低分辨率以提取更广泛的上下文信息。这种方法不仅能够有效减少运算次数,还能够在一定程度上维持甚至提升最终性能表现[^5]。 以下是关于八度卷积的具体概念及其算法实现: --- ### 八度卷积的核心原理 八度卷积的主要思想在于将输入张量拆分成高低频两个分支,并分别应用不同尺度上的卷积核对其进行处理后再重新组合起来形成输出结果。这样做的好处是可以让高频部分专注于局部区域内的精细结构变化检测,同时允许低频路径负责更大范围的空间模式识别任务,进而达到节省算力的目的[^6]。 #### 数学表达形式 假设 \( X_h \) 和 \( X_l \) 分别代表原始输入中的高频率子集与低频率子集,则经过一次标准八度变换后的对应输出可以表示如下: \[ Y_h = W_{hh} * D(X_h) + U(W_{lh} * A(X_l)) \] \[ Y_l = V(W_{hl} * P(X_h)) + W_{ll} * D(X_l) \] 其中, - \( W_{ij}, i,j\in{h,l}\): 表示连接各维度间关系权重矩阵; - \( D(\cdot)\),\(P(\cdot)\): 下/上取样的操作符; - \(U,V:\) 调整大小适配器函数。 上述公式清晰展示了如何通过跨级别交互完成端到端训练流程的同时保留足够的灵活性去适应多种应用场景需求[^7]。 --- ### Python 实现代码片段 下面提供了一个基于 PyTorch 的简单版本八度卷积层定义方式作为参考实例: ```python import torch.nn as nn from functools import partial class OctConv(nn.Module): def __init__(self, in_channels, out_channels, kernel_size=3, alpha_in=0.5, alpha_out=0.5, stride=1, padding=1): super(OctConv, self).__init__() self.alpha_in = alpha_in self.alpha_out = alpha_out hi_in_ch = int((1-alpha_in)*in_channels) lo_in_ch = in_channels - hi_in_ch hi_out_ch = int((1-alpha_out)*out_channels) lo_out_ch = out_channels - hi_out_ch self.h2h = None if hi_in_ch==0 or hi_out_ch==0 else \ nn.Conv2d(hi_in_ch, hi_out_ch, kernel_size, stride=stride, padding=padding) self.l2l = None if lo_in_ch==0 or lo_out_ch==0 else \ nn.Conv2d(lo_in_ch, lo_out_ch, kernel_size, stride=stride, padding=padding) self.h2l = None if hi_in_ch==0 or lo_out_ch==0 else \ nn.Sequential( nn.AvgPool2d(kernel_size=(2, 2), stride=2), nn.Conv2d(hi_in_ch, lo_out_ch, kernel_size, stride=stride, padding=padding)) self.l2h = None if lo_in_ch==0 or hi_out_ch==0 else \ nn.Sequential( nn.Upsample(scale_factor=2, mode='nearest'), nn.Conv2d(lo_in_ch, hi_out_ch, kernel_size, stride=stride, padding=padding)) def forward(self,x): x_h, x_l = x if isinstance(x,tuple) else (x,None) h2h = self.h2h(x_h) if self.h2h is not None and x_h is not None else None l2l = self.l2l(x_l) if self.l2l is not None and x_l is not None else None h2l = self.h2l(x_h) if self.h2l is not None and x_h is not None else None l2h = self.l2h(x_l) if self.l2h is not None and x_l is not None else None y_h = h2h.clone() if h2h is not None else 0. y_l = l2l.clone() if l2l is not None else 0. if l2h is not None: y_h += l2h if h2l is not None: y_l += h2l return ((y_h,y_l),(y_h,) )[self.alpha_out<1e-8 ] ``` 此段程序实现了基本功能框架下的前向传播逻辑描述[^8]。 --- ### 深度学习中的实际应用案例分析 在现代计算机视觉领域内,诸如目标检测、语义分割等复杂任务均可以从采用八度卷积技术获得显著收益。例如 MobileNetV3 中便融入了此类机制使得整体架构更加紧凑高效而不失精度优势[^9]。 此外,在视频理解方向也有不少研究探索将其应用于动作分类或者异常事件监测等方面取得不错效果。由于其天然具备多尺度特性因此非常适合用来建模长时间序列依赖关系等问题情境之中[^10]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值