Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

项目概述

该项目的核心目标是构建一个 EEG 自监督预训练模型(类似 MAE/ViT 风格),用于从大规模 EEG 数据中学习通用的脑电表征。其主要思路包括:

从原始 EEG 数据读取信号并标准化通道。 对信号进行裁剪、重采样和窗口化,将 EEG 切分为 “通道 × 时间” 的 Token。 对部分 Token 进行掩码(Mask),模型需要预测被遮挡的 Token 的频带功率轨迹。 使用 Transformer 编码器学习 EEG 的时空和频谱关系。 通过自监督目标(Band Power Trajectory)训练模型,得到可用于下游任务的通用表示。

整个项目可以分为几个核心模块:数据读取与预处理、Token 构建、数据存储、掩码策略、模型定义、损失计算、训练循环和辅助工具。


文件详细说明

part_paths.txt

  • 该文件存储了项目中所有原始 EEG 数据文件的路径,每行对应一个 EEG 文件。主要用于数据批量处理和分布式训练,确保所有数据都能被统一管理。

build_part_paths.py

  • 功能:扫描指定的原始数据目录,收集所有 EEG 文件路径并写入 part_paths.txt。
  • 主要工作:遍历文件夹和子目录,检查文件格式,确保每个 EEG 数据集都被记录。该文件是整个数据处理流水线的入口,保证后续处理和转换操作可以批量执行。

build_processed_lance_from_raw.py

  • 功能:将原始 EEG 数据批量转换为 Lance 数据格式(高效存储格式)。
  • 具体做法:调用预处理模块对每个 EEG 文件进行通道映射、裁剪、重采样、Token 构建和目标生成,然后存储为 Lance 文件。
  • 意义:这个文件是大规模数据预处理的核心,用于生成训练时可直接加载的数据,避免每次训练都重新处理原始 EEG。

channel_config.py

  • 功能:定义标准 EEG 通道配置和映射规则。
  • 内容:
    • 固定 64 个通道顺序,用于统一不同数据集的通道排列。
    • 通道别名映射,解决不同数据集命名不一致的问题,例如 T3 → T7,FP1 → Fp1。
  • 意义:保证模型输入的通道顺序一致,有利于跨数据集训练和迁移。

checkTransformedLanceData.py

  • 功能:验证处理后的 Lance 数据是否完整和正确。
  • 工作内容:
    • 检查数据形状和维度。
    • 检查通道有效性和掩码信息。
    • 可以随机抽样检查部分数据是否符合预期。
  • 用途:调试数据处理流程,确保预处理和存储过程没有错误。

configs.py

  • 功能:集中管理项目的所有配置和超参数。
  • 内容包括:
    • 数据切片长度、Token 长度、滑动步长。
    • 频带划分和时频分析参数。
    • Transformer 模型结构参数(层数、隐藏维度、注意力头数)。
    • 掩码比例和训练超参数。
  • 作用:为训练和数据处理提供统一配置,方便实验可复现和参数调整。

convert_set_to_lance.py

  • 功能:将单个 EEG 数据集(如 .set 文件)转换为 Lance 数据格式。

  • 操作流程:

    • 读取 EEG 信号并标准化通道。
    • 对信号裁剪和重采样。
    • 构建时间-通道 Token。
    • 计算每个 Token 的频带功率轨迹,生成训练目标。
    • 存储为 Lance 格式,便于训练阶段快速加载。
  • 作用:支持单数据集转换,是数据处理流水线的基础工具。

dataset.py

  • 功能:定义训练数据集接口。

  • 主要职责:

    • 将 EEG Token 和对应的 Band Power Trajectory 目标组织成训练样本。
    • 提供批次索引和加载方法。
    • 支持随机访问和通道掩码信息。
  • 用途:封装数据,供训练和验证循环直接使用。

io_utils.py

  • 功能:提供数据输入输出辅助工具。

  • 职责:

    • 读取原始 EEG 文件(EEGLAB .set 等)。
    • 保存和加载处理后的数据。
    • 批量文件操作和路径处理。
  • 意义:为数据预处理模块提供通用工具,简化文件操作。

lance_dataset.py

  • 功能:针对 Lance 数据格式的训练数据集类。
  • 特点:
    • 高效读取大规模数据。
    • 支持随机访问和批量加载。
    • 避免每次训练重复预处理,提高训练效率。
  • 用途:专门优化大规模 EEG 训练场景。

largeScale_pretrain_main.py

  • 功能:训练入口脚本。
  • 工作内容:
    • 初始化配置、数据集、数据加载器、模型、损失函数和优化器。
    • 启动训练循环和验证循环。
  • 作用:整合整个训练流程,是项目实际运行训练任务的核心程序。

losses.py

  • 功能:定义训练损失函数。
  • 主要特点:
    • 计算预测 Token 的 Band Power Trajectory 与目标的误差。
    • 支持按通道和频带加权。
    • 避免低频主导训练,保证各频带均衡。
  • 用途:指导模型学习准确的频带功率预测。

masking.py

  • 功能:实现 Token 掩码策略。
  • 特点:
    • 支持连续 Block Mask 和随机 Mask。
    • 将部分 Token 遮挡,作为自监督学习输入。
  • 意义:让模型学习全局时空关系,而不是直接复制原始信号。

model.py

  • 功能:定义 EEG Foundation Model 结构。
  • 内容:
    • Patch Token 嵌入、通道嵌入、时间嵌入。
    • Transformer 编码器,用于捕捉 EEG 的时空和频谱关系。
    • 输出预测每个 Token 的多频带功率轨迹。
  • 作用:模型核心,直接决定预训练效果。

prefetch_loader.py

  • 功能:优化数据加载过程。
  • 工作:
    • 在 CPU 加载数据的同时,GPU 执行训练。
    • 减少 DataLoader 成为训练瓶颈。
  • 用途:加速大规模训练。

preprocessing.py

  • 功能:处理原始 EEG 信号。

  • 主要工作:

    • 通道名称标准化和映射。
    • 信号裁剪、重采样和补零。
    • 输出统一格式的数据。
  • 意义:保证训练输入数据的一致性和可控性。

targets.py

  • 功能:生成自监督训练目标。
  • 主要职责:
    • 将 EEG Token 转换为 Band Power Trajectory。
    • 通过时频分析计算 Delta、Theta、Alpha、Beta、Gamma 频带功率。
    • 为每个 Token 提供连续动态目标序列。
  • 作用:训练模型预测频带动态,是自监督学习核心。

trainer.py

  • 功能:封装训练和验证循环。

  • 工作内容:

    • 批次处理、掩码应用、模型前向计算。
    • 损失计算和梯度更新。
    • 记录训练和验证指标。
  • 意义:统一管理训练流程,确保训练可复用和可扩展。

utils.py

  • 功能:通用辅助工具。
  • 作用:
    • 日志输出和时间统计。
    • 随机种子设置。
    • 文件路径处理。
  • 意义:提高代码可读性和复用性。

electrode_vocab.json

  • 功能:定义 EEG 电极词典。
  • 作用:
    • 将每个通道映射为唯一索引。
    • 用于模型的通道嵌入和位置编码。

总结

整个项目实现了一个完整的 EEG 自监督预训练框架。它可以从原始 EEG 数据中提取时空和频谱特征,通过 Token Masking 和 Band Power Trajectory 预测训练 Transformer 模型。训练得到的模型能作为通用表示用于各种下游 EEG 任务,如脑机接口、情绪识别或疾病诊断。每个模块都有明确职责,形成从原始数据到模型预训练的完整流水线。

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages