2019年のPNASに新しいカルシウムイメージングの解析ソフトが論文発表されていました。
Deep Learningを手法として用いており、STNeuroNetと名付けられてます。
ベースのプラットフォームとしては、niftynetが用いられているようです。
GitHubページ:https://github.com/soltanianzadeh/STNeuroNet
論文:https://www.pnas.org/content/116/17/8554
今の標準ツールとしては、CaImAn(Calcium Imaging Analysis)がありますが、これはCNMF(条件付きの非負値行列因子分解)を手法として用いています。
それに対して、STNeuroNetはDeep Learningを用いて細胞の場所を割り出します、
概要としては、
まず前処理で動画から背景を取り出し標準化した3次元データを作ります。
次にそのデータにDeep Learningの入力にし、ネットワークの出力として、細胞の確率マップが画像として出力されます。
そして、後処理として確率マップに閾値処理をすることで細胞の場所を求めているようです。
またネットワークの構造としては、DenseVNetをベースにしているようです。
インストール
インストール方法はwikiでいくつか紹介されていますが、MATLABとPythonの両方を使う方法を用いました。
環境:OSはUbuntu16.04 GPUはRTX2080、MATLAB2017b、Anacondaです。
CUDAは8.0、cuDNNは6(マニュアルに書いてる7ではエラーになった)をインストールしました。
まずGitHubページからコードをダウンロードします。
次にそのフォルダに移動してenvironment.ymlを用いて仮想環境を構築し、必要なパッケージをインストールします。
git clone https://github.com/soltanianzadeh/STNeuroNet.git
cd STNeuroNet
conda env create -f environment.yml -n stneuronet
source activate stneuronet
pip install matlab
pip install tensorflow-gpu==1.4 --ignore-installed
pip install niftynet==0.2.0.post1
これでAnacondaの環境設定はできました。
MATLABを使用する場合は、MATLAB本体の他に
1.Deep Learning Toolbox
2.Image Processing Toolbox
3.GUI Layout Toolbox (これは外部のツールボックスで、https://jp.mathworks.com/matlabcentral/fileexchange/47982-gui-layout-toolbox からダウンロードできる。)
この3つがツールボックスとして必要です。
MATLABの本体があれば、MATLAB Runtimeは必要ありません。
デモを動かす
使用方法としては、MATLABで前処理と後処理を行い、その間のDeep Learningの部分だけはPythonを用いるということになります。
デモの画像としては、Allen Brain ObservatoryのデータセットとNeurofinderのデータセットを用いることができます。
Allen Brain ObservatoryのデータセットはAWSのS3インスタンスに存在し、使用するにはAWSのアカウントが必要です。
そのため、自由にダウンロードできるNeurofinderの方のデータセットを使用しましょう。(ホームページはhttp://neurofinder.codeneuro.org/)
Neurofinderデータセットの中でも、'100','101', '200', '201', '400','401'の画像が使用できます。
画像確認
view_marking.mで、画像とROIの位置を確認するGUIが起動します。
パラメータがAllen Brain Observatoryのデータ用になっているのでNeuroFinder用に変更します。
またこのコード実行することで、前処理するために必要な形式(_processed.nii.gz)に画像が変換されました。
そのためデモをするためにはこの処理が必要になります。
前処理
demo_preprocess.mを用いて行うことができます。
パラメータがAllen Brain Observatoryのデータ用になっているのでNeuroFinder用に変更します。
Deep Learning
Deep LearningはAnacondaでniftynetを使用することで行われます。
まずconfigファイルを作成し、それをAnacondaでrunします。
configファイルはdemo_config_empty_neuro.iniに画像の場所などを加えることで作成できます。
フォルダ内にはトレーニングによって生成されたモデルが既に存在するのでそれを使用します。以下のコマンドでセグメンテーションが実行されます。
net_segment inference –c <configのパス>
これで、確率マップ(probability map)が生成されました。
後処理
demo_postprocess.mを用いて行うことができます。
パラメータがAllen Brain Observatoryのデータ用になっているのでNeuroFinder用に変更します。
これによって、セグメンテーション画像が生成されます。画像は細胞1つ1つの領域が1スライスに表された2値のスタック画像になっていました。
この他に、新しい画像からROI取りを行うにはdemo_ManualLabeling.m、後処理の閾値で最適なものを設定する場合はdemo_optThresh.mが使用できるようです。これらはトレーニングを行う際に使用します。
感想
Deep Learningを用いているため、GPU付きのPCが必要です。
また前処理や後処理も必要で、その際にはパラメータ調整をしなければなりません。
その点ではCaImAnの方が使い勝手は良さそうですが、Deep Learningを用いたセグメンテーションをする点では非常に興味深いソフトだと感じました。
今度はAllen Brain Observatoryのデータセットやトレーニングも試してみたいです。