(そして実際に、50%を越えなければ、まったく使い物になりません), Precisionも感覚的には、60を超えると、「まぁまぁ分かっているな」。70を超えると「少し間違えるかな」、80を超えると「間違えなくなってきたな」、90を超えると「過学習かな」と疑うレベルです。, イテレーションが進むとLossが減り、mAPが向上します。 交通部 R&Dセンター. ファイルパスとしては以下のようになります。, 以下のコマンドを実行して学習を開始します。Windowsでは実行コマンドが異なるようですのでご注意。

今回はGoogleColab・YOLOv3・darknetの環境でYOLO形式の独自データセットを学習させる手順を紹介していきます。 深層学習で使用されるデータセットの形式は数種類あるようですが、今回はその中で YOLO形式 のデータセットを用意して実施していきます。.

学習データと評価データの割合:70%、30%, 1カテゴリ100枚で10区分の場合、かつ学習データと評価データを7:3とすると、700枚が学習に使われます。バッチサイズ32枚とすると、700÷32≒20イテレーションで1エポックとなります。, 推奨値である区分数*2000イテレーションを正とすると、20000イテレーション、1000エポックです。, 1エポックで評価データとして300枚(1カテゴリ30枚)が使われます。APを求める母数として、わずか30枚に対する割合や精度だということに注意したほうが良いです。1枚の誤検知があると3%上下するということ。, 何をもって、モデルの精度や検出率を評価するかというのは、「課題に対して異なる」というのが真のようですが、まず、YOLOで良く出て来る指標を押さえておきます。, iOUは、50%で評価することが多いようです。面積で半分と言えば、縦横がどちらか半分くらいずれててもいいでしょう?というレベル。75%の面積の一致とは、縦横のいずれも半分ずれていないよというレベル。, ...が、アノテーションデータの囲い方にもシビアな品質の追求が必要です。そこまで行ってしまうと、ちょっと現実的ではない気がしますね。, mAPは、完全にでたらめに予測をしても50%は出せるでしょうから、60%以上なければ、有意な検出では無いのでは?と想像できます。 【物体検出】vol.14 :YOLOv4 vs YOLOv3 ~ 同じデータセットを使った独自モデルの性能比較; お問い合わせ ご意見・ご質問などお気軽にお問い合わせ下さい。 ナカシャクリエイテブ株式会社 富士見事務所 TEL : 052-228-8733 FAX : 052-323-3337

「YOLOv3」とは、物体検出(画像から物体の位置と種類を検出)する機械学習モデル です。 この「YOLOv3」を、Windows 10 上で動かしてみたいと思います! どんなものができるの? 今回は、YOLOv3 を動作させる環境を構築します。

Copyright © 2020 NAKASHA CREATIVE CORPORATION All Rights Reserved. Copyright © 2020 NAKASHA CREATIVE CORPORATION All Rights Reserved.

〇Yolo-v3 and Yolo-v2 for Windows and Linux Kazuki Room ~電子工作・ロボット・3Dプリンター・RaspberryPi~ by, Yolo-v3 and Yolo-v2 for Windows and Linux, How to train YOLOv2 to detect custom objects, 解決!「Arduino ‘read’ was not declared in this scope」というコンパイルエラーについて, Blenderと3Dプリンターを使用してミニ四駆を作ってみた!【3Dプリンターで出力可能な3Dデータを作ります!】, RaspberryPiとMJPG-Streamerでライブストリーミングをする方法, JetsonNanoが搭載されているJetbot(AIロボットカー)を動かしてみた, TACOデータセットとは?TACOのサイトにゴミの画像をアップロードしてAI(深層学習)の学習に役立てよう!, 【深層学習】Colab・YOLOv3・darknet でYOLO形式の独自データセットを学習させる手順. イテレーション:(カテゴリ数*2000)以上 〇Google ColabでYOLOの学習を行う, 公式ページのほうにも学習方法などが記載されています。 mAP >0.7, class_id:1、2でAPが低いことが分かります。区分ごとに正解率が高いものと低いものがあることが分かります。(→原因が、データ量の偏りにあるのかどうかを確認すること!), 特に、class_id:2のFPが11と高いです。(FP/(TP+FP)=28.9%)。これは誤検知の割合を示し、検知した中に、本来検知されるべきではないものを示します。区分が紛らわしいか、特徴が他のカテゴリと被っていないかを確認する必要があります。, 次に、これらの各イテレーション毎に、各カテゴリのTP、FPがどのように推移しているかを確認すると、各カテゴリごとに学習が完了したかどうかを推測できます。, TPがあるところで頭打ち、FPが下げ止まりしていれば学習が収束(完了)しています。FPが高い数値でそれ以上下がらない場合は、特徴を上手く捉えられていない可能性があります。, データが少ないか、他のカテゴリと特徴が被っている、未定義の紛らわしいものがあるか。カテゴリの戦略か、学習データを見直す必要があるかもしれません。, イテレーション毎の重みを使って、テストを実行した際、mAPやLossの数字だけではなかなかわからない、"体感"が確かにあります。, Lossが0.1台になり、mAPが80%を超えるようになると、学習データを使った検証で誤認はほとんどありません。, では、それが絶対ベストな状態になっているかというと、実はそうでもなく途中のイテレーションのモノを採用した方が良い場合もあったりします。, 実は、この辺りの都市伝説的なことは、「validationに使うデータが、本当に偏りなく、いろんなパターンを網羅しているのか?」が怪しいんじゃないかと思っています。もっともっとデータを増やした時に、徐々に部分最適解ではなく、全体最適解に収束していくのかもしれません。, どこまで行っても、学習データにおいて良く認識できていることと、汎化性能が確保されているかどうかは、学習時(及び学習時に分割したデータを使ったvalidationにおける)LossやmAPといった指標だけではわかりませんので、あとは色々な(学習や評価に使ったことがない)動画や、紛らわしく意地悪に加工したデータで検証します。, これまでに紹介している当社のゲーミングPC(普通に20万円台で購入できるものです)において、, ●富士見事務所 TEL : 052-228-8733 FAX : 052-323-3337

