LoginSignup
7
10

More than 3 years have passed since last update.

PSPNetで脳腫瘍を検出してみた(colab環境)

Last updated at Posted at 2020-08-16

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

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

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

PSPNet(Pyramid Scene Parsing Network)とは

PSPNetはセマンティックセグメンテーションのモデルの一つです。
簡単にモデルの概要を説明すると

  • Feature Map (今回Resnet50を使用)で3×475×475にリサイズした画像の特徴量を抽出。
  • 抽出された2048×60×60の特徴マップを5つに分岐させ1つはそのまま残りは4つは 以下の処理を行う。
    • 1.異なるサイズのカーネルでプーリング
    • 2.畳み込みでチャンネル数を2048から512に削減
    • 3.アップサンプリングを行い4つの特徴マップを512×60×60にする
  • 一つとっておいた2048×60×60の特徴マップと4つの512×60×60のマップを結合させ4096×60×60の特徴マップにする。
  • Decoderモジュールで特徴マップから推論結果(クラス数+1, 475, 475)を出す

    これらの処理が推論処理で行われます。

    pspnet_model_image.png

今回の概要説明では不十分だと感じる方も多いと思います。
詳しいモデルの内容はこちら(https://arxiv.org/pdf/1612.01105v2.pdf) と「つくりながら学ぶ!PyTorchによる発展ディープラーニング」 (https://www.amazon.co.jp/%E3%81%A4%E3%81%8F%E3%82%8A%E3%81%AA%E3%81%8C%E3%82%89%E5%AD%A6%E3%81%B6%EF%BC%81PyTorch%E3%81%AB%E3%82%88%E3%82%8B%E7%99%BA%E5%B1%95%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-%E5%B0%8F%E5%B7%9D-%E9%9B%84%E5%A4%AA%E9%83%8E-ebook/dp/B07VPDVNKW) が大変参考になりました。

実装について

実装も「つくりながら学ぶ!PyTorchによる発展ディープラーニング」を参考にしました。
自分が実装したコードのgithubリンクがこちらです。
(https://github.com/Akito-Fujihara/MRI-Brain-PSPNet475-model)
jupyter notebookとpyファイルを載せています。
データセット、weightファイルなどはダウンロードして以下の構成にしてください。

MRI-Brain-PSPNet475-model/
┣ kaggle_3m(kaggleからダウンロードしたデータセット※https://www.kaggle.com/mateuszbuda/lgg-mri-segmentation)
┣ log_output.csv(学習のlossを記録)
┣ PSPNet_test.ipynb(推論・可視化)
┣ PSPNet_train.ipynb(学習)
┣ result_image(推論結果を可視化した画像を保存するファイル)
┣ utils
┃ ┣ init.py(このファイルが存在するディレクトリをパッケージとなる。)
┃ ┣ data_augumentation.py(前処理)
┃ ┣ dataloader.py(pytorchのdataloaderを作成)
┃ ┣ pspnet.py(モデル)
┃ ┗pspnet475_show.py(可視化)
┗weights(weightファイルを保存)
   ┗pspnet50_ADE20K.pth(https://drive.google.com/file/d/12eN6SpnawYuQmD1k9VgVW3QSgPR6hICc/view からダウンロード)

学習・推論結果と考察

可視化した画像のは水色が教師データ、黄色が推論結果です。

上手く推論できている例
TCGA_HT_8563_19981209_10_result.png  TCGA_HT_8106_19970727_14_result.png
上手く推論できなかった例
TCGA_HT_8105_19980826_20_result.png  TCGA_HT_A61B_19991127_42_result.png

結果から画像の濃淡が少ないものの結果が特に悪いことがわかりました。(当たり前ですが、、、)
(https://paperswithcode.com/paper/torchio-a-python-library-for-efficient など)前処理についてもいろいろ調べてみたいと思います。
また、(https://www.slideshare.net/mitmul/unofficial-pyramid-scene-parsing-network-cvpr-2017) にも書かれていますがcrop size, batch size(colabだと変えられないかも、、), などパラメータが重要らしいので変えてみるのも面白いのではないかと思います。(https://www.st-hakky-blog.com/entry/2017/11/16/161805 参考までに)

7
10
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
7
10