semantic segmentationのpython APIでの使用に関して

316 views
Skip to first unread message

marr

unread,
Nov 26, 2021, 7:54:23 PM11/26/21
to Neural Network Console Users (JP)
頭蓋骨のCT画像を用いて、Semantic segmentationを試みております。

125×125のRGB画像に対して、Labelmeを用いて4種類の構造に対してアノテーションを行い、グレースケールのpngファイルへ変換したものを学習用画像としています。
プロジェクトはtutorial.semantic_segmentation.unetlike_125pxをそのまま使用しています。20クラスのうち16クラスには数値を割り振らずそのままにしています。

学習結果として、下記のような画像を得ています。
1.png
2.png

3.png

4.png

5.png


続いて、resultに表示されている色分けされた画像を保存できるようなプログラムをpythonで作成したいと考えています。
チュートリアルを参考にしつつ下記のようなコードを作成しました。
6.png

実行すると、下記のようなエラーが出てしまいます。

cv2.error: OpenCV(4.5.4) /Users/runner/work/opencv-python/opencv-python/opencv/modules/imgcodecs/src/loadsave.cpp:735: error: (-215:Assertion failed) image.channels() == 1 || image.channels() == 3 || image.channels() == 4 in function 'imwrite_'

推論結果が画像として認識されていないのではないかと考えているのですが、読み込むべき推論結果はy.d[0]ではないのでしょうか。または入力画像と同様にテンソルの次元の順序の入れ替えが必要なのでしょうか。


ご教授いただければ幸甚です。

何卒よろしくお願い申し上げます。

細見保史

unread,
Nov 27, 2021, 8:30:38 AM11/27/21
to marr, Neural Network Console Users (JP)
チュートリアルの通りにコーディングしてもうまくいかなかったので、画像をnumpyの配列に変換してから推論させてます。
ですのでたぶん出力結果はnumpy配列なので画像に変換してから保存する必要があるのではないでしょうか。

2021年11月27日(土) 9:54 marr <yosmiz...@gmail.com>:
--
このメールは Google グループのグループ「Neural Network Console Users (JP)」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには neural_network_consol...@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/neural_network_console_users_jp/437e1a72-2a2a-4c7e-8b6d-d2537182bb25n%40googlegroups.com にアクセスしてください。

marr

unread,
Nov 28, 2021, 3:44:45 AM11/28/21
to Neural Network Console Users (JP)
ご返信ありがとうございます。
確認したところ、ご指摘の通り(21,125,125)の形状のnumpy配列が出力されていたようです。


各クラスごとにグレースケールの画像が生成されているものと考えて下記のように書き換えたところ、画像が出力されるようになりました。
7.png
ただし白い画像1枚と真っ黒な画像20枚で、Neural Network Console内で表示されているような結果の画像は得られていないので何らかの処理がまだ必要と
思われますが、進展が得られました。
ありがとうございます。

2021年11月27日土曜日 22:30:38 UTC+9 yh3241ffi:

marr

unread,
Nov 28, 2021, 8:49:47 AM11/28/21
to Neural Network Console Users (JP)
画像が正しく出力されないのは、DATASETタブのImage Normalization (1.0/255.0)にチェックを入れてないのにx.dを255で割っていたせいでした。
無事解決しました。感謝いたします。

2021年11月28日日曜日 17:44:45 UTC+9 marr:

小林由幸

unread,
Jan 13, 2022, 11:52:33 PM1/13/22
to Neural Network Console Users (JP)
セマンティックセグメンテーションのサンプルプロジェクトunetlike_125pxでは、推論結果としてy'、overlap、union、resultの4つを出力する構成になっています。

最初に添付していただいたPythonのコードではこのうちy=list(graph.outputs.values())[0](y')を計算しており、これは画像ファイルとして書き出すことができない複数のカラーチャンネル(添付していただいた画像を見ると20枚)を含んでいるため画像出力に失敗しているというのは既に書かれている通りですが、ここで
y=list(graph.outputs.values())[0]
とする代わりに明示的に名前を指定し
y=graph.outputs["result"]
とすることで、resultのRGB画像のみを推論させ画像出力できるかと思います。

ちなみに
result=graph.outputs["result"]
y=graph.outputs["y'"]
overlap=graph.outputs["overlap"]
union=graph.outputs["union"]

nn.forward_all([result, y, overlap, union])


とすることで4つの出力をまとめて一度に計算させることもできます。
計算結果はそれぞれy.d[0],result.d[0]などとして取り出すことができます。

2021年11月28日日曜日 22:49:47 UTC+9 marr:

marr

unread,
Jan 14, 2022, 8:20:52 AM1/14/22
to Neural Network Console Users (JP)
小林様
いつも動画拝見しております。
ご教授いただきありがとうございます。大変参考になります。


2022年1月14日金曜日 13:52:33 UTC+9 小林由幸:
Reply all
Reply to author
Forward
0 new messages