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かどうか判断してみた!

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

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



ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

関連記事

採用情報

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

バックエンドエンジニア

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

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

\ 世界はお前の手の中に・・・ /

モバイルエンジニア

\ サービスの守り神! /

インフラエンジニア