本家Yolo(こちらはYOLOv2で(classes+5)x5)とは、この部分の計算方法が違う。cfgファイルは、yolov3.cfgでもyolov3_voc.cfgでもあまり変わらないようだ(ただしパラメーターが微妙に違う)。解説の通りyolov3_voc.cfgを使う方が無難。obj.namesの変更点obj.namesにクラス名を1つ追加。今回はFaceとした。classesの数値を変更。これが忘れがちで、学習時原因不明エラーの要因となる。さんのdarknetは状況を確認するためにlossの数値と学習回数を関連付けたグラフが表示される。最適学習状況の判別機能が備わっている。オプションの指定によりmApの現状の数値がグラフに書き込まれる。学習は8000回目ぐらいが上限で良い様だ。コマンドを実行して確認しiouとmapの一番高いものを選ぶLossは小さい方が良いが、データによりそれ以上下がらない場合あり。0.3以下が望ましいmApが同じでも認識が良好である場合とそうでない場合がある。7000回ぐらい試してサンプル画像をTESTしてみるのがベターの様だ。Lossが1以下に下がらない場合、クラス数設定が各部で違っている場合が多い=使えない。mapが90%を越すころから使い物になってくる。開始から2.5時間から3時間の間。最初の1000回の所要時間で学習終了時刻が、ほぼ予想できる(当たり前か...)。以下の結果で1000回あたりほぼ50分必要だった。この時点でloss=0.273なぜかmapが正しく表示されていない。416x416は7000回目のデータを採用した。cfgファイルのWEIGHTとHEIGHTについて608x608指定の場合メモリーオーバー対策にsubdivisions=16とした。1000回あたり約130分必要。この時点でloss=0.2766グラフでもわかる様に収束が遅くばらつきがある。608x608は6000回目のデータを採用した。画像でテストしてみると、今回はなぜか608x608は、416x416より認識率が落ちる様だ。LEPTON画像は160x120の画像なので、少し無理があるのかもしれない。最終的に採用したデータは416x416で学習させた7000回目のものとした。(最初に貼り付けた動画はこのデータを使ってます)認識時はcfgファイル内容を608x608に変更すると認識率は上がる。スピードは犠牲となる。テストデータの比率を10%としたが、これを10%以上に上げると多少認識率が上がる可能性はある。YoloV2のジャンケン3クラス(416x416)の場合で1000回あたり約60分だった。Xavier単独でも学習作業が可能であることを示す。世の中クラウド学習が方々で話題になってますが、色々制約があるのも事実だと思われます。身近な機材で目の前で刻々と変化する学習状態を確認するのも、また、オツなものですよ。(2日も3日も動かすわけじゃないので)ってことで。16bit浮動小数点YOLOを動かしてみました。アプリを立ち上げた途端止まってしまったり、早そうだけどそうでも無いような感じでした。2つのスレッドで動かしているため、認識スピードの計測が難しそうなので無視していました。YOLO3は今回作成したソフトの場合、TX2ではメモリーオーバーで動かないようですが、本来のYOLO3が遅いながらも実行できるので、もう少しトライしてみる価値がありそうです。引き続きYOLO2のweightデータを使います。インストール方法は前回の通りです。launchedyolov2.chgの設定が原因のようでした。最初の方のbachとsubdivisionsの設定数値を下記のようにすると、最悪2回程度のアプリ立ち上げ直しで上手く動きます。要はメモリー設定がらみです。time,より正確に複数スレッドを動作させるために修正したソースofApp.cppを最後に付けました。これで、かなり正確に認識スピードが計測できるようになりました。認識スピードや認識の正確さに関係のあるyolov2.cfgのweightとheightの値を両方とも試しに352に設定してみます。これで実行した動画が........。.........画像上左上のターミナル画面が認識スピードここで確認できるのは、後半ターボが効いているように最高30~40fpsくらいで画像の認識をしている?こと。画像で写しているMacBook上の動画は、早回ししているものを利用していますが十分追従しているようです。エエーホントかよーでした。CAMERAは最高30fpsなので、1コマあたり2回ぐらい認識している場合があるようです。動画前半のように、画像全体が白っぽいと15fpsぐらいに下がってしまうところが興味深いのですが、このあたりはガンマ補正で修正できる範囲です。前回と違って明らかにクラスを表示しているボックスの表示が早いことが確認できると思います。認識したいクラスを絞っで、独自の学習をさせたデータを利用すると、かなりの物が作れそうです。最新のDarknetでは14fpsが上限でした。この当時早くなったか只今調査中です。ちなみに608x608では5.5fps前後、416x416では10.8fps前後でした。こちらの方は画像のホワイトバランスの影響が出ないので、TX2にとって352x352(32の倍数)前後の設定がもっとも効率が良いのかもしれませんね。現場で今回のソースを応用する場合、Xavierは必要ないかもしれません。...)以下ofApp.cppここでのビデオ入力画像の大きさを640x480(setup()内)に設定しています。これを大きくすることでYOLOの認識率がアップするようですが、TX2にとっては結構負担になるので入力画像は小さくしています。今回YOLO側の読み込み画像が352x352なのであまり問題にならないようです。DetectNet部分をマルチスレッドにする。DetectNet部分をマルチスレッドにする。//2つのスレッドのどちらかがスタートできるまで待つ-->全体のFPSが下がるが正確な計測ができる。これでないとプログラムがハングする。必要なし!!スレッドが動いていなければどちらか又は両方表示させる。dragInfo){}では。