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

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

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

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

解決済

kerasでSegNetで画像サイズの変更、画像読み込みについて

hss_
hss_

総合スコア0

Keras

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

1回答

0評価

0クリップ

6閲覧

投稿2018/12/14 03:35

編集2022/01/12 10:58

「keras(tensorflow)でSegNet」
(https://qiita.com/uni-3/items/a62daa5a03a02f5fa46d)
を参考に記載されているコードをそのまま自分でも動かしてみようと
試みておりますが、実行するとメモリーのエラーがでてしまうため
下記を試みました。

試したこと:読み込み画像サイスを(360×480)から(176×240)に変更し
コード中の対応する数値を変更しました(フォルダ内の全ての画像サイズを変更)。

Python

## dataset.py import cv2 import numpy as np from keras.applications import imagenet_utils import os DataPath = './CamVid/' data_shape = 176*240 class Dataset: def __init__(self, classes=12, train_file='train.txt', test_file='test.txt'): self.train_file = train_file self.test_file = test_file self.data_shape = 176*240 self.classes = classes def normalized(self, rgb): #return rgb/255.0 norm=np.zeros((rgb.shape[0], rgb.shape[1], 3),np.float32) b=rgb[:,:,0] g=rgb[:,:,1] r=rgb[:,:,2] norm[:,:,0]=cv2.equalizeHist(b) norm[:,:,1]=cv2.equalizeHist(g) norm[:,:,2]=cv2.equalizeHist(r) return norm def one_hot_it(self, labels): x = np.zeros([176,240,12]) for i in range(176): for j in range(240): x[i,j,labels[i][j]] = 1 return x def load_data(self, mode='train'): data = [] label = [] if (mode == 'train'): filename = self.train_file else: filename = self.test_file with open(DataPath + filename) as f: txt = f.readlines() txt = [line.split(' ') for line in txt] for i in range(len(txt)): data.append(self.normalized(cv2.imread(os.getcwd() + txt[i][0][7:]))) label.append(self.one_hot_it(cv2.imread(os.getcwd() + txt[i][1][7:][:-1])[:,:,0])) print('.',end='') #print("train data file", os.getcwd() + txt[i][0][7:]) #print("label data raw", cv2.imread(os.getcwd() + '/CamVid/trainannot/0001TP_006690.png')) return np.array(data), np.array(label) def preprocess_inputs(self, X): ### @ https://github.com/fchollet/keras/blob/master/keras/applications/imagenet_utils.py """Preprocesses a tensor encoding a batch of images. # Arguments x: input Numpy tensor, 4D. data_format: data format of the image tensor. mode: One of "caffe", "tf". - caffe: will convert the images from RGB to BGR, then will zero-center each color channel with respect to the ImageNet dataset, without scaling. - tf: will scale pixels between -1 and 1, sample-wise. # Returns Preprocessed tensor. """ return imagenet_utils.preprocess_input(X) def reshape_labels(self, y): return np.reshape(y, (len(y), self.data_shape, self.classes))

ここで

Python

## train.py import os import glob import numpy as np import keras from model import SegNet import dataset input_shape = (176, 240, 3) classes = 12 epochs = 10 batch_size = 1 log_filepath='./logs/' data_shape = 176*240 class_weighting = [0.2595, 0.1826, 4.5640, 0.1417, 0.5051, 0.3826, 9.6446, 1.8418, 6.6823, 6.2478, 3.0, 7.3614] ## set gpu usage import tensorflow as tf config = tf.ConfigProto(gpu_options=tf.GPUOptions(allow_growth=True, per_process_gpu_memory_fraction = 0.8)) session = tf.Session(config=config) keras.backend.tensorflow_backend.set_session(session) def main(): print("loading data...") ds = dataset.Dataset(classes=classes) train_X, train_y = ds.load_data('train') # need to implement, y shape is (None, 176, 240, classes) train_X = ds.preprocess_inputs(train_X) train_Y = ds.reshape_labels(train_y) print("input data shape...", train_X.shape) print("input label shape...", train_Y.shape) test_X, test_y = ds.load_data('test') # need to implement, y shape is (None, 176, 240, classes) test_X = ds.preprocess_inputs(test_X) test_Y = ds.reshape_labels(test_y) tb_cb = keras.callbacks.TensorBoard(log_dir=log_filepath, histogram_freq=1, write_graph=True, write_images=True) print("creating model...") model = SegNet(input_shape=input_shape, classes=classes) model.compile(loss="categorical_crossentropy", optimizer='adadelta', metrics=["accuracy"]) model.fit(train_X, train_Y, batch_size=batch_size, epochs=epochs, verbose=1, class_weight=class_weighting , validation_data=(test_X, test_Y), shuffle=True , callbacks=[tb_cb]) model.save('seg.h5') if __name__ == '__main__': main()

を実行すると下記エラーが表示されます。
runfile('C:/Users/user/code/train.py', wdir='C:/Users/user/code')
loading data...
Traceback (most recent call last):

File "<ipython-input-18-ea305e956635>", line 1, in <module>
runfile('C:/Users/user/code/train.py', wdir='C:/Users/user/code')

File "C:\Users\user\anaconda3\envs\DL\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 704, in runfile
execfile(filename, namespace)

File "C:\Users\user\anaconda3\envs\DL\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 108, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)

File "C:/Users/user/code/train.py", line 52, in <module>
main()

File "C:/Users/user/code/train.py", line 29, in main
train_X, train_y = ds.load_data('train') # need to implement, y shape is (None, 176, 240, classes)

File "C:\Users\user\code\dataset.py", line 53, in load_data
label.append(self.one_hot_it(cv2.imread(os.getcwd() + txt[i][1][7:][:-1])[:,:,0]))

File "C:\Users\user\code\dataset.py", line 36, in one_hot_it
x[i,j,labels[i][j]] = 1

IndexError: index 35 is out of bounds for axis 2 with size 12

このエラーの意味と対処方法が分からずに困っております。
お手数をお掛けいたしますが、ご教示いただけると大変ありがたいです。

windows10
python3.6.7
tensorflow1.12.0
keras2.2.4

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Keras

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