えいあーるれいの(技術)日記

Ar-Ray (Ar-Ray-code) のつぶやきなど。

RF-DETRをROS 2に実装してみた

久しぶりの物体検出AIネタです。


物体検出AIのレイヤーがTransformer系(DETR)になってからしばらく経ちますが、まだまだ性能は上がっているようです。

Roboflowの「RF-DETR」もその一つと言えるでしょう。RF-DETRは2025年の3月に登場したモデルで、7月にNano/Small/MediumがHuggingFaceで配布されました。

Apache 2.0なのはありがたいですね。

github.com


RF-DETRはCOCOデータセットを用いたベンチマークで初めて60mAPを超えたモデルで、より多くのドメインやタスクへの適合性をテストするRF100でも圧倒的な性能を持ちます。(ドキュメントを読むと、ターゲットはあくまでRF-100)

https://blog.roboflow.com/content/images/size/w1000/2025/03/rf-detr-coco-rf100-vl-8.png

https://blog.roboflow.com/rf-detr/より)

中身はLW-DETRと事前学習済みのDINOv2バックボーンで、従来のDETRの汎化性能をより高めるために事前学習済みモデルをマージしているみたいです。

We explored pushing forward the state of the art by combining the best of modern DETRs with the best of modern pre-training. Specifically, we created RF-DETR by combining LW-DETR with a pre-trained DINOv2 backbone.

blog.roboflow.com


OpenVINOとC++で扱う

モデルはONNX形式で提供されているので、OpenVINOで扱うことができます。

今回はRF-DETRのROS 2ラッパーをOpenVINO&C++で作成しました。(そのうちTensorRT対応もしたい)

github.com

依存環境

OpenVINO 2023.3以降とROS-Humble以降が必要です。

インストール

依存環境をすべてインストールした後にワークスペースを作成してビルドします。

mkdir -p ~/ros2_ws/src/
cd ~/ros2_ws/src/
git clone https://github.com/Ar-Ray-code/rf_detr_ros_cpp.git
cd ~/ros2_ws/

rosdep install -i --from-paths ./
colcon build --packages-up-to rf_detr_ros_cpp --cmake-args -DRF_DETR_USE_OPENVINO=ON

モデルのダウンロードが必要な場合は別途ダウンロードします。

cd ~/ros2_ws/
./src/rf_detr_ros_cpp/weights/rf_detr/download_openvino.bash nano

実行

source ~/ros2_ws/install/setup.bash
ros2 launch rf_detr_ros_cpp rf_detr_openvino.launch.py  model_path:=./src/rf_detr_ros_cpp/weights/rf_detr/rf_detr_nano_coco.onnx openvino_device:=GPU

Intelの内蔵GPUでも60ms程度で推論していました。

画像はimage_publisherを使用してイメージトピックを転送


最近はAI関連は追っていなかったのですが、久しぶりに新しい情報が入ったので試してみました。

高性能なDETRがノートPCで動くようになったのは驚きですね。DETRがサクサク動くNPUとかはあるのでしょうか?試してみたいですね。