やってみよう!

プログラミングとかでぃーぷらーにんぐとかVRとか気になったものをやってみる予定

雑に作ったデータセットでYOLOv3を学習させてみる2

前回の続き

blog.ascreit.com

前回、微妙な結果だったのと、トレーニングに使ったデータで検証してもだめなんじゃない?と思ったので、もう一回挑戦してみます。

精度を上げるには教師データ増やすのが一番ということで、今回はごちうさ1期2羽〜12羽、2期1羽~12羽の4875枚の画像とそのアノテーションでやってみます。

学習させてみる

Epoch 00079: ReduceLROnPlateau reducing learning rate to 9.999999974752428e-08.
Epoch 80/1000
283/283 [==============================] - 224s 791ms/step - loss: 13.7981 - val_loss: 17.3712
Epoch 81/1000
283/283 [==============================] - 224s 791ms/step - loss: 13.7571 - val_loss: 16.2525
Epoch 82/1000
283/283 [==============================] - 225s 797ms/step - loss: 13.7587 - val_loss: 17.5450

Epoch 00082: ReduceLROnPlateau reducing learning rate to 1.0000000116860975e-08.
Epoch 83/1000
283/283 [==============================] - 225s 795ms/step - loss: 13.8813 - val_loss: 17.0108
Epoch 00083: early stopping

83エポックで終了。5時間程度かかりました。

tensorboard --logdir=./logs/002

f:id:ascreit:20180917205932p:plainf:id:ascreit:20180917205940p:plainf:id:ascreit:20180917205951p:plain

使ってみる

前回とほぼ変わらず...

画像上げるのは面倒なので割愛

アノテーションを確認してみる

import cv2,glob
import numpy as np
from PIL import Image, ImageFont, ImageDraw
try:
    annotation_path = 'train.txt'
    with open(annotation_path) as f:
        lines = f.readlines()
    for line in lines:
        data = line.split()
        image = Image.open(data[0])
        iw, ih = image.size
        h, w = input_shape
        box = np.array([np.array(list(map(int,box.split(',')))) for box in data[1:]])

        draw = ImageDraw.Draw(image)
        for b in box:
            print(b)
            left,top,right,bottom,class_id = list(b)
            print(left)
            draw.rectangle([left,top,right,bottom])

        image = np.asarray(image)
        #PILはBGR,cv2はRGBで、色がおかしくなるので修正
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
        cv2.imshow("result", image)
        key = cv2.waitKey(0)
        # ESCで終了
        if key==27:
            print("exit")
            cv2.destroyAllWindows()
            break
except KeyboardInterrupt:
    print("exit")

f:id:ascreit:20180917223712p:plainf:id:ascreit:20180917223715p:plainf:id:ascreit:20180917223719p:plainf:id:ascreit:20180917223721p:plainf:id:ascreit:20180917223724p:plainf:id:ascreit:20180917223727p:plain

ふぁっ!?

ゴミですね...

まじで?!

python3 yolo_video.py --input /home/src/movie/gochiusa/gochiusa1_2.mp4

f:id:ascreit:20180917230124p:plainf:id:ascreit:20180917230127p:plainf:id:ascreit:20180917230130p:plain

ん〜? データ作るときにミスってるのかな?

今回は完全にデータが悪すぎます。

もう一回アノテーション作成の部分見直して再挑戦してみます。

追記

解決しました。 blog.ascreit.com