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

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

新規登録して質問してみよう
ただいま回答率
85.35%
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

1回答

1727閲覧

SVMでの学習時のエラーの解決法

kusegasugoi0221

総合スコア11

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2020/10/17 04:00

編集2020/10/17 09:56

LBPを画像から特徴量を抽出してSVMで学習をさせたく、WEBで調べてコードを作ってはみたんですが実行をしてもエラーが起きてしまいます。いろいろ試してはいるのですが初めてみるエラーなのでやりかたが分かりません。
教えていただけると嬉しいです

# 特徴量抽出器 # 特徴量抽出器 def create_images_array(load_img_paths): imgs=[] #LBP特徴量パラメータ points = 8 radius = 1 win_size = (64,64) #画像群の配列を生成 for load_img_path in tqdm(load_img_paths): #画像をロードし、グレースケール変換 #色反転、64*64にリサイズ、1次元配列に変換 img = cv2.imread(load_img_path) gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) gray = cv2.resize(gray,win_size) lbp = feature.local_binary_pattern(gray, points, radius, method='uniform') imgs.append(lbp) return np.array(imgs, np.float32) def main(): t1 = time.time() # 学習用の画像ファイルの格納先 LOAD_TRAIN_IMG1S_PATH = './preprocess_images/case3/train/T1-FE/*' LOAD_TRAIN_IMG2S_PATH = './preprocess_images/case3/train/T2-FE/*' LOAD_TRAIN_IMG3S_PATH = './preprocess_images/case3/train/T3-FE/*' LOAD_TRAIN_IMG4S_PATH = './preprocess_images/case3/train/T4-FE/*' LOAD_TRAIN_IMG5S_PATH = './preprocess_images/case3/train/T5-FE/*' LOAD_TRAIN_IMG6S_PATH = './preprocess_images/case3/train/T6-FE/*' LOAD_TRAIN_IMG7S_PATH = './preprocess_images/case3/train/T7-FE/*' LOAD_TRAIN_IMG8S_PATH = './preprocess_images/case3/train/T8-FE/*' LOAD_TRAIN_IMG9S_PATH = './preprocess_images/case3/train/T1-W/*' LOAD_TRAIN_IMG10S_PATH = './preprocess_images/case3/train/T2-W/*' LOAD_TRAIN_IMG11S_PATH = './preprocess_images/case3/train/T3-W/*' LOAD_TRAIN_IMG12S_PATH = './preprocess_images/case3/train/T4-W/*' LOAD_TRAIN_IMG13S_PATH = './preprocess_images/case3/train/T5-W/*' LOAD_TRAIN_IMG14S_PATH = './preprocess_images/case3/train/T6-W/*' LOAD_TRAIN_IMG15S_PATH = './preprocess_images/case3/train/T7-W/*' LOAD_TRAIN_IMG16S_PATH = './preprocess_images/case3/train/T8-W/*' # 作成した学習モデルの保存先 SAVE_TRAINED_DATA_PATH = './casestudy/case3/svm_trained_data.xml' # 学習用の画像ファイルのパスを取得 load_img1_paths = glob.glob(LOAD_TRAIN_IMG1S_PATH) load_img2_paths = glob.glob(LOAD_TRAIN_IMG2S_PATH) load_img3_paths = glob.glob(LOAD_TRAIN_IMG3S_PATH) load_img4_paths = glob.glob(LOAD_TRAIN_IMG4S_PATH) load_img5_paths = glob.glob(LOAD_TRAIN_IMG5S_PATH) load_img6_paths = glob.glob(LOAD_TRAIN_IMG6S_PATH) load_img7_paths = glob.glob(LOAD_TRAIN_IMG7S_PATH) load_img8_paths = glob.glob(LOAD_TRAIN_IMG8S_PATH) load_img9_paths = glob.glob(LOAD_TRAIN_IMG9S_PATH) load_img10_paths = glob.glob(LOAD_TRAIN_IMG10S_PATH) load_img11_paths = glob.glob(LOAD_TRAIN_IMG11S_PATH) load_img12_paths = glob.glob(LOAD_TRAIN_IMG12S_PATH) load_img13_paths = glob.glob(LOAD_TRAIN_IMG13S_PATH) load_img14_paths = glob.glob(LOAD_TRAIN_IMG14S_PATH) load_img15_paths = glob.glob(LOAD_TRAIN_IMG15S_PATH) load_img16_paths = glob.glob(LOAD_TRAIN_IMG16S_PATH) # 学習用の画像ファイルをロードし特徴量抽出 imgs1 = create_images_array(load_img1_paths) imgs2 = create_images_array(load_img2_paths) imgs3 = create_images_array(load_img3_paths) imgs4 = create_images_array(load_img4_paths) imgs5 = create_images_array(load_img5_paths) imgs6 = create_images_array(load_img6_paths) imgs7 = create_images_array(load_img7_paths) imgs8 = create_images_array(load_img8_paths) imgs9 = create_images_array(load_img9_paths) imgs10 = create_images_array(load_img10_paths) imgs11 = create_images_array(load_img11_paths) imgs12 = create_images_array(load_img12_paths) imgs13 = create_images_array(load_img13_paths) imgs14 = create_images_array(load_img14_paths) imgs15 = create_images_array(load_img15_paths) imgs16 = create_images_array(load_img16_paths) imgs = np.r_[imgs1, imgs2, imgs3, imgs4, imgs5, imgs6, imgs7, imgs8, imgs9, imgs10, imgs11, imgs12, imgs13, imgs14, imgs15, imgs16] # 正解ラベルを生成imgs ''' #1パターン目:T1-FE,T2-FE,・・・T1-W,T2-W,・・・全部判別 labels1 = np.full(len(load_img1_paths), 1, np.int32) labels2 = np.full(len(load_img2_paths), 2, np.int32) labels3 = np.full(len(load_img3_paths), 3, np.int32) labels4 = np.full(len(load_img4_paths), 4, np.int32) labels5 = np.full(len(load_img5_paths), 5, np.int32) labels6 = np.full(len(load_img6_paths), 6, np.int32) labels7 = np.full(len(load_img7_paths), 7, np.int32) labels8 = np.full(len(load_img8_paths), 8, np.int32) labels9 = np.full(len(load_img9_paths), 9, np.int32) labels10 = np.full(len(load_img10_paths), 10, np.int32) labels11 = np.full(len(load_img11_paths), 11, np.int32) labels12 = np.full(len(load_img12_paths), 12, np.int32) labels13 = np.full(len(load_img13_paths), 13, np.int32) labels14 = np.full(len(load_img14_paths), 14, np.int32) labels15 = np.full(len(load_img15_paths), 15, np.int32) labels16 = np.full(len(load_img16_paths), 16, np.int32) labels = np.array([np.r_[labels1, labels2, labels3, labels4, labels5, labels6, labels7, labels8, labels9, labels10, labels11, labels12, labels13, labels14, labels15, labels16]]) # SVMで学習モデルの作成(カーネル:LINEAR 線形, gamma:1, C:1) svm = cv2.ml.SVM_create() svm.setType(cv2.ml.SVM_C_SVC) svm.setKernel(cv2.ml.SVM_LINEAR) svm.setGamma(1) svm.setC(1) svm.setTermCriteria((cv2.TERM_CRITERIA_COUNT, 100, 1.e-06)) svm.train(imgs, cv2.ml.ROW_SAMPLE, labels) # 学習結果を保存 svm.save(SAVE_TRAINED_DATA_PATH) if __name__ == '__main__': main()

#エラーコード

svm.train(imgs, cv2.ml.ROW_SAMPLE, labels) error: OpenCV(3.4.2) C:\projects\opencv-python\opencv\modules\ml\src\data.cpp:259: error: (-215:Assertion failed) samples.type() == 5 || samples.type() == 4 in function 'cv::ml::TrainDataImpl::setData'

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

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

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

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

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

guest

回答1

0

ベストアンサー

データの次元が合ってません

【Python/OpenCV】SVMで画像分類①(手書き数字編)
に記載のコードの
svm.train()
の直前に
imgs.shape
を入れて実行し、次元を調べてみてください

質問に挙げられたエラーが出るコードでも同様に次元を調べると、上記Webページのコードと次元が異なることが分かります

そうなっている原因は、create_images_array()内で、lbpが2次元(64x64)のままで
imgs.append(lbp)
を実行しているためだと思います
コメントには「1次元配列に変換」と書かれていますが、コードでは実際は1次元化してないように思います

投稿2020/12/05 12:51

jbpb0

総合スコア7653

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

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

kusegasugoi0221

2020/12/07 04:15

解決しましたありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問