5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MaskRCNNで脳腫瘍を検出・評価検証(colab)

Last updated at Posted at 2020-09-10

広島大学で社会基盤(土木)を専攻している3年生です。
現在は1年間休学して建設系のIT企業でインターンをしています。
今回はInstance segmentationのMaskRCNNを脳のMRI画像のデータセットを学習させ可視化まで行いました。

今回学習に使ったデータセットについて

kaggeで公開されている脳のMRIデータセット(https://www.kaggle.com/mateuszbuda/lgg-mri-segmentation )を使用しました。
MaskRCNNで脳の腫瘍を検出します。

MaskRCNN とは

2017年に発表されたインスタンスセグメンテーションのモデルの一つです。
以前実装したSemantic Segmentation(UnetPSPNet)との違いなどはDeNAの記事に分かりやすく書いています!

モデルの概要を簡単に説明すると
・convolutional backboneでVGG, ResNetなどのCNNで特徴抽出する
・feature mapに対してアンカーを定義する
・RPNでアンカーの中身が
 1.class数(物体or背景)
 2.オフセット(x,y軸の1ズレ and 縦,横のアンカーのズレ)
を求めバックプロパゲーションを行う
・RoL PooLing layerをプーリングすることで固定サイズのfeature mapにする
・feature mapを全結合し
 1.class数(物体or背景)
 2.オフセット(x,y軸の1ズレ and 縦,横のアンカーのズレ)
の出力にする。
・mask branchではアップサンプリングし元の画像サイズに戻してmaskを出力する。
・上記の順番でRPN・backboneを学習→head部分の学習を繰り返す

image.png

以下参考資料です。
https://qiita.com/shtmr/items/4283c851bc3d9721ed96
https://arxiv.org/pdf/1703.06870v3.pdf

実装について

https://pytorch.org/tutorials/intermediate/torchvision_tutorial.html のtorchvisionのチュートリアルを参考にしました。
githubのリンクです(https://github.com/Akito-Fujihara/MRI-Brain-MaskRCNN-model
ディレクトリの構造は以下の通りにしてください。
MRI-Brain-MaskRCNN-model/
┣ kaggle_3m(kaggleからダウンロードしたデータセット※https://www.kaggle.com/mateuszbuda/lgg-mri-segmentation)
┣ MaskRCNN_Eval.ipynb(評価検証のjupyter)
┣ MaskRCNN_test.ipynb(推論・可視化)
┣ MaskRCNN_train.ipynb(学習)
┣ result_image(推論結果を可視化した画像を保存するファイル)
┣ make_trainval_csv.ipynb(trainとvalの脳腫瘍がある画像のみのデータセットパスを作成しcsvファイルにするjupyter)
┣ maskrcnn_result.csv(全体の評価検証結果)
┣ maskrcnn_result_per_image.csv(画像ごとの評価検証結果)
┣ vision.zipは解凍
┣ weights(weightファイルを保存する)
┗ その他必要なpython file

学習・推論結果と考察

評価方法

・推論の脳腫瘍部分と教師データの脳腫瘍部分が一致している画像の平均IoU
・未検出数(教師データの腫瘍部分が全く検出されていない画像の枚数)
・誤検出数(推論の脳腫瘍部分が教師データと全くかぶっていない画像の枚数)
・Recall (上記の未検出数 / 脳腫瘍がある画像)
・Precision (上記の誤検出数 / 脳腫瘍がある画像)

を求めました。

この評価検証方法にした理由は脳腫瘍がある人を特定することを最優先したからです。

なので評価で欲しい数値の優先順位が上位から
・未検出数
・誤検出数
・IoU
となりました。
脳腫瘍部分を検出できたかどうか、どれくらい間違えて検出してしまったかを優先し、どれくらい領域が正確に検出できたかどうかは評価としてはあったほうがいいので脳腫瘍が検出できた画像のみで評価しました。

IoU, Recall, Precisionなどの言葉を初めて知った人はこちらの記事を参考にしてください。
(https://qiita.com/K5K/items/5da52e99861483cae876)
例としてあげられている内容が医療について上記の内容についても分かりやすいと思います。

検証結果

550枚の脳腫瘍の評価検証結果
testデータ全体の検証結果です。
image.png

学習の特徴

写真の緑部分が正しく検出できた領域(TP), 黄色部分が誤検出領域(FP), 水色が未検出領域(FN)です。

正しく検出できている例
TCGA_HT_8106_19970727_17.png  TCGA_HT_8105_19980826_24.png

正しく検出できていない例
TCGA_HT_7882_19970125_32.png  TCGA_HT_A61A_20000127_49.png

今回の評価の結果から以前試したモデル(UnetPSPNet)とは違い色の濃淡が薄い画像もしっかり認識することができていました。(UNetとPSPNetで試した条件は違うため単純にモデルの優劣をつけることはできない、、、)
全体の数値も比較的良く、一人のMRI画像が連続している中で必ず数枚は検出できていました。
ただ、上の図にもあるように小さい脳のMRI画像の脳全体を腫瘍と認識したり、前後のほぼ見た目が同じ画像が認識できていない場合がありました。

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?