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

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

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

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

YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

機械学習

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

Q&A

0回答

2574閲覧

yolov3でmAPを表示したい

tenki3

総合スコア3

Keras

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

YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

機械学習

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

0グッド

1クリップ

投稿2020/10/04 06:44

編集2020/10/04 06:47

前提・実現したいこと

リンク内容
上記の記事を参考に、githubの リンク内容 をクローンしてkeras-yolo3による独自学習がうまくいきました。
そこで、今の設定では下の写真のようにlossとvalue-lossだけしか表示できませんが、それだけでなくmAPも表示させ、グラフを作成したいです。

イメージ説明

調べてところ、こちらの リンク内容 によると、下記コードをtrain.pyに加えればmAPを表示できるようです。

python

1import keras.backend as K 2 3def mean_pred(y_true, y_pred): 4 return K.mean(y_pred) 5 6model.compile(optimizer='rmsprop', 7 loss='binary_crossentropy', 8 metrics=['accuracy', mean_pred])

そこで、train.pyに 上記def mean_pred(~ の2行を加え、train.pyの下記コードを

python

1 model.compile(optimizer=Adam(lr=1e-3), loss={ 2 # use custom yolo_loss Lambda layer. 3 'yolo_loss': lambda y_true, y_pred: y_pred})

こちら↓に書き換えて実行しました。lossなどは表示されませんが、ひとまずmAPをだすのを優先しました。

python

1model.compile(optimizer='rmsprop', 2 loss='binary_crossentropy', 3 metrics=['accuracy', mean_pred])

しかしうまくいかず、下記のエラーが発生しました。コードを挿入する位置を他にもずらしてやってみましたが、うまくいかず躓いています。
train.pyをどう改変すれば、当初の予定通りにmAPを出し、グラフを描けるでしょうか。

発生している問題・エラーメッセージ

File "C:\Users\Anaconda3\envs\sleep\lib\site-packages\tensorflow\python\ops\nn_impl.py", line 166, in sigmoid_cross_entropy_with_logits (logits.get_shape(), labels.get_shape())) ValueError: logits and labels must have the same shape (() vs (?, ?))

該当のソースコード

     train.py全体のコードはこちらの リンク内容 を使っています

python

1 2手を加えたtrain.pyを実行 3 4""" 5Retrain the YOLO model for your own dataset. 6""" 7 8import numpy as np 9import keras.backend as K 10from keras.layers import Input, Lambda 11from keras.models import Model 12from keras.optimizers import Adam 13from keras.callbacks import TensorBoard, ModelCheckpoint, ReduceLROnPlateau, EarlyStopping 14from yolo3.model import preprocess_true_boxes, yolo_body, tiny_yolo_body, yolo_loss 15from yolo3.utils import get_random_data 16import sys 17 18 19 20#改変した箇所➀  下記2行を加えました 21def mean_pred(y_true, y_pred): 22 return K.mean(y_pred) 23 24def _main(): 25 annotation_path = 'model_data/2007_train.txt' 26 log_dir = 'logs/000/' 27 classes_path = 'model_data/voc_classes.txt' 28 anchors_path = 'model_data/yolo_anchors.txt' 29 class_names = get_classes(classes_path) 30 num_classes = len(class_names) 31 anchors = get_anchors(anchors_path) 32 33 input_shape = (320,320) # multiple of 32, hw 34 if len(sys.argv) > 1: 35 input_shape = (int(sys.argv[1]),int(sys.argv[1])) 36 37 is_tiny_version = len(anchors)==6 # default setting 38 if is_tiny_version: 39 model = create_tiny_model(input_shape, anchors, num_classes, 40 freeze_body=2, weights_path='model_data/tiny_yolo_weights.h5') 41 else: 42 model = create_model(input_shape, anchors, num_classes, 43 freeze_body=2, weights_path='model_data/yolo_weights.h5') # make sure you know what you freeze 44 45 logging = TensorBoard(log_dir=log_dir) 46 checkpoint = ModelCheckpoint(log_dir + 'ep{epoch:03d}-loss{loss:.3f}-val_loss{val_loss:.3f}.h5', 47 monitor='val_loss', save_weights_only=True, save_best_only=True, period=3) 48 reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=3, verbose=1) 49 early_stopping = EarlyStopping(monitor='val_loss', min_delta=0, patience=10, verbose=1) 50 51 val_split = 0.1 52 with open(annotation_path) as f: 53 lines = f.readlines() 54 np.random.seed(10101) 55 np.random.shuffle(lines) 56 np.random.seed(None) 57 num_val = int(len(lines)*val_split) 58 num_train = len(lines) - num_val 59 60 # Train with frozen layers first, to get a stable loss. 61 # Adjust num epochs to your dataset. This step is enough to obtain a not bad model. 62 if True: 63 64  #改変した箇所➁ model.compile()の中身を書き換えました 65 model.compile(optimizer='rmsprop', 66 loss='binary_crossentropy', 67 metrics=['accuracy', mean_pred]) 68 69 70 batch_size = 32 71 if len(sys.argv) > 2: 72 batch_size = int(sys.argv[2]) 73 74 print('Train on {} samples, val on {} samples, with batch size {}.'.format(num_train, num_val, batch_size)) 75 model.fit_generator(data_generator_wrapper(lines[:num_train], batch_size, input_shape, anchors, num_classes), 76 steps_per_epoch=max(1, num_train//batch_size), 77 validation_data=data_generator_wrapper(lines[num_train:], batch_size, input_shape, anchors, num_classes), 78 validation_steps=max(1, num_val//batch_size), 79 epochs=50, 80 initial_epoch=0, 81 callbacks=[logging, checkpoint]) 82 model.save_weights(log_dir + 'trained_weights_stage_1.h5') 83 84 # Unfreeze and continue training, to fine-tune. 85 # Train longer if the result is not good. 86 if True: 87 for i in range(len(model.layers)): 88 model.layers[i].trainable = True 89 90 #改変した箇所➂ model.compile()の中身を書き換えました 91 model.compile(optimizer='rmsprop', 92 loss='binary_crossentropy', 93 metrics=['accuracy', mean_pred]) # recompile to apply the change 94 95#以下略 96 97

補足情報(FW/ツールのバージョンなど)

windows10
anacondaの仮想環境を使用
python3.6

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問