YOLOで物体検出 その1(Ultralytics、YOLO11)
はじめに
今回は物体検出アルゴリズムであるYOLOを使ってみました。
物体検出ははじめてなので、まずは調べながら実行しやすいものでお試しです。そもそもロボットにカメラを搭載することが無かったので、これからは設計に取り入れていきたいところです。
画像からトマトを検出しようということで調べ始めたのですが、最新でv11まで出ているんですね。これだけバージョンアップが盛んだと、パッケージの依存関係が心配になってきます。
▼以前の記事はこちら
関連情報
概要
YOLOはYou Look Only Onceの略であり、画像から高速で物体を検出することができます。
▼YOLO v7までですが、YOLOの変遷について分かりやすくまとめられていました。YOLOから派生したプロジェクトもあり、開発主体も変遷しているようです。
【YOLO】各バージョンの違いを簡単にまとめてみた【物体検出アルゴリズム】 #初心者 - Qiita
最新のYOLO 11はUltralyticsという会社が開発しているようです。
▼Ultralyticsのページはこちら。デモもあります。
https://www.ultralytics.com/yolo
▼最新のYOLO 11に関するページはこちら。これまで速度や精度が向上してきたようです。
YOLO11 🚀 NEW - Ultralytics YOLO Docs
Ultralytics YOLOというアプリがあって、スマートフォンでYOLOを試すことができます。
▼私のiPhone 8でも試したのですが、大きなモデルだと処理が重いのかアプリが強制終了しました。さすがにiPhone 8はもう古いのかもしれません...
https://apps.apple.com/jp/app/ultralytics-yolo/id1452689527
データセット
データセットを元に物体を検出するのですが、用途に合ったものが無ければ作成する必要があります。
▼Ultralyticsのデータセットに関するページがあります。アフリカの動物やドローンなどのデータセットもあるようです。
https://docs.ultralytics.com/ja/datasets
▼農業分野で活用できそうなデータセットがありました。
https://blog.roboflow.com/top-agriculture-datasets-computer-vision
▼こちらはKaggleのトマト用データセットです。
https://www.kaggle.com/datasets/andrewmvd/tomato-detection
▼トマトの検出器作成に関する記事がありました!ぜひ参考にしたいなと思っています。
https://farml1.com/tomato_yolov5
環境を構築する
今回はWindows 10のノートPCで実行しています。
事前にGitHubのリポジトリを見ながらYOLO v10の環境を構築していたのですが、サンプルを実行したときにパッケージのバージョン問題でエラーが出ていました。
▼Pythonのバージョンが3.9以上のパッケージや3.10以上のパッケージが混ざっているようでした。
今回はPythonの仮想環境を作成する際に、Python のバージョンを3.9に指定して作成しました。
▼Pythonの仮想環境についてはこちら
以下のコマンドで仮想環境を作成し、有効化します。
py -3.9 -m venv yolo39
cd yolo39
.\Scripts\activate
今回はUltralyticsのパッケージをインストールして実行します。
▼Ultralyticsのリポジトリはこちら
https://github.com/ultralytics/ultralytics
Pythonの仮想環境にultralyticsをインストールします。
pip install ultralytics
インストールするものはこれだけです。以下のコマンドを実行すると、物体検出が行われた画像が保存されました。
yolo predict model=yolo11n.pt source='https://ultralytics.com/images/bus.jpg'
▼以下のように検出後の画像が保存されていました。
リアルタイム物体検出を試してみる
実際にロボットに搭載するときは、リアルタイムでカメラのデータを処理することになります。簡単なデモがあったので実行してみました。
▼こちらのページが参考になりました。
https://docs.ultralytics.com/ja/guides/streamlit-live-inference
以下のコマンドを実行するだけです。
yolo streamlit-predict
アプリが起動し、コマンドプロンプトに表示されていたURLにアクセスすると画面が表示されました。
▼左の欄からモデルや識別対象、物体検出の開始などを選択できます。
person、keyboard、bookなどを識別対象にして、実際に物体検出を行ってみました。
▼こちらはYOLO11sです。
▼こちらはYOLO11nです。FPSがYOLO11sよりも高いですね。
細かいパラメータは調整できるようですが、十分物体を検出できているように感じました。テレビやキーボードなどで、映っているのが半分だけでも検出できていることがありました。
最後に
実際にロボットに搭載するときは、検出した物体の座標と深度カメラの座標を照らし合わせて、物体との距離を測定するといった使い方を聞きました。次は座標を取得して、通信できるようにしようと思います。
今後のために、データセットを作成できるようになっておく必要もありそうです。環境光によって色情報が異なるという話も聞いております。