$30 off During Our Annual Pro Sale. View Details »

全国医療AIコンテスト 2021 1st place solution

3.8k

全国医療AIコンテスト 2021 1st place solution

修正、加筆しました

Yuma Ochi (chizuchizu)

March 27, 2021
Tweet

Transcript

  1. 全国医療AIコンテスト
    1st place solution
    2021/03/27   チズチズ  abap34
    team:
    🦾😢

    View Slide

  2. 自己紹介
    越智優真(チズチズ)
    ● 千葉大学教育学部附属中学校 3年
    ● Kaggle Expert
    ● 医学素人、機械学習素人
    ● 最近は量子コンピュータとギターにお熱
    ● 専攻分野 なんでも

    View Slide

  3. 自己紹介
    abap34
    - 東海高校二年生(春から受験生)
    - 機械学習に興味, 色々開発(コンペ少し)
    - 医学素人機械学習素人

    View Slide

  4. モデリングのTips、全体的なアプローチ
    ● Global Average Pooling
    ○ 時間軸でたたむ
    ● Multiple Input
    ○ 年齢、性別
    ○ concat→Dense
    ● SWA
    ○ 重みを平均化(≠局所最適)
    ● SAM
    ○ ロバスト性が高まる(≠局所最適)
    ● 多様性を意識
    ○ アンサンブルを想定
    ○ 色々なアーキテクチャ 最終層でage, sexを入力

    View Slide

  5. 最終的なアンサンブルに使ったモデル
    - ResNet的機構を導入したConv1Dモデル(https://arxiv.org/abs/1805.00794v1)
    - それのoptimizerにSWAを適用したバージョン
    - それのPseudoLabelingなどを適用したバージョンのモデル
    - LSTM
    - よりResNet的なConv1dモデル
    - WaveNet

    View Slide

  6. A Deep Transferable Representation Model(?)
    ● ECG分類用に作られたアーキテクチャ
    ● Kaggle Notebookにて発見
    ● ResNet的なブロックがある
    ● 深さ Is All You Need
    (Baselineがマッチョになったイメージ)
    https://arxiv.org/abs/1805.00794v1
    + Pseudo Labeling, Label Smoothing(後述)でPrivate 4位相当のスコア

    View Slide

  7. LSTM
    ● 終盤、アンサンブルのため急遽作成
    (多様性のあるモデル作りの一貫
    )
    ● あまり詰め切れていない
    (が、それなりのスコアが出たのでアンサンブルに採用
    )

    View Slide

  8. ECG分類のためのコード(ResBlock)
    ● 今回と同じ12誘導心電図を使ったモデル
    ● とてもResNetっぽい
    ● Paper with codeで漁ってたら発見
    kernel size:12 → 5
    層の数を数百まで減らしたらよく適合した
    https://www.nature.com/articles/s41467-020-15432-4

    View Slide

  9. work approach
    - Cross Validation
    - Label Smoothing
    - WaveNet
    - Pseudo Labeling

    View Slide

  10. label-type
    train test

    View Slide

  11. CV構築 ~label typeと年齢の関係
    label typeによる分布の変化

    View Slide

  12. label typeと性別
    train-auto
    test
    train-human
    vs

    View Slide

  13. CrossValidation
    - testデータは全てlabel_type==”human”(手動ラベリング)
    => これにvalidationを近づけたい
    - trainをauto/humanで分離
    - validationはhumanのみから取り出す
    human auto
    train
    ここをStratifiedKFold
    常にtrain

    View Slide

  14. label smoothing
    - autoでつけられたラベルは多少Noisyであると予想
    => label smoothingでロバストなモデルに(↑0.002, 0.005)

    View Slide

  15. 結果
    shake up!

    View Slide

  16. WaveNet
    - 層が深くなるにつれて、「とびとびで」畳み込みを行うネットワーク
    https://qiita.com/MasaEguchi/items/cd5f7e9735a120f27e2a

    View Slide

  17. WaveNet
    モデル全体
    入力付近 出力付近(age, sex入力部)

    View Slide

  18. WaveNet
    - 単モデルでPublic5位/Private3位相当のスコア
    - 学習の安定性、速度、精度どれも良く、非常に強力

    View Slide

  19. Pseudo Labeling
    ● 0.05を閾値に
    ○ 約6000データ を追加
    ● 0.003程改善
    0.05 0.95
    Pseudo あり
    Pseudo なし
    private public

    View Slide

  20. Not worked
    ● NN以外のアプローチ
    ○ tsfresh
    ○ その他特徴抽出
    ● フィルタ
    ○ 平滑化
    ○ 微分
    ○ 画像アプローチ
    (12方向からのデータを扱うのが難しい
    + 事前学習済みモデル使用不可)
    => NN以外は難しかった
    :ランダムフォレスト

    View Slide

  21. 役割分担など コンペの進め方
    - 寝たら、多分負ける
    => 常に通話を繋ぎっぱなしにして作業
    連続的に相互に役割を割り振る
    - お互い機械学習・医学系の専門的な教育を受けているわけではない
    => とにかく実験(理由づけは後からでも良い
    )
    反省点
    - 最終盤の流れだけは「きっちりと」決めておくべきだった
    (最終的にアンサンブルが雑になってしまった )
    - コードを共有する仕組みは短期間コンペでも整えておいた方が良い
    (バグを解決する一番の方法は、チームメイトに見せることかも )

    View Slide

  22. まとめ - NNが強かった
    - 信頼できるCVで高速な実験
    - ロバストモデル +
    pseudo labeling +
    多様性のあるモデリング +
    でshake up!

    View Slide