Keras V3 Object detection with Vision Transformers を試す。

Keras V3 Object detection with Vision Transformers を試してみた。

Object detection with Vision Transformers

サンプルは、飛行機の単一の Object detectionだが、
これは、もしかして、草刈りロボットの草むらの判定に使えるのでは、なかろうか。


学習させたあと、vit_object_detector.weights.h5 ができるので、
vit_object_detector.load_weights('vit_object_detector.weights.h5')
で、weights は読み込ませたが、

で、 モデルのロードは、うまくいかない。
下記エラーが出てくる。

Traceback (most recent call last): File "/home/nishi/kivy_env/lib/python3.10/site-packages/keras/src/ops/operation.py", line 208, in from_config
return cls(**config)
TypeError: Patches.__init__() got an unexpected keyword argument 'name'

対策がわかった。


しかし、load model をすると、中のパラメータが正しく復元できていないようだ。
model.predict() の結果が、load weights とかなり違ってくる。
今は、まだ、 load weights の方でテストするしかない。

Whole model saving & loading
の最後の記述が気になる。
Note that the model variables may have different name values (var.name property, e.g.
"dense_1/kernel:0") after being reloaded. It is recommended that you use layer attributes to
access specific variables, e.g. model.get_layer("dense_1").kernel.


どうやら、class PatchEncoder() に、def build(self,input_shape) が抜けているのが問題のようじゃ。

上記を追加してみる。
だいぶ良くなったがまだ、load_weights と違いがあるみたい。

下記、表示も気になる。


import os
os.environ["MLIR_CRASH_REPRODUCER_DIRECTORY"] = "enable"

も入れてみる。

まだ、model.keras ファイルに、保存ができていないパラメータがある気がする。

原因がわかった気がする。
vit_object_detector.weights.h5 と、vit_object_detector.keras が保存されるタイミングがずれているからみたい。
vit_object_detector.weights.h5 は、 val_loss が最小の時の保存で、
vit_object_detector.keras は、それから、patience=10 でかなり学習を進めた後の値の所為の気がする。
保存のタイミングを同じにすれば、同じ結果になるのでは?


checkpoint_callback2 も組み込んで、val_ross が最小の時のに、vit_object_detector_best.keras を保存して、
それを、
vit_object_detector = keras.saving.load_model("vit_object_detector_best.keras", custom_objects={'Patches':Patches,'PatchEncoder':PatchEncoder}, compile=True)
すれば、同じになりました。

やれやれぞね。
しかし、これで、 Keras V3 での model の保存、ロードの仕方が理解できました。
また、 transformer を使うと、学習が早いのが実感できました。
ただ、predict だと、動画は、厳しい気がします。

Model training APIs
を見てみると、

preds = vit_object_detector.predict(input_image,verbose=0)[0]
だと良いのか?

github にアップしておきました。
tosa-no-onchan/k3_object_detection_using_vision_transformer

以前は、SSD、Mobile Net 、Yolo v3 があったが、
Yolo v3 を除いて、いまいち、実用に耐え得るのか、半信半疑だった。

今は、 Yolo も 4,5,6,7 もあるのか?。また Transformer Object detection だったら仕事で使えるのかもしれましぇん。

参照。
transformers
transformers / object_detection

このブログ記事について

このページは、おんちゃんが2024年6月 4日 18:16に書いたブログ記事です。

ひとつ前のブログ記事は「Keras V3 Automatic Speech Recognition with Transformer を試す。」です。

次のブログ記事は「ROS2 自作 Turtlebot3 による 草刈りロボット開発。#4 草むらの判定」です。

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

カテゴリ

ウェブページ

サイトナビ