皆さんは、YOLOXについて知っていますか?
YOLOXはつい最近論文が公開された新しい物体検出アルゴリズムです。論文
まだ詳しく知っているわけではありませんが、darknet/YOLOv3から派生した物体検出アルゴリズムで、YOLOv4やv5と異なりアンカーボックスを使わない(アンカーフリー)という特徴があります。
アンカーフリーにすることで複雑なパラメータを設定せずに高い再現率を得られるそうです。
論文では、より高い精度を出せると主張されており、表を見る限りだと速度はYOLOv5に劣るものの、それを上回る再現率を出せてそうです。
GitHubでソースコードが公開されており、まだ公開から1週間程度なのに既に2500スターがついています。
ちなみに、YOLOv4の作者であるAlexey Bochkovskiy氏は、「依然としてウチラのYOLOのほうが強い」とのことです…
YOLOR (Scaled-YOLOv4-based) model with accuracy 55.4% AP is still the most accurate Real-Time (>=30 FPS) neural network, more accurate than PP-YOLOv2, YOLOv5, YOLOX...
— Alexey Bochkovskiy (@alexeyab84) 2021年7月25日
- YOLOR: https://t.co/53zGsMhJTe
- Scaled-YOLOv4 (CVPR21): https://t.co/IelcU2Bmnw pic.twitter.com/P9n7i9gcQq
ビックウェーブなるかもしれないので乗ってみた🌊
YOLOXのスター数の伸びがすごかったので、乗るしかないこのビッグウェーブに!!ということでYOLOXをROS2に移植してみました。
YOLOXは最適化のために使えるモデルの種類が多く、ライセンスも非常に扱いやすいApache2.0であるため、これの派生プログラムが次々と開発されると思います。
私は短い開発期間でお試ししたい人のために、pythonのデモをベースにしたプログラムを作りました。その使い方について簡単に解説します。
詳しい解説込でQiitaにも上げたいと思っています。
YOLOX-ROSの仕様
YOLOXを従来のdarknet-rosにできる限り近づけるための工夫をしました。入力をWebカメラからの映像だとすれば、出力はリサイズされた画像とバウンディングボックスとなります。実装には、過去に作成したmotpy-rosを使用しました。
しかし、darknet_rosが扱うdarket_ros_msgsはdarknet_rosのリポジトリの中に埋まっているので、初めて使う人には少し扱いづらいところがあります。そのため、新しくバウンディングボックスの拡張版となるメッセージを作成しました。darknet_ros_msgsの拡張版であるため、そのまま置き換えられます。
メッセージについては別記事で詳説する予定です。
パラメータは次に示すものを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
トピックは次のように出現します。
要望やバグがあれば適宜改善していこうと思います。できればC++で実装できればいいですねーー。したいなーー。