X線画像から肺炎を検出するためのディープラーニング

ペイウォールの後ろに立ち往生? 私の友人のリンクで完全な物語を読むにはここをクリック!

肺炎のリスクは、特に何十億ものエネルギー貧困に直面し、汚染された形のエネルギーに依存している発展途上国では、多くの人にとって計り知れ WHOは、肺炎を含む家庭の大気汚染関連疾患から毎年400万人以上の早期死亡が発生すると推定しています。 150万人以上の人々は、特に5歳未満の子供たちに毎年肺炎に感染します。 このような地域では、医療資源や人員の不足のために問題がさらに悪化する可能性があります。 例えば、アフリカの57カ国では、2.3万人の医師と看護師のギャップが存在します。 これらの集団にとって、正確で迅速な診断はすべてを意味します。 それは処置への時機を得たアクセスを保証し、既に貧困を経験しているそれらのための大いに必要な時間そしてお金を救うことができます。このプロジェクトは、Kaggleで開催された胸部X線画像(肺炎)の一部です。

胸部X線画像を見ることによって、患者が肺炎に苦しんでいるかどうかを自動的に識別するアルゴリズムを構築します。 人々の生活が危機に瀕しているので、アルゴリズムは非常に正確でなければなりませんでした。

  1. scikit-learn
  2. keras
  3. numpy
  4. pandas
  5. matplotlib

data

データセットはkaggleのウェブサイトからダウンロードできます。

コードはどこにありますか?

あまり騒ぎがなければ、コードを始めましょう。 Github上の完全なプロジェクトはここにあります。

すべてのライブラリと依存関係をロードすることから始めましょう。

次に、私はいくつかの正常な肺炎の画像を表示して、肉眼とどのくらい違うかを見てみました。 まああまりない!div>

div>
サンプル画像

次に、データセットを3つのセットに分割しました-train、validation、およびtestセット。

次に、データの増強を行い、トレーニングとテストセットの画像をネットワークに供給する関数を書 また、私は画像のラベルを作成しました。

データ増強の練習は、トレーニングセットのサイズを増やす効果的な方法です。 トレーニング例を強化することで、ネットワークはトレーニング中に、より多様ではあるが代表的なデータポイントを”見る”ことができます。

その後、私はいくつかのデータジェネレータを定義しました:1つはトレーニングデータ用で、もう1つは検証データ用です。 データジェネレータは、ソースフォルダから必要な量のデータ(画像のミニバッチ)を直接ロードし、それらをトレーニングデータ(モデルに供給される)およびトレーニン私の実験では、通常、batch_size = 64を設定します。 一般に、32と128の間の値はうまくいくはずです。 通常、計算リソースとモデルの性能に応じてバッチサイズを増減する必要があります。その後、後で使用するためにいくつかの定数を定義しました。

その後、私は

次のステップは、モデルを構築することでした。 これは、以下の5つのステップで説明できます。

  1. 畳み込み層、最大プーリング、バッチ正規化で構成される5つの畳み込みブロックを使用しました。その上に私はフラット層を使用し、4つの完全に接続された層によってそれに続いた。また、私はオーバーフィッティングを減らすためにドロップアウトを使用しています。
  2. 活性化関数は、これがバイナリ分類問題であるため、シグモイドであった最後の層を除いて、全体にわたってReluでした。私はadamをオプティマイザとして使用し、クロスエントロピーを損失として使用しました。

モデルを訓練する前に、一つ以上のコールバックを定義するのに便利です。 かなり便利なものは、ModelCheckpointEarlyStoppingです。

  • ModelCheckpoint:トレーニングが良い結果を達成するために多くの時間を必要とする場合、多くの反復が必要です。 この場合、指標を改善するエポックが終了した場合にのみ、最もパフォーマンスの高いモデルのコピーを保存することをお勧めします。
  • EarlyStopping:トレーニング中に、一般化ギャップ(つまり、トレーニングと検証エラーの差)が減少するのではなく増加し始めることがあります。 これは、多くの方法(モデル容量の削減、トレーニングデータの増加、データの増加、正則化、ドロップアウトなど)で解決できるオーバーフィットの症状です。 多くの場合、実用的で効率的な解決策は、一般化のギャップが悪化しているときに訓練を停止することです。

早期停止

次に、バッチサイズが32の10エポックのモデルを訓練しました。 通常、より高いバッチサイズはより良い結果を与えるが、より高い計算負荷を犠牲にすることに注意してください。 いくつかの研究はまた、ハイパーパラメータチューニングにいくつかの時間を投資することによって見つけることができる最良の結果のための最適なバッp>

損失と精度のプロットを視覚化しましょう。div>

精度対エポック/損失対エポック

これまでのところとても良いです。 このモデルは収束しており、エポックによる損失と検証損失の減少から観察することができます。 また、わずか10のエポックで90%の検証精度に達することができます。混乱行列をプロットし、精度、リコール、F1スコア、精度などの他の結果もいくつか得てみましょう。

混乱行列をプロットして、精度、リコール、F1スコア、確p>

CONFUSION MATRIX ------------------

]
TEST METRICS ----------------------
Accuracy: 91.02564102564102%
Precision: 89.76190476190476%
Recall: 96.66666666666667%
F1-score: 93.08641975308642
TRAIN METRIC ----------------------
Train acc: 94.23

モデルは、使用されるデータのサイズを考慮するとかなり良い91.02%の精度を達成することができます。

結論

このプロジェクトは完全ではありませんが、このような様々な現実世界の問題における深い学習の成功を見ることは注目に値します。 私は、x線画像のコレクションから正と負の肺炎データを分類する方法を実証しました。 このモデルはゼロから作られたもので、転送学習アプローチに大きく依存する他の方法から分離されています。 将来的には、この研究は、肺癌と肺炎からなるX線画像を検出し、分類するために拡張することができます。 肺がんや肺炎を含むX線画像を区別することは、最近の大きな問題であり、私たちの次のアプローチは、この問題に取り組むべきである。



コメントを残す

メールアドレスが公開されることはありません。