Slide 1

Slide 1 text

HMSコンペ 11th Solution Team: kansai-kaggler

Slide 2

Slide 2 text

チームメンバー P-SHA TR

Slide 3

Slide 3 text

コ ン ペ 概 要 コ ン ペ 概 要 概要とポイント Team merge するまで 01 01

Slide 4

Slide 4 text

チームマージの経緯 かなり前から意識 そこから TRを抜き浮上

Slide 5

Slide 5 text

LB追いついたら チームマージしてあげる チームマージの経緯 P-SHA(T88) TR(Ryushi)

Slide 6

Slide 6 text

チームマージの経緯 1週間後

Slide 7

Slide 7 text

チームマージの経緯 Kansai-Kagglerチーム結成

Slide 8

Slide 8 text

HMSコンペ概要 脳波から専門家の6種類の診断確率を予測するコンペ データとしては以下が与えられた EEG スペクトログラム メタ/ラベルデータ 目的変数は専門家のvote率 https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/468010

Slide 9

Slide 9 text

S o l u t i o n S o l u t i o n 11th pl ace sol uti on 02 02

Slide 10

Slide 10 text

TRチーム 【波形⇒画像変換】 LL,LP,RP,RLそれぞれの隣り合う波形の差分をとる⇒CWT変換 通常のスペクトログラム変換より低い周波数をきれいにとってくれるはず。。。 eegs["Fp1"] - eegs["F7"] mean([ spec(fp1-f7), spec(f7-t3), spec(t3-t5), spec(t5-o1) ])

Slide 11

Slide 11 text

LL LP RP RL TRチーム 【基本モデル】 波形から変換した画像をtimmモデルに通す timm backbone ⇒ 各ラベルの確立(sigmoid)

Slide 12

Slide 12 text

TRチーム 【序盤】 データによってアノテーター(vote)の数が違う。明らかに2つの山がある。 ⇒votesが少ないデータはラベル付けが荒い?  例えばvotes=3なら、各ラベル0.33333の表現になる(学習が偏りそう) こっちいらんやろ。。。

Slide 13

Slide 13 text

TRチーム 【序盤】 votes>= 8だけで学習させてみるか。。。 これだけで当時の4位(0.32)

Slide 14

Slide 14 text

全データで学習(10epochs) 引き続き、votes>=8のみで学習(10epochs) ⇒LB0.26くらい(金圏復帰) 単純なpretraining⇒finetuningではなく、 途中でデータセットを切り替える方法の方が 精度がよかった なんで?⇒LRのチューニングが難しかったぽい TRチーム 【中盤】 とは言え、各チームラベルの偏りに気づき、それぞれLBを上げていく。 ⇒モデルの変更、votesが少ないラベルでのpretrainingを実装。 https://www.kaggle.com/competitions/ hms-harmful-brain-activity- classification/discussion/488083

Slide 15

Slide 15 text

TRチーム 【終盤】 チームマージを経てアンサンブル用モデル作成と同時にシングルモデルを改善 結果として微妙な改善。。。終盤はT88さんのスタッキングの恩恵が大きかった。 _x = x.clone() # LL <=> RL x[:, 0:4, :, :] = _x[:, 4:8, :, :] x[:, 4:8, :, :] = _x[:, 0:4, :, :] # LP <=> RP x[:, 8:12, :, :] = _x[:, 12:16, :, :] x[:, 12:16, :, :] = _x[:, 8:12, :, :] FLIP 50sec ラベル:10sec ⇒01のattention_channel追加 【他】 specの平均を横にとる 平均ではなくmax-minをとる GeM, multisample-dropout, etc...

Slide 16

Slide 16 text

P-SHAチーム ・生波形の特性を生かす試み(①、⑤)と、スペクトル変換したもの(②、③、④、⑥)を連結して学習。 ・バックボーンはCNN系を活用。(tf_efficientnetv2_s.in21kとtf_efficientnet_b3.in1k) ・多様な変換方法により、EEGの細かな特性を捉えることができ、精度向上に繋がった。

Slide 17

Slide 17 text

P-SHAチーム ・様々な変換方法による個別の損失結果を、train lossの計算時に考慮させると、精度向上に寄与。

Slide 18

Slide 18 text

Stacking シングルモデルを伸ばす方向がネタ切れだったので 単純平均のblendingでスコアの向上が見られたので、アンサンブルを深堀 参考 conv2d stacking model class seizure lpd gpd lrda grda other 1✕3 kernel class HMSStacking2DCNN(nn.Module): def __init__(self, 6): super().__init__() self.conv2d1 = nn.Conv2d(1, 8, kernel_size=(1,3), padding=0, stride=1) self.conv2d2 = nn.Conv2d(8, 16, kernel_size=(1,3), padding=0, stride=1) self.fc1 = nn.Linear(480, 480) self.dropout1 = nn.Dropout(p=cfg.dropout) self.fc2 = nn.Linear(480, 6) def forward(self, x): x = F.relu(self.conv2d1(x)) x = F.relu(self.conv2d2(x)) x = torch.flatten(x, start_dim=1) x = F.relu(self.fc1(x)) x = self.dropout1(x) x = self.fc2(x) return x ・各モデル✕各クラスの予測値を1channelの画像として入力 ・1✕3 kernelでモデル方向に畳み込み ・単純平均(public:0.24 / private:0.29)に対して  stacking(public:0.23 / private:0.28)とスコア向上に寄与

Slide 19

Slide 19 text

exp LB cv (10seed mean) T88 129 T88 130 T88 131 T88 132 iida 62 iida 78 iida 139 iida 157 iida 160 iida 164 iida 169 eikichi 038 tomo 053 tomo 086 tomo 089 tomo 092 tomo 093 tomo 094 tomo 095 ryushi 002 013 0.23 0.22486 ○ ○ ○ ○ ○ ○ ○ ○ ○ 012 0.23 0.22498 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ 010 0.24 0.22613 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ 009 0.23 0.22710 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ 007 0.24 0.22828 ○ ○ ○ ○ ○ ○ ○ ○ ○ 008 0.23 0.22879 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ 006 0.23 0.22923 ○ ○ ○ ○ ○ ○ ○ ○ Stacking スタッキングに組み込むモデルとハイパラをoptunaでチューニング

Slide 20

Slide 20 text

exp LB cv (10seed mean) T88 129 T88 130 T88 131 T88 132 iida 62 iida 78 iida 139 iida 157 iida 160 iida 164 iida 169 eikichi 038 tomo 053 tomo 086 tomo 089 tomo 092 tomo 093 tomo 094 tomo 095 ryushi 002 013 0.23 0.22486 ○ ○ ○ ○ ○ ○ ○ ○ ○ 012 0.23 0.22498 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ 010 0.24 0.22613 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ 009 0.23 0.22710 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ 007 0.24 0.22828 ○ ○ ○ ○ ○ ○ ○ ○ ○ 008 0.23 0.22879 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ 006 0.23 0.22923 ○ ○ ○ ○ ○ ○ ○ ○ Stacking スタッキングに組み込むモデルとハイパラをoptunaでチューニング 山田鐘人・アベツカサ/小学館 「葬送のフリーレン」より