AI_ML_DL’s diary

人工知能、機械学習、ディープラーニングの日記

ZeroCostDL4Micを使ってみよう!

ZeroCostDL4Micを使ってみよう!

2022.11.5:MASK R-CNNでナノ粒子のTEM像のセグメンテーションをしようとしていたことの続き。

 

Democratising deep learning for microscopy with ZeroCostDL4Mic

Lucas von Chamier et al.,

NATURE COMMUNICATIONS | (2021) 12:2276 | https://doi.org/10.1038/s41467-021-22518-0 |

Fig. 1の右側に並んでいる顕微鏡像をみればわかるように、ZeroCostDL4Micは、バイオ分野の顕微鏡像の解析のために用いられるディープラーニングソフトの集合体である。

ZeroCostDL4Micは、無料、DL(Deep Learnibg)、Mic(Microscopy)を組み合わせた名前であり、うたい文句は、DLもPythonも知らなくても、DLによる物体検出、セグメンテーション、ノイズ除去、高解像度化などができることを目指したものである。

無料の意味は、フリーソフトであるということと、無料のColabを使うということからきているのであろう。DLの学習にはGPUが必要だが、ColabはGPUを無料で使える。さらに、Python/DLは、計算環境を整えるという厄介な作業がついてまわるが、Colabは、計算環境が整っている(含まれている)ので入りやすい。

 

このZeroCostDL4Micを使ってみようと思ったのは、計算環境を自分で設定しなくてもいいので、それだけ手間が省けそう、というのが最大の理由である。まずは、その中のStarDictというセグメンテーションソフトを使えるようにしたい。

これを11月中に終え、正月の休み明けまでには、次の論文にある触媒粒子の粒径分布計測の自動化をやりたいと考えている。

 

Deep Learning for the Automation of Particle Analysis in Catalyst Layers for
Polymer Electrolyte Fuel Cells

André Colliard-Granero et al., Nanoscale, 2022, 14, 10–18

2011.11.5:ZeroCostDL4Micを使う。

1.https://github.com/HenriquesLab/ZeroCostDL4Mic/wikiに移動する。

2.StarDict(2D)の表の右端にあるOpen In Colabをクリックすると、StarDict(2D)のノートブック(Jupyter Notebook)が、Colab上で立ち上がる。

3.Link to example training and test datasetのhereをクリックし、リンク先でデータセット(画像とマスク)をダウンロードする。

4.ノートブックのコピーをとる、ダウンロードしたデータをグーグルドライブにアップロードする、という作業がうまくできれば、あとは、ノートブック内の説明に従って,

5.Colabのセッションの初期化、Train dataの格納場所のアドレスの入力、訓練後のモデルを格納するフォルダの作成とそのアドレスの入力、などがうまくできれば、StarDistの訓練(学習)、Evaluation、Predictionなどができる。

これらを正確に行うには、Colabとドライブの扱いに慣れておくことが重要だと思う。

 

Colab上で作業するには、説明文を読まないといけないのだが、Colabもドライブも慣れていないので、作業に時間がかかる。そうしている間に、セッションが終了する。

セッションが終了すると、Colab proやColab pro+の宣伝が入る。セッションが終了しにくくなるとか、より高速でメモリー容量の大きなGPUが使えるとかの宣伝文句にのせられてColab proを契約した。しかし、Colab proに変えても、作業中にセッションは切れた。しかも、GPUを立ち上げたままにしていると、計算しなくても持ち時間は減るのだ。してやられた、というところか。

 

trainingのプロセスがうまくいかなかったので、evaluationとpredictionだけをやろうとしたが、「model_nameが定義されていない」というエラーメッセージが現れた。

このエラーが生じたのは、モデルのトレーニングを省略して、evaluationやpredictionを実行するためには、(当然)トレーニング済みモデルが必要で、それはtrainingセッションで作成してGoogleドライブに保存しておくか、自分で用意してGoogleドライブに保存しておかなければならない、ということを知らなかったためである。

 

途中のプロセスを省くことなく、全体の流れを最初から順番に実行することで、ようやくtrainingまでは動くようになった。しかし、節約のためにGPUを止めていて、CPUだけで動かしていたが、当然のことながら一向に計算が進まないのでGPUモードに切り替えた。ようやく、順調にtrainingが進んだ。

 

