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

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

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

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

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

Q&A

解決済

1回答

1799閲覧

opencv python 画像の判別について

22Go

総合スコア55

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

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

0グッド

0クリップ

投稿2019/04/14 04:15

編集2019/04/14 05:23

作業環境
Mac OS Sierra 10.12.6
Jupiter notebook
python 3.6.2

あらかじめ学習してあるデータセットに自分でダウンロードしてきた
車の画像を読み込み、"automobile"の結果を得たいです。

事前にmlpとcnnで学習済みです

python

1from keras.datasets import cifar10 2(x_train, y_train), (x_test, y_test) = cifar10.load_data() 3 4import matplotlib.pyplot as plt 5from PIL import Image 6 7plt.figure(figsize=(10, 10)) 8labels = ["airplene", "automobile", "bord", "cat", "deer", "dog", "frog", "hprse", "ship", "truck"] 9for i in range(0, 40): 10 im = Image.fromarray(x_train[i]) 11 plt.subplot(5, 8, i + 1) 12 plt.title(labels[y_train[i][0]]) 13 plt.tick_params(labelbottom="off",bottom="off") 14 plt.tick_params(labelleft="off",left="off") 15 plt.imshow(im) 16 17plt.show() 18 19import matplotlib.pyplot as plt 20import keras 21from keras.datasets import cifar10 22from keras.models import Sequential 23from keras.layers import Dense, Dropout 24 25num_classes = 10 26im_rows = 32 27im_cols = 32 28im_size = im_rows * im_cols * 3 29 30# データを読み込む --- (*1) 31(X_train, y_train), (X_test, y_test) = cifar10.load_data() 32 33# データを一次元配列に変換 --- (*2) 34X_train = X_train.reshape(-1, im_size).astype('float32') / 255 35X_test = X_test.reshape(-1, im_size).astype('float32') / 255 36# ラベルデータをOne-Hot形式に変換 37y_train = keras.utils.to_categorical(y_train, num_classes) 38y_test = keras.utils.to_categorical(y_test, num_classes) 39 40# モデルを定義 --- (*3) 41model = Sequential() 42model.add(Dense(512, activation='relu', input_shape=(im_size,))) 43model.add(Dense(num_classes, activation='softmax')) 44 45# モデルをコンパイル --- (*4) 46model.compile( 47 loss='categorical_crossentropy', 48 optimizer='adam', 49 metrics=['accuracy']) 50 51# 学習を実行 --- (*5) 52hist = model.fit(X_train, y_train, 53 batch_size=32, epochs=50, 54 verbose=1, 55 validation_data=(X_test, y_test)) 56 57# モデルを評価 --- (*6) 58score = model.evaluate(X_test, y_test, verbose=1) 59print('正解率=', score[1], 'loss=', score[0]) 60 61# 学習の様子をグラフへ描画 --- (*7) 62plt.plot(hist.history['acc']) 63plt.plot(hist.history['val_acc']) 64plt.title('Accuracy') 65plt.legend(['train', 'test'], loc='upper left') 66plt.show() 67plt.plot(hist.history['loss']) 68plt.plot(hist.history['val_loss']) 69plt.title('Loss') 70plt.legend(['train', 'test'], loc='upper left') 71plt.show() 72 73import matplotlib.pyplot as plt 74import keras 75from keras.datasets import cifar10 76from keras.models import Sequential 77from keras.layers import Dense, Dropout, Activation, Flatten 78from keras.layers import Conv2D, MaxPooling2D 79 80num_classes = 10 81im_rows = 32 82im_cols = 32 83in_shape = (im_rows, im_cols, 3) 84 85# データを読み込む --- (*1) 86(X_train, y_train), (X_test, y_test) = cifar10.load_data() 87 88# データを正規化 --- (*2) 89X_train = X_train.astype('float32') / 255 90X_test = X_test.astype('float32') / 255 91# ラベルデータをOne-Hot形式に変換 92y_train = keras.utils.to_categorical(y_train, num_classes) 93y_test = keras.utils.to_categorical(y_test, num_classes) 94 95# モデルを定義 --- (*3) 96model = Sequential() 97model.add(Conv2D(32, (3, 3), padding='same', 98 input_shape=in_shape)) 99model.add(Activation('relu')) 100model.add(Conv2D(32, (3, 3))) 101model.add(Activation('relu')) 102model.add(MaxPooling2D(pool_size=(2, 2))) 103model.add(Dropout(0.25)) 104 105model.add(Conv2D(64, (3, 3), padding='same')) 106model.add(Activation('relu')) 107model.add(Conv2D(64, (3, 3))) 108model.add(Activation('relu')) 109model.add(MaxPooling2D(pool_size=(2, 2))) 110model.add(Dropout(0.25)) 111 112model.add(Flatten()) 113model.add(Dense(512)) 114model.add(Activation('relu')) 115model.add(Dropout(0.5)) 116model.add(Dense(num_classes)) 117model.add(Activation('softmax')) 118 119# モデルをコンパイル --- (*4) 120model.compile( 121 loss='categorical_crossentropy', 122 optimizer='adam', 123 metrics=['accuracy']) 124 125# 学習を実行 --- (*5) 126hist = model.fit(X_train, y_train, 127 batch_size=32, epochs=50, 128 verbose=1, 129 validation_data=(X_test, y_test)) 130 131# モデルを評価 --- (*6) 132score = model.evaluate(X_test, y_test, verbose=1) 133print('正解率=', score[1], 'loss=', score[0]) 134 135# 学習の様子をグラフへ描画 --- (*7) 136plt.plot(hist.history['acc']) 137plt.plot(hist.history['val_acc']) 138plt.title('Accuracy') 139plt.legend(['train', 'test'], loc='upper left') 140plt.show() 141plt.plot(hist.history['loss']) 142plt.plot(hist.history['val_loss']) 143plt.title('Loss') 144plt.legend(['train', 'test'], loc='upper left') 145plt.show() 146 147model.save_weights("cifar10-weight.h5") 148model.load_weights("cifar10-weight.h5") 149model.save_weights("cifar10-mlp-weight.h5") 150 151 152 153 154import cv2 155import numpy as np 156 157labels = ["airplene", "automobile", "bord", "cat", "deer", "dog", "frog", "hprse", "ship", "truck"] 158im_size = 32*32*3#幅*高さ*チャンネル数 159 160#モデルデータ読み込み 161model.load_weights("cifar10-mlp-weight.h5") 162 163#opencvを使って画像を読み込む 164im = cv2.imread("car.jpg")#numpy配列 165 166#色空間を変換して、リサイズ 167im = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)#青緑赤を赤緑青に変換 168im = cv2.resize(im, (32, 32))#32*32ピクセルにリサイズ 169plt.imshow(im)#画像を出力 170plt.show() 171 172#MLPで学習した画像データに合わせる 173im = im.reshape(im_size).astype("float32") / 255#float32:32bit,255:255bit 174#予測 175r = model.predict(np.array([im]), batch_size=32,verbose=1) 176res = r[0] 177#結果表示 178for i, acc in enumerate(res): 179 print(labels[i], "=", int(acc*100)) 180print("---") 181print("予測結果=", labels[res.argmax()])

