AI_ML_DL’s diary

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

Mask R-CNNを使ってみよう!2022.1.21-2

Mask R-CNNを使ってみよう!2022.1.21-2

ちょっとハードルを下げてみよう。

この2日間で、どんなかたちであれ、Mask R-CNNを使う!

 

1月22日12時すぎ:

気合十分で始めたのだが、なかなか進まぬ!

参考にしている(動かそうとしている)コードは、トレーニング無しのコード、すなわち、cocoで学習したモデルtorchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=True, progress=True, num_classes=91)

を使って、用意した画像を、その学習済みモデルに入力して、どのような結果が得られるかを見るだけのものである。

参考にさせていただいているのは、Sovit Ranjan Rath氏の「Instance Segmentation with PyTorch and Mask R-CNN」というタイトルの記事とコードである。

学習することによって性能を上げるのが常であるが、今回は、学習済みモデルが学習したドメインと、インスタンスセグメンテーションに用いる画像はドメインが同じなので、学習する必要がない、というのが前提となっている。

 

つい最近終了したKaggleのコンペで、細胞のセグメンテーションの課題があった。そこでも学習済みのMask R-CNNを使っているチームがいたが、みんな、学習用のデータを使って学習させてから予測する。何が違うのか。そう、ドメインが違う。セグメンテーションモデルの学習済みモデルは、cocoで学習させていて、cocoには細胞の画像が含まれていないので、そのまま使っても正しく予測できるはずがない。細胞の教師データを使って追加で学習させる必要がある。つまり、学習済みモデルのドメインと、そのモデルを適用するドメインが同じであればそのまま使えるが、ドメインが異なれば、新たなドメインのデータセットで追加学習あるいは再学習させる必要がある。

 

1月22日22時すぎ:

Anacondaプロンプトで、次のコマンドを入力することによって、image1.jpgに対して、インスタンスセグメンテーションの結果が表示された。

python mask_rcnn_images.py --input ../input/image2.jpg”

f:id:AI_ML_DL:20220122202938p:plain

f:id:AI_ML_DL:20220122220041p:plain

手元にあるいろいろな画像で試してみてわかったことは、91種類の物体に対しては、かなり正確に判別するようだが、91種類以外の物体は検知されない。当然のことだが、次のチューリップは検知されなかった。

f:id:AI_ML_DL:20220122220308j:plain

閾値を0.4まで下げると全体がバウンディングボックスで囲まれた。ラベルは見えないのでわからない。"potted plant"と判定したのだろうと思う。

f:id:AI_ML_DL:20220122222907p:plain

目的物に対して学習させないと使えないことを、改めて感じさせられた。
個々の物質に対する識別能力が高ければ高いほど、少しでも違っていると検知しないということになる。もちろん確率の問題なので、確からしさを下げれば検知される。

上に示した絵画で、0.965のしきい値では、子どもは検知され、母親は検知されていない。しきい値を0.7まで下げれば、次のように、母親も検知された。

f:id:AI_ML_DL:20220122221752p:plain

ラベルと、バウンディングボックスと、スコアと、マスクの4つのデータが出力されること、および、それらのデータ構造の概要がわかった。

cocoで学習させたMask R-CNNが簡単に使えることがわかったとともに、目的物ごとに、データセットを用意して、追加学習させないことには、どうにもならないことも、身に染みて、わかった。

 

プログラミング技術の向上を急ごう!

 

f:id:AI_ML_DL:20220121113852p:plain

style=182 iteration=500