YOLOで物体検出 その1(Ultralytics、YOLO11)

はじめに

 今回は物体検出アルゴリズムであるYOLOを使ってみました。

 物体検出ははじめてなので、まずは調べながら実行しやすいものでお試しです。そもそもロボットにカメラを搭載することが無かったので、これからは設計に取り入れていきたいところです。

 画像からトマトを検出しようということで調べ始めたのですが、最新でv11まで出ているんですね。これだけバージョンアップが盛んだと、パッケージの依存関係が心配になってきます。

▼以前の記事はこちら

Raspberry Pi Zero 2を使ってみる その2(カメラ、Thonny、Node-RED)

はじめに  今回はRaspberry Pi Zero 2にカメラを取り付けてみました。  少し古い書籍を読みながら試していたときは、コマンドを入力してもエラーが出て撮影できないこと…

Unreal Engine 5を使ってみる その10(Scaniverse、点群データの取り込み)

はじめに  今回はiPhone 15 ProでScaniverseというアプリを使って3Dスキャンしたデータを、Unreal Engine 5(UE5)に取り込んでみました。  データを取り込むにあたって…

関連情報

概要

 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の仮想環境についてはこちら

Pythonの仮想環境を作成する(venv、Windows)

はじめに  今回はPythonの仮想環境の作成についてまとめてみました。  Pythonを利用したNode-REDのノードを開発するときに仮想環境を詳しく調べていました。作成した仮…

 以下のコマンドで仮想環境を作成し、有効化します。

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よりも高いですね。

 細かいパラメータは調整できるようですが、十分物体を検出できているように感じました。テレビやキーボードなどで、映っているのが半分だけでも検出できていることがありました。

最後に

 実際にロボットに搭載するときは、検出した物体の座標と深度カメラの座標を照らし合わせて、物体との距離を測定するといった使い方を聞きました。次は座標を取得して、通信できるようにしようと思います。

 今後のために、データセットを作成できるようになっておく必要もありそうです。環境光によって色情報が異なるという話も聞いております。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です