Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2024 眼科AIコンテスト手法解説スライド 第5回日本眼科AI学会総会
Search
Makoto Koyama
December 03, 2024
Technology
0
120
2024 眼科AIコンテスト手法解説スライド 第5回日本眼科AI学会総会
少しでも皆様のお役に立てる部分がありましたら幸いです。
Makoto Koyama
December 03, 2024
Tweet
Share
Other Decks in Technology
See All in Technology
職能を超えたモブプログラミングが品質に与えた良い影響
tonionagauzzi
1
190
Oracle Base Database Service:サービス概要のご紹介
oracle4engineer
PRO
0
15k
総会員数1,500万人のレストランWeb予約サービスにおけるRustの活用
kymmt90
3
2.9k
12/3(火)のBedrockアプデ速報(re:Invent 2024 Daily re:Cap #2 with AWS Heroes)
minorun365
PRO
4
140
突き破って学ぶコンテナセキュリティ/container-breakout-cncj-lt
mochizuki875
6
1.1k
12/4(水)のBedrockアプデ速報(re:Invent 2024 Daily re:Cap #3 with AWS Heroes)
minorun365
PRO
2
420
Explain EXPLAIN
keiko713
10
2.8k
論理レプリケーションを使ったDB統合
kkato1
0
310
ファインディの4年にわたる技術的負債の返済 / Repaying 4 Years of Technical Debt at Findy
ma3tk
7
3.8k
つくってあそぼ! ユビキタス言語作文の紹介
ndadayo
1
150
深層学習のリペア技術の最新動向と実際 / DNN Repair Techniques for AI Performance Alignment for Safety Requirements
ishikawafyu
0
500
属人化したE2E自動テストを ひも解く
honamin09
1
110
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
Making the Leap to Tech Lead
cromwellryan
133
9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.8k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
4 Signs Your Business is Dying
shpigford
181
21k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
How to Ace a Technical Interview
jacobian
276
23k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
890
Transcript
古山誠(南子安眼科) E-mail:
[email protected]
眼科AIコンテスト 手法解説 Makoto Koyama (Minamikoyasu Eye Clinic) 第5回
日本眼科AI学会 (2024.12) 本資料には学会発表時の内容に加え、時間の関係で発表できなかった補足事項も含まれています
前処理 眼底写真の周辺の黒: モデルから見ると外れ値で 望ましくない 周辺の黒を中間色で 埋めて学習 • 写真を正方形に切り抜き • 画像もラベル側も全てz-score
normalization
分割手法 • Train : Testを均一に分割することは大切 • METSだけでなく、他の要素も均等に分割したい
分割手法 AGE AC SBP DBP HDCL TG BS 主成分分析による次元削減 要素1
要素2 METS METS Clusterに分類 Cluster1 Cluster2 Cluster3 Cluster4 20分割交差検証 →METSの標準偏差が最小となる Random stateをチェックして採用 最初からいきなりClusterに分けようとしても うまく行かないため、まずは次元削減 次元削減すればClusterに分けやすい Clusterごとに20分割 Random stateを0から100,000までずらして最良の値を調べた
20分割交差検証(分割しすぎです。おすすめしません。) 同様に20回繰り返し 20分割し、ずらして学習 それぞれLossが最小のmodelをload 皆さん真似しないように
注意点 • 本来はTest結果による介入行為はご法度 (Test結果による早期終了や加重平均はダメです) • 実際の精度よりも見かけ上良くなってしまう • Validationを別に作成すればOK • でも今回はコンテストのため、Validation・Testを兼用
損失関数はMSEを選択 Binary Cross Entropy (BCE) vs. Mean Squared Error (MSE)
• 一般的には二値分類はBCEと言われているが • 今回、単体で試したところ推測性能はほぼ同等 • BCEは自信がなくても0か1に近づくことが多い • MSEは自信がない場合には0.5に近づく BCE MSE 0~~1 0~~1 アンサンブル学習の場合、自信があるモデルに判断を任せるために、 自信がないモデルは0.5として出力したほう良いためMSEを採用 今回は50%の確率のMETSの推測であったためにこの手法が可能
水増し •回転 •縮小拡大 •ランダムクロップ •上下反転 (学習時だけでなくTest時にも上下反転して平均値を算出)
アンサンブル学習 ブースティング(直列)+ バギング(並列)を複数採用
バギングのmix手法 • 推測性能の高いデータの比率を上げたい → 指数による加重平均を採用 NumPyを使用すれば少ない計算コスト&簡単 • 指数はMSE, MAE, Accuracy,
AUC score, Kappaをtry → Kappaにて最も良い値が得られた AUC scoreではなかったのは意外 • Kappaが最良となるn乗をn=1から100までtestし採用 バギング毎にn=1から100までずらして計算しmix
ハイパーパラメータの探索 • ハイパーパラメータの探索は自作プログラムを使用 • 自分の好きなように自由にいじくり回せるのが良い • 自分でいじっていると、このパラメータがどのような感じ なのかという感覚が徐々に養われていく • 全て自動で探索してしまうと、なかなか理解が深まらない
• でもRay Tuneなどのツールを使うのが普通かも これぞ機械学習の醍醐味 ツールを何度か使用してみましたが、面白くないので結局使わなくなってしまいました
Optimizer • Adabelief • LION • Adam • AdamW •
AdaDerivative* • SGD モデルごとに網羅的に全ての ハイパーパラメータをチェッ クし、結局全てのモデルで Adabeliefを採用 無難です *https://github.com/ImpactCrater/OptimizerVisualizer 今回は残念な結果でした 良い手法ですが、Adabeliefにわずかに及ばず Adamとほぼ同様でした 早いけど・・・ ハイパーパラメータが多くて大変だが良い
Learning rate (LR) • 最初から大きな学習率だと、局所的な最適解に陥るriskあり • 最初は小さな学習率から開始し、徐々に学習率を上げる(up) • その後さらに学習率を下げて仕上げ(down) •
まずはLRを固定して最小値と最大値の適切な値を探索 • 次にupとdownのepoch数の最適な値を探索 • LRのcontrolはCyclicLRが便利
Early stopping • モデルごとに、最適なepoch数を検索 • Testの性能による早期終了(early stopping)を使用 • Epochごとにモデルを保存 •
Testで最良のKappaが得られたモデルを読み込み使用 注意:本来はvalidationとtestに分ける必要があります
モデル選択 PyTorchのtimmを使用し、SOTAの上位モデルを一通りチェック • eva02_base_patch14_448.mim_in22k_ft_in22k_in1k ( ) • swinv2_large_window12to16_192to256.ms_in22k_ft_in1k ( )
• tf_efficientnet_b5.ns_jft_in1k ( ) の3つを主モデルとして採用 eva swin eff RETFoundやRET-CLIPも採用すべきでした サンプル数の関係か、さらに大きいモデルでも同様の結果
ブースティング + バギング1 (モデルの肝) • PCA + • Nested k-fold
+ AGE AC SBP DBP HDCL TG BS METS METS Kappaのn乗で加重平均 swin eva eff Ridge XGBoost 眼底写真 多重共線性の問題を回避するために、 主成分分析で次元削減してからRidge XGBoostは過学習しやすいため、入れ子にした10-fold cross validationをさらに作成して学習 1/20の値からでは過学習してしまうため、Non-METSは19/20の値を使用して再度学習 METSの診断基準項目が複数入っているため、 non-METSのデータも使用したほうが良さそう DirectにMETSを推測した場合と比べて、 Ridge, XGBoostは遜色ない推測性能
バギング2 Kappaのn乗で加重平均 ・・・・・・ eva Ridge XGBoost 20-fold cross validation ✕
n METS eva Ridge XGBoost 20-fold cross validation eva Ridge XGBoost 20-fold cross validation 20分割交差検証を ひたすら繰り返し
バギング3 METS 上位x%のみ採用し、 Kappaのn乗で加重平均 eva Ridge XGBoost 20-fold cross validation
✕ n Ridge XGBoost 20-fold cross validation ✕ n swin Ridge XGBoost 20-fold cross validation ✕ n eff と同様に も処理 eva swin eff X%は1%から100%までチェックし、最良の値が 得られた%を採用。
バギング4 Final METS Random state = s1 Kappaのn乗で加重平均 swin eva
eff Ridge XGBoost 20-fold cross validation ✕ n Random state = s2 Ridge XGBoost 20-fold cross validation ✕ n swin eva eff Random stateを変えて学習
反省点 • 手元の試算では正答率80% → 実際は67% (驚きでした) • 20分割交差検証で、分割に偏りが生じた可能性が高い • 分割しすぎて自滅した感じ
• ValidationとTestに分けていれば気付いたはず • まだまだ未熟であることを痛感 → この経験を次に活かしていきます
最後に • 私にAIの世界へ入るきっかけを与えて頂いたのは、前回の眼科AIコンテストでした。 • 単なるコンピュータ大好き開業医から、コンピュータとAIいじりが大好きな開業医へと 変化しました。 • AIを利用したシステムを開発し、より良い緑内障診療ができるように試行錯誤中です。 • 共同研究を行って頂いておられる先生や関係者の方々にはいつも感謝しております。
• また、このような大変貴重な学習の機会を与えて頂きました、眼科AI学会の関係者の皆 様方には深く感謝をいたします。