Windows 10 で YOLOv3 を自前画像で学習させる(物体検出編)【機械学習】
IT技術
後編:物体検出モデル 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 をコマンドから使える方は、以下でダウンロードできます。
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 を繰り返すことが、ご自身の経験を高めていただくための第一歩です。
今回の手法も併せて、いろいろ試してみてください!
次回の記事はこちら
こちらの記事もオススメ!
2020.07.28機械学習 特集知識編人工知能・機械学習でよく使われるワード徹底まとめ!機械学習の元祖「パーセプトロン」とは?【人工知能】ニューラルネ...
2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...
関連記事
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ
「好きを仕事にするエンジニア集団」の(株)ライトコードです! ライトコードは、福岡、東京、大阪、名古屋の4拠点で事業展開するIT企業です。 現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。 いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。 システム開発依頼・お見積もり大歓迎! また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」を積極採用中です! インターンや新卒採用も行っております。 以下よりご応募をお待ちしております! https://rightcode.co.jp/recruit