ごちゃごちゃ書いてきたが、ノートブックに適切に情報(データやモデルの格納場所のアドレスの設定/入力)を追加することができれば、ノートブック内の説明に従って前から順に(ノートブックの基本的な使い方)実行していけば、計算は順調に進む。

ようやく、モデルの訓練までできた。しかし、結果は惨憺たるものであった。

次の図に示すように、training lossは下がっているが、validation lossが下がらず、いわゆる過学習、overfittingになっている。こうなった理由は明らかで、その下に示す教師データを見ればわかるが、これだけの内容の作業をわずか50組の教師データで訓練するのだから、うまくいくはずがない。ただし、training lossが下がっているので計算は正しく行われていると推定される。

30 epochsで止めるとこんな感じになる。


これが教師データの例である。こういうのを数百枚以上、自分で準備するのは難しい。バイオの分野の人たちが協力して教師データを作成して公開しておられ、良く訓練されたモデルも公開されているので、それらを使わせていただくのが、正確であり、早道でもある。

 

まずは、evaluationとpredictionまでやってみよう。

その次に、augmentationとハイパーパラメータのチューニングをやってみる。

それから、学習済みモデルを導入し、ファインチューニングをやってみよう。

 

2022.11.6:

昨日は、4.Train the networkまで進んだので、

今日は、5.Evaluation Your modelと6.Predictionをやってみる。

train lossとvalidation lossの曲線を見るとoverfittingのように見えるが、100エポックも必要ではなく、25エポックくらいで十分だったのかもしれない。

predictionの結果(次の図)を見ると、非常に良い結果だと思う。これなら粒径計測に使えそうだ。

 

しかし、45対(trainingに41対、validationに4対)の教師データで、ここまでの性能が出るだろうか。良い結果が得られるのはよいが、腑に落ちないというか、ありえない。

そう思って説明文を見直していたら、"Loading weights from a pre-trained network"の項目にチェックが入っていることがわかった。すなわち、学習済みモデルのweightsをモデルのweightsの初期値として使ったということである。

 

ということで、学習済みモデルを用いてファインチューニングする環境が目の前にある、ということになる。しかも学習させている細胞の画像は、ナノ粒子のTEM画像とよく似ているので、TEM画像の教師データを適宜追加すれば、実案件に使えそうである。

 

次のステップ:

・細胞の画像の代わりに、電子顕微鏡の画像を使って、予測してみよう。

・TEM画像の準備:今のプログラムに合わせた画像を準備する:

 画素数:1024 x 1024、画像の書式:tif

 

20221112(土)

6.1 Generate prediction(s) from unseen dataset

ここに、用意したTEM画像を入力すれば、粒子をインスタンスセグメンテーション画像(マスク)を得ることができる。

 

ようやく、ナノ粒子のTEM画像のセグメンテーションができるようになった!と思ってプログラムの6.1で、TEM画像のフォルダーのパスを入力し、わくわくしながら実行ボタンを押した。残念!エラーとなった。

エラーの理由は、半日以上かけて調べた結果、テスト画像のフォルダーにはテスト画像を2枚入れることを前提にしていた1枚の画像を入れたためであった。

こんな些細なことでも、プログラムを理解し、説明文を正しく理解していないと、対応に時間がかかる。最悪の場合、途中で投げ出す。

プログラムコード(Python)を読めばわかるのだが、そうすると、Pythonの入門編くらいは理解していないと使えない、ということになる。

ともあれ、ようやく、触媒粒子が検出されたカラー画像が出力された。久しぶりに嬉しかった。誰でも使えるように設計されたソフトだし、学習済みモデルが用意されているし、できて当たり前なのだろうが、なかなかどうして、小さなつまずきがたくさんあった。

さて、ここで、初めて検出できた触媒粒子のカラー画像を張り付けたいところだが、元画像に対する守秘義務、及び、知的所有権等の問題があるので、次の機会にしよう。

 

ここからが重要。出力された粒子の形状が正しいかどうか検証する必要がある。

 

今日は、ここまで。

 

2022.11.19:この週末は、予測画像から粒径を計測し、粒径分布を出力するところまでやる予定だったが、別の仕事が入ったので、それが終わるまではとりかかれない。

ImageJを使えば簡単にできそうだが、Pythonでコードを書いて、出力画像をプログラム上で処理してMatplotlibでグラフ出力する予定で、そこは、まとまった時間がとれないとできない。

 

次の週末には、ヒストグラムを出力したいと思う。

 

style=192 iteration=200