YOLOv7にオブジェクトカウンターを付ける

AI実装

YOLOv7は製造業界や医療業界など、様々な分野で活用検討されているモデルです。今回は物体検出したバウンディングボックスの数を数えるカウンターを搭載していきます。

搭載するカウンターの特徴は以下になりますのでご注意ください。

  • 画像(動画の1フレーム)に映っている物体の数を検出します。
  • オブジェクトトラッキング機能は搭載していないので物体を累計することはできません。例えば、通過する車の台数を数えるのはできません。その瞬間に存在する車の台数を数えることはできます。

それでは実装していきましょう👍

※同じく高性能なモデルであるYOLOv5との比較を過去の記事にしているので、詳しく知りたい方は↓も併せてご覧ください。

※過去にYOLOv5でもカウンターを付けています↓。今回も原理は同じです。

オブジェクトカウンターの仕組み

YOLOv7のオブジェクトカウンターの仕組みはとてもシンプルです。そもそもYOLOv7の中で物体検出するクラスとそれに対応するオブジェクトの数を数えているコードがあります!

その情報をつかってOpenCV(cv2.putText)で文字を画像もしくは、動画中へ描写しているだけです。

これをわかりやすく実装してくれている方がいますので、今回は↓のコードを使わせてもらいます。

GitHub - muratali016/Yolov7-Object-Counter-Custom-Funcitons: Object Counting with the newest yolov7
Object Counting with the newest yolov7. Contribute to muratali016/Yolov7-Object-Counter-Custom-Funcitons development by creating an account on GitHub.

重要な部分だけ説明すると、cv2.putTextをうまく使っています。

detect_and_count.pyの中身を確認すると、以下のコードがあると思います。

cv2.putText(im0, str(a) ,(int(align_right),align_bottom), cv2.FONT_HERSHEY_SIMPLEX, 1,(45,255,255),1,cv2.LINE_AA)

簡単に説明すると、im0は入力画像、str(a)でカウント数が表示されるようになっています。後半の数値で表示される位置、フォントサイズ、文字色などを調整することができます。慣れてきたら自分好みにカスタマイズすると面白いです。putTextの詳しい説明はここにありました。

オブジェクトカウンターを実装する

まずはYOLOv7で物体検出ができるようにセットアップします。YOLOv7の実装は過去の記事を参照に実施してください。

GitHub中段の”Performance”の表に重みデータ(****.pt)があるのでダウンロードしてください。今回は”yolov7.pt”を使います。ダウンロードしたら、作業フォルダ直下にweightsフォルダを作成し、そこへ保存してください。

オブジェクトカウンターの実装はとても簡単です。Githubの”detect_and_count.py”をダウンロードして、YOLOv7の作業フォルダへ格納すれば準備OKです。簡単に実装できるよう準備てしていただいているのでホントに感謝です。

↓のコードをAnacondaPromptなどにいれて実行してみましょう。

python detect_and_count.py --weights ./weights/yolov7.pt --conf 0.1 --source ./inference/images

作業フォルダの”./runs/detect/exp”フォルダを確認してみてください。こんな感じでサンプル画像のラベルと数値が付いた画像が出力されたと思います。

yolov7.ptはCOCOデータセットで学習したモデルなので、学習されているラベルであれば出職することができます。

動画にオブジェクトカウンターを付ける

動画についても簡単にラベル付けすることができます。

  • ”./data/movies”フォルダを作り、物体検出したい動画を入れてください。
  • ↓のコードを実行してみてください。
python detect_and_count.py --source ./data/movies --conf 0.3 --weights ./weights/yolov7.pt

“./runs/detect/exp2″フォルダに動画が出力されたと思います。動画の下のほうにカウンターが付いているのが分かります。1フレームでの物体をカウントしているので値がブレますが、アバウトに数値を把握したい場合などでは使える技術だと思います。

もちろん、オリジナルの学習データについてもカウント可能です。

農作物などはアバウトに収穫量を把握したいことが多いと思うので結構使えそうですね👍

独自のデータセットでラベリングし、学習したモデルでも問題なくオブジェクトカウントすることができました。

FarmL BLOGで実装してきたYOLOモデルについて

FarmLブログではYOLOv5の様々な使い方を紹介しています。お時間あれば併せてご覧ください。

独自データをつかったYOLOv5の学習方法

事前学習済みデータを転移学習したYOLOv5の学習方法

遺伝的アルゴリズムを利用したYOLOv5のパラメータ最適化手法

YOLOv5で物体検出した画像を切り出して学習データにする方法

YOLOv5で物体検出した作物の数を数える【Object Counter】

Ultralystics社よりインタビューを受けた内容がブログになりました👍

YOLOvME: Making Snap Pea Detection Easy by Ultralytics Team
Discover how Takayuki Nukui applies YOLOv5 AI for efficient snap pea harvesting—blending machine learning with traditional farming.

コメント

タイトルとURLをコピーしました