あきらぼ

テック系ブログ

物体検出モデルYOLOv5の使い方

こんにちは。

 

今回は物体検出のモデルYOLOv5を使って騒音がすごい住んでいるマンション前の交通量を計ってみるために使い方を確認してみました。

 

 

 

YOLOv5とは

まず、今回参考にしたのはYOLOv5のこちらのレポジトリ。

github.com

 

YOLOv5はその名の通りYOLOというベースのモデルからバージョンアップしていったものになります。

 

2015年にワシントン大学のJoseph Redmon氏によって提案された元々のベース(YOLO)の論文はこちらになります。

[1506.02640] You Only Look Once: Unified, Real-Time Object Detection

 

まずベースのアイデアの説明の前に識別(class probability prediction)と物体検出の違いについて簡単に説明させてください。

 

識別は以前行ったVGG16画像識別のように画像内の特徴量を検出してその画像がなにに該当するのか近しいものを推測します。

aki-lab.hatenadiary.com

 

一方、物体検出はその該当する物体が画像のどの部分にいるのかという追加のタスクが必要になります。

そこで簡単に思いつくのが識別を再帰的に画像の一部分に適応することで物体位置を検出するというスライディングウィンドウ法に代表されるような物体検出方法です。

しかし、こちらの方法では再帰的に識別処理を行わなければいけないので、計算負荷が大きくなってしまいリアルタイム性の高いアプリケーションには使用できません。

 

そこで、YOLOではその名前がYou Only Look Onceを示す通り、単一のNeural Networkで物体検出(物体の場所)と識別(物体が何か)を同時に行うことで一度の推定で物体検出を行おうというモデルになっています。

 

また、単一のNNとなっているので物体検出の最適化(損失)も一緒に評価できるので学習による物体検出性能の改善がしやすいというのも特徴となっています。

 

この論文をベースとしてv5までアップデートされています。

概要はこちらに説明があります。

YOLOv5 Documentation

 

また、YOLOv5はスマホアプリとしてもリリースされているんで簡単に試すことができます。

YOLOv5 🚀 and Vision AI ⭐

 

PyTorchで使ってみる

実際にYOLOv5を使ってみます。

PyTorchから直接モデルをしようできるので、公式のサンプルに従って以下のようにしました。

識別する画像は公式に従ってジダンです。(笑)

 

results.show()

リザルトのオブジェクトに対してshow()を行うと以下のようにラベリングされた画像を表示してくれます。

 

results.crop()

次にcrop()です。

物体の識別ごとに画像を切り出しくれます。

切り出した画像は実行ディレクトリにrunsというディレクトリが作られてその中に保存されます。

ディレクトリはこちら。

 

一点注意ですが、上記のshow()メソッドを一度使用してからcropするとラベルが残ってしまいます。

 

results.print()

次にprintメソッドです。

以下のように何を検出したのかと処理速度を表示してくれます。

image 1/1: 720x1280 2 persons, 2 ties
Speed: 232.0ms pre-process, 447.0ms inference, 6.0ms NMS per image at shape (1, 3, 384, 640)

 

results.pandas()

最後にpandasメソッドです。実際はpandasのxyxy[0]を参照しないと何がどこで検出されているかは分かりません。

複数画像を使うケースだと0番目以外も参照する必要があるのでしょうか。

恐らくこの物体検出モデルを応用していく上でもっとも使用すると思います。

         xmin        ymin         xmax        ymax  confidence  class    name
0  743.290527   48.343781  1141.756470  720.000000    0.879860      0  person
1  441.989594  437.336670   496.585114  710.036255    0.675119     27     tie
2  123.051056  193.238037   714.690674  719.771301    0.666694      0  person
3  978.989807  313.579468  1025.302856  415.526184    0.261517     27     tie

このように検出した物体の位置、物体のクラスがpandasのデータフレームとして取得することができます。

 

次回はこのデータフレームを使って、実際に道路の動画から自動車を検出してみます。

イメージはこんな感じです。

 

以上、YOLOv5の簡単な使い方でした。