• トップ
  • ブログ一覧
  • Windows 10 で YOLOv3 を自前画像で学習させる(物体検出編)【機械学習】
  • Windows 10 で YOLOv3 を自前画像で学習させる(物体検出編)【機械学習】

    広告メディア事業部広告メディア事業部
    2020.05.18

    IT技術

    後編:物体検出モデル YOLOv3 を自前画像で学習させよう

    この記事では、物体検出する機械学習モデル「YOLOv3」を、Windows 10 上で動かす方法を解説しています。

    前回は、YOLOv3 を動作させる環境を構築しました。

    今回は、YOLOv3 を自前画像で学習させたいと思います!

    どんなものができるの?

    最終的に目指すのは、以下のようなイメージです。

    2つの本が、別々のものとして検出されています。

    「物体検出編」では、いよいよ、これを目指します。

    前回の記事はこちら

    featureImg2020.05.15Windows 10 で YOLOv3 を自前画像で学習させる(環境構築編)【機械学習】物体検出モデル YOLOv3 を自前画像で学習させよう「YOLOv3」とは、物体検出(画像から物体の位置と種類を検出)...

    物体検出までの流れ

    1. ソースコードの準備
    2. 学習済みモデルでの動作確認
    3. 学習させる教師画像の作成
    4. 学習の前準備
    5. 学習の実行
    6. 学習状況の確認
    7. 動画ファイルで物体検出!

    YOLOv3 のソースコードの準備

    始めに「YOLOv3」のソースコードを準備しましょう。

    Keras 版の YOLOv3 のコードがありますので、こちらからダウンロードします。

    【GitHub】
    https://github.com/qqwweee/keras-yolo3

    「keras-yolo3-master.zip」というファイルがダウンロードされたら、「keras-yolo3」として適当な場所に展開しましょう。

    github をコマンドから使える方

    github をコマンドから使える方は、以下でダウンロードできます。

    1git clone https://github.com/qqwweee/keras-yolo3.git

    今回は、「F:\dl\keras-yolo3」に展開しましたので、今後はこの想定で進めます。

    学習済みモデルでの動作確認

    自前画像で学習させてモデルを作る前に、ネット上に公開されている YOLOv3 の学習済みモデルを使って、動作の確認をしていきます。

    YOLOv3の学習済みモデルのダウンロード

    学習済みモデルを、以下の URL からダウンロードします。

    【pjreddie.com】
    https://pjreddie.com/media/files/yolov3.weights

    ダウンロードしたファイルは、先ほどの「keras-yolo3」フォルダに保存してください。

    wget コマンドを使える方

    wget コマンドを使える方は、以下でダウンロードできます。

    1wget https://pjreddie.com/media/files/yolov3.weights

    weights を Keras 用に変換

    weights を Keras 用に変換します。

    「Anaconda プロンプト」を起動し、前回の記事で作成した仮想環境を起動します。

    1activate conda tf114

    プログラムの実行

    「keras-yolo3」ディレクトリに移動し、以下のプログラムを実行します。

    1(tf114)>python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5

    実行時のログ

    以下は、実行時のログの最後です。

    1Total params: 62,001,757
    2Trainable params: 61,949,149
    3Non-trainable params: 52,608
    4__________________________________________________________________________________________________
    5None
    6Saved Keras model to model_data/yolo.h5
    7Read 62001757 of 62001757.0 from Darknet weights.

    物体検出の動作確認

    YOLOv3 で物体検出のテストをしてみます。

    そのまえに、必要なパッケージをいくつかインストールしておきましょう。

    1pip install pillow matplotlib opencv-python

    画像から物体検出をしてみます。

    1(tf114)>python yolo_video.py --image

    物体検出したいファイル名を聞かれます。

    画像は、ネットから適当なものをダウンロードして保存しておきましょう。

    1Input image filename:dog.jpg
    2(416, 416, 3)
    3Found 5 boxes for img
    4dog 1.00 (63, 113) (157, 268)
    5truck 0.85 (240, 42) (343, 84)
    6car 0.38 (240, 42) (343, 84)
    7bicycle 0.47 (69, 70) (126, 109)
    8bicycle 0.99 (82, 59) (282, 219)
    90.11049180000000547

    結果

    無事、動作確認できました。

    学習させる教師画像の作成

    それでは、教師データセットとなる自前画像を準備します

    今回は、手元にあった2つの本の検出にチャレンジしてみます。

    2つの本の写真を、スマホで合計18枚ほど撮ってみました。

    アノテーション(タグ付け)

    次に、アノテーションを作成する便利なツールがあるので、以下からダウンロードしていきます。

    【tzutalin.github】
    https://tzutalin.github.io/labelImg/

    labelimg を使う

    「labelimg」というソフトを使います。

    起動すると、下の画面が表示されますので、以下を指定してください。

    「Open Dir」:18枚の写真が入ったフォルダ
    「Change Save Dir」:アノテーションファイルを保存するフォルダ

    1枚目の写真が開きますので、検出したい対象の左上で「w」を入力し、右下まで枠を描いてください。

    タグとしては、本の名前の「D2C」としました。

    「Save」により、アノテーションとしてファイルに保存されます。

    次の画像へ

    保存したら、「Next Image」で次の画像に移ります。

    これを繰り返し、18画像のアノテーションを作成してください。

    ちなみに、もう一冊のタグは「ADLER」としました。

    学習の前準備

    学習の前に、準備が必要です。

    ファイルの配置

    ここで、フォルダ構成とファイル構成を説明しておきます。

    アノテーション

    1keras-yolo3/VOCDevkit/VOC2007/Annotations
    2  --- xxx001.xml

    教師画像

    1keras-yolo3/VOCDevkit/VOC2007/JPEGImages
    2    --- xxx001.jpg

    学習ファイルリスト

    1keras-yolo3/VOCDevkit/VOC2007/ImageSets/Main
    2    --- train.txt
    3    --- val.txt
    4    --- test.txt

    ファイル名から拡張子を除いたものを列挙し保存

    以下のように、ファイル名から拡張子を除いたものを列挙して、「train.txt」、「val.txt」、「test.txt」に保存してください。

    1xxx001
    2xxx002
    3xxx003
    4    :
    5    :

    最終行にも改行が必要です。

    アノテーションファイルの形式変換

    次に、アノテーションしたファイルを YOLOv3 用に変換します。

    「vocannotation.py」の6行目の classes を以下のように変更します。

    1classes = ["D2C","ADLER"]

    YOLOv3 のアノテーションに変換します。

    1(tf114)>python voc_annotation.py

    3つのファイルが作成されます。

    12007_train.txt
    22007_val.txt
    32007_test.txt

    voc_classes.txtの修正

    「model_data/voc_classes.txt」を修正します。

    1D2C
    2ADLER

    weights をコンバート

    weights をコンバートします。

    1(tf114)>python convert.py -w yolov3.cfg yolov3.weights model_data/yolo_weights.h5

    学習の実行

    さて、いよいよ、学習を実行してみましょう!

    1(tf114)>python train.py

    待ちます…

    待ちます…

    待ちます…

    すると、学習済みモデルができあがります

    1keras-yolo3/logs/000/trained_weights_final.h5

    学習状況の確認

    「Annaconda Prompt」をもう一つ起動し、「tf114」の環境を起動します。

    1(base)>conda activate tf114
    2(tf114)>tensorboard --logdir logs
    3:
    4:
    5TensorBoard 1.14.0 at http://localhost:6006/ (Press CTRL+C to quit)

    ログのグラフ

    ブラウザから、以下の URL にアクセスすると、ログをグラフ化したものを見ることができます。

    【TensorBoard の URL】
    http://localhost:6006/

    動画ファイルで物体検出!

    それでは、準備しておいた動画ファイルを物体検出にかけましょう!

    動画ファイルを「test.mp4」として保存しておきます。

    1(python)>python yolo_video.py --model logs/000/trained_weights_final.h5 --classes model_data/voc_classes.txt --input test.mp4

    結果

    「D2C」と「ADLER」の2つの本が、別々に検出されました!

    さいごに

    自前画像での物体検出、いかがでしたでしょうか?

    準備する教師画像や、そのアノテーションの仕方、そのほか検出精度に関わる項目は多くあります。

    ですが、精度を上げるための正解は、誰にもわかりません

    Try & Error を繰り返すことが、ご自身の経験を高めていただくための第一歩です。

    今回の手法も併せて、いろいろ試してみてください!

    次回の記事はこちら

    featureImg2020.05.18Windows 10 で YOLOv3 を自前画像で学習させる(物体検出編)【機械学習】後編:物体検出モデル YOLOv3 を自前画像で学習させようこの記事では、物体検出する機械学習モデル「YOLOv3」を...

    こちらの記事もオススメ!

    featureImg2020.07.28機械学習 特集知識編人工知能・機械学習でよく使われるワード徹底まとめ!機械学習の元祖「パーセプトロン」とは?【人工知能】ニューラルネ...

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    関連記事

    featureImg2020.05.15Windows 10 で YOLOv3 を自前画像で学習させる(環境構築編)【機械学習】物体検出モデル YOLOv3 を自前画像で学習させよう「YOLOv3」とは、物体検出(画像から物体の位置と種類を検出)...

    featureImg2020.05.18Windows 10 で YOLOv3 を自前画像で学習させる(物体検出編)【機械学習】後編:物体検出モデル YOLOv3 を自前画像で学習させようこの記事では、物体検出する機械学習モデル「YOLOv3」を...

    featureImg2020.05.19Tensorflow2 で YOLOv3 を動かしてみた!【機械学習】Tensorflow2 で YOLOv3 を動かし画像から物体検出をしようこの手の新しいソフトウェアは、バージョンが変...

    featureImg2020.06.23Pytorchを使ってYOLOv3で物体検出をしてみた!【機械学習】Pytorch(パイトーチ)とは?今回は、Pytorch(パイトーチ) を使って、YOLOv3で物体検出してみたいと思...

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    広告メディア事業部

    広告メディア事業部

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background