前提・実現したいこと
リンク内容
上記の記事を参考に、githubの リンク内容 をクローンしてkeras-yolo3による独自学習がうまくいきました。
私は機械学習のAccuracyといったモデルの適合率を知りたかったのですが、自分で定義する必要があるようです。
そこで、Yoloの指標で使われるiouを定義し、metricsで指定してtrain.pyを実行しましたが、以下のように0と表示されたまま変化しません。
どこを修正すれば正しく数値が反映されるでしょうか?
train.pyのソースコード:リンク内容
該当のソースコード
python
1 #train.pyを改変して実行 2 3 # Train with frozen layers first, to get a stable loss. 4 # Adjust num epochs to your dataset. This step is enough to obtain a not bad model. 5 if True: 6 #iouを定義 7 def true_positive(y_true, y_pred): 8 return K.sum(K.cast(K.equal(y_true * y_pred, 1), K.floatx())) 9 10 def true_negative(y_true, y_pred): 11 return K.sum(K.cast(K.equal(y_true + y_pred, 0), K.floatx())) 12 13 def false_positive(y_true, y_pred): 14 return K.sum(K.cast(K.less(y_true, y_pred), K.floatx())) 15 16 def false_negative(y_true, y_pred): 17 return K.sum(K.cast(K.greater(y_true, y_pred), K.floatx())) 18 19 def iou(y_true, y_pred): 20 y_pred = K.round(y_pred) 21 return true_positive(y_true, y_pred) / (false_negative(y_true, y_pred)+true_positive(y_true, y_pred)+false_positive(y_true, y_pred)) 22 23 24 model.compile(optimizer=Adam(lr=1e-3), loss={ 25 # use custom yolo_loss Lambda layer. 26 'yolo_loss': lambda y_true, y_pred: y_pred} , metrics=[iou]) #metrics=[iou]を追加 27 batch_size = 32 28 if len(sys.argv) > 2: 29 batch_size = int(sys.argv[2])
###試したこと
はじめに metrics=["acc"]を行いましたが、0と表示されるだけでした。自分で定義する必要があるので、上記のように改変しました。
関数を以下のようにもっとシンプルにして行ってみましたが、こちらの結果も0のままでした
python
1def mean_pred(y_true, y_pred): 2 return K.mean(y_pred) 3 4model.compile(optimizer=Adam(lr=1e-3), loss={ 5 'yolo_loss': lambda y_true, y_pred: y_pred} , metrics=[mean_pred])
補足情報(FW/ツールのバージョンなど)
windows10
anaconda
あなたの回答
tips
プレビュー