Detecting Covid19 in X-ray images.


このアプリケーションは、X-ray画像から新型コロナウィルスに感染しているかどうかを判定するものです。 ただし、プログラミング学習目的のアプリケーションであり、正確に新型コロナウィルスに感染しているかを判定するためのツールではありません。


このアプリケーションについて

  • COVID DETECTION:
  • 実際にX-ray画像をアップロードすると、Positive(陽性)またはNegative(陰性)のいずれかの判定結果が出力されます。
  • TRAINING PHASE:
  • ここでは、データやモデルの構造をはじめ、学習過程について述べています。


COVID DETECTION

使用方法

  1. X-ray画像(胸)をお手元に用意してください。
    • "x ray images of covid 19 patients"などと検索すると陽性患者のX-ray画像が取得できます。
    • "x ray images of helthy patients"などと検索すると健康な人のX-ray画像が取得できます。
    • TRAINING PHASE(このアプリケーションのメニューバーより)では、トレーニングに使用した画像のサンプルを表示しております。どのようなX-ray画像を取得するのか参考にしてください。

    私が使用したテストデータをまとめたものでも構わない場合はこちらからzipファイルをダウンロードしてください。

  2. X-ray画像のアップロード
    • 以下のアップロードボタンをクリックしたのち、用意したX-ray画像を選択してください。
    • 今回は簡易的なアプリケーションなので、ファイル形式やファイルのサイズに制限を設けておりません。画像ファイルではないものや、サイズが極端に大きいものはこのアプリケーションがクラッシュする恐れがあります。
一度予測されると画像がキャッシュに残ります。繰り返し予測を行う場合はキャッシュをクリアしてください。
画像のアップロードはこちらから

用意した画像を選択し、以下のUploadをクリックしてください。


判定結果

予測が終わったらこちらに結果が表示されます。


TRAINING PHASE

内容

  • DATA:
    • Datasetについて
    • Dataのサンプル
    • Data Preprocessing
  • モデル:
  • ここでは、モデルの構造とハイパーパラメーターについて記載します。
  • 評価:
  • 学習の結果、正解率、ロス、F1スコアを用いて学習の評価を行っております。

Data

Datasetについて

新型コロナウィルスの陽性患者のサンプルはこちらから。
健康体のX-ray画像はこちらから。
それぞれのデータセットから、ノイズがのってしまっている画像を取り除きました。
それぞれから、67枚の画像を選びそのうちPositiveとNegativeそれぞれから6枚ずつ計12枚をTest setとし、残りのデータを混ぜ合わせた中からランダムに選択された20%をValidation setとしました。

Dataのサンプル
Positive samples: 新型コロナウィルス陽線患者の胸部X-ray画像のサンプルです。
Responsive image
Negative samples: 健康体患者の胸部X-ray画像のサンプルです。
Responsive image
Data Preprocessing
以下の事前処理を行いました。
  • 224 by 224にリサイズ
  • 10度以内(両方向)のランダム回転
  • 0-1範囲にリスケール



モデル


構造
学習済のVGG16の最終層を取り除き、複数の層を追加しました。詳しくわ以下の画像をご覧ください。
Responsive image

ハイパーパラメータ含む設定
  • Batch size:
  • 1
  • Epochs:
  • 20
  • Optimizer:
  • Learning Rate 0.01でLR decayはLR / Epochsに設定しました。
  • Loss:
  • Binary crossentropy

評価

正解率とLossカーブ

バッチサイズを1に設定ためどちらの値も小刻みに変化していますが、極端なオーバーフィッティングやアンダーフィッティングはみられませんでした。

Responsive image

Recall, Precision, and F1
前述しましたとおり、テストデータは陽性と陰性それぞれから6枚ずつと少ない枚数なので正確な値を図るならば、全体的にデータ量を増やす必要がありますが今回のテストデータは全て正しく予測でき、Recall, Precision, F1スコアは全て1でした。