car.jpgのインライン表示はできたのでパスは合っているのですが様々なエラーが出てしまい
解決できず困っています。

エラー内容はこちらです

ValueError Traceback (most recent call last) <ipython-input-12-2c80cdd11a3c> in <module>() 20 im = im.reshape(im_size).astype("float32") / 255#float32:32bit,255:255bit 21 #予測 ---> 22 r = model.predict(np.array([im]), batch_size=32,verbose=1) 23 res = r[0] 24 #結果表示 ~/.pyenv/versions/anaconda3-5.0.0/lib/python3.6/site-packages/keras/models.py in predict(self, x, batch_size, verbose, steps) 1023 self.build() 1024 return self.model.predict(x, batch_size=batch_size, verbose=verbose, -> 1025 steps=steps) 1026 1027 def predict_on_batch(self, x): ~/.pyenv/versions/anaconda3-5.0.0/lib/python3.6/site-packages/keras/engine/training.py in predict(self, x, batch_size, verbose, steps) 1822 x = _standardize_input_data(x, self._feed_input_names, 1823 self._feed_input_shapes, -> 1824 check_batch_axis=False) 1825 if self.stateful: 1826 if x[0].shape[0] > batch_size and x[0].shape[0] % batch_size != 0: ~/.pyenv/versions/anaconda3-5.0.0/lib/python3.6/site-packages/keras/engine/training.py in _standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix) 111 ': expected ' + names[i] + ' to have ' + 112 str(len(shape)) + ' dimensions, but got array ' --> 113 'with shape ' + str(data_shape)) 114 if not check_batch_axis: 115 data_shape = data_shape[1:] ValueError: Error when checking : expected conv2d_1_input to have 4 dimensions, but got array with shape (1, 3072)

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

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

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

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

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

_Victorique__

2019/04/14 04:53

model.load_weights("cifar10-mlp-weight.h5") このmodelはどこから来たのでしょうか?定義されていませんが
22Go

2019/04/14 05:13

"cifar10-mlp-weight.h5"はjupyternotebook上で学習済みで一旦保存してあり それをloadしています。
_Victorique__

2019/04/14 05:16

このコード以外にライブラリのimport等をしているということでしょうか? 全部載せてもらえますか?
guest

回答1

0

ベストアンサー

OpenCVじゃなく、機械学習とかだなぁ。
1次元配列にしていますが、学習するときは、どのようにしましたか。学習するときに画像を流したのと同じ形で渡してください。
4次元だと言っているので、バッチ, 縦, 横, 色の4次元で渡したと思いますよ。それをreshapeで1次元にしているので、エラーになっています。

投稿2019/04/16 05:00

Q71

総合スコア995

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問