FijiのU-Netで3次元のセグメンテーションをする方法


前回記事ではFijiのプラグインからU-Netで細胞認識するソフトを紹介しました。
(https://qiita.com/takeajioka/items/0d0873af09245bffc793)
この記事では、ソフトの発展機能である、3D U-Netによる三次元データのセグメンテーション方法を紹介します。
この3D U-Netを使う方法は、開発者のホームページやビデオチュートリアルにも解説がされていませんでした。

必要な設備

3D U-Netは大規模な処理をするため、バックエンドPCには、GPUが必須になります。
特にfine-tuningをするには7GB以上のGPUが必要になります。(6266MB以上無いと動かせないようになっています。)
また、RTX2080、2070のGPUではfine-tuningをするときになぜかCUDAエラーになったので書いておきます。
自前PCの場合はGPUはGTX1070が8GBあるのでお勧めです。

方法

ホームページで公開されているcaffeモデルには光学顕微鏡用(bright field)と、蛍光顕微鏡用(fluorescence)の2つのモデルがあります。(別フォルダには電子顕微鏡用のモデルもあるようです。)
これらのモデルを使って、segmentation・detectionを行うこともできますが、精度をよくするならfine-tuningで自分の画像専用のモデルを作成しそれを使う方がよいです。

fine-tuning

自分の画像がどういう条件で撮ったものか(光学顕微鏡か蛍光顕微鏡か、または電子顕微鏡か)を確認して、それに合わせたモデルを選択します。
また、ROI取りをした教師データを作成しなければなりません。
3次元データは一気にROIを作成することができません。教師データの作成方法は、ImageJのROI取りツールでzスライス一枚一枚にROIをとっていくことになります。
ROIには「<クラスの名前>#<個体の番号>」のように番号を付けます。クラスは細胞の種類、個体はzでつながった同じ細胞の領域ということになると思います。正しくROIの名前を付けないと以下のようなエラーが出ます。

後は学習をかけるだけです。
自前のPCでは、エポックを多くすると途中でImageJが落ちることがありました。
この場合はエポックは20くらいにして繰り返し行うことで、解決することができました。

segmentaionまたはdetection

2次元画像の場合と変わりません。GPUも7GB以下でも問題なく動きます。ただし、タイル幅が小さくなるとそれだけ時間がかかります。