本週,Zyphra在Apache 2.0許可下發布了ZUNA1.1。這款腦電圖(EEG)基礎模型能夠跨任意通道佈局重建、去噪和上取樣資料。它建立在Zyphra之前的開源EEG基礎模型ZUNA1之上。
主要變化在於靈活性,而非原始精度的躍升。真實的EEG記錄是混亂的:會話長度不一,通道可能中途出現噪聲或丟失,電極帽配置從四電極頭帶到256通道研究帽各不相同。ZUNA1只能處理固定的5秒片段,而ZUNA1.1則接受0.5至30秒的可變長度輸入。
ZUNA1.1是什麼?
要理解這種靈活性,首先要了解模型的功能。ZUNA1.1是一個擁有3.8億引數的掩碼擴散自編碼器,專門處理頭皮EEG訊號。給定一個通道子集,它可以對現有EEG片段和通道進行去噪、重建缺失的通道,還能根據頭皮上的物理座標預測新的通道訊號。
引數數量與ZUNA1相同,可在消費級GPU上執行,並在許多工作負載下能在CPU上接受。權重存放在Hugging Face上;推理和預處理程式碼在GitHub上。透過pip install zuna即可安裝。Zyphra還提供了一個免費的瀏覽器端EEG Playground,所有這些僅用於研究目的。
架構工作原理
靈活性依賴於分詞化。ZUNA是一個變壓器編碼器-解碼器擴散自編碼器。它將每個通道分割成0.125秒的片段(在256 Hz下對應32個樣本)。每個片段成為一個連續值令牌。令牌按通道×時間順序序列化。
位置編碼是關鍵:每個令牌攜帶一個4D旋轉位置編碼,包含(x, y, z, t)四個維度,即電極的3D頭皮座標和粗粒度時間索引。由於位置而非陣列索引告訴模型通道的位置,ZUNA是通道無關的。它可以接受任何電極佈局,並能生成從未記錄過的位置的訊號。這一能力使得透過位置進行任意通道上取樣成為可能。
編碼器將訊號壓縮為潛在表示,該潛在表示透過自適應RMS歸一化條件化解碼器。解碼器使用整流流目標進行訓練。ZUNA1.1的架構變更主要針對訓練穩定性,例如增加了歸一化層。
與ZUNA1的變化
由於架構相近,差異主要來自訓練。
- 可變長度輸入(0.5–30秒):ZUNA1.1在訓練時對每個樣本取樣一個片段長度,並取整到0.125秒令牌網格。長度從四個區間中抽取,覆蓋從極短到長。中間1.5–10秒範圍被過取樣,因為這是最常見的操作點。由於令牌數量變化,Zyphra將多個片段打包到一個批次中,直至固定預算。使用具有樣本感知掩碼的柔性注意力阻止令牌跨樣本互動。因此,一個模型無需重新配置即可同時處理0.5秒的片段和30秒的長片段。
- 更豐富的重建任務混合:ZUNA1只訓練了一種丟失模式:均勻隨機整通道。ZUNA1.1訓練了四種。第一種是整通道丟失,涵蓋稀疏電極帽和死電極。第二種是移除所有通道上的短時間片段。第三種僅從部分通道移除這些片段,在空間和時間上聚類空白。第四種是散落在各個時間點的缺失值。
- 質量感知的預處理和更大的語料庫:ZUNA1在全記錄級別進行通道質量判斷,丟棄了可用訊號。ZUNA1.1改為計算每個通道每秒的質量分數,在載入時進行閾值處理。這使得語料庫從約200萬通道小時擴充套件到約350萬通道小時公共EEG資料。Zyphra團隊還為每條記錄預計算兩種濾波變體:0.1–45 Hz帶通,以及0.01 Hz高通加陷波。泛化預處理策略是一個既定目標,但尚未有基準測試結果。
結果
因此,問題在於靈活性是否犧牲了準確性。在保留任務上,ZUNA1.1達到了與ZUNA1相同或更好的重建NMSE。兩者均明顯優於MNE中的經典球面樣條插值。為了公平比較,這些評估集嚴格使用5秒樣本。
Zyphra還進行了一項基於區域的測試:刪除一個腦區的電極,然後從其餘七個區域重建。這種設定比隨機通道丟失更現實。ZUNA1.1在此測試中優於球面樣條和ZUNA1。
互動式說明
為使這些機制更加具體,下方演示動畫展示了端到端流程。
ZUNA1 vs ZUNA1.1
總體而言,兩個版本的差異主要在於訓練,而非架構。
| 屬性 | ZUNA1 | ZUNA1.1 | |------|-------|---------| | 引數 | 380M | 380M | | 架構 | 變壓器編碼器-解碼器擴散自編碼器 | 相同,增加了額外的歸一化層 | | 輸入長度 | 固定5秒 | 0.5–30秒,取整到0.125秒網格 | | 令牌 | 0.125秒/32個樣本(256 Hz) | 相同 | | 位置編碼 | 4D RoPE (x, y, z, t) | 相同 | | 解碼器目標 | 整流流 | 整流流 | | 訓練中的丟失方案 | 1種(均勻隨機整通道) | 4種(通道、時間、通道×時間、散點) | | 訓練語料 | ~200萬通道小時 | ~350萬通道小時 | | 質量過濾 | 全記錄級別 | 每個通道每秒得分,載入時閾值 | | 預處理變體 | 單一 | 兩種(0.1–45 Hz帶通;0.01 Hz高通+陷波) | | 許可 | Apache 2.0 | Apache 2.0 | | 重建NMSE | 基線 | 相同或更好 |
執行
實際應用中,reconstruct_fif可直接處理.fif檔案,無需經過.pt格式。之前的四步流程仍附帶提供。
from zuna import reconstruct_fif
reconstruct_fif(
input_dir="fif_in",
output_dir="fif_out",
figures_dir="figures",
gpu_device=0, # GPU編號,或""表示CPU
segment_sec=5.0, # 視窗長度;預設5.0,非完整的30秒
montage="standard_1020", # 備用,僅在檔案無位置時使用
repair_channels=["Cz"], # 需要完全重建的通道
target_channel_count=["Fz", "Pz"], # 按名稱新增/上取樣新通道(或使用int自動選擇)
bad_segments=[(5, 6), (10, 11, "C3")], # 標記時間跨度不良(全部通道或單個)
sample_steps=50, # 擴散步數
)注意預設值:segment_sec為5.0,因此0.5–30秒範圍需要明確設定。電極位置從檔案本身讀取。montage引數僅在缺少位置時作為備用,沒有3D座標的通道將被丟棄。
重建目標是並集:它結合了檔案自身的MNE壞通道和BAD_註釋,以及上述請求的任何內容。會寫入兩個目錄:full_reconstruction/包含模型在所有位置上的輸出,hybrid/保留原始並僅填充推斷的單元,外加一個_mask.npz檔案。
應用示例
由於掩碼現在更加靈活,幾個實用模式由此展開。
- 死電極:標記
repair_channels=["Cz"],從相鄰通道重建該通道。 - 試驗中的運動偽影:傳遞
bad_segments=[(10, 11, "C3")],清理單個通道上的一個時間段。 - 頭帶上取樣:輸入四個電極,然後請求額外的
standard_1005位置。 - UI驅動的清洗:透過
mask_dir提供每檔案掩碼,與目標合併。
檢視模型權重、GitHub倉庫和技術細節。此外,歡迎在Twitter上關注我們,別忘了加入我們的15萬+機器學習SubReddit並訂閱我們的通訊。你在使用Telegram嗎?現在你也可以在Telegram上加入我們。
需要與我們合作推廣你的GitHub倉庫或Hugging Face頁面或產品釋出或網路研討會等?請聯絡我們。
文章《Zyphra釋出ZUNA1.1:一個支援0.5至30秒可變長度輸入的Apache 2.0 EEG基礎模型》最早出現在MarkTechPost上。