Transformers Object detection - detr の転移学習とONNX変換と実行。#2
Transformers Object detection - detr の転移学習とONNX変換と実行。
の続きです。
ONNX -> rknn に変換して、 Orange pi 5 armbian(22.04) で、NPU で動かしてみました。
USB Camera -> predict -> Open cv 表示
rate: 10[fps] 前後 みたいです。
model 単体ベンチマーク: 0.1[sec] 前後
cpu 負荷は、all core 23[%] 前後みたい。 c++ で行えばもっと、良いかも。
orange pi 5 x 1 で、同時に、ROS2 で、ロボットを動かせるかも?
でも、2 台構成が無難かもしれない。
開発環境:
Ubuntu 24.04 PC and GTX 1070
torch 2.6.0+cu126
torchaudio 2.6.0+cu126
torchvision 0.21.0+cu126
実機環境:
Orange pi 5 armbian(22.04)
注) armbian(22.04) でないと、NPU ドライバーが入っていないので、注意!!
最新の armbian(24.04 以降) だと、自分でドライバーをソースbuild して追加しないと、できましぇん!!
python 3.10
RKNNLite
USB カメラ
1. 転移学習
雑草 3class(実際は、4 class になった) の転移学習を行う。
今までは、学習データを、アスペクト比を無視して、480x480 にリサイズしていましたが、
今回は、画像のアスペクト比を維持して、480x480 にリサイズして、余白は、黒埋めします。
実際の学習用 コードは、github に公開しました。
github@tosa-no-onchan/transform_object_detection
zasou_train_3class_ex.ipynb
学習は、2回にわけて行いました。
1 回め
165 エポック
7800 0.304700
2 回め。続きから。
244 エポック
で、 train loss 0.19 になりました。
多分、huging face にアップロードされているでは?
tosa-no-onchan/detr-resnet-50_finetuned_zasou
おんちゃんの Tips.
image_processor に、size={"shortest_edge": 480,...
を渡して、入力サイズを、480x480 にすると良いみたい。
これだけで、 rknn での実行速度が改善されるみたいじゃ。
雑草用、学習データは、やはり google のダウンロードではNG で、
自分で、カメラをもってあちこち行って撮影しました。
コツは、 ROS2 草刈りロボットカーのカメラ目線になって、30[cm] - 40[cm] の高さで、前方を、水平に撮影します。
草刈りにの邪魔になりそうな雑草の壁みたいなのを、メインに撮し、一緒に、木とかも撮影しました。
木の撮影も、 1.5[M] -3[M] 手前から撮影します。
アノテーションは、あまり遠い(1.5[M] - 3[M] 以外)、草、木、鉢植え は、使いません。
あくまでも、本来、ロボットが草刈りしなければ行けない所なのに、ROS2 の Depth Camera
で、 local cost map に障害物と判定される雑草に限定します。
この目的は、localcost map で、障害物だと出ても、それが 雑草群 であれば、その場所をあえて通過させる事ぞね!!
ただし、実際の predict 結果を見ていると、草刈りに邪魔になる雑草以外の物(人、動物、物、木、etc) を検出させて、それらが検出されなければ、
localcost map に障害物が出ていても、草刈り ロボットを進める方が簡単な気がしてきたぞね!!
また、学習画像には、対象を含まない画像や、オリジナル model の学習時に使った画像を、annotationナシ(class id ナシ) として、10[%] ほど加えます。