山東賽 - 心電圖智能事件識別Top2方案分享
老肥今天和大家分享的是山東省第三屆數(shù)據(jù)應(yīng)用創(chuàng)新創(chuàng)業(yè)大賽的心電圖智能事件識別賽題的Top2方案,完整代碼已開源,需要的同學(xué)可以點擊底部閱讀原文一鍵直達(dá)。
本次比賽是我第二次參加的心電圖競賽,主要采用的是基于ResNet改寫的1DCNN模型。而上一次參加的則是AIWIN的賽題,比賽中因為數(shù)據(jù)不可開放、只能使用線上較差的計算資源而提前放棄,當(dāng)時主要采用了樹模型與特征工程的思路,完整代碼同樣可以在我的GitHub倉庫中找到。
賽題描述
心電圖(ECG)是一種簡單、經(jīng)濟(jì)的院內(nèi)檢查手段,是患者住院或日常體檢的常用檢測項目。由計算機(jī)輔助醫(yī)生對心電信號進(jìn)行識別,有望減輕醫(yī)生工作負(fù)擔(dān),并降低人工造成的漏診。對于某一時長的 ECG 數(shù)據(jù),識別其包含哪些心律失常事件,是目前熱門的研究方向。評價指標(biāo)為F1宏平均。
解決方案
在對數(shù)據(jù)進(jìn)行初步觀察后,我們可以發(fā)現(xiàn)這是一個類別不均衡的多標(biāo)簽分類問題,并且心電圖的數(shù)據(jù)長度也并不一致,為了將數(shù)據(jù)送入到CNN中進(jìn)行訓(xùn)練,我們需要將其長度轉(zhuǎn)成一致。
這里主要采取了兩種不同的數(shù)據(jù)預(yù)處理的思路,第一種是以多數(shù)類長度16001為基準(zhǔn)長度,這里采用長度不足16001在末尾補(bǔ)零,長度超過16001的末尾截斷的處理,另外考慮到讀取csv文件的速度慢,完成上述操作之后將所有心電圖均轉(zhuǎn)化為mat矩陣文件保存;
第二種則是使用重采樣統(tǒng)一將心電信號變?yōu)橐恢碌拈L度,我們采用長度6666,并以字典形式保存所有數(shù)據(jù),方便快速讀取(減少Dataset的IO用時,避免總是出現(xiàn)GPU處于等待讀取數(shù)據(jù)的情況,是一種典型的以空間換取時間的做法)。

接下來是網(wǎng)絡(luò)模型構(gòu)建(搭積木)的環(huán)節(jié),也是本賽題最為核心的上分點,我們首先采取的backbone是1D版本的ResNet34(和原ResNet的差別僅在于將2DCNN換成1DCNN),通過參考心電圖歷史競賽的相關(guān)方案,我們對網(wǎng)絡(luò)進(jìn)行改進(jìn)以更加適配該任務(wù),增大了卷積核的大小以增加感受野,增加SE通道注意力模塊以增強(qiáng)模型性能,具體結(jié)構(gòu)如下圖所示:

在上述模型的基礎(chǔ)上我們又提出了se_resnet34_plus1模型,該模型在網(wǎng)絡(luò)末端增加了maxpooling將其與原先的meanpooling的輸出進(jìn)行拼接送入全連接層,使用maxpooling取出了特征圖的最大值可以很好地捕捉心電圖的異常,有效地提升了模型性能。

為了進(jìn)一步加強(qiáng)初始感受野,我們在se_resnet34_plus1模型的基礎(chǔ)上提出了se_resnet34_plus2模型,在數(shù)據(jù)輸入的第一個卷積層,我們將其分成四個不同大小卷積核的分支,卷積核大小分別為9、15、31、45,
同樣有效地提升了性能。

再進(jìn)一步的,我們提出了se_resnet34_plus3模型,在第一層卷積拼接后添加注意力SE模塊,再在接近輸出的全連接層增為兩層,增加激活函數(shù)Swish,繼續(xù)提升模型性能。

在模型訓(xùn)練時,我們選擇帶權(quán)重的BCELoss,權(quán)重通過正標(biāo)簽數(shù)量的對數(shù)反比進(jìn)行計算,一種方式以評價指標(biāo)f1-macro作為早停指標(biāo),訓(xùn)練得到總指標(biāo)得分最高的單模型;另外一種方式以每個類別的f1得分作為保存模型的依據(jù),一次同時保存18個在每個類別中的最佳模型。
后處理我們一共采用了兩種。
1)根據(jù)評分指標(biāo),我們可以通過線下驗證集計算最優(yōu)的閾值(常規(guī)的閾值后處理),能夠顯著的提升成績(百分位)。
2)另外根據(jù)我們對數(shù)據(jù)標(biāo)簽的分析得到了互斥標(biāo)簽,即A、B事件不會同時發(fā)生,從而得到諸如此類的后處理方式:B取值為1時,強(qiáng)制將A改寫為0,一樣可以得到穩(wěn)定的提升(千分位)。

模型融合的部分,我們相當(dāng)暴力地將歷史迭代的模型根據(jù)oof進(jìn)行加權(quán)融合,融合的權(quán)重通過貝葉斯優(yōu)化的方法獲得。
以上就是本次分享的全部內(nèi)容啦,需要完整代碼的同學(xué)可以點擊閱讀原文一鍵直達(dá)!
——END—— 覺得有用的話,就關(guān)注一下吧,感謝支持!
點擊下面閱讀原文看“完整代碼”