roboflow+Google Colabを使ってyolov11の自作データセットを作ってyolo_rosで動かしてみる
概要
NuTech-Rというチームでロボカップレスキュー実機リーグに参加している者です。前回の記事GPU環境構築からyolo_rosを動かすまで その2ではROS2でYOLOを使用するためのパッケージyolo_rosを動かしてみました。今回は自作データセットを作って物体検出を行う為にroboflowでアノテーションを行い、その後google colabを使って学習データを作成します。
環境
- Ubuntu 22.04
- ROS 2 Humble
- Thirdwave Corporation XL7C-R36H (PC)
- GeForce RTX 3060 Mobile (GPU)
データセット用の動画の準備
物体検出用のデータセットを作成するため、対象物体を撮影した動画が必要です。この動画からフレーム単位で画像を生成し、アノテーション作業を行います。webカメラでの撮影にはguvcviewを使用します
sudo apt install guvcview
guvcviewの設定:
Preferences -> Webcamを選択
Resolutionで640×480を設定(ROS2での動作時も同じ解像度を使用)
設定完了後、動画撮影を開始します。
roboflowを使ったアノテーション
Public Plan
で作成します。
+Project
を押します。
今回は手元にあるDualSenseを物体検出するためのモデルを作成します。下記のように設定します。
Project Name: DualSense
License: Public Domain (ライセンスはお好きなものを選んでください)
Annotation Group: DualSense (物体認識するためのラベル)
選んだ後にCreate Public Project
を押します。
その後Drag and drop file...
に先ほど保存した動画をアップロードします。
アップロードすると1秒間で何フレーム写真を抽出するか選択をします。今回の動画は短いので5frames/secondで抽出します。
抽出が終わると下記のように写真のプレビューが表示されます。
その後右上のAnnotate Images
を押してAuto Label
を選択します。
この画面になったら物体検出する為の名前とその物体の説明をそれぞれの選択項目に入力します。
Class name: DualSense
Visual description of the class: Game Controller
終わったらGenerate Test Results
を押します。
その後、Auto Label With This Model
を押すと自動的にアノテーション作業が始まります。
アノテーション作業が終わるとReviewにステータスが変更されます。
その後Approve All
を選択するとアノテーションが承認されます。
次に上にあるAdd Approved to Dataset
を選択してアノテーション済みのデータをデータセットに変換します。Train・Valid・testはデフォルトの7:2:1のまま作成します。
データセットのダウンロード
左側のタブにあるVersions
を選択します。
ここからモデルの設定を行って行きます。
Source Images
Source Imagesでは使用するデータセットの設定をTrain/Test Splitでは、機械学習に欠かせない訓練用データとテスト用データを分けます。
Preprocessing
Preprocessingでは、画像サイズのリサイズによる統一などによって学習時間の減少とパフォーマンスを上昇させるための設定を行います。
Augmentation
Augmentationでは、データの水増し処理を行うかどうかを設定します。
今回は特に何も設定せずにデフォルトのまま設定を行います。
設定を終えGenarate
を押すことで設定の完了とモデルの作成が行われます。
モデルが完成すると下記のようにデータが完成します。
その後作成されたモデルをダウンロードします。今回はYOLO v11で学習を行うのでYOLO v11します。その後download zip to computer
を押してzip形式でダウンロードします。
ultralyticsにアップロード
次にultralyticsにデータセットをアップロードします。
下記のURLからログインを行ってください。
ログイン後左側のDatasetsを押してUpload Datasetを選択します。
Dataset nameとDescriptionは下記のように設定しました。
Dataset name:DualSense Dataset
Description:DualSense Controller Detection
記入後に先ほどダウンロードしたデータセットをアップロードします。
ultralyticsにプロジェクトを作成
左のタブにあるProjectsを選択してCreate Project
を押します。
Project nameとDescriptionを記入します。今回はCover Imageはなくて大丈夫です。
Project name:DualSense Controller Detection
Description:Detect for DualSense Controller
その後Createを押してください。
Train Modelの設定
データセットの設定が終わった後にTrain Model
を選択します。
Projectは先ほど作成したプロジェクトを選択してください。
Model nameは適宜入力してください。未記入の場合は灰色で記載されているような文字が入力されます。
Detect Architecturesは自分の好きなモデルを選んでください。今回はYOLO11nの軽量版でTrain Modelの作成を行います。ちなみに最後の末尾の文字が
n: nano
s: small
m: medium
l: large
x: xlarge
となっています。nが一番軽量モデルでxが重量モデルだと考えてください。
その後TrainでClick to copy the Colab code
のところに書かれている内容をコピーし、その後google colabを開きます。
Google colab上での学習
Google colabにアクセスしたら、再生ボタンを押してスクリプトを走らせます。
スクリプトを走らせるとgoogle colab上でGPUが使用できるようになります。その後Startの部分にかかれているコードブロックに先ほどUltralytics HUBでコピーしたcolabのコードを添付してまた再生ボタンを押してスクリプトを走らせます。
Starting trainingで学習が進んでいます。
現在のgoogle colabは何も操作せずに90分経つとリセットされる仕組みになっております。今回はEpoch数が100で割と軽量な処理ですが、もしもっとより長い時間学習に時間がかかる場合は下記のサイトなどを参考にして対策をしてください。
学習が終わると一番最後の部分にUltralytics HUBのURLが表示されるのでクリックして接続してください。
その後Train結果などを見ることができます。
Train・Configutation・・・・と書かれているタブのDeployを選択します。
その後Pytourch形式でDownloadボタンを押すと.pt
形式で学習済みモデルをダウンロードすることができます。
yolo_rosで動かしてみる
yolo_rosの環境やリポジトリをクローンしていない方はここで設定を行ってください。
GPU環境構築からyolo_rosを動かすまで その2
先程ダウンロードした学習済みモデルをros2_wsに移動させます。
cp ~/Downloads/detection_dual_sense.pt ~/ros2_ws/
その後下記のコマンドで実行をする
ターミナル1
ros2 run usb_cam usb_cam_node_exe --ros-args -p image_width:=640 -p image_height:=480 -p pixel_format:=mjpeg2rgb
ターミナル2
ros2 launch yolo_bringup yolov11.launch.py input_image_topic:=/image_raw model:=detection_dual_sense.pt
まとめ
今回YOLOの自作データセットを作成し、yolo_rosでの物体検出を実装しました。
本記事では基本的な流れを解説しましたが、以下の点で精度向上が可能です:
- アノテーション精度の向上
- 学習パラメータの最適化
- Detect Architecturesの選定
ご質問やフィードバックは、Zennのコメント欄にてお待ちしております。記事が参考になった方は、ぜひ「いいね」をお願いします。
参考

NuTech-Rは長岡技術科学大学のレスキューロボット開発チームです。レスキューロボットの競技会を通じてロボットの社会実装を目指して活動しています。sites.google.com/view/nutechr/home
Discussion