パス一覧は「train.txt」と「test.txt」で8:2ぐらいとなるようにランダムに割り振っておきます。, 作成した「obj」フォルダの中に学習で使用する画像とアノテーションファイル一式をアップロードします。 〇YOLO: Real-Time Object Detection

【物体検出】vol.2 :YOLOv3をNVIDIA Jetson Nanoで動かす, 【物体検出】vol.1 :Windowsでディープラーニング!Darknet YOLOv3(AlexeyAB Darknet), 【物体検出】vol.17 :Darknet YOLOv4でRTX2080Superのベンチマーク(GTX1070の1.7倍!), 【物体検出】vol.16 :Darknet YOLOv4の新機能 -save_labelsで"検出結果を学習データに活用する", 【物体検出】vol.15 :Darknet YOLOv3→YOLOv4の変更点(私家版), 【物体検出】vol.14 :YOLOv4 vs YOLOv3 ~ 同じデータセットを使った独自モデルの性能比較, MAP = Mean Average Precision、平均適合率の平均。複数のカテゴリのAPの平均。1イテレーションor1エポック単位で各カテゴリのAPの平均を出して、学習が収束しているかどうかの目安にする, 学習データに最適化しすぎて、それ以外のデータではそれほどではない状態(専門バカ、教えたことしかできない子), 推奨:1カテゴリ5000、10000枚(高い精度と検出率、差異が少ない対象を扱っている場合、汎化性能を求める場合), 1つの物体に対して、2つの区分を回答してしまっていた部分が、正しく一つだけ検出するようになった, 640*480ドットの荒い動画でも十分に認識できます。(所詮416ドットで切り出している。これより小さいとダメかもしれませんね), 2物体重なっていても正確に検出します。(3物体以上重なっている場合はダメのようです), WindowsゲーミングPC(GeForce GTX1070)で640x480ドット@30fpsの動画を、40-50fpsで認識できました。4K動画の場合で15fps程度です。, 720pのUSBカメラでリアルタイムに物体検出させた場合、34.2fps出ました。. YOLO V3にオリジナルデータを学習させたときのメモ。この記事はチェックができていないので、注意してください。Yoloで学習させるためには以下のものを準備する。 1. モノづくりが好きで、ブログでは電子工作やゴミ回収ロボットのことを書いています。, ゴミ回収ロボットを一緒に開発してくれる方がいらっしゃいましたらお問い合わせフォームからご連絡ください。, Kazuki Room ~電子工作・ロボット・3Dプリンター・RaspberryPi~, #!wget https://pjreddie.com/media/files/yolov3.weights, //pjreddie.com/media/files/darknet53.conv.74, #start threading with the Timer module each element of the array. これまでyolov3で作ってきた学習データを、無修正でyolov4でそのまま学習させると性能が上がるのかどうか?また、検出速度の向上はあるのか? 今回はその辺りを検証し、報告します。 ただし、yol Kazuki Room ~電子工作・ロボット・3Dプリンター・RaspberryPi~

電子工作やロボットの情報をメインに発信していきます!, 今回はGoogleColab・YOLOv3・darknetの環境でYOLO形式の独自データセットを学習させる手順を紹介していきます。, 深層学習で使用されるデータセットの形式は数種類あるようですが、今回はその中でYOLO形式のデータセットを用意して実施していきます。, 〇物体検出に独自データを学習させる(顔ロボット) 学習用データの準備 データ保存用のディレクトリを作る。 この例

