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

ROS2やM5 Stack、Ubuntuについて書いています

YOLOXをROS2に実装してみた

皆さんは、YOLOXについて知っていますか?

YOLOXはつい最近論文が公開された新しい物体検出アルゴリズムです。論文

まだ詳しく知っているわけではありませんが、darknet/YOLOv3から派生した物体検出アルゴリズムで、YOLOv4やv5と異なりアンカーボックスを使わない(アンカーフリー)という特徴があります。

アンカーフリーにすることで複雑なパラメータを設定せずに高い再現率を得られるそうです。

medium.com

論文では、より高い精度を出せると主張されており、表を見る限りだと速度はYOLOv5に劣るものの、それを上回る再現率を出せてそうです。

f:id:Ray_ar:20210728021645p:plain

GitHubソースコードが公開されており、まだ公開から1週間程度なのに既に2500スターがついています。

github.com

ちなみに、YOLOv4の作者であるAlexey Bochkovskiy氏は、「依然としてウチラのYOLOのほうが強い」とのことです…

ビックウェーブなるかもしれないので乗ってみた🌊

YOLOXのスター数の伸びがすごかったので、乗るしかないこのビッグウェーブに!!ということでYOLOXをROS2に移植してみました。

YOLOXは最適化のために使えるモデルの種類が多く、ライセンスも非常に扱いやすいApache2.0であるため、これの派生プログラムが次々と開発されると思います。

私は短い開発期間でお試ししたい人のために、pythonのデモをベースにしたプログラムを作りました。その使い方について簡単に解説します。

詳しい解説込でQiitaにも上げたいと思っています。

GitHubリポジトリは以下のリンクから。

github.com

YOLOX-ROSの仕様

YOLOXを従来のdarknet-rosにできる限り近づけるための工夫をしました。入力をWebカメラからの映像だとすれば、出力はリサイズされた画像とバウンディングボックスとなります。実装には、過去に作成したmotpy-rosを使用しました。

qiita.com

しかし、darknet_rosが扱うdarket_ros_msgsはdarknet_rosのリポジトリの中に埋まっているので、初めて使う人には少し扱いづらいところがあります。そのため、新しくバウンディングボックスの拡張版となるメッセージを作成しました。darknet_ros_msgsの拡張版であるため、そのまま置き換えられます。

github.com

メッセージについては別記事で詳説する予定です。

パラメータは次に示すものをlaunchファイルに書きます。現時点では最低限のパラメータしかサポートしていないので、書き換えても意味のないパラメータが存在します。以下に変更が反映されるものを示します。

  • image_size/width or /height:入力画像サイズ(縦・横それぞれのピクセル数)
  • yolo_type:タイプ(yolox-sなど)
  • ckpt_file:重みファイル(yolox_s.pth)
  • conf:しきい値

その他にもrankやnmsthreやimg_size(正方形へのリサイズ)も変更可能です。

環境構築

環境構築は、YOLOXのインストールをしてから行います。YOLOXはPyTorchなどに依存しています。

YOLOXのデモが正しく動くことを確認してからYOLOX-ROSの環境構築を行いましょう。


ROSの環境構築は以下の通りにv4l2-cameraなどのパッケージをインストール後にソースコードをビルドするだけで終わります。ただし、Pythonではソースコード検査は行われないためリンク付けされているかどうかは注意してください。

source /opt/ros/foxy/setup.bash
sudo apt install ros-foxy-v4l2-camera
git clone --recursive https://github.com/Ar-Ray-code/yolox_ros.git ~/ros2_ws/src/yolox_ros/
cd ~/ros2_ws
colcon build --symlink-install # weights files will be installed automatically.

デモの際は、環境をロードしてからlaunchファイル起動で実行できます。Webカメラは起動しておいてください。

source ~/ros2_ws/install/setup.bash
ros2 launch yolox_ros_py demo_yolox_s.launch.py

f:id:Ray_ar:20210728040721p:plain

トピックは次のように出現します。

https://raw.githubusercontent.com/Ar-Ray-code/YOLOX-ROS/main/images_for_readme/yolox_topic.png

要望やバグがあれば適宜改善していこうと思います。できればC++で実装できればいいですねーー。したいなーー。