Kaggle 2024 HMS 全体的な解法のまとめ
2024/04 Kaggle HMS 全体的な解法のまとめ
概要
2024/01/10~2024/04/09で行われたHMS - Harmful Brain Activity Classificationの解法のまとめです
お題
コンペティションの目的
- 脳の損傷を引き起こす可能性のある発作やその他の活動を検出し、迅速かつ正確に治療を行えるようにしたい
- 今回は脳波から有害な活動の種類(異常のクラス)を分類する
- 発作、特定の箇所における放電やデルタ活動、その他等の6つのパターンがある
分野における課題
- 脳波(EEG)の監視は神経内科医の手動の分析のみに依存している
- 時間・コストがかかっており、疲労によってミスもしやすく、神経内科医であってもレビューの信頼性に問題がある
- 今回は脳波に対して複数人で行ったラベル付けについて、ラベル付けされたクラスの割合を学習・予測する
- 例:ある脳波について10人がラベル付けを行った際、それぞれのクラスに[0, 3, 6, 0, 1, 0]人がラベル付けをした場合、学習・予測したいラベルは[0.0, 0.3, 0.6, 0.0, 0.1, 0.0]
- 今回は脳波に対して複数人で行ったラベル付けについて、ラベル付けされたクラスの割合を学習・予測する
コンペティションについて
データ
以下の二種類が提供。
-
EEG
- wikipedia参照
- 脳波を測定した19か所からの時系列データ
- それぞれの箇所について50秒間、1秒当たり200サンプル
-
Spectrogram
- 10分間のEEGデータを使用して作成された脳波の波形画像
ターゲット
- ある脳波について、分類したい6つのラベルそれぞれに投票された数
評価指標
-
Kullback Leibler Divergence
- 以下、Pytorchの実装名torch.nn.KLDivLossに基づきKLDivLossと表記
制約
- コード形式、GPU/CPUで9時間
- 実行時間には余裕があった
解法
全体的なアーキテクチャ
全体的なアーキテクチャは、大体以下の2通りに分類できそうだった。ただし、脳の位置を基準として信号を左右対称に扱えるようにした4位、特徴量をContrastiveに扱った9位などはアーキテクチャが異なる。詳細はそれぞれの元のDiscussionを参考。
注)詳細が記載されていなかったため、推測して判断・分類したものを含む。詳細は個別のDiscussionを参照。
個別のエンコーダ
概要
前半部分で時系列、または画像認識モデルを用いてシグナルから特徴量を抽出する。その後、特徴量についてReshapeし、結合することで画像として扱う。
以下は具体的な次元の例。
-
生データ
-
シグナル1つごとに元の入力の次元は(系列長, )
-
一次元の時系列の場合はそのままか、秒数を変えてClipし、(幅, )を得る
-
二次元の画像の場合はスペクトログラムに変換し、シグナル1つごとに(幅, 高さ, )を得る
-
-
エンコーダ
-
シグナル1つごとの入力の次元は上記
-
一次元の時系列の場合はシグナル1つごとに(系列長, 特徴量の長さ, )または(特徴量の長さ, )を得る
-
二次元の画像の場合は(畳み込んだ幅, 畳み込んだ高さ, 特徴量の長さ, )または(特徴量の長さ, )を得る。
-
-
Reshapeと結合はモデルや解法によって以下のパターンに分かれる。最終的に得られる画像は、やや横長か正方形に近い長方形になる。
- Reshapeせず、縦に積み重ね、(任意の長さ, シグナル数)を得る
- (任意の長さ, ...)を(縦, 横)にReshapeし、縦に積み重ね、(縦 x シグナル数, 横)を得る
- (任意の長さ, ...)を(縦, 横)にReshapeし、縦・横にタイル状に並べ、(縦 x 縦に積んだ数, 横 x 横に積んだ数)を得る
3.において積み重ねる順番は性能に影響する。また、特定の位置における画像情報(脳の特定の部位・時間のシグナルがどうなっているか?)も大事であるためか、3.の後段の画像認識モデルには位置情報を残しやすいViT系が普段より使われた。
派生形・Aux Target
概要
先ほどのものに加え、前段部分でも学習を行うパターン。Aux Targetの予測内容は後段のモデルの予測内容と同一であるため、予測に使える。
また、このケースでは前段のエンコーダから得られる特徴量がAux Targetにより影響されているためか、後半のEmbeddingに対するモデルは軽量な傾向か。
一つのエンコーダ
概要
早い段階でシグナルの結合を行い、一つのエンコーダ・モデルで学習を行うパターン。変換の方法が1つのみのケースもこちらに含めた。結合・Reshapeの方法は後段の「アーキテクチャの構成要素の差異::Reshape / 結合」参考。
アーキテクチャの構成要素の差異
変換
シグナルを画像に変換する場合、変換方法が色々とある。
シグナルの統合
電極のシグナルを特定の位置の組合せ・計算方法を用いて統合する場合があり、これには様々なパターンが存在する。詳細はmontages & technicalitiesなどを参考。
変換処理
- bandpass filter
- STFT
- CWT
- メルスペクトログラム
- その他
- superlets
- MFCC、LFCC、RMS
Reshape / 結合
1次元のシグナルや特徴量をReshapeして結合する場合、主に2通りある。
- Reshapeしない + 縦積み
- Reshapeして画像とする + タイリング(縦と横に並べる)
また、シグナルを結合させる順番、つまりどのシグナルとどのシグナルが隣り合うかが性能に影響した。
3位解法では基本的に各ノードの脳の左側と右側を一緒に見るような順番にしたとのこと。
学習
多段階の学習とデータの選択
-
初回は全てのデータで、2回目にラベル付けを行った回数(以下、Vote数)が一定以上のデータで学習を行う
- 論文においてテストデータがVote数が10個以上のものでフィルタリングされていた
- 全体的なアノテーターが119人、エキスパートが20人おり、2群の間でラベルの分布が大きく異なる。投票数が10個以上のサンプルを用いることで後者を見つけることができる。
- 論文通りの10個以上が多く、それ以外のパターンもあった
- 論文においてテストデータがVote数が10個以上のものでフィルタリングされていた
-
初回はVote数が10個未満のデータ、2回目に投票数が10個以上のデータで学習を行う
-
Vote数に応じて重みづけ(Vote数が少ないほど小さく、多いほど大きく)を行い学習する
-
Vote数に応じてPseudo labelを用いる。場合によって重みづけして元のラベルと混合する。
-
Vote数に応じてHeadを分けて学習する。
Validation
- 患者ごとのGroupKFoldが殆どか
Loss
- 投票数を投票割合に変換する前に、各票に固定値を加える。これにより、投票数が少なく信頼度が低い場合により強い正規化が適用される
- 投票数に応じてlossに重みづけを加える
予測
アンサンブル・スタキング
アンサンブルにより訓練データにオーバーフィットさせた場合、CVとpublic LBの相関は維持される傾向があった。そのため、FC層によるStackingが多かった印象。
Discussion