windowsでYOLOv3を動かす


目的

学習結果を別の場所で再現するために、windowsノートPCにYOLOを搭載しました
windowsではkeras-yoloを使います。なので途中ubuntuでkeras-yolo使った時と全く同じ工程がありますが自分用のメモ用も含めて。

環境

windows10
corei7-7600U CPU
16GB
Anaconda python3.7ver

準備

まずanaconda command promptを起動し、仮想環境を構築。

conda create -n keras_work
activate keras_work

そしてtensorflowとkeras、必要なパッケージをインストール
pipとconda混ぜちゃいけないと色々なところで書かれていますが、仮想環境なので結局pipも使いました。
今のところ大丈夫です。

conda install tensorflow
conda install keras
pip install pillow
conda install -c anaconda matplotlib
pip install opencv-python

keras-yolo3をダウンロードし任意の場所に解凍

https://github.com/qqwweee/keras-yolo3
※前アップしたときからリンク先が変わってたので修正しました。

自前データの準備

ここから、ubuntuでやったことと同じことをします。その記事はコチラ。
ここでkeras-yolo3フォルダと言っているのは、windowsではkeras-yolo3-masterのことです。

自前データのコピー&変換

今回私は自前データを使いたいと思いますので、
darknetで学習とテストをするときに作成した以下のファイルをさっきcloneしてきたkeras-yolo3フォルダの直下に置きます。
piyopiyo_test.cfg
piyopiyo.weights

さらに、自前の学習データのclasses.txtをmodel_data/以下に置きます。

そして重みをkeras用に変換します。

cd keras-yolo3
python convert.py piyopiyo_test.cfg piyopiyo.weights model_data/piyopiyo.h5

yolo.pyを修正

class YOLO(object):
    _defaults = {
        "model_path": 'model_data/piyopiyo.h5',  #ココ
        "anchors_path": 'model_data/yolo_anchors.txt',#ココは変えなくてもうまくいきました。何かよくわからん。
        "classes_path": 'model_data/classes.txt', #ココ
        "score" : 0.3,
        "iou" : 0.45,
        "model_image_size" : (416, 416),
        "gpu_num" : 0,
    }

anchorって何なんだろう…と調べてみたら、bouding boxのアスペクト比のことみたいです。
何種類か定義されているので探索に使う時のって意味なのでしょうか…
これを変えるとうまくいかなかった、という記事もあったりしたのでデフォルトのまま使うことにします。

実行

画像の場合は

python3 yolo_video.py --image

動画の場合は

python3 yolo_video.py --input hogeohoge.MOV

画像の場合は後でInput image filenameを求められます。

webカメラの場合は、yolo_cam.pyというファイルを作って実行します。

from yolo import YOLO
from yolo import detect_video

if __name__ == '__main__':
    video_path = 1
    output_path = './output.avi'
    # detect_video(YOLO(), video_path, output_path)
    detect_video(YOLO(),video_path)

そして

python yolo_cam.py

エラー

ここで私は、no named moduke cv2と言われました。
で、色々やってみたのですが全部できなくて

conda install -c menpo opencv3 -->NG
conda install -c conda-forge opencv -->NG
pip install opencv-python -->NG

なんと会社のネットワーク使っているからだめだったみたいです。
会社のネットワーク切って、

conda install -c conda-forge opencv 

を実行したら無事インストール完了しました。
多分上の3つどのコマンドでも良かったのでは、と思います。

そしてさっきのコマンドで無事動画を読み込んで、無事認識完了しました。
GPU無いしめちゃめちゃ遅いですが、なんとか再現はできます。

参考サイトです

https://masaeng.hatenablog.com/entry/2019/03/23/010723
https://qiita.com/dddmm/items/9e4d9e08a071cfa4be83