
Windows 10 で YOLOv3 を自前画像で学習させる(物体検出編)【機械学習】
2021.12.20
後編:物体検出モデル YOLOv3 を自前画像で学習させよう
この記事では、物体検出する機械学習モデル「YOLOv3」を、Windows 10 上で動かす方法を解説しています。
前回は、YOLOv3 を動作させる環境を構築しました。
今回は、YOLOv3 を自前画像で学習させたいと思います!
どんなものができるの?
最終的に目指すのは、以下のようなイメージです。
2つの本が、別々のものとして検出されています。
「物体検出編」では、いよいよ、これを目指します。
前回の記事はこちら
物体検出までの流れ
- ソースコードの準備
- 学習済みモデルでの動作確認
- 学習させる教師画像の作成
- 学習の前準備
- 学習の実行
- 学習状況の確認
- 動画ファイルで物体検出!
YOLOv3 のソースコードの準備
始めに「YOLOv3」のソースコードを準備しましょう。
Keras 版の YOLOv3 のコードがありますので、こちらからダウンロードします。
【GitHub】
https://github.com/qqwweee/keras-yolo3

「keras-yolo3-master.zip」というファイルがダウンロードされたら、「keras-yolo3」として適当な場所に展開しましょう。
github をコマンドから使える方
github をコマンドから使える方は、以下でダウンロードできます。
1 | git 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 コマンドを使える方は、以下でダウンロードできます。
1 | wget https://pjreddie.com/media/files/yolov3.weights |
weights を Keras 用に変換
weights を Keras 用に変換します。
「Anaconda プロンプト」を起動し、前回の記事で作成した仮想環境を起動します。
1 | activate conda tf114 |
プログラムの実行
「keras-yolo3」ディレクトリに移動し、以下のプログラムを実行します。
1 | (tf114)>python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5 |
実行時のログ
以下は、実行時のログの最後です。
1 2 3 4 5 6 7 | Total params: 62,001,757 Trainable params: 61,949,149 Non-trainable params: 52,608 __________________________________________________________________________________________________ None Saved Keras model to model_data/yolo.h5 Read 62001757 of 62001757.0 from Darknet weights. |
物体検出の動作確認
YOLOv3 で物体検出のテストをしてみます。
そのまえに、必要なパッケージをいくつかインストールしておきましょう。
1 | pip install pillow matplotlib opencv-python |
画像から物体検出をしてみます。
1 | (tf114)>python yolo_video.py --image |
物体検出したいファイル名を聞かれます。
※ 画像は、ネットから適当なものをダウンロードして保存しておきましょう。
1 2 3 4 5 6 7 8 9 | Input image filename:dog.jpg (416, 416, 3) Found 5 boxes for img dog 1.00 (63, 113) (157, 268) truck 0.85 (240, 42) (343, 84) car 0.38 (240, 42) (343, 84) bicycle 0.47 (69, 70) (126, 109) bicycle 0.99 (82, 59) (282, 219) 0.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」としました。
学習の前準備
学習の前に、準備が必要です。
ファイルの配置
ここで、フォルダ構成とファイル構成を説明しておきます。
アノテーション
1 2 | keras-yolo3/VOCDevkit/VOC2007/Annotations --- xxx001.xml |
教師画像
1 2 | keras-yolo3/VOCDevkit/VOC2007/JPEGImages --- xxx001.jpg |
学習ファイルリスト
1 2 3 4 | keras-yolo3/VOCDevkit/VOC2007/ImageSets/Main --- train.txt --- val.txt --- test.txt |
ファイル名から拡張子を除いたものを列挙し保存
以下のように、ファイル名から拡張子を除いたものを列挙して、「train.txt」、「val.txt」、「test.txt」に保存してください。
1 2 3 4 5 | xxx001 xxx002 xxx003 : : |
※ 最終行にも改行が必要です。
アノテーションファイルの形式変換
次に、アノテーションしたファイルを YOLOv3 用に変換します。
「vocannotation.py」の6行目の classes を以下のように変更します。
1 | classes = ["D2C","ADLER"] |
YOLOv3 のアノテーションに変換します。
1 | (tf114)>python voc_annotation.py |
3つのファイルが作成されます。
1 2 3 | 2007_train.txt 2007_val.txt 2007_test.txt |
voc_classes.txtの修正
「model_data/voc_classes.txt」を修正します。
1 2 | D2C ADLER |
weights をコンバート
weights をコンバートします。
1 | (tf114)>python convert.py -w yolov3.cfg yolov3.weights model_data/yolo_weights.h5 |
学習の実行
さて、いよいよ、学習を実行してみましょう!
1 | (tf114)>python train.py |
待ちます…
待ちます…
待ちます…
すると、学習済みモデルができあがります。
1 | keras-yolo3/logs/000/trained_weights_final.h5 |
学習状況の確認
「Annaconda Prompt」をもう一つ起動し、「tf114」の環境を起動します。
1 2 3 4 5 | (base)>conda activate tf114 (tf114)>tensorboard --logdir logs : : TensorBoard 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 を繰り返すことが、ご自身の経験を高めていただくための第一歩です。
今回の手法も併せて、いろいろ試してみてください!
次回の記事はこちら
こちらの記事もオススメ!
関連記事
書いた人はこんな人

- 「好きを仕事にするエンジニア集団」の(株)ライトコードです!
ライトコードは、福岡、東京、大阪の3拠点で事業展開するIT企業です。
現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。
いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。
システム開発依頼・お見積もり大歓迎!
また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」「WEBディレクター」を積極採用中です!
インターンや新卒採用も行っております。
以下よりご応募をお待ちしております!
https://rightcode.co.jp/recruit
ライトコードの日常12月 1, 2023ライトコードクエスト〜東京オフィス歴史編〜
ITエンタメ10月 13, 2023Netflixの成功はレコメンドエンジン?
ライトコードの日常8月 30, 2023退職者の最終出社日に密着してみた!
ITエンタメ8月 3, 2023世界初の量産型ポータブルコンピュータを開発したのに倒産!?アダム・オズボーン