Object Detectionの最近のブログ記事

QR Code Scanner with TensorFlow Lite

QR Code Scanner with TensorFlow Lite と言うのがあったので、試してみる。

正確には、Android 版だが、
Android QR Code Detection with TensorFlow Lite

modelの作成は、下記、model_maker を参考にしているみたい。
Object Detection with TensorFlow Lite Model Maker

最終的には、Raspi 3b+ で試してみようと思います。
注) Raspi 3b+ に、Coral USB TPU を使っても効果は無いみたい。もっとパワーが必要じゃ。

Raspi TensorFlow Lite Object detection は、
examples/lite/examples/object_detection /raspberry_pi
を参考にします。

1. 開発環境
開発は、PC 上で行います。
PC Ubuntu Mate 22.04
Intel Core i-5 4570 3.2GHz x 4 with 12G Memory
Python 3.9
tflite-model-maker 0.4.2

1.1 Python3.9 を別途インストールします。
Python の Dual インストールは、下記を参照しました。

Install Python 3.9 or 3.8 on Ubuntu 22.04 LTS Jammy JellyFish

Edge TPU - Tiny YOLO v3

Edge TPU - Tiny YOLO v3 を試す。

github に、Edge TPU - Tiny YOLO v3 が公開されていたので、試してみました。

guichristmann/edge-tpu-tiny-yolo

テスト環境
Windows10
Python3.6
Tensorflow 1.15.0 GPU
tflite-runtime 2.5.0
( >pip install --extra-index-url https://google-coral.github.io/py-repo/ pycoral )
Coral TPU USB
USB カメラ

git clone で、ダウンロードして、使います。

 オリジナルだと、Windows10 でそのままでは動作しないので、一部手直しが必要です。
また、USB カメラで、OpenCV で取り込んだ、bgr 画像をそのまま縮小して、使っているので、
rgb へ変換をすると、検索の正解率が改善されるのと、

 utils.py の featuresToBoxes に元々バグがあって、縦長の画像には対応していないのと、
この中で、元画像サイズへの拡大処理が組み込まれているのが、不自然なので、改造してみました。

Coral Edge TPU USB のサンプルの Object Detection が公開されていたので、 試してみました。の #4 です。

今回は、気になった点の改善を行ってみました。

https://github.com/google-coral/examples-camera

テスト環境
Windows10
Python3.6
Tensorflow 1.15.0 GPU
USB カメラ

 試したのは、上記プログラムの、examples-camera/opencv/ です。

最近、guichristmann/edge-tpu-tiny-yolo を試してみて、再度、こちらの Coral Edge TPU USB のサンプルの Object Detecton を試す。
を動かしてみると、微妙に検出ボックスが大きい気がしました。

プログラムを調べてみると、 guichristmann/edge-tpu-tiny-yolo と、examples-camera/opencv/ では、画像の取り込みと、
検出ボックスの変換に違いがありました。

Coral Edge TPU USB のサンプルの Object Detection が公開されていたので、
試してみました。の#3 です。

https://github.com/google-coral/examples-camera

テスト環境
Raspberry Pi 3B+
Coral Edge TPU USB
Python3.7
Tensorflow 1.15.0
Raspi カメラ

前回のプログラムでは、Raspi で実行させると、発声のタイミングで、Stream バッファに画像が貯まるので、声が出た後の画像が、
実際のカメラの前の映像と一致しない問題が出ました。

OpenCV でのStream バッファのクリア自体は用意されていなくて、代替手段として、cap.read() または、 cap.grab() を5回繰り返して、
受け捨てする方法が、Web に出ていたので試してみました。が、

結論としては、余り良くないので、 picamera stream to OpenCV が出来ないか、Webで検索していたら、
丁度良いサンプルが在ったので、それを取り入れてみました。

Accessing the Raspberry Pi Camera with OpenCV and Python

結局は、下記、が元ネタみたいです。
色々な使い方が、出来るようです。

https://picamera.readthedocs.io/en/release-1.13/recipes2.html

tensorflowでMASK R-CNNによるSemantic Segmentation

tensorflowでMASK R-CNNによるSemantic Segmentation
みて、おんちゃんも試してみました。

 元ネタは、
https://github.com/tensorflow/models/tree/master/research/object_detection
なので、

windows10 のMSYS2 ターミナルから、適当なディレクトリで、

$cd /c/app/tensorflow
$git  clone https://github.com/tensorflow/models.git

ダウンロードして、

OpenCV3.4.2 Dnn Object Detection with TensorFlow Model

OpenCV3.4.2 dnn モジュールを使うと、TensorFlow の学習済みモデルを利用した、
Object Detection AP が簡単に出来ると言う事なので、試してみました。

参考ページは、こちらになります。
TensorFlow Object Detection API

おんちゃんは、入力をWebカメラ、USBカメラにしました。
Model は、MobileNet-SSD v2 / 2018_03_29 を使っています。

使った感想は、検出オブジェクトの重複があるようで、重複を削る所が足りないような気がします。
但し、CPU だけで、結構な速度が出るのは、関心しました。
もしかしたら、 OpenCV の dnn では、TensorFlow Lite の様なモデルの軽量化をしているのかもしれません。
後、Boxの枠ですが、画像ファイルだと大体出来ていますが、動画だと少し変です。おおんちゃんの
プログラムミスかもしれません。

以上です。コッホ!!

注) OpenCV3.4.2 以降を使ってください。古いバージョンだとエラーが出ます。