【物体検出】vol.1 :Windowsでディープラーニング!Darknet YOLOv3(AlexeyAB Darknet), 【物体検出】vol.17 :Darknet YOLOv4でRTX2080Superのベンチマーク(GTX1070の1.7倍!), 【物体検出】vol.16 :Darknet YOLOv4の新機能 -save_labelsで"検出結果を学習データに活用する", 【物体検出】vol.15 :Darknet YOLOv3→YOLOv4の変更点(私家版), 【物体検出】vol.14 :YOLOv4 vs YOLOv3 ~ 同じデータセットを使った独自モデルの性能比較.

交通部 R&Dセンター.

〒460-0014 愛知県名古屋市中区富士見町13−22 ファミール富士見711  地図 YOLOv3の環境構築が終わり、一通り学習済モデルで「おぉぉぉ」と興奮した後は、オリジナルモデルの学習に興味が沸いてきます。, Windows 10上のDarknetでYolo v3をトレーニングしOpenCVから使ってみる, 1カテゴリ当たり100枚で「試しにやってみる」 ⇒ PoC(Proof of Concept:仮説検証), 角度、大きさ、色相、明度の異なる複数のバリエーションを偏りなく集め、1カテゴリ1000枚を達成します。⇒ 精度を向上します。, 誤検知のデータを修正、データの水増しをしながらブラッシュアップを繰り返していくと、結果的に5000枚、10000枚になります。, 1カテゴリ画像100枚、10カテゴリ(1000枚)を集めるためにはおよそ3日のデータ作成時間と、1日の学習、1日の評価時間が必要です。, データ量が10倍になればデータ作成時間は10倍(30人日)ものボリュームに。10000枚ならさらに10倍。どこまで費用をかけられるのか?が制限になります。, https://github.com/AlexeyAB/darknet に書かれていることですが、, バッチサイズ:64で試す→GPUメモリが足りなければ32に変更 (Lossが少なく、mAPが高ければ高いほど良い。)

ファイルは以下の引数で指定している場所に正しく配置してある必要があります。, 1クラスであれば8時間から12時間程度で学習が終わることが多いようです。クラスの数が増えるとそれだけ学習する時間も増えることが分かっています。学習済みの重みができたら性能を確かめていこうと思います。, Colabで学習を開始してそのまま操作を行わないと90分でセッションが切れてしまいます。今回はその問題を自動化ツールの「UWSC」で解決します。, ⑦上記の処理を一定時間で繰り返し行えるように「.UWS」ファイルの中身を編集します。, あとは学習を開始させたらUWSCの再生ボタンを押してセッションが切れないようにします。, KAZUKIです。 〒460-0014 愛知県名古屋市中区富士見町13−22 ファミール富士見711  地図 #and when times[x] arrives use function gfg to clear console. 〇How to train YOLOv2 to detect custom objects, 使用したい画像を収集し、今回の独自データセットとして使用します。画像収集が完了したらアノテーションツールを使用してアノテーションファイルを作成していきます。, 今回はペットボトルの画像を30枚用意して管理しやすいように「bottle_0001.jpg」のように全てリネームしておきました。リネームは以下の記事で紹介したツールを利用します。, また、今回使用する画像はリサイズして画像の大きさをそろえておきました。データセットで使用する画像はサイズが一定のものがよいと書いてある記事もありますが、こちらについては別途考察していきたいと思います。, アノテーションツールにはLabelingを使用しました。画像を読み込んでタグ付けを実施していきます。YOLO形式で保存されるように設定を切り替えておきます。, 保存をすると画像と同じフォルダにアノテーションファイルが出力されます。一枚の画像(.jpg)に対して一枚のアノテーションファイル(.txt)が出来上がっていることを確認します。, GoogleColabのページに移動して新しいノートブックを作成します。名前は任意です。, 以下のコマンドを順番に実行していきます。必要なものに関してはこちらのページで公開されているものをそのまま使用しています。, YOLOを動作させるためにdarknetフレームワークを取得します。デフォルトのディレクトリから移動していない場合はContentフォルダ配下にダウンロードされます。, 〇darknetフォルダ配下に「darknet53.conv.74」をダウンロードしておきます。リストコマンドで「darknet53.conv.74」ファイルが増えていることを確認します。, ここからは準備しておいた画像や設定ファイルをColabにアップロードしていきます。ファイルのダウンロードおよびアップロードは左側のメニューから右クリックで行うことができます。, まずは以下のパスにある「yolov3.cfg」をローカルにダウンロードし、「yolo-obj.cfg」にリネームします。, リネームしたら中身を以下のように書き換えます。まずはbatchとsubdivisionsを書き換え。, 次に学習するクラスの数に合わせてclassesを書き換えます。今回はbottleだけなので1を設定します。書き換えるのは610 行目、696 行目、783 行目となります。, 次にフィルターを書き換えます。フィルター数は以下の計算式の結果に書き換えます。今回はクラス数が1なので結果は18となります。書き換えるのは603 行目、689 行目、776 行目となります。