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

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

新規登録して質問してみよう
ただいま回答率
86.02%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

Q&A

解決済

VGG16を使った画像分類について

gorou-0000
gorou-0000

総合スコア3

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

1回答

0グッド

0クリップ

394閲覧

投稿2022/11/04 07:59

質問したいこと

素人質問失礼します。
現在プログラミング初心者で、google colaboratory上であるサイトのコードを使って画像分類をしているのですが、今は犬や猫、山や海などベーシックな画像で練習していますが、ニッチな画像やマニアックな画像はVGG16を使って画像分類を行うことは可能なのでしょうか。
すごい人任せではありますが、ほんとに初心者な為、改善案などございましたらご教授頂ければ幸いです。

該当のソースコード

python

1from google.colab import drive 2drive.mount('/content/drive') 3 4%cd '/content/drive/MyDrive/test' 5 6import os 7import cv2 8import numpy as np 9import glob as glob 10from sklearn.model_selection import train_test_split 11from keras.utils import np_utils 12#フォルダ名をクラス名にする 13path = "./images" 14folders = os.listdir(path) 15classes = [f for f in folders if os.path.isdir(os.path.join(path, f))] 16n_classes = len(classes) 17 18#画像とラベルの格納 19X = [] 20Y = [] 21 22for label,class_name in enumerate(classes): 23 files = glob.glob("./images/" + class_name +"/*.jpg") 24 for file in files: 25 img = cv2.imread(file) 26 img = cv2.resize(img,dsize = (224,224)) 27 X.append(img) 28 Y.append(label) 29 30X = np.array(X) 31X = X.astype('float32') 32X /= 255.0 33X[0] 34 35#ラベルの変換 36Y = np.array(Y) 37Y = np_utils.to_categorical(Y,n_classes) 38Y[:5] 39 40#学習データとテストデータに分ける 41X_train, X_test, y_train, y_test = train_test_split(X, Y,test_size = 0.2) 42print(X_train.shape) 43print(X_test.shape) 44print(y_train.shape) 45print(y_test.shape) 46 47from keras.applications.vgg16 import VGG16 48from keras.models import Sequential 49from keras.models import model_from_json 50from keras.models import Model 51from keras.layers import Input, Activation, Dense, Flatten, Dropout 52from keras.optimizers import Adam 53 54#vgg16 55input_tensor = Input(shape=(224, 224, 3)) 56base_model = VGG16(weights='imagenet', input_tensor=input_tensor,include_top=False) 57 58#後付け 59top_model = Sequential() 60top_model.add(Flatten(input_shape=base_model.output_shape[1:])) 61top_model.add(Dense(n_classes, activation='softmax')) 62 63#結合 64model = Model(inputs=base_model.input, outputs = top_model(base_model.output)) 65 66#学習させない層 67for layer in model.layers[:15]: 68 layer.trainable = False 69 70print('# layers = ', len(model. layers)) 71 72model.compile(loss='categorical_crossentropy', optimizer='adam',metrics=['accuracy']) 73model.summary() 74 75#trainデータで学習 76model.fit(X_train,y_train,epochs = 20,batch_size = 16) 77 78#テストデータで精度確認 79score = model.evaluate(X_test,y_test,batch_size = 16) 80 81import pickle 82#クラス名の保存 83pickle.dump(classes,open("classes.sav","wb")) 84#モデルの保存 85model.save("./cnn.h5") 86 87from keras.models import load_model 88import pickle 89import cv2 90 91#モデルとクラス名の読み込み 92model = load_model("./cnn.h5") 93classes = pickle.load(open("classes.sav","rb")) 94 95#sample画像の前処理 96img = cv2.imread('sample.jpg') 97img = cv2.resize(img,dsize = (224,224)) 98img = img.astype('float32') 99img /= 225.0 100img = img[None, ...] 101result = model.predict(img) 102 103np.set_printoptions(precision = 3, suppress = True) 104result*100 105 106#確率が一番大きいクラス 107pred = result.argmax() 108pred 109 110#クラス名の呼び出し 111classes[pred]

以下のような質問にはグッドを送りましょう

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

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

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

PondVillege

2022/11/04 09:17

普通に「画像分類を行うこと」を実行してくれますが,得られる精度が不明です. 一般的に答えるとすると精度は「やってみないとわからない」になります. 現状,「ニッチな画像やマニアックな画像」に学習させないレイヤが対応するか不明なので,場合によってはVGG16全体を学習させる必要があるかもしれません.
jbpb0

2022/11/04 11:45

> ニッチな画像やマニアックな画像はVGG16を使って画像分類を行うことは可能なのでしょうか。 ネットとかから入手できる学習済みモデルを使うのではなく、その分類をするAIを、質問者さんが教師データ画像を集めて、質問者さんがAIを学習させるのを前提で、以下書きます > ニッチな画像やマニアックな画像はVGG16を使って画像分類を行うことは可能なのでしょうか。 の意味が、たくさんある画像の中から、すごく珍しい(数が少ない)画像を分類したい、という意味なら、VGGやディープラーニングに限らず、一般的に機械学習では難しいケースです 機械学習 不均衡データ でググってみてください
gorou-0000

2022/11/07 08:07

お二人ともコメントありがとうございます。 説明不足ですみません。マニアックな画像の例でいうと、形状の違うペットボトルが二種類あるとして、それぞれペットボトル1、ペットボトル2という名前をつけて、それぞれの画像を大量に集めるとします。 そして、機械学習させて、一枚の画像を読み込ませた時に、どちらかのペットボトルを判別できる即ち画像分類をさせていくというのは可能でしょうか。 例え話が下手で申し訳ありません。(実際には、違う二種類画像でやります。)
jbpb0

2022/11/07 08:33

> 機械学習させて、一枚の画像を読み込ませた時に、どちらかのペットボトルを判別できる即ち画像分類をさせていくというのは可能でしょうか。 お好み焼きとピザを画像分類 https://blog.brainpad.co.jp/entry/2017/07/10/163000 させるのと、似たような話ですね ペットボトル1, 2がどれくらい違うかと、集めた画像の質と量次第です
gorou-0000

2022/11/10 05:52

なるほど。ご教授ありがとうございます。 教えていただいたサイトを見て、自分なりに勉強してみます。 ありがとうございました。

回答1

0

ベストアンサー

機械学習させて、一枚の画像を読み込ませた時に、どちらかのペットボトルを判別できる即ち画像分類をさせていくというのは可能でしょうか。

深層学習は画像のどこを見ている!? CNNで「お好み焼き」と「ピザ」の違いを検証
と、似たような話ですね

ペットボトル1, 2がどれくらい違うかと、集めた画像の質と量次第です

投稿2022/11/22 04:47

jbpb0

総合スコア7521

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

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

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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