1. HOME
  2. ブログ
  3. IT技術
  4. 【実装編】肺のCT画像からCOVID19かどうかの判断は可能か?【機械学習】
【実装編】肺のCT画像からCOVID19かどうかの判断は可能か?

【実装編】肺のCT画像からCOVID19かどうかの判断は可能か?【機械学習】

実装編~肺のCT画像からCOVID19か予想できるのか?

肺のCT画像

今回は、前回に引き続き、肺の CT 画像から、COVID 19か否かを予測する深層学習モデルを、「PyTorch」で実装してみたいと思います。

PyTorch を採用した理由は、「Kaggle」での実装例も多く、公式ドキュメントも充実しているためです。

ちなみに、こちらの記事は「プログラミングで分類に挑戦する」ということが目的で、COVID 19を確実に分類できるわけではありませんので、予めご了承をお願い致します。

【前処理編】をお読みでない方は、まずはこちらからお読みください。

モデルの訓練

モデルの訓練部分は、PyTorch の公式チュートリアルを参考にしています。

【 PyTorch公式:チュートリアル】
https://pytorch.org/tutorials/

二値分類では、出力を2次元にして、「CrossEntropyloss」を用いる人もいるかと思います。

ですが、今回は1次元なので、「BinaryCrossEntropyloss」を用いています。

純正の PyTorch では、人によって書き方にバリエーションがあるため、「各種ラッパーを使った方がいい」という意見もあります。

ですが、一度純正で書いてみることで、「どこで何をやっているか」が理解しやすくなるのです。

たとえば、ラッパーのひとつである「fastai」は、理解がしにくい代表的な例ですね。

データ型とsizeに注意!

データ型や size が異なると、損失関数やモデルにテンソルを通すとき、エラーが出ることがあります。

もし、以下のようなエラーが出たら、デバックして「dtype」や「size」を確認してみましょう。

検証データに対するAUCを確認

モデルの訓練の関数を実行して、「out-of-fold の予測値」と「正解ラベル」を考慮することで、AUC が計算できます。

AUC では、高いスコアが出ていることがわかりますね。

test データに対しても、高いスコアが出れば、「今回学習したモデルには汎化性能がある」と言えます。

テストデータに対する予測をみる

先ほど学習させた、各 fold の重みを用いて、推論を実行します。

モデルの部分が少し違うことに注意!

先ほどのモデルのコードと、比較をしてみてください。

ImageNet で学習させた重みは、出力が1000次元です。

ですが、自分で学習させたモデルは、出力が1次元であることを考慮せねばなりません。

推論を実際に行う部分

各 fold ごとのモデル出力の平均を、最終的な出力とする、単縦なアンサンブルを用いています。

推論結果のAUCをみてみる

上の関数を実行すれば、AUC が確認できます。

これによる結果は、以下のようになりました。

さいごに

今回は、Kaggle の環境を用いて画像分類を試してみました。

ただ、CV のスコアより大幅に低下しており、「今回モデルは訓練データに過学習してしまった」ということになります。

パラメーターが多いほど、表現できることは増えますが、少ないデータに対しては、過学習をしてしまうのです。

今回用いた「EfficientNet」は、VGG16 などに比べれば、パラメーターの数は多いです。

ただ、test データは少なく、画像の撮影にばらつきがあるなど、理想的なデータセットだったとは言えません。

また、実は、今回用いたものよりも、大規模なデータセットが既に公開されています。

70 GB ほどで、セグメンテーションマスク付きなので、勉強にはちょうど良いかもしれません。

【コーネル大学:BIMCV COVID-19+ 】
https://arxiv.org/abs/2006.01174

Kaggle公開中

なお、今回のコードは、Kaggleで公開しています。

リンク:肺のCT画像からCOVID19かどうか判断してみた!

実行環境も整っているので、ぜひ試してみてくださいね!

こちらの記事もオススメ!



書いた人はこんな人

広告メディア事業部
広告メディア事業部
「好きを仕事にするエンジニア集団」の(株)ライトコードです!

ライトコードは、福岡、東京、大阪の3拠点で事業展開するIT企業です。
現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。
いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。

システム開発依頼・お見積もり大歓迎!

また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」「WEBディレクター」を積極採用中です!
インターンや新卒採用も行っております。

以下よりご応募をお待ちしております!
https://rightcode.co.jp/recruit

関連記事

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界を変える…! /

Androidエンジニア

\ みんなが使うアプリを創る /

iOSエンジニア