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

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

darknet_ros(Foxy)でScaled-YOLOv4を使う

 Scaled-YOLOv4というのをご存知でしょうか?

 Scaled-YOLOv4はdarknet-YOLOv4の派生のアルゴリズムです。具体的な違いとしては、画像のスケーリングアップ・ダウンを行うためのネットワーク改良がされている点です。この改良によって精度を保ちつつ高速化に成功したそうです。Scaled-YOLOv4-tinyの場合、RTX 2080 Ti(Use Tensor RT)で1774FPSという意味がわからない速度を実現したそうです。JetsonやRaspberry Piなどの実装でも十分な速度が出るのでしょうか??

 以下の論文の概要を引用しました。

arxiv.org

ところでROSで使えるの??

 YOLO v4の良さを引き継ぎつつ高速なScaled-YOLOv4。これはROSで使うしかない!!

 しかし、ROSでScaled-YOLOv4を使えるという話を聞いたことがない。

 これにはROS2記事をQiitaに大量投下されているporizou氏も困惑(?)

 ということで、Scaled-YOLOv4が動くのかどうかを確かめに、アマゾンの奥地へと向かった…

Scaled-YOLOv4が動作する環境

 Scaled-YOLOv4って動くの??という疑問があると思いますが、その心配は無用のようです。

 なぜなら、Scaled-YOLOv4とはネットワークファイルを書き換えて計算量を効率よく削減することで高速化を目指すことを目標にしているからです。変更点はcfgファイルの書き換えが中心になるということでしょう。

 目標では、「演算速度とのトレードオフを考慮して CSPOSANet間での勾配切り捨てを行う新手法を提案する」らしいです。

Minimize/balance size of feature map: In order to get the best trade-off in terms of computing speed, we propose a new concept, which is to perform gradient truncation between computational block of the CSPOSANet.

 具体的には以下の点が変更されたみたいです。(見落とし箇所があるかもしれません。)

  • PAN(Path Aggregation Network for Instance Segmentation)をCSP化することで効率よく計算量を削減したよー

In order to effectively reduce the amount of computation, we CSP-ize the PAN [20] architecture in YOLOv4.

  • CSP化されたPANにもSPPモジュールを挿入したよー

SPP: The SPP module was originally inserted in the middle position of the first computation list group of the neck. Therefore, we also inserted SPP module in the middle position of the first computation list group of the CSPPAN.

 YOLOv4が動けばScaled-YOLOv4も動くので、AlexeyAB/darknetのREADMEでもScaled-YOLOv4について言及されています。yolov4-cspという名称になっています。

実行

 あとは、AlexeyAB/darknetが継承されているdarknet_rosを使ってScaled-YOLOv4を動かすだけです。現時点ではまだマージされていないので、私のリポジトリから最新版のdarknet_rosを落としてください。

github.com

$ git clone --recursive https://github.com/Ar-Ray-code/darknet_ros.git

 colcon build で自動的にyolov4-csp.weights(https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v4_pre/yolov4-csp.weights)がダウンロードされると思います。

 実行は、yolov4.launchの代わりにyolov4-csp.launchを使用してください。

結果

 f:id:Ray_ar:20210602044210j:plain

 GPUメモリが1600MByte減り、FPSが30.4から51.1まで改善しました。めっちゃ高速化されている!!!

 こんなに速度が改善するなら、Scaled-YOLOv4使わない手はないですねーー。cuDNNなどをまだ適用していなかった気がするので、最適化すればもっと速くなりそうです。

 しっかりと動作報告もいただきました。

 最近、Darknet_ros関連の記事を出し過ぎな気もしますが、意外と新しい知見が得られまくるのでまだまだ尽きないと思います。

 そういえば、YOLORというもっと速いYOLOもあるみたいなので、weights形式で使えるようになったら使ってみたいですねーー。

Darknet学習・実行にオススメのGPU

 Darknetの学習・実行には非常に多くのGPUリソースが必要です。特にYOLO v4以降のモデルは実行だけでもVRAM 6GB以上必要になるので注意しましょう。VRAMが足りればゲーミングノートでも可です。

RTX 3060:ディープラーニングビギナーにオススメの1台。ディープラーニングはVRAM(GPUのメモリ)が最も重要なので12GBもあるRTX 3060は多少高騰気味の現市場でもオススメです。

Jetson (Xavier):組み込み用途としてはJetsonが有力です。一応RTXが搭載されたNUCやノートPCと比較して検討してみたほうが良さそうです。YOLO v4-tinyくらいなら30fps超えが可能です。

ROSについて

 ROSとはRobot Operating Systemの略称で、ロボット制御に必要なパッケージや環境が揃っているオープンソースプロジェクトです。企業での産業用ロボット開発から個人のホビーロボット開発まで多くの活用例があります。

 ROS関連の書籍も充実しているのでぜひチェックしてみてください。

(画像をクリックすると詳細ページに移動します) (画像をクリックすると詳細ページに移動します)