A GAN Guided Parallel CNN and Transformer Network for EEG Denoising
一、研究目的
提出了一种性能更好的给EEG信号去噪的深度学习方法
二、研究背景
截至目前,基于深度学习的脑电去噪方法相对于传统方法表现出了独特的优势。然而,它们仍然受到以下限制。
- 现有的结构设计没有充分考虑伪影的时间特征。
- 现有的训练策略通常忽略了去噪脑电信号与真实的干净信号之间的整体一致性。
the existing training strategies usually ignore the holistic consistency between denoised EEG signals and authentic clean ones.这段话怎么理解呢?
脑电图经常受到各种非脑生理活动的干扰,即心电图(ECG)、眼电图(EOG)和肌电图(EMG)。
脑电去噪的传统方法有很多,包括回归、盲源分离(BSS)、小波分解、经验模态分解(EMD)和混合方法 。
- 回归模型使用参考通道估计伪影效应,然后可以从受污染的脑电图中减去其回归值以获得降噪信号。
- BSS 方法利用独立分量分析 (ICA)、典型相关分析 (CCA) 和独立向量分析等技术,将噪声信号分离成不同的分量,并在重建过程中去除伪影相关分量。大多数BSS算法需要大量通道数和手动检查来识别伪影成分,并且很难应用于单通道或少通道伪影抑制。
三、研究内容
我们提出了一种 GAN 引导的并行 CNN 和 Transformer 网络,名为 GCTNet。生成器包含并行 CNN 块和转换器块,分别捕获局部和全局时间依赖性。然后,采用鉴别器来检测和纠正干净的脑电图信号和降噪的脑电图信号之间的整体不一致。我们在半模拟和真实数据上评估所提出的网络。大量的实验结果表明,GCTNet 在各种伪影去除任务中显着优于最先进的网络,其卓越的客观评估指标就证明了这一点。
四、技术路线
1)预处理模块:预处理模块用于将一维信号转换为高维特征,以确保足够的特征表达。它首先使用两个内核大小为 3 和输出通道为 32 的卷积层对输入信号进行过滤,以更好地提取信息,然后使用池化层来减少特征大小并减轻计算负担。
self.block1 = nn.Sequential(
nn.Conv1d(1, 32, 3, 1, 1), nn.BatchNorm1d(32), nn.LeakyReLU(0.2),
nn.Conv1d(32, 32, 3, 1, 1), nn.BatchNorm1d(32), nn.LeakyReLU(0.2))
self.pool1 = nn.AvgPool1d(2,stride=2)
x = self.pool1(self.block1(x))
2)CNN-Transformer 块:CNN-Transformer 块旨在提取和集成局部和全局特征以生成层次表示。它由 CNN 块、变压器块和特征融合层组成。
# Transformer Block
self.s2 = nn.Sequential(
TransformerEncoderBlock(emb_size=32),
nn.Conv1d(32, 64, 3, 2, 1), nn.BatchNorm1d(64), nn.LeakyReLU(0.2))
# CNN Block
self.block2 = nn.Sequential(
nn.Conv1d(32, 64, 3, 1, 1), nn.BatchNorm1d(64), nn.LeakyReLU(0.2),
nn.Conv1d(64, 64, 3, 1, 1), nn.BatchNorm1d(64), nn.LeakyReLU(0.2))
self.pool2 = nn.AvgPool1d(2,stride=2)
x = self.ffm2(torch.cat((self.pool2(self.block2(x)), self.s2(x)), dim=1))
CNN 块:它包含两个内核大小为 3 的卷积层。每个卷积层后面跟着一个批量归一化层和一个LReLU单元层单元层。第一个卷积层将输入特征投影到更高维度(2倍放大),第二层进一步提取特征。先前的脑电图去噪方法仅依靠卷积层来消除肌电图伪影,但这些方法表现出过度拟合问题。为了缓解上述问题并提高模型的泛化能力,每个 CNN 块中都包含一个最大池化层(2×下采样)。
Transformer 模块:Transformer 模块由多头自注意力(MHSA)模块、前馈模块和步幅为 2 的卷积层组成。层归一化层是在 MHSA 模块之前和前馈模块之后引入,以规范化特征图。剩余连接应用于 MHSA 模块和前馈模块之后。
# Transformer编码器块类,继承自nn.Sequential
class TransformerEncoderBlock(nn.Sequential):
# 初始化函数,设置编码器块的参数
def __init__(self,
emb_size,
num_heads=8,
drop_p=0.1,
forward_expansion=1,
forward_drop_p=0.1):
# 调用父类的初始化函数
super().__init__(
# 第一个Sequential模块,用于重排张量维度
nn.Sequential(
# 将输入张量从n (h) (w)重排为n (w) (h)
Rearrange('n (h) (w) -> n (w) (h)'),
),
# 残差连接和多头注意力模块
ResidualAdd(nn.Sequential(
# 层归一化
nn.LayerNorm(emb_size),
# 多头注意力层
MultiHeadAttention(emb_size, num_heads, drop_p),
# Dropout层防止过拟合
nn.Dropout(drop_p)
)),
# 残差连接和前馈网络模块
ResidualAdd(nn.Sequential(
# 层归一化
nn.LayerNorm(emb_size),
# 前馈神经网络块
FeedForwardBlock(
emb_size, expansion=forward_expansion, drop_p=forward_drop_p),
# Dropout层防止过拟合
nn.Dropout(drop_p),
)),
# 最后的Sequential模块,用于恢复张量维度
nn.Sequential(
# 将张量从n (w) (h)重排回n (h) (w)
Rearrange('n (w) (h) -> n (h) (w)'),
)
)
MHSA 模块对输入进行转置,并将线性变换应用到查询
Q
h
∈
R
n
×
d
/
H
Q_h\stackrel{}{\in}\mathbb{R}^{n\times d/H}
Qh∈Rn×d/H、键
K
h
∈
R
n
×
d
/
H
K_h \stackrel{}{\in}\mathbb{R}^{n×d/H}
Kh∈Rn×d/H 和值
V
h
∈
R
n
×
d
/
H
V_h \stackrel{}{\in}\mathbb{R}^{n×d/H}
Vh∈Rn×d/H 。这里,
d
d
d 和
n
n
n 分别表示通道数和信号长度。
h
=
1
,
2
,
.
.
.
,
H
h = 1, 2, ..., H
h=1,2,...,H,
H
H
H 表示磁头数。然后,对每个段内不同点之间的相互依赖性进行建模。注意力函数图可以计算如下:
A
t
t
e
n
t
i
o
n
(
Q
h
,
K
h
,
V
h
)
=
S
o
f
t
m
a
x
(
Q
h
K
h
T
d
)
V
h
,
(
3
)
Attention(Q_h,K_h,V_h)=Softmax(\frac{Q_hK_h^T}{\sqrt{d}})V_h,\quad(3)
Attention(Qh,Kh,Vh)=Softmax(dQhKhT)Vh,(3)
其中 S o f t m a x Softmax Softmax 是激活函数, d \sqrt{d} d 是缩放因子。 MHSA模块的输出是通过连接H头的所有输出并通过投影矩阵投影结果来获得的。前馈模块由两个完全连接的层组成,以产生增强的特征,这些特征通过 Swish 激活分开。这两层具有相同的尺寸。通过 MHSA 和前馈操作,提取每个分段内的全局表示。此外,采用步长为 2 的卷积层将维度与 CNN 块的维度对齐。
# 定义多头注意力机制类,继承自nn.Module
class MultiHeadAttention(nn.Module):
# 初始化函数,接收嵌入维度、注意力头数和dropout率
def __init__(self, emb_size, num_heads, dropout):
# 调用父类初始化
super().__init__()
# 保存嵌入维度
self.emb_size = emb_size
# 保存注意力头数
self.num_heads = num_heads
# 定义key的线性变换层
self.keys = nn.Linear(emb_size, emb_size)
# 定义query的线性变换层
self.queries = nn.Linear(emb_size, emb_size)
# 定义value的线性变换层
self.values = nn.Linear(emb_size, emb_size)
# 定义attention dropout层
self.att_drop = nn.Dropout(dropout)
# 定义输出的投影层
self.projection = nn.Linear(emb_size, emb_size)
# 前向传播函数,接收输入张量x和可选的mask张量
def forward(self, x: Tensor, mask: Tensor = None) -> Tensor:
# 计算queries并重排维度
queries = rearrange(self.queries(x), "b t (h d) -> b h t d", h=self.num_heads)
# 计算keys并重排维度
keys = rearrange(self.keys(x), "b t (h d) -> b h d t", h=self.num_heads)
# 计算values并重排维度
values = rearrange(self.values(x), "b t (h d) -> b h t d", h=self.num_heads)
# 计算注意力得分
energy = torch.matmul(queries, keys)
# 如果提供了mask
if mask is not None:
# 获取float32类型的最小值
fill_value = torch.finfo(torch.float32).min
# 将mask位置填充为最小值
energy.mask_fill(~mask, fill_value)
# 计算缩放因子
scaling = self.emb_size ** (1 / 2)
# 应用softmax得到注意力权重
att = F.softmax(energy / scaling, dim=-1)
# 应用dropout
att = self.att_drop(att)
# 计算加权和得到输出
out = torch.einsum('bhal, bhlv -> bhav ', att, values)
# 替代实现方式:out = torch.matmul(att, values)
# 重排输出维度
out = rearrange(out, "b h t d -> b t (h d)")
# 通过投影层得到最终输出
out = self.projection(out)
# 返回结果
return out
特征融合层来自不同分支的特征通过特征融合层相互交互,该特征融合层包含串联、卷积层和批量归一化层。特征融合层可以加强来自不同分支的混合表示。为了获得输出特征,我们沿着通道维度连接 CNN 和 Transformer 块的输出并应用卷积层。
五、数据集
GCTNet 的性能在三个半模拟脑电图数据集和一个真实数据集上进行了测试。
- 半模拟数据:
• EEGDenoiseNet:该数据集包含 4514 个 EEG 片段、3400 个 EOG 片段和 5598 个 EMG 片段,所有这些片段均以 256 Hz 的频率重新采样,持续时间为 2 秒。我们将干净的 EEG 片段与 EMG 片段和 EOG 片段结合起来,生成半模拟数据集。具体来说,使用 3400 对 EEG 和 EOG 片段、4514 对 EEG 和 EMG 片段以及 3400 对 EEG 和混合伪影 (EOG+EMG) 片段来产生污染的 EEG。生成过程描述如下:
def get_item(self, item):
# 获取指定索引的EEG数据
EEG_data = self.EEG_data[item, :]
# 获取指定索引的噪声数据
NOS_data = self.NOS_data[item, :]
# 获取对应的信噪比值
SNR_value = self.SNR_value[item]
# 计算EEG数据的均方根值
EEG_rms = np.sqrt(np.sum(EEG_data ** 2) / EEG_data.shape[0])
# 计算噪声数据的均方根值
NOS_rms = np.sqrt(np.sum(NOS_data ** 2) / NOS_data.shape[0])
# 计算噪声调整系数
coe = EEG_rms / (NOS_rms * SNR_value)
# 调整噪声数据的幅度
NOS_data = NOS_data * coe
# 将噪声数据添加到EEG数据中
EEG_NOS_data = NOS_data + EEG_data
# 对EEG数据进行标准化
EEG_data = EEG_data / np.std(EEG_NOS_data)
# 对带噪声的EEG数据进行标准化
EEG_NOS_data = EEG_NOS_data / np.std(EEG_NOS_data)
# 返回处理后的数据
return EEG_NOS_data, EEG_data
其中
λ
λ
λ 是根据不同的SNR值获得的,范围从-5 dB到5 dB。输入信噪比定义为:
def cal_SNR(predict, truth): # 计算信噪比函数
if torch.is_tensor(predict): # 如果预测值是张量
predict = predict.detach().cpu().numpy() # 转换为numpy数组
if torch.is_tensor(truth): # 如果真实值是张量
truth = truth.detach().cpu().numpy() # 转换为numpy数组
PS = np.sum(np.square(truth), axis=-1) # 计算信号功率
PN = np.sum(np.square((predict - truth)), axis=-1) # 计算噪声功率
ratio = PS / PN # 计算比率
return torch.from_numpy(10 * np.log10(ratio)) # 返回分贝值
MIT-BIH 心律失常数据集:ECG 信号从 MIT-BIH 心律失常数据集获得。每次录音持续 30 分钟,采样率为 360 Hz。我们使用截止频率为 45 Hz 的低通滤波器过滤 ECG 数据,并重新采样到 256 Hz。所有数据均分为 2 秒段,总共 3600 个 ECG 段。我们将干净的心电图片段与 EEGDenoiseNet 中的脑电图片段结合起来,以评估消除心电图伪影的能力。
半模拟 EEG/EOG 数据集:该数据集包含从 27 名健康受试者以 200 Hz 获得的 54 条记录。 EOG 伪影与干净的 EEG 线性混合以生成污染信号。提供了可用的污染前和污染后脑电图信号。根据 DuoCL中的实验设置,我们在八个通道(FP1、FP2、F3、F4、F7、F8、T3 和 T4)上评估我们的模型,因为这些通道属于更容易受到影响的额叶区域。眼部伪影污染。
- Real Data:
S.Van Huffel 博士提供了该数据,其中包含一位癫痫患者在 250 Hz 下进行的 10 秒的 21 通道记录。可以从 BioSource 数据库访问记录。由于发作期脑电图信号受到眨眼和肌肉活动的严重污染,我们比较了消除肌电图和眼电图伪影的各种方法的性能。
6、损失函数
1)生成器损失:如果生成器只是训练来欺骗判别器,则可能会产生难以理解的结果。因此,我们在生成信号和干净信号之间增加了一组约束。生成器损失由 MSE 损失 L m s e L_{mse} Lmse、特征损失 L f e a t L_{feat} Lfeat 和对抗性损失 L a d v L_{adv} Ladv 组成:
其中 λ 1 λ_1 λ1 和 λ 2 λ_2 λ2 是特征损失和对抗性损失的权重。在本文中,我们根据经验设置 λ 1 = 0.05 λ_1 = 0.05 λ1=0.05 和 λ 2 = 0.05 λ_2 = 0.05 λ2=0.05。
M
S
E
MSE
MSE 损失是EEG去噪任务中典型的损失函数,计算公式如下:
其中 Y Y Y 是干净的 EEG, G ( X ) 是 去 噪 的 E E G G(X) 是去噪的 EEG G(X)是去噪的EEG。
特征损失 基于特征的损失旨在通过增加对高阶特征表示的约束来获得更精确的结果。
L
f
e
a
t
L_{feat}
Lfeat 定义为:
其中 F i d F^d_i Fid 表示鉴别器中第 i i i 个卷积层的特征。本文使用第四个卷积层特征计算特征损失,即 i = 4 i = 4 i=4。
对抗性损失的公式定义如下:
loss = denoise_loss_mse(p_t, y_t) # 计算去噪损失
if loss_type == "cls": # 如果是分类损失
g_loss = loss + w_c * (torch.mean((fake_y - 1) ** 2)) # 添加分类损失
elif loss_type == "feature": # 如果是特征损失
g_loss = loss + w_f * denoise_loss_mse(fake_feature2, true_feature2) # 添加特征损失
elif loss_type == "feature+cls": # 如果是特征+分类损失
g_loss = loss + w_f * denoise_loss_mse(fake_feature2, true_feature2) + w_c * (torch.mean((fake_y - 1) ** 2)) # 添加特征和分类损失
2)鉴别器损失:使用鉴别器损失来训练鉴别器,以增强区分
G
(
x
)
G(x)
G(x) 和
Y
Y
Y 的准确性。判别器损失表示如下:
七、实验结果
前置知识
对于半模拟数据,评估指标包括相对均方根误差 (RRMSE) 、相关系数 (CC) 、SNR、加权相关系数 (WCC) 和加权信噪比 (WSNR)。前三个指标提供整体性能评估,而后两个指标反映本地子带中的失真。此外,我们使用功率谱密度 (PSD) 评估了真实 EEG 数据的去噪性能。
1) RRMSE:
R
R
M
S
E
RRMSE
RRMSE 的公式如下:
R
R
M
S
E
=
R
M
S
(
Y
^
−
Y
)
R
M
S
(
Y
)
,
RRMSE=\frac{RMS(\hat{Y}-Y)}{RMS(Y)},
RRMSE=RMS(Y)RMS(Y^−Y),
其中
R
M
S
(
⋅
)
RMS(·)
RMS(⋅) 表示均方根,可以按以下方式计算:
R M S ( Y ^ − Y ) = 1 T ∑ t = 0 T − 1 ( y ^ t − y t ) 2 . RMS(\hat{Y}-Y)=\sqrt{\frac{1}{T}\sum_{t=0}^{T-1}(\hat{y}_t-y_t)^2}. RMS(Y^−Y)=T1t=0∑T−1(y^t−yt)2.
2) CC:公式定义如下:
C
C
=
c
o
v
(
Y
^
,
Y
)
σ
Y
^
σ
Y
,
CC=\frac{cov(\hat{Y},Y)}{\sigma_{\hat{Y}}\sigma_Y},
CC=σY^σYcov(Y^,Y),
其中 CoV 表示协方差,σ 表示标准差。
3) SNR:SNR 可以使用以下公式计算:
S
N
R
(
d
B
)
=
10
log
10
∑
t
=
0
T
−
1
y
t
2
∑
t
=
0
T
−
1
(
y
t
^
−
y
t
)
2
.
\begin{aligned}SNR(dB)=10\log_{10}\frac{\sum_{t=0}^{T-1}y_t^2}{\sum_{t=0}^{T-1}(\hat{y_t}-y_t)^2}.\end{aligned}
SNR(dB)=10log10∑t=0T−1(yt^−yt)2∑t=0T−1yt2.
SNR 值越高,降噪性能越好。
4) WSNR:为了评估局部波段的去噪性能,首先使用 Daubechies9 作为母小波和五个分解级别,将脑电信号分解为不同的子波段。然后计算相对小波子带能量 (RWSEg) 和相对小波子带熵 (RWSEp)。RWSEg 的值用 E j r e l = E j / E t E^{rel}_j = E^j/E^t Ejrel=Ej/Et 表示,其中 E j E^j Ej 和 E t E^t Et 是第 j 个子带中的能量和所有系数的总能量。RWSEp 可以由下式计算: H j r e l = − E j r e l l o g ( E j r e l ) H^{rel}_j = −E^{rel}_j log(E^{rel}_j ) Hjrel=−Ejrellog(Ejrel)。然后,WSNR 可以确定为:
W S N R j e = E j r e l 10 log 10 ∑ t = 0 T − 1 ∣ y t j ∣ 2 ∑ t = 0 T − 1 ∣ y t j − y ^ t j ∣ 2 , ( 15 ) W S N R j h = H j r e l 10 log 10 ∑ t = 0 T − 1 ∣ y t j ∣ 2 ∑ t = 0 T − 1 ∣ y t j − y ^ t j ∣ 2 , ( 16 ) W S N R e = ∑ j = 1 D + 1 W S N R j e , ( 17 ) W S N R h = ∑ j = 1 D + 1 W S N R j h , ( 18 ) \begin{aligned} &WSNR_j^e =E_j^{rel}10\log_{10}\frac{\sum_{t=0}^{T-1}|y_t^j|^2}{\sum_{t=0}^{T-1}|y_t^j-\hat{y}_t^j|^2}, && \begin{pmatrix}15\end{pmatrix} \\ &WSNR_j^h =H_j^{rel}10\log_{10}\frac{\sum_{t=0}^{T-1}|y_t^j|^2}{\sum_{t=0}^{T-1}|y_t^j-\hat{y}_t^j|^2}, && \begin{pmatrix}16\end{pmatrix} \\ &WSNR_{e} =\sum_{j=1}^{D+1}WSNR_j^e, && \begin{pmatrix}17\end{pmatrix} \\ &WSNR_h =\sum_{j=1}^{D+1}WSNR_j^h, && \begin{pmatrix}18\end{pmatrix} \end{aligned} WSNRje=Ejrel10log10∑t=0T−1∣ytj−y^tj∣2∑t=0T−1∣ytj∣2,WSNRjh=Hjrel10log10∑t=0T−1∣ytj−y^tj∣2∑t=0T−1∣ytj∣2,WSNRe=j=1∑D+1WSNRje,WSNRh=j=1∑D+1WSNRjh,(15)(16)(17)(18)
其中 y t j ( y t j ∈ Y j ) and y ^ t j ( y ^ t j ∈ Y ^ j ) y_t^j (y_t^j\in Y^j)\text{ and }\hat{y}_t^j (\hat{y}_t^j\in\hat{Y}^j) ytj(ytj∈Yj) and y^tj(y^tj∈Y^j)表示干净脑电图和重建脑电图信号的第 j j j 个子带中的第 t t t 个点。 D D D 是分解级别的数量。
5) WCC:同样,WCC 定义如下:
W
C
C
j
e
=
E
j
r
e
l
c
o
v
(
Y
j
^
,
Y
j
)
σ
Y
j
^
σ
Y
j
,
(
19
)
W
C
C
f
j
h
=
H
j
r
e
l
c
o
v
(
Y
j
^
,
Y
j
)
σ
Y
j
^
σ
Y
j
(20)
W
C
C
e
=
∑
j
=
1
D
+
1
W
C
C
j
e
,
(
21
)
W
C
C
h
=
∑
j
=
1
D
+
1
W
C
C
j
h
.
(
22
)
\begin{gathered} WCC_j^e =E_j^{rel}\frac{cov(\widehat{Y^j},Y^j)}{\sigma_{\widehat{Y^j}}\sigma_{Y^j}}, \begin{pmatrix}19\end{pmatrix} \\ WCC f_j^h=H_j^{rel}\frac{cov(\widehat{Y^j},Y^j)}{\sigma_{\widehat{Y^j}}\sigma_{Y^j}} \text{(20)} \\ WCC_{e} =\sum_{j=1}^{D+1}WCC_j^e, (21) \\ WCC_h =\sum_{j=1}^{D+1}WCC_j^h. (22) \end{gathered}
WCCje=EjrelσYj
σYjcov(Yj
,Yj),(19)WCCfjh=HjrelσYj
σYjcov(Yj
,Yj)(20)WCCe=j=1∑D+1WCCje,(21)WCCh=j=1∑D+1WCCjh.(22)
6) PSD:在没有地面实况的情况下,真实的 EEG 数据不适合计算森林化的指标。PSD 是这种情况下常用的评估方法。大多数 EOG 活动集中在低频区域,而 EMG 活动集中在高频区域。因此,EMG 伪影的 PSD 值应在高频带降低,而在低频带中保持接近原始 EEG。对于 EOG 伪影,PSD 值应在低频带(低于 10 Hz)中降低,并在高频带中保持接近原始 EEG。
A.Performance Evaluation on Semi-simulated Data
我们对 GCTNet 与几种基准测试方法进行了定量比较,这些基准测试方法通常可以分为两类:
(1)传统方法:EMD-ICA 和 EMDCCA。去除后增加与干净信号相关性的分量被抑制;
(2)基于DNN的方法:全连接网络(FCNN)、简单卷积神经网络(SimpleCNN)、ResCNN、NovelCNN、EEGDNet和DuoCL。
我们在相同的训练和测试设置下进行比较实验,例如相同的数据分离和相同的批量大小。
1)EEGDenoiseNet:表II 描述了在 EEGDenoiseNet 数据集上获得的实验结果,其中报告了平均值和标准方差。
EMG 伪影:两种传统方法的去噪性能远不如深度学习方法。与现有方法相比,GCTNet 生成的信号具有显着更低的 RRMSE、更高的 CC 和更高的 SNR。例如,GCTNet的平均RRMSE为0.287,而其他方法的最低RRMSE为0.323,降低了11.15%。其他性能指标也有类似的改进。我们还展示了各种信噪比下基于深度学习的结果,因为传统方法的表现比深度学习方法差得多。 GCTNet在不同噪声幅度存在的情况下实现了最佳的去噪性能,如图2a所示。
EOG 伪影:GCTNet 通过结合 CNN 和 Transformer 的优点,在所有评估指标方面始终比其他网络产生最佳的去噪性能。以SNR为例,GCTNet的平均SNR为13.692,而其他方法的最高SNR为12.117,提升了13.00%。
混合伪影(EMG+EOG):去噪结果如表II所示和图2c,可以看出GCTNet优于其他方法,平均RRMSE值为0.308,平均CC值为0.925,平均SNR值为12.141。值得注意的是,混合伪影的去噪性能通常比单个伪影的去噪性能差,这可能与任务复杂性的增加有关。 GCTNet在各种SNR下的性能均优于其他网络,特别是在RRMSE和SNR指标上。
可视化:此外,我们在图 3 和图 S2 中展示了可视化结果。这些图中的蓝线代表受污染的脑电图,而绿线和黄线分别代表干净的脑电图和去噪的脑电图。以肌电图为例,我们观察到 FCNN、SimpleCNN、ResCNN 和 EEGDNet 产生的波形出现峰值幅度溢出,如红色圆圈所示。当进一步比较NovelCNN、DuoCL和GCTNet的波形时,我们发现GCTNet表现出较低的波形偏移,展示了GCTNet出色的去噪性能。
2)MIT-BIH 心律失常数据集:表。 III 和图 2d 公开了不同 SNR 下 ECG 伪影的平均去噪性能和结果。之前的研究表明,DuoCL 实现了最佳性能,但 GCTNet 在多个方面都超越了 DuoCL,例如 RRMSE 降低了 10.25%,CC 高出 1.27%,SNR 高出 8.44%。此外,GCTNet 在 WSNR 和 WCC 方面实现了最高值。
3)半模拟EEG/EOG数据集:我们在半模拟EEG/EOG数据集上进行各种记录实验,以探索泛化能力。从半模拟 EEG/EOG 数据集可以得出相同的结论,即在所有评估指标上,GCTNet 的去噪性能均明显优于其他网络和传统方法。
B.Performance Evaluation on Real data
1)肌电伪影:我们选择了在之前的肌电伪影去除实验中表现良好的三个网络(ResCNN、NovelCNN 和 DuoCL)进行比较。作为一种流行的去噪方法,多尺度主成分分析(MSPCA)可以作为比较的基线。它通常用于消除多通道脑电图伪影,主要旨在消除肌电图和基线漂移。图 4 显示了应用 GCTNet 和原始 EEG 记录后的时间波形。原始污染脑电图信号以黄色表示,而去噪信号以蓝色绘制。我们可以观察到大部分肌肉活动受到抑制。为了评估所提出的方法在保留原始大脑活动的同时去除伪影的能力,我们演示了两个具有重度和轻度污染的典型通道(分别是通道 C3 和通道 Fz)的去噪效果。
在图 5a 中,我们观察到,当 EEG 信号因严重肌肉伪影而损坏时,MSPCA 在消除 EMG 伪影方面显示出有限的效果。相反,四个网络在0.5-10 Hz之间的PSD值与原始脑电信号几乎没有变化,并且在高频段有明显的下降,表明这四个网络可以有效地去除肌肉活动。其中,与其他网络相比,ResCNN 的 PSD 值下降有限。 Fz 通道中的原始 EEG 信号仅仅是光污染,如图 5b 所示。真正的大脑活动主要以低频出现。 GCTNet在15Hz以下频段的PSD值比其他网络更接近原始EEG信号的PSD值。特别是,NovelCNN 表现出大幅度偏移,表明存在信号丢失的可能性。这些结果表明 GCTNet 在保留大脑活动和抑制 EMG 伪影方面取得了更好的性能。
2)EOG伪影:我们选择了在之前的EOG伪影去除实验中表现良好的四个网络(SimpleCNN、ResCNN、EEGDNet和DuoCL)进行比较。图 4 说明了真实 EEG 信号的 EOG 伪影去除的去噪性能。如图4所示,大部分眼部活动都被有效抑制。例如,7 至 8 秒之间通道 F3、Fp1、F4 和 FP2 中的多个 EOG 伪影显着减少。我们通过比较通道 F3(重度污染)和 T4(轻度污染)中伪影衰减 EEG 的 PSD 值来进一步评估 GCTNet 的性能,如图 6 所示。
GCTNet 在通道 F3 中可以在 0.5-12 Hz 区域产生比其他网络更大的衰减,表明其具有很强的伪影去除能力。在通道 T4 中,当更仔细地观察 DuoCL 和 EEGDNet 之间的结果时,我们发现高频(> 15 Hz)的 PSD 值存在幅度偏移,这表明原始 EEG 信息丢失。应用 GCTNet 的去噪信号与原始信号密切相关,表明大脑活动保留良好。上述结果证实了GCTNet在实际脑电数据中抑制伪影和保留大脑活动方面具有优越的性能。