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

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

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

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

Python

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

Q&A

解決済

1回答

824閲覧

InceptionV3モデルでcifar10の画像分類をしたい

renin

総合スコア13

Keras

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

Python

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

1グッド

2クリップ

投稿2017/08/24 02:14

編集2017/08/28 14:38

###前提・実現したいこと
Kerasで深層学習の勉強をしています。InceptionV3のモデルを利用してcifar10の画像分類をしたいです。
###発生している問題・エラーメッセージ
kerasに用意されているApplicationsからモデルをロードしたのですが、cifar10の32*32という小さなサイズには対応しておらず読み込みでエラーが出ます。

/home/***/keras_study/test.py:69: UserWarning: Update your `fit_generator` call to the Keras 2 API: `fit_generator(<keras.pre..., verbose=1, validation_data=(array([[[..., steps_per_epoch=1562, epochs=200, callbacks=[<keras.ca..., max_queue_size=100)` callbacks=[lr_reducer, csv_logger]) Traceback (most recent call last): File "/home/***/keras_study/test.py", line 69, in <module> callbacks=[lr_reducer, csv_logger]) File "/usr/local/lib/python2.7/dist-packages/keras/legacy/interfaces.py", line 87, in wrapper return func(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 1777, in fit_generator val_x, val_y, val_sample_weight) File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 1234, in _standardize_user_data exception_prefix='input') File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 140, in _standardize_input_data str(array.shape)) ValueError: Error when checking input: expected input_1 to have shape (None, 299, 299, 3) but got array with shape (10000, 32, 32, 3)

###該当のソースコード

Python

1from __future__ import print_function 2from keras.datasets import cifar10 3from keras.preprocessing.image import ImageDataGenerator 4from keras.utils import np_utils 5from keras.callbacks import ReduceLROnPlateau, CSVLogger 6import numpy as np 7 8from keras.applications.inception_v3 import InceptionV3 9 10lr_reducer = ReduceLROnPlateau(factor=np.sqrt(0.1), cooldown=0, patience=5, min_lr=0.5e-6) 11csv_logger = CSVLogger('test_cifar10.csv') 12 13batch_size = 32 14nb_classes = 10 15nb_epoch = 200 16 17# input image dimensions 18img_rows, img_cols = 32, 32 19# The CIFAR10 images are RGB. 20img_channels = 3 21 22# The data, shuffled and split between train and test sets: 23(X_train, y_train), (X_test, y_test) = cifar10.load_data() 24 25# Convert class vectors to binary class matrices. 26Y_train = np_utils.to_categorical(y_train, nb_classes) 27Y_test = np_utils.to_categorical(y_test, nb_classes) 28 29X_train = X_train.astype('float32') 30X_test = X_test.astype('float32') 31 32# subtract mean and normalize 33mean_image = np.mean(X_train, axis=0) 34X_train -= mean_image 35X_test -= mean_image 36X_train /= 128. 37X_test /= 128. 38 39model = InceptionV3(weights='imagenet') 40model.compile(loss='categorical_crossentropy', 41 optimizer='adam', 42 metrics=['accuracy']) 43 44# This will do preprocessing and realtime data augmentation: 45datagen = ImageDataGenerator( 46 featurewise_center=False, # set input mean to 0 over the dataset 47 samplewise_center=False, # set each sample mean to 0 48 featurewise_std_normalization=False, # divide inputs by std of the dataset 49 samplewise_std_normalization=False, # divide each input by its std 50 zca_whitening=False, # apply ZCA whitening 51 rotation_range=10, # randomly rotate images in the range (degrees, 0 to 180) 52 width_shift_range=0.1, # randomly shift images horizontally (fraction of total width) 53 height_shift_range=0.1, # randomly shift images vertically (fraction of total height) 54 shear_range=0.1, 55 zoom_range=0.1, 56 horizontal_flip=True, # randomly flip images 57 vertical_flip=False) # randomly flip images 58 59datagen.fit(X_train) 60 61# Fit the model on the batches generated by datagen.flow(). 62model.fit_generator(datagen.flow(X_train, Y_train, batch_size=batch_size), 63 steps_per_epoch=X_train.shape[0] // batch_size, 64 validation_data=(X_test, Y_test), 65 epochs=nb_epoch, verbose=1, max_q_size=100, 66 callbacks=[lr_reducer, csv_logger]) 67 68model_json_str = model.to_json() 69open('test_cifar10.json', 'w').write(model_json_str) 70model.save_weights('test_cifar10_param.hdf5') 71

###試したこと
cifar10の画像サイズを300300のように大きくリサイズして通そうとは考えたのですが、その場合元のデータに比べて大きくなりすぎて学習で問題が起こりそうな気がしています。
<追記>
32
32→300*300にリサイズした画像を実際に表示すると、テレビのノイズ画面のような元の画像とかけ離れた画像に変換されており、これでは教師データとして問題があるんじゃないかと考えています。
###質問したいこと
cifar10のような小さい画像に対してInceptionV3モデルを適用させる方法があれば、Kerasでの実装方法も含めて教えて頂きたいです。
###補足情報(言語/FW/ツール等のバージョンなど)
Keras2.07
Python2.7

退会済みユーザー👍を押しています

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/08/28 13:01

cifar10のInception V3用へのリサイズは実際にはまだやっていない、ということでしょうか?
renin

2017/08/28 14:50 編集

回答ありがとうございます。単純に32→300にリサイズは考えました。しかしリサイズした画像を実際に表示してみると、テレビのノイズ画面のような元の画像とはかけ離れた画像に変換されており、これを教師データとしていいのか判断に困りました。変換した画像を試してはいないです。
退会済みユーザー

退会済みユーザー

2017/08/28 22:19

cifar10(30*30)の画像をInception v3(300x300)に変更して評価したい。普通に画像を拡大するとノイズが乗るけれども、Q.1綺麗に拡大する方法はあるか?Q.2ノイズが乗っていても拡大後cifar10で正しく(?)Inception v3で動作するか?ということですね。 Q.1の部分のコードと拡大前後の写真があるとより良いと思います。
guest

回答1

0

ベストアンサー

Stackoverflowで同じ質問ようなを発見しました。

Thomas Pinetzさんによれば、
問題点

  • inceptionのモデルは224x224で訓練されている
  • 10x10より小さいいくらかの値までダウンスケーリングされていく

∴32x32 3chではうまくいかない
解決策は3つ

  1. 32x32 --> 224x224まで拡大して、これを初期値にする
  2. ダウンサンプリングフィルタをいくらか外す
  3. ゼロパディングをして解像度をそのまま残す

また、Marcin Możejkoによれば、

  • 入力可能な最小値は (150, 150, 3)で、これより小さいとプーリングもvalid border mode もできない

だそうです。

投稿2017/08/28 13:23

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

renin

2017/08/28 14:48 編集

回答ありがとうございます。同様の質問を見つけてきて頂き感謝します。やはり入力画像のサイズをどうにかして拡大するか、モデルを改造してダウンサンプリングの回数を減らすかの2つしか方法はなさそうですかね。挙げられた方法をなんとか試していきたいと思います。
退会済みユーザー

退会済みユーザー

2017/08/28 22:05

解決策3の「32x32の周りに0をつけて(0パディング)で32x32の解像度を保ったまま画像を見かけ上広げる」、もあるようです。私が探した限り、これらの結果がどうなったかは見つけられませんでした。恐らく誰もやっていない/やっても公開していないことだと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問