Baidu RT-DETRv2 の転移学習と Orange pi 5 NPU での実行。

Baidu RT-DETRv2 の転移学習と Orange pi 5 NPU での実行。

Baidu RT-DETRv2 を、雑草データセットで、転移学習させて、
最終的に、 Orange pi 5 armbian 22.04 rknn-runtime で走らせてみた。

結構、rknn に変換するまでが、大変だったが、なんとか変換して、走らせてみた。

当初、Hugging face の RT-DETRv2 で試したが、Orange pi 5 armbian(22.04) で実行すると、
Unsuport CPU op: Grid Sample in ths librknnrt.so ..
が出て、Segmantation faluts になった。
これの対応策は、どうやら、 torch -> onnx 変換時に、
model.use_discreat_sample=True
model.eval()
をすれば良いことがわかった。しかし、これに対応しているのが、 Baidu のオリジナル版でした。
Baidu のオリジナル版 で、上記修正を加えたが、実際のやり方は、少し違っていた。
google ai に随分助けをかりて、なんとかできた。

実機: 
Orange pi 5 armbian 22.04
USB Camera

USB Camera -> predict -> Open cv 表示で、
実測 fps: 6 -7 [Hz] でした。

Hugging face DETR だと、同じ構成で、
実測 fps: 10[Hz]
だったので、すこし、残念でした。

実機2: Joshua Piek ubuntu 24.04
USB Camera
では、
fps: 11 - 13[Hz] でした。

将来、C++ で作れば、少しは速くなるかも知れないので、
これくらいで、OK か。

1. 始め方。
i) virtualenv を作る。
$ cd
$ python3 -m virtualenv torch_env

ii) ソースのダウンロード。
$ cd local/git-download
$ git clone https://github.com/lyuwenyu/RT-DETR.git
$ cd RT-DETR/rtdetrv2_pytorch

iii) virtualenv へ入る。
$ source ~/torch_env/bin/activate
$ python -m pip install -r requirements.txt

iv) configs の下の、各 xxx.yml を自分の環境に合わせて、変更。
v) datasets を、用意する。
vi) 学習の実行
$ python tools/train.py -c configs/rtdetrv2/rtdetrv2_r18vd_120e_coco.yml --seed 42

2. どうやら、すこし、手を加えるみたい。
YAMLの書き換え:
yaml

しかし、最初から、 num_layers=3 でした。

なんとか、見つけて、再度転移学習して、トライ。
少しは、改善したけど、
fps: 9.0 - 10.0[Hz] たまに、 11[Hz]
でした。

3. model.use_discreat_sample=True の組み込み方法。
方法は、いくつかあるみたい。
とりあえず、 google ai で、 "Baidu RT-DETRv2 転移学習" などで、ai モードに入る。
追加の、質問で、"onnx 変換に、model.use_discreat_sample=True" をすると回答が得られるので、それを利用する。
先に、https://github.com/lyuwenyu/RT-DETR を git clone して、転移学習を済ませて置きます。

例) configs/rtdetrv2/rtdetrv2_r18vd_120e_coco.yml で、転移学習させた場合。
$ python tools/train.py -c configs/rtdetrv2/rtdetrv2_r18vd_120e_coco.yml --seed 42

上記、転移学習が終わったら、
google ai に回答してもらった、 torch -> onnx 変換は、

上記は、あくまでも一例です。
上記は、input=1、 output=3 の形式です。
できれば、input=1、output=2 の形式 の方法を、google ai に教えてもらった方が良い。


おんちゃんは、少しカスタマイズしました。
input size= 480x480
データオーグメンテーションで、 480x480 サイズに、画像のアスペクト比を維持して、
リサイズさせて、余白には、黒(0,0,0) 埋め、Center 寄せ を指定します。
onnx は、 input=1、output=2 に指定しました。
google ai に質問すれば、教えてもらえる。

注) 実際に試して、うまく行かないときは、どうどうめぐりになるので、そのときは、スレッドを別にして、異なる方向から質問したほうがよい!!
あとは、google ai が、次から次へと教えてくれるので、
onnx -> rknn へ変換する。

Baidu RT-DETRv2 rknn での注意。
入力 shape=(1,480,480,3) で、channel last and RGB です。
おんちゃんは、当初、channel 位置を間違えて入力しちょりました。

3. 軽量化のチューニング。
RTDETRTransformerv2:
  num_points: [4, 4, 4] -> [3, 3, 3] にする。

RT-DETR/rtdetrv2_pytorch/configs/rtdetrv2/rtdetrv2_r18vd_sp3_120e_coco.yml
を使ってみる。
これの、メリット、デメリットは、 google ai で確認してください。
以下、要約
RT-DETRv2(およびその基盤となる RT-DETR)において、
num_points オプションは、「Deformable Attention(変形可能アテンション)」機構が各クエリに対して参照するサンプリングポイントの数を意味します。
RT-DETR シリーズでは、処理を高速化するために画像全体ではなく、特定の重要な点のみに注目する仕組みを採用しており、
この設定はその「注目の細かさ」を制御します。

結果は、効果は、あまり感じない!!
fps: 10 - 13{Hz] たまに、14{Hz] が、出る。
検出性能は、変わらないみたい。であれば、SP2 も選択肢だろうか?

以上で、終わりぞね!!

あとは、C++ で、試してみたいぞね!!

このブログ記事について

このページは、おんちゃんが2026年3月26日 13:25に書いたブログ記事です。

ひとつ前のブログ記事は「Transformers Object detection - detr の転移学習とONNX変換と実行。#2」です。

次のブログ記事は「Orange pi 5 に Joshua Riek Ubuntu 24.04 を使ってみた。」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

カテゴリ

月別 アーカイブ

ウェブページ

サイトナビ