質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2148閲覧

SegNet において、任意の画像(CamVidに格納された画像以外)に対して予測を行う方法

Teagle333

総合スコア15

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/12/27 10:01

編集2019/02/20 00:32

前提・実現したいこと

こちらの画像領域分割プログラムにおいて、
予測画像を入力する際に自分で用意した画像を使いたいのですが、このプログラムでは入力画像をどのように読み込んでいるのでしょうか?

このソースコードをそのまま実行すると、CamVid内のvalフォルダに格納されているサンプル画像に対してセグメント処理を行うようですが、プログラムの各行の意味がいまいち理解しきれず、これを自分で指定した画像に対して行うにはどうすればよいのかがわかりません。

大まかな処理の意味としては「予測画像のファイルパスとして、val.txtというtextファイル上の文字列を読み込んでいる」という認識でよろしいのでしょうか?もしその場合は、ファイルパスを直接参照して予測処理するように変更したいです。

該当のソースコード

predict

1import numpy as np 2import keras 3from PIL import Image 4 5from model import SegNet 6 7import dataset 8 9height = 176 10width = 240 11classes = 12 12epochs = 10 13batch_size = 1 14log_filepath='./logs_10/' 15 16data_shape = 176*240 17 18def writeImage(image, filename): 19 """ label data to colored image """ 20 Sky = [128,128,128] 21 Building = [128,0,0] 22 Pole = [192,192,128] 23 Road_marking = [255,69,0] 24 Road = [128,64,128] 25 Pavement = [60,40,222] 26 Tree = [128,128,0] 27 SignSymbol = [192,128,128] 28 Fence = [64,64,128] 29 Car = [64,0,128] 30 Pedestrian = [64,64,0] 31 Bicyclist = [0,128,192] 32 Unlabelled = [0,0,0] 33 r = image.copy() 34 g = image.copy() 35 b = image.copy() 36 label_colours = np.array([Sky, Building, Pole, Road_marking, Road, Pavement, Tree, SignSymbol, Fence, Car, Pedestrian, Bicyclist, Unlabelled]) 37 for l in range(0,12): 38 r[image==l] = label_colours[l,0] 39 g[image==l] = label_colours[l,1] 40 b[image==l] = label_colours[l,2] 41 rgb = np.zeros((image.shape[0], image.shape[1], 3)) 42 rgb[:,:,0] = r/1.0 43 rgb[:,:,1] = g/1.0 44 rgb[:,:,2] = b/1.0 45 im = Image.fromarray(np.uint8(rgb)) 46 im.save(filename) 47 48def predict(test): 49 model = keras.models.load_model('seg.h5') 50 probs = model.predict(test, batch_size=1) 51 52 prob = probs[0].reshape((height, width, classes)).argmax(axis=2) 53 return prob 54 55def main(): 56 print("loading data...") 57 ds = dataset.Dataset(test_file='val.txt', classes=classes) 58 test_X, test_y = ds.load_data('test') # need to implement, y shape is (None, 360, 480, classes) 59 test_X = ds.preprocess_inputs(test_X) 60 test_Y = ds.reshape_labels(test_y) 61 62 prob = predict(test_X) 63 writeImage(prob, 'val.png') 64 65 img = Image.open('val.png') 66 img.show() 67 68 69if __name__ == '__main__': 70 main()

エラーの出る画像

イメージ説明

補足情報(FW/ツールのバージョンなど)

開発環境

  • Windows7 (64bit)
  • Spyder (Python 3.6)
  • Keras 2.2.4
  • Tensorflow 1.12.0

CPU : Intel(R) Core(TM) i7 970 @ 3.20GHz
メモリ(RAM) : 16.0 GB
GPU : NVIDIA GeForce GTX 570

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

横から失礼いたします。私もHiroki013様のコードを参照させていただきCamVid以外の
画像で実行することができました。差し支えなければエラーのでる画像をアップいただけ
ませんでしょうか。一度こちらでも試してみたいと思います。
(問題があるようでしたら拡大、トリミング等で加工いただいた画像でも同じエラーが
でるものであれば確認できると思います)。

投稿2019/02/14 08:02

hss_

総合スコア39

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Teagle333

2019/02/20 00:34

返信が遅れてすみません。 エラーが出る画像をアップしましたので、確認いただけると幸いです。
hss_

2019/02/27 07:07

こちらも回答が遅くなり申し訳ありません。 画像確認させていただきましたがやはり同じエラーがでました。 画像のプロパティを確認するとビット深さが8となっており画像が RGBになっていないのが原因と思われます。 「FastStone Photo Resizer」のAdvanced OptionsでColor Depth 24bitの指定で 画像に変換して実行するとセグメンテーションできました。 一度、お試しいただきたく、お願い申し上げます。
hss_

2019/02/27 07:18

補足ですがPNGで「ビット深さ8(8bit:256色)」は「Gray Scale」に分類され、 「ビット深さ24(24 bit:16,777,216色)」が「RGB」に分類されるようです。 今回のコードはRGBが前提のようですので、やはりこれが原因かと思います。
Teagle333

2019/03/04 10:22

ご指摘の通り試してみたところ、実行できました。 大変遅れての報告になりましたが、この度はありがとうございました。
guest

0

ぱっとコードを読んだところ、以下のようにコードを変更してみてはいかがでしょうか。

def main(): print("loading data...") # ds = dataset.Dataset(test_file='val.txt', classes=classes) # test_X, test_y = ds.load_data('test') # need to implement, y shape is (None, 360, 480, classes) # test_X = ds.preprocess_inputs(test_X) # test_Y = ds.reshape_labels(test_y) img_path = "画像ファイルパス" img = np.array(Image.open(img_path)) # ds.preprocess_inputsと同様の処理を行う。 img = preprocess_inputs(img) prob = predict(img) writeImage(prob, 'val.png') img = Image.open('val.png') img.show()

img_pathをargparseで記述すればコマンドライン上の引数からパスを指定することができると思います。また、コメントで記述されているように入力画像のshapeが決まっているので、違う場合はresize処理をさらにかける必要があると思います。
以上です。

投稿2019/01/13 01:15

Hiroki013

総合スコア99

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Teagle333

2019/01/15 05:59

ご回答ありがとうございます。 predict.pyのmain部分を上のプログラムを上のコードに変更してみたのですが、エラーが出てしまいます。上記の内容だと、'preprocess_inputs' が定義されていないために実行できないようです。 試しに 'img = ds.preprocess_inputs(img)' に書き換え、'ds = dataset.Dataset(test_file='val.txt', classes=classes)' のコメントアウトをはずして実行してみたのですが、以下のようなエラーが出てきてしまいます。(img_pathの画像サイズは事前にresize済みです) ValueError: Error when checking input: expected input_1 to have 4 dimensions, but got array with shape (176, 240, 3)
Hiroki013

2019/01/15 12:27

このエラーは、4次元入力のところ3次元入力だったためだと思います。そのため、prob=predict(np.expand_dims(img, axis=0))で動作すると思います。 以上です。
Teagle333

2019/01/16 03:52

ある画像では実行できました。 しかし、別の画像でおこなうとエラーが出てしまいます。両方とも画像サイズは同じなのですが何が原因なのでしょうか?もしわかれば、教えていただきたいです。 エラー内容: ValueError: Error when checking input: expected input_1 to have 4 dimensions, but got array with shape (1, 176, 240)
Hiroki013

2019/01/16 11:19

エラー内容をみると、チャネルのshapeが無いのでGrayScaleの画像ではないでしょうか?もし、RGBの画像であるならば読み込みや途中処理でGrayScaleになってしまっているのではないかと考えられます。 以上です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問