Yolov5で標識認識を作る


TL;DR

Yolov5を転移学習させて道路標識の検出器を作った、それだけの記録です。

Yolov5

下のリンク先の実装を使いました。
COCOを使った重みだったり、学習の時には最適なアンカーボックスの設定、YouTubeのurlを指定しての推論など、至れり尽くせりな感じです。転移学習をする場合も、もともと備わっている関数を呼び出すだけで実行できました。

Dataset

色々調べたところ、Mapillaryのデータセットが標識の種類、画像の枚数共に良さそう。
割合は少ないですが、日本の標識も含まれていました。

中身はこんな感じのよくあるObjectDetectionのアノテーションがついたデータセットで、

学習データに含まれる標識はこんな感じ。
全て合わせると401種類の標識のラベルがありますが、3(other-sign)のみ、いろんなタイプの標識を含んだものになっているようです。

全てのラベルとサンプルの対応は下のリンク先にまとめてあります。

学習

./data/hyps/hyp.scratch-low.yamlを使って200epoch学習したところで、左右の反転により特定のラベルの学習がうまくいっていないことに気づき、左右反転をOFFにしてさらに50epoch学習させました。

学習結果はこんな感じ。

かなりサイズの小さいラベルが多いためか、mAPはなかなか上がり切らなかった印象でした。

トラッキング

せっかくなので、検出した標識をトラッキングさせてみました。
検出した標識を表示/消去させるタイミングにヒステリシスをつけていますが、ほとんどPytorch実装のDeepSORTをそのまま使っています。

元にしているのはこちらの実装。

以上