Transformers Object detection - detr の転移学習とONNX変換と実行。#2
Transformers Object detection - detr の転移学習とONNX変換と実行。
の続きです。
ONNX -> rknn に変換して、 Orange pi 5 armbian(22.04) で、NPU で動くか試してみました。
開発環境:
Ubuntu 24.04 PC and GTX 1070
torch 2.6.0+cu126
torchaudio 2.6.0+cu126
torchvision 0.21.0+cu126
1. 転移学習
雑草 3class(実際は、4 class になった) の転移学習を行う。
今までは、学習データを、アスペクト比を無視して、480x480 にリサイズしていましたが、
今回は、画像のアスペクト比を維持して、480x480 にリサイズして、余白は、黒埋めしします。
実際の学習用 コードは、後で、github に公開予定です。
学習エポックは、165+244
で、 train loss 0.19 になりました。
雑草用、学習データは、やはり google のダウンロードではNG で、
自分で、カメラをもってあちこち行って撮影しました。
コツは、 ROS2 草刈りロボットカーのカメラ目線になって、30[cm] - 40[cm] の高さで、前方の、1.5[M]-3[M] 以内にある雑草を、水平に撮影します。
草刈りにの邪魔になりそうな雑草の壁みたいなのを、メインに撮し、一緒に、木とかも撮影しました。
木の撮影も、 1.5[M] -3[M] 手前から撮影します。
あまり遠い、草、木、鉢植え、他は、必要ありません。
2. ONNX に変換。
順序がバラバラですが、
転移学習した、 雑草 hugging face dtr モデル (detr-resnet-50_finetuned_zasou_ex/final_model) を、 onnx に変換します。
zasou_dtr2onnx.py
$ python zasou_dtr2onnx.py
で、
detr_zasou_480.onnx
が作成される。
2.1 スリム化と入力サイズの固定化をする。
$ python -m pip install onnxsim
$ onnxsim detr_zasou_480.onnx detr_zasou_480_sim.onnx --overwrite-input-shape pixel_values:1,3,480,480
上記で、
detr_zasou_480_sim.onnx
が作成される。
3. onnx -> rknn への変換を行う。
(rknn_env310) $ python convert_dtr_onnx2rknn.py
で、
detr_zasou_480_sim.rknn
が作成される。
注) convert_dtr_onnx2rknn.py を実行するには、
python 3.10 で、下記環境が必要
setuptools==68.2.2
onnx==1.14.1
rknn-toolkit2
ubuntu 24.04 に、python 3.10.20 をインストールします。
python 3.10 で、rknn 用、virtualenv を作成します。
$ python3 -m virtualenv -p python3.10 rknn310
$ source rknn310/bin/activate
(rknn_env310) $
(rknn_env310) $ pip install --upgrade pip
(rknn_env310) $ pip install setuptools==68.2.2
(rknn_env310) $ pip install onnx==1.14.1
(rknn_env310) $ pip install rknn-toolkit2
注) 必ず、上記バージョンを使います!!
念の為、 python -m pip freeze の結果を上げておきます。
注)
setuptools 68.2.2