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

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

YOLOv7-tinyをdarknet-rosで使用する

オブジェクト検出アルゴリズムとして有名なdarknet (YOLOv3) がYOLOv7というナンバリングで帰ってきたようです。

過去のバージョンの検出速度・精度を大幅に超えてきたようで、競合の研究に大きな影響をもたらしそうです。


今回は、私が管理している「darknet_ros」をYOLOv7仕様にしてみました。

darknet_ros自体はComposableNodeに対応していないなどの関係上、YOLOv7の性能を全て引き出せるとは限りません。


以前にもdarknet_rosやdarknetに関する記事は多く投稿してきましたが、結構時間が経っています。懐かしい。

darknet_ros(Foxy)でScaled-YOLOv4を使う - えいあーるれいの技術日記

ROS NoeticでDarknet-rosは動くらしい(OpenCV4+CUDA11.2) - えいあーるれいの技術日記

ROS2-Foxyでdarknet-ros(Ubuntu20.04+OpenCV4.2+CUDA11.2) - えいあーるれいの技術日記

ROS2 Foxy + YOLO v4 の実装(darknet_ros) - Qiita


YOLOv7 (本家派生版)が出た!

YOLOv7は2022年7月6日にarXiv上に掲載された論文上のアルゴリズムです。

GitHub上でも紹介されており既に3500以上のスターを獲得するなど、「YOLO」の名前も影響しているためか、非常に高い注目を集めていることが分かります。

「YOLO」の名前は全く関係ない研究チームによる論文なき実装がここ2年で散見されるようになり、この「YOLOv7」も名前に乗っかったアルゴリズムなのではないのかと思わせるようなネーミングに見えます。


…が、YOLOv7の共著者にはYOLOv4の開発を行なった Alexey Bochkovskiy先生も入っています。

YOLOv7は、YOLOv3, YOLOv4の正統進化ということになります。

arxiv.org

また、その性能の数値上の高さも注目です。昨年注目されたYOLOXとも比較し、推論速度・精度においてYOLOv7が高いことが示されています。


ナンバリングではYOLOv4→Scaled-YOLOv4→YOLOR→YOLOv7の順で論文が掲載されており、4から7になっています。5、6が飛ばされているのは、既出のアルゴリズムと比較するためだと考えられます。

Introductionでは、次の3つのキーワードについて、高速化を試みているそうです。

  • vanilla convolution
  • depth-wise convolution
  • MLP operations

(Introductionより)


ターゲットはGPU・モバイル向けGPUを想定されているそうです。


YOLOv7がdarknetでも動作する!?

論文公開日にdarknetでもYOLOv7をサポートする旨のissueが立てられました。

github.com


現在は推論のみのサポートで、自作する場合はPyTorchで学習を行い、.pt形式のファイルを.weightsに変換する必要があります。

また、以前のバージョンに加えて representation_layer 関連のソースコードを含める必要があります。

darknet_ros も今回のアップデートに合わせてsubmoduleを更新しました。

詳しく知りたい場合は、本家のコミットログよりも私のsubmoduleアップデートのプルリクを見た方が参考になると思います。(v4-cspとv7の差分が確認できます)

github.com

darknet_ros側の変更はありませんでした。ただし、フレーム名などの変更が利きやすいようにパラメータ関連のアップデートは行なっています。


むしろこれらの変更だけで動くとか神かよ…


darknet_ros_fp16 (YOLOv7版) の使い方

リポジトリは以下から↓

github.com


darknetはNNにしては非常に依存が少ないプログラムで、ROS2さえ入れておけばビルドが通ってしまいます。launchファイルを調整すればUbuntu18とかでも動くと思います。

ただし、CUDAを使わないと使い物にならないレベルで遅いので、CUDA(できればcuDNNも)を入れておきましょう。


環境

  • Ubuntu22.04 LTS + ROS2 Humble-desktop-full
  • CUDA 11.7 (NVIDIA 515.5)
  • 入力 : v4l2-camera

事前インストールリスト

  • cuda
  • ros2-humble-desktop-full
  • ros2-humble-v4l2-camera
# ダウンロード
git clone https://github.com/Ar-Ray-code/darknet_ros_fp16 --recursive ~/darknet_ws/src/darknet_ros_fp16
darknet_ws/src/darknet_ros_fp16/darknet_ros/rm_darknet_CMakeLists.sh

# ビルド (サンプルの重みは自動でダウンロードされます)
source /opt/ros/humble/setup.bash
cd ~/darknet_ws/
colcon build --symlink-install
source install/setup.bash

# 実行 (USB経由でWebカメラを接続してください)
ros2 launch darknet_ros yolov7.launch.py


動きました!


元祖・高速物体検出が強くなって帰ってきたみたいな感じでいいですね!

ただし、商用目的での使用についてはPyTorchでの学習・推論を行うとGPL3.0ライセンスの制限などいろいろと制約があるので注意してください。(以前のYOLOXのようにはなりにくいとは思いますが…)


逆風はあれど、技術の進化に伴って広がる可能性にはいつもワクワクさせられます。

気が早いですが、次の新たなAIの登場が待ちきれません!