TensorFlow Lite Object Detection on PC(CentOS7)

公開されている、Object Detection API を TensorFlow Lite で書いてみました。

プログラムのベースは、 object_detection_tutorial.ipynblabel_image.py です。

使ったモデルは、こちらで公開されている、 ssd_mobilenet_v1_coco_2018_01_28 をダウンロードして、
下記ページに従って、
Running on mobile with TensorFlow Lite
ssd_mobilenet_v1_coco_2018_01_28 -> detect.tflite へ変換しました。

因みに、おんちゃんは、 CentOS7 に Python3.5 (IUS版) をインストールして、
その後、 TensorFlow を buzel でソースビルドを行っています。

Tensorflow Lite は、with XLA JIT support=y を指定して、Buzel でのソースビルドが必要です。
当初、Windows10 でCmake で試しみましたが、上記のオプションが指定できないので、
結局、CentOS7 になりました。

実行時の注意点は、vis_util.visualize_boxes_and_labels_on_image_array() のパラメータで
min_score_thresh=0.3 (default=0.5) にして、ボックスの表示を多くしています。
そうすると、ssd_mobilenet_v1_coco でも結構検出しているのが、目で見えるので、楽しいです。

公開されている、TensorFlow Object Detection API を USBカメラ、Mjpg-streamer での利用方法を試してみます。
GitHub で公開されている、object_detectioon_tutorial.ipynb をベースに、 USBカメラ、Mjpg-streamer での利用をためしてみました。
https://github.com/tensorflow/models/tree/master/research/object_detection

サンプルは、ローカルの画像を2つ読み込んで、試していますが、
これを、 USB カメラ、mjpg-steamer から取り込んだキャプチャー画像に変えてみます。

object_detectioon_tutorial.ipynb が実行できる環境が整えば、結構簡単です。
Windows10 + Tensorflow-1.5.0 GPU +Python3.5 + OpenCV3.4 (Anaconda で全て構築しています)
Tensorflow は、新しいバージョンが出ていますが、GPU版は、1.5.0 をつかいます。

このアーカイブについて

このページには、過去に書かれたブログ記事のうちObject Detectionカテゴリに属しているものが含まれています。

前のカテゴリはMNISTです。

次のカテゴリはPointnetです。

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

カテゴリ

ウェブページ

サイトナビ