赞
踩
论文题目:FLGCNN: A novel fully convolutional neural network for end-to-end monaural speech enhancement with utterance-based objective functions
一种新颖的全卷积神经网络,用于具有基于话语的目标函数的端到端单声道语音增强
论文地址:https://www.sciencedirect.com/science/article/abs/pii/S0003682X20306150
本文提出了一种称为 FLGCNN 的新型全卷积神经网络 (FCN),以解决时域中的端到端语音增强问题。所提出的 FLGCNN 主要建立在编码器和解码器之上,同时添加了额外的基于卷积的短时傅立叶变换 (CSTFT) 层和逆 STFT (CISTFT) 层来模拟正向和逆向 STFT 操作。这些层旨在将频域知识集成到所提出的模型中,因为语音的基础语音信息通过时频 (T-F) 表示更清楚地呈现。此外,编码器和解码器由门控卷积层构成,因此所提出的模型可以更好地控制层次结构中传递的信息。此外,受流行的时间卷积神经网络(TCNN)的启发,在编码器和解码器之间插入了时间卷积模块(TCM),它可以有效地建模语音信号的长期依赖性。我们还使用不同的基于话语的目标函数优化了所提出的模型,以利用损失函数对性能的影响,因为整个框架可以实现端到端的语音增强。实验结果表明,所提出的模型始终比其他语音增强竞争方法提供更好的性能改进。
近几年来,最流行的语音增强深度学习方法是基于掩码和基于映射的方法。这两个类别通常应用短时傅立叶变换 (STFT) 将噪声信号转换为时频 (T-F) 表示,训练目标也由 T-F 表示构成。一些最常用的训练目标是理想比率掩码 (IRM)、理想二元掩码 (IBM) 和目标语音的对数功率谱。
但T-F表示也有一些缺点。
作为克服上述问题的一种方法,最近的一些研究探索了用于时域语音增强的深度学习。例如,生成对抗网络 (GAN) 和 WaveNet 随后被应用于语音增强任务。但是这些方法中的大多数都将嘈杂话语的时间帧作为输入,但未能以话语方式进行语音增强。为了解决这个问题,一些研究人员应用完全卷积神经网络 (FCN) 来执行语音增强,因为 FCN 模型仅由卷积层组成 ,并且卷积运算中的滤波器可以接受可变长度的输入。然而,语音信号的基本特征在 T-F 域中比在时域中更容易与背景噪声区分开来。因此,我们认为将频域知识整合到时域神经网络中可能有助于语音增强的核心任务。 同时也证明用频域损失代替时域损失可以提高时域的增强性能。
出于上述考虑,我们提出了一种新颖且有效的 FCN,称为基于傅立叶层的门控卷积神经网络 (FLGCNN),用于端到端单声道语音增强。所提出的模型框架可以看作是时间卷积神经网络(TCNN)的扩展,它主要由编码器、解码器和时间卷积模块(TCM)组成。编码器创建输入噪声信号的低维表示,而解码器旨在重建增强的语音信号。在编码器和解码器之间,插入了 TCM 以帮助网络更好地学习过去的远程依赖关系。但与 TCNN 不同的是,将基于卷积的 STFT (CSTFT) 层和逆 STFT (CISTFT) 层分别添加到编码器和解码器中,以在神经网络中模拟 STFT 和 ISTFT。因此,可以将频域知识集成到时域框架中,同时避免无效的 STFT 问题。此外,我们应用门控线性单元 (GLU) 为编码器和解码器构建门控卷积层和反卷积层。与长短期记忆 (LSTM) 模型类似,GLU 起着控制层次结构中传递的信息的作用,这种特殊的门控机制允许通过加深层来有效捕获长期上下文依赖性,而不会出现梯度消失问题。
基于这种处理结构,我们进一步利用由均方误差(MSE)、尺度不变源失真比(SI-SDR)和短时目标清晰度(STOI)定义的三种不同的基于话语的目标函数来优化模型。众所周知,增强算法最流行的损失函数是 MSE 损失,但基于深度学习的语音增强系统的模型优化和评估标准之间确实存在不匹配。不将评估指标应用为目标函数的原因可能是完成指标通常需要整个干净/增强的语音话语。然而,传统的基于频域的方法通常处理幅度谱图,并且需要进行大量的预处理和后处理,例如分帧、STFT、重叠相加方法。包括 GAN 和 WaveNet 在内的其他波形增强算法仍然以基于帧的方式处理噪声波形。相反,通过 FCN 的端到端增强方法可以直接优化评估指标,因此我们还使用其他两个基于指标的目标函数来训练所提出的模型,以探索它们对增强性能的影响。
在序列建模任务中,首先提出时间卷积网络(TCN)替代循环神经网络(RNN),将因果和扩张卷积层以及残差连接整合在一起。
给定一个输入序列 x0, ..., xt 和相应的输出序列 y0, ..., yt,序列建模网络通过在一些损失函数上训练网络来学习估计输出序列估计序列和输出序列。网络上的因果约束意味着预测 yt 仅取决于 x0, ..., xt 而不是未来的输入 xt+1..., xT。在时域语音增强的情况下,输入序列是噪声帧序列,输出序列是干净帧序列。
图1 滤波器数=2的扩张因果卷积的例子
对于上一层t时刻的值,只依赖于下一层t时刻及其之前的值。和传统的卷积神经网络的不同之处在于,因果卷积不能看到未来的数据,它是单向的结构,不是双向的。也就是说只有有了前面的因才有后面的果,是一种严格的时间约束模型,因此被成为因果卷积。但是问题就来,如果我要考虑很久之前的变量x,那么卷积层数就必须增加。卷积层数的增加就带来:梯度消失,训练复杂,拟合效果不好的问题,为了解决 这个问题,出现了膨胀卷积(dilated)。
使用膨胀卷积来扩张感受野,它不是在像素间插入空白像素,而是略过一些已有的像素。当然,我们也可以理解为保持输入不变,并向卷积核中添加一些值为零的权重(空洞),从而在计算量基本不变的情况下增加网络观察到的图像范围或序列长度。膨胀系数控制了每两个卷积核间会插入多少零值,当d=1时,空洞卷积就会退化为一般的卷积运算。使用较大的扩张系数允许输出端的神经元表征更大范围的输入序列,因此能有效扩张感受野。
感受野越大,网络就越能了解过去。
论文通过简单的残差连接,一定程度上消除了深度网络部分梯度消失和爆炸的影响。
残差块由 3 个卷积组成:输入 1x1 卷积、深度卷积和输出 1x1 卷积。
输入卷积用于使输入通道的数量加倍。输出卷积用于恢复到原始通道数,这使得输入和输出相加兼容。深度卷积用于进一步减少参数的数量。在深度卷积中,通道数保持不变,每个输入通道只有一个滤波器用于输出计算 。在普通卷积中,每个输出通道使用与输入通道数量一样多的过滤器。
输入和中间卷积之后是参数 ReLU非线性和批量归一化
PReLU:
TCN优势:
受时间序列网络TCN的启发,提出了类似的由所示的残差块叠加而成的调制方式。每个残差block由3个卷积组成:输入1*1卷积、深度(depthwise)卷积和输出1*1卷积。输入卷积用于使输入通道数增加一倍,输出卷积的目的是使输入通道数恢复到原来的通道数,从而使输入和输出的相加能够兼容。为进一步减少参数个数,采用深度可分离卷积和逐点1*1卷积相结合的方法代替标准卷积。此外,输入卷积和中间卷积之后是PReLU非线性激活函数和批量归一化。
本文使用的TCM模块,TCM 将三个扩张块堆叠在一起。通过堆叠六个具有指数增加的膨胀率的残差块来形成扩张块。在一个扩张块中,残差块中的连续膨胀率为 1、2、4、8、16 和 32。
门控机制最初是为了促进RNN中的信息随时间流动而设计的,其中引入了输入门和遗忘门以允许长期记忆。如果没有这些门,信息很容易通过每个时间步的变换而消失,并且通常会出现梯度消失或爆炸问题。受此启发,卷积模型中考虑了输出门,以帮助控制哪些信息应通过层次结构传播。
我们设计了 CSTFT/CISTFT 层来执行伪 STFT 和伪 ISTFT,以便将频率信息引入基于时域的增强算法。实际上,STFT 和 ISTFT 运算是通过将分帧信号与复值离散傅立叶变换 (DFT) 矩阵 D 相乘的线性变换,如下所示
其中 xf 是分帧信号 xt 的 DFT。
由于 xt 是实值,方程可改写为
其中 Dr 和 Di 是取 D 的实部和虚部形成的实值矩阵,j 表示虚部。
受方程式的启发,将CSTFT层由两个一维卷积实现,每个卷积的权值分别用STFT核的实部和虚部初始化,CISTFT层与此类似。这些模块构建在普通的卷积层上,因此很容易将这些模块集成到神经网络中。但需要注意的是,这些层并不等同于 STFT/ISTFT 操作。
实际上,这些层优于 STFT/ISTFT,因为权重可以通过反向传播学习,而 STFT/ISTFT 的参数是固定的。由于 CSTFT/CISTFT 层都是在卷积层上构建的,因此我们的模型可以通过从频域到时域的映射任务进行优化。目标仍然是时域中的干净语音信号,因此不会出现无效 STFT 问题。
本文设计了一个端到端的语音增强模型,它由编码器、解码器、TCM 和 CSTFT/CISTFT 层组成。如下图所示。首先,CSTFT层的输入是噪声信号序列,其维数为1*L,其中L是采样点的数目。CSTFT层输出大小为2*T*257的伪STFT表示作为编码器的输入,其中T为帧数。
编码器的第一层将通道数从2个增加到16个,第一层之后的输出尺寸为16*T*257。接下来堆叠的六个门控卷积层使用卷积相继减小沿频率维度的大小,并且编码器的最终输出为64*T*4。网络中的层都不修改沿时间维度的大小,使得输出具有与输入相同的帧数。编码器中的每一层都经过批归一化和PReLU((Parametric Rectified Linear Unit))非线性处理。
TCM对大小为256*T的编码器输出进行运算,并产生相同大小的输出。TCM有三个扩张块(dilation blocks)堆叠在一起。dilation blocks是由6个膨胀率呈指数增长的残差块叠加而成的。在dilation blocks中,残余块体的逐次扩张率分别为1、2、4、8、16和32。
解码器是编码器的镜像,由七个堆叠的门控转置反卷积层组成。与普通卷积层不同的是,门控卷积层有两个数据流。因此,不同于中的跳过连接,我们的自动编码器有两种跳过连接:一种是与中相同的普通连接,另一种是门控跳跃连接。在训练时,每2层应用0.2的dropout率。解码器中的每一层都经过批归一化和PReLU(Parametric Rectified Linear Unit)非线性处理。
下表给出了对网络参数的更详细的描述。编码器和解码器的超参数在filterHeight * filterWidth中指定(stride along frame, stride along frequency)。对于TCM,超参数的格式为filter_Height、dilation_Rate、output_channels,用小括号括起来的条目表示残留块。
与TCNN相比,本模型的优点有两方面。首先,CSTFT/ CISTFT层引入频域信息,帮助神经网络更好地增强语音,而TCNN仅利用时域样本。众所周知,语音信号的结构通常用短时傅立叶变换谱图来表示,而不是用时域的采样点来表示。频率bin的值也可以反映出相应频率分量的能量。其次,叠置的门控卷积层和编解码器中的两个数据流可以更好地控制在层次中传递的信息,学习长程上下文依赖关系,而TCNN的编解码器仅由普通的卷积层构造。
基于模型的语音增强方法的共同目标可以看作是最小化以下目标函数:
其中是用于缩放距离的可调参数。其中一种损失被定义为干净语音和增强语音之间 MSE 损失的平均值:
然而,事实上基于 MSE 的目标函数只是简单地比较干净语音和增强语音之间的相似性。事实上,MSE 与增强语音的评估标准之间存在不一致。例如,MSE 值与人类听觉感知之间的关系仍然不是单调函数。原始信号、它的负版本和它的振幅偏移版本之间的 MSE 非常大,但这三个信号对于人类来说几乎是一样的。因此,有必要寻找与语音信号的性能评价有更强关系的损失函数。
SI-SDR 是从 SDR 度量开发的目标函数之一,它展示了增强语音的整体失真。较高的 SDR 值表示增强语音具有较少的失真分量。 SI-SDR 定义为:
其中表示信号功率,通过在计算之前将 ^s 和 s 归一化为零均值来确保尺度不变性。
在数学上理解起来就是下图所示
把干净语音和增强后的语音都当成一个向量Starget就是增强后语音在原干净语音下的投影大小。
语音质量感知评估 (PESQ) 和 STOI 分数都是用于预测嘈杂或经过处理的语音的可懂度的常用指标。较高的 STOI 值和 PESQ 值表示更好的语音清晰度和质量。但与 PESQ 相比,STOI 计算中的大多数函数是连续的,并且 STOI 与单词错误率的改善比 PESQ 更相关。因此在本文中,我们着重于优化 STOI 指标,并简要描述计算 STOI 的 4 个主要步骤:
1.T-F 表示:STFT 应用于噪声信号和干净信号以获得相应的 T-F 表示,这些表示是类似于听觉系统变换特性的简化内部表示。信号首先被分割成 50% 重叠、长度为 256 个样本的汉宁窗帧,然后执行傅立叶变换。请注意,通过排除相对于此最大清洁语音能量帧清洁语音能量低于 40 dB 的帧,已移除静默区域。
2.三分之一倍频程分析:这是通过求和 STFT 系数能量来近似的。让S(k,m)表示干净语音的第 m 帧的第 k 个 T-F bin,然后我们得到
其中j为三分之一倍频程索引,J通常取15。CBj表示与第j个三分之一倍频程频带相关的STFT系数索引集。最低中心频率设置为 150 Hz,最高中心频率为 4.3 kHz 左右。通过对频率仓进行分组,可以通过
通常,参数 N 设置为 30,等于 384 ms 的分析长度。类似地,^sj,m 表示增强语音的短时谱图向量
3.归一化和裁剪:
4.可懂度度量:中间可懂度指数定义为两个时间包络之间的频谱相关系数:
其中 表示 L2 范数,表示相应向量的样本均值。最后,最终的 STOI 值简单地由所有帧和频带的中间清晰度指数的平均值给出:
尽管 STOI 的计算有些复杂,但大部分计算都是可微分的,因此可以将其用作我们的话语优化的目标函数,如下式所示:
其中 ^sb 和 sb 分别是批次中第 b 个估计的和干净的话语,B 是训练话语的批量大小。stoi()是计算给定干净语音的噪声/增强语音的 STOI 值的函数。在这项工作中,我们提出了一个结合了 SI-SDR 和 STOI 的目标函数,可以表示为
其中是权重因子,它被简单地设置为一个小数以平衡两个目标的规模。由于·SI-SDR 值对最终损失函数的贡献远小于 STOI 值,我们认为使用等式训练模型。仍然主要旨在提高 STOI 分数,因此我们将此损失函数称为 S-STOI。
使用的所有干净语音和噪声数据均选自华尔街日报 (WSJ0) 语料库和 Musan 数据集。通过从 WSJ0 训练集 si_tr_s 中随机选择 7000 条话语和 2000 条话语生成由 40 小时噪声信号和 3.3 小时验证数据组成的训练集。
请注意,培训演讲者不同于验证演讲者。每个训练话语都被从 Musan 的 800 种噪声中随机选择的 7 种噪声破坏,信噪比 (SNR) 分为三个级别,即 -6 dB、-3 dB、0 dB、3 dB。类似地,每个验证话语都与从 Musan 的 90 种噪声中随机选择的 2 种噪声混合。从 si_dt_05 和 si_et_05 中的说话者中随机选择的另外 1000 条话语被用来构建测试集,其中一种类型来自 Musan 数据集中的其他 39 种噪声,具有三个级别的 SNR。所有干净的语音和噪声波形都被下采样到 16 kHz。
在实验中,模型使用 STOI、PESQ 和 SDR 分数进行比较,所有这些都代表语音增强的标准指标。 STOI 的典型值范围为 0 到 1,而 PESQ 值的范围为 0.5 到 4.5。
初始学习速率为1e-3或1e-4,这取决于模型的配置,如果连续3个阶段验证集的精度没有提高,初始学习速率将减半。Adam被用作优化器。为避免过度适应,最多可进行60个训练阶段。我们使用一个早期停止准则,即如果在10个阶段的验证集中没有损失改进,则停止训练。
1.实验将我们提出的模型(FLGCNN)与原始TCNN,TCNN与CSTFT层和CISTFT层(FLTCNN)进行了比较。比较了这三个时域模型的 SI-SDR 损失训练。相应的结果如下表所示(为方便起见,我们在表下中省略了SDR单位dB)
从表中,我们可以观察到 TCNN 和 FLTCNN 在所有三个指标方面都存在很大的性能差距。TCNN 只是直接处理样本点,但是在 T-F 域中表示的语音信号的特征比在时域中更容易区分。
FLTCNN 取得的更好结果表明,CSTFT 层引入的频域信息确实有助于从噪声信号中提取语音成分。接下来,我们发现 FLGCNN 的结果在三个测量中通常优于 FLTCNN 的结果。由于 FLGCNN 和 FLTCNN 之间的主要区别在于编码器和解码器中的门控卷积层,这意味着门控机制确实有助于语音增强。与其他网络相比,所提出的 FLGCNN 在 SDR、STOI 和 PESQ 方面对测试数据集产生了最显着的改进,表明 FLGCNN 架构在时域语音增强方面优于 FLTCNN 和 TCNN。例如,在 -3 dB SNR 的情况下,与测试集的未处理混合物相比,FLGCNN 将 SDR 分数提高了 16.610,STOI 分数提高了 0.218,PESQ 分数提高了 1.059。
2.不同目标函数之间的比较:在这一部分中,我们的目标是基于不同的目标函数(包括 MSE 损失、SI-SDR 损失和 STOI 损失)对所提出的模型进行实验。但是在 STOI 损失的训练过程中,我们发现增强语音中出现了一些未知的干扰成分,并且噪声没有得到很好的抑制。我们分析,造成这种现象的原因有以下三个。首先,在 STOI 分数计算中不考虑非语音区域。其次,最高中心频率约为 4.3 kHz,因此优化 STOI 损耗会使模型忽略较高频率区域。此外,由于 STOI 是由干净语音和增强语音之间的相关系数定义的,因此最大化 STOI 值的解决方案不是唯一的。
所以在这个实验中,我们改用了 S-STOI 损失函数。表中显示的结果也与我们的分析一致(为方便起见,我们在表中省略了 SDR 单位 dB)。
从表中,我们观察到当使用 SISDR 目标函数训练时,所提出的 FLGCNN 具有更高的 SDR 分数和更低的 PESQ 和 STOI 分数。但是,当将目标函数从 SI-SDR 更改为 S-STOI 时,增强语音的 STOI 和 PESQ 值可以显着提高,而 SDR 分数略有下降。众所周知,提高语音清晰度通常比在较低 SNR 条件下提高质量更具挑战性,即 -6 dB、-3 dB SNR,但所提出的使用 S-STOI 优化的模型的结果仍然令人鼓舞:PESQ 得分是比噪声信号高 1.18,STOI 得分比噪声信号高 0.244。通常,具有 MSE 损失函数的增强语音在所有 SNR 条件下获得最低的测量分数,这表明基于度量的损失函数对提高测量分数的影响比仅最小化干净语音和增强语音之间的 MSE 更显著。
3.频谱图和波形比较:
WSJ0 话语的频谱图和波形:
(a)干净的语音
(d) 嘈杂的语音(STOI = 0.483,PESQ = 1.756,SDR=-2.991)
(b)经过 SI-SDR 损失训练的 FLGCNN 增强语音(STOI = 0.806,PESQ = 2.926,SDR = 13.768)
(e)使用FLGCNN的解码器输出和原始ISTFT(STOI = 0.774,PESQ = 2.716,SDR = 7.805)增强语音
(c)使用 FLGCNN 训练的增强语音S-STOI 损失(STOI = 0.820,PESQ = 3.068,SDR = 13.588)
(f)仅使用 STOI 损失训练的 FLGCNN 增强语音(STOI = 0.737,PESQ = 2.921,SDR = 11.191)。
用 SI-SDR 损失训练的 FLGCNN 增强语音的频谱图如图(b)所示。此外,为了证明通过 CSTFT 和 CISTFT 层的准 STFT 和准 ISTFT 与普通 STFT 和 ISTFT 不同,我们在 FLGCNN 中提取解码器的输出,并应用普通 ISTFT 获得时域增强语音。相应的频谱图如图(e)所示。
一种是通过 CISTFT 层的准 ISTFT,另一种是原始 ISTFT。比较图 5(e) 和图 5(c),我们观察到 CISTFT 层不仅起到了 ISTFT 的作用,而且还有效地去除了背景噪声,这验证了 CISTFT 层的权重优于基于学习和反向传播的普通 ISTFT 内核。
对于感知优化语音,我们利用原始 STOI 和 S-STOI 作为目标函数分别训练我们提出的模型。从图 (e) 和图(f) 中,我们可以很容易地发现,与图 5(f) 中的低频和中频分量相比,高频分量中的语音模式无法识别。这是因为在STOI计算中三分之一倍频程的最高中心频率约为4.3 kHz,这使得训练后的模型不关注高频区域,只是移动了大部分组件。此外,由于STOI计算中相关系数的解不是唯一的,得到的增强语音通常不是我们想要的。因此,使用 S-STOI 训练的 FLGCNN 增强语音的三个指标分数高于仅使用 STOI 损失函数训练的 FLGCNN 获得的分数。
与图(b) 相比,我们可以观察到图(c) 中的静音区域存在更多的残余噪声。原因是在计算 STOI 值之前,没有显示语音活动的区域已被删除。所以在训练过程中,模型只是忽略了这些噪声实际存在的区域。结果,图(c) 中所示的增强语音具有比图(b) 中所示的更低的 SDR 分数。在图中绘制了相应的波形和频谱图。虽然信号的特征在波形中不太明显,但我们仍然可以发现这些波形之间的差异。如第一个红色块所示,所提出的技术(图(b)和(c))比其他方法(图(e)和(f))重建了更好的语音结构。如图(f) 中第二个红色方块所示,在波形末尾仍然存在残留噪声。因此,时域波形的这些差异也验证了所提出的 FLGCNN 的优势。
4.主观评价:在这一部分中,进行了主观测试以评估所提出的 FLGCNN 在语音增强任务中的性能。十五名听力正常的受试者(九男六女)参加了听力测试。实验在安静的环境中进行,并以舒适的听力水平向受试者播放刺激物。
每个被试一共参加了 8 个测试条件,每个条件包含 7 个句子:1 SNR level ? 1 噪声类型 ? 7种增强方法,即noisy、TCNN-MAE、TCNN、FLTCNN、FLGCNN(SISNR)、FLGCNN(MSE)、FLGCNN(S-STOI)。由于人类听觉系统对 0 dB 和 3 dB 以下的噪声具有鲁棒性,因此我们仅选择了较低的 SNR(-6 dB 和 -3 dB)。这些条件的顺序是为每个受试者随机选择的。听众被允许重复两次刺激,并使用电脑键盘上的字母和数字键做出反应。为了评估语音清晰度,根据每个测试条件下正确识别的单词数与单词总数的比率计算单词正确率(WCR)。为了评估语音质量,要求受试者以李克特五分制评分(1:差,2:差,3:一般,4:好,5:优秀)对语音质量进行评分。
图中说明了听力测试的平均 MOS 分数和 WCR 结果。我们可以观察到,与提出的 FLGCNN 的嘈杂语音相比,增强语音的质量和清晰度有了很大提高。此外,由 S-STOI 和 SI-SDR 优化的 FLGCNN 获得了更高的 MOS 和 WCR 分数,这意味着这两个测量确实有助于提高语音质量和清晰度。
在本文中,我们提出了一种基于 FCN 架构的新模型,用于端到端单声道语音增强。所提出的框架可以看作是 TCNN 的改进版本,但同时解决了几个问题。 1) 频域信息可以通过设计的 CSTFT 和 CISTFT 层集成到端到端模型中,这有助于模型更好地从噪声信号中探索语音特征。 2)编码器和解码器设计在门控卷积上,以便更好地控制层次结构中传递的信息。
此外,与普通自动编码器相比,所提出的编码器-解码器多了一个门控跳跃连接。 3) 基于话语的语音增强模型可以解决优化目标函数与评价指标不匹配的问题。因此,我们使用基于话语的损失训练了所提出的模型,并对三个不同的目标函数进行了比较。表 2 所示的实验结果验证了 CSTFT/CISTFT 层和门卷积的有效性,而表 3 中的结果证明了基于度量的损失函数可以大大提高度量分数。进一步的研究方向是探索将所提出的模型应用于实时任务的方法。
深度之眼Paper带读笔记NLP.28:TCN (Temporal Convolutional Networks)-oldmao2000-CSDN
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。