TensorFlow 2.16.2 Lite C++ library build.

TensorFlow 2.16.2 Lite C++ library build.

TensorFlow 2.16.2 Lite C++ library をソースからビルドしてみた。

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#9 LSTM で経路計画をする。 で、Tensorflow Lite 用の a.model.tflite が出来たので、C++ から実行する事になるので、試してみた。

ソースのダウンロードは、TensorFlow 2.16.2 C++ library build と同じなので、そちらを参考にしてください。

PC環境:
Ubuntu 22.04
Tensorflow 12.6.2

参考にしたのは、
CMake を使用した TensorFlow Lite の構築

1. build
ソースが、
~local/tensorflow/tensorflow-2.16.2
に展開済みとします。
$ cd ~local/tensorflow/tensorflow-2.16.2
$ mkdir build-nishi
$ cd build-nishi
$ cmake ../tensorflow/lite
$ cmake --build . -j3

注) build-essential が必要。まだの場合は。
$ sudo apt install build-essential

これで、libtensorflow-lite.a が、カレントディレクトリーにできる。

TensorFlow 2.16.2 C++ library build for GPU.

TensorFlow 2.16.2 C++ library build for GPU.

TensorFlow 2.16.2 C++ library build の GPU対応版です。

1. 開発環境
PC: Ubuntu Mate 22.04
Virtual_env
python 3.10.12
bazel 6.4.0
clang-14(llvm-14) <--- NG
clang-17(llvm-17) <--- needed

GPU: GeForce GTX1070 Compute Capability 6.1
GPU 本体のドライバー
 mvidia-driver-525
GPUプログラム開発用のライブラリー群
 CUDA Toolkit 12.3
 cuDNN v8.9.6
Nvidia 提供のライブラリー
 TensorRT 8.6.1.6

1.1 ドライバーのインストールから、簡単におさらいする。
i) GPU 本体のドライバーをインストールする。
$ sudo apt install mvidia-driver-525

ii) GPUソフトウエア 開発用に、CUDA 12.3 を使うので、
CUDA Toolkit 12.3 を、Nvidia のサイトからダウンロード&インストールする。
google で、 CUDA Toolkit 12.3 を検索すると出てくると思う。

cuda-12-3-0-download-archive
Linux -> x86_64 -> Ubuntu -> 22.04 -> (deb)local
> Base Installer の欄を実行する。

/usr/local/cuda-12.3/ へ、インストールされる。
  include/cuda.h
  bin/nvcc <-- nvcc もある。

iii) cuDNN v8.9.6 for CUDA 12.x をダウンロード&インストールする。
やり方は、上記と同じ。
cudnn-archive
-> Local Installer for Ubuntu22.04 x86_64 (Deb)

libcudnn8, libcudnn8-dev
インストール先は、/usr になる。
$ sudo dpkg -L libcudnn8-dev
/usr/include/cudnn.h
/usr/include/cudnn_version.h

iv) TensorRT 8.6.1.6 のインストール。
本当は、使いたくないが、configure で、指定しないと、うまくいかないので、使う。
TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz を、google で探して、
~/usr/local/share/ 下で展開しました。
/home/nishi/usr/local/share/TensorRT-8.6.1.6

v) clang-17(llvm17) のインストール。(必須)
下記を参考にインストールする。
How to install Clang 17 or 16 in Ubuntu 22.04 | 20.04

$ wget https://apt.llvm.org/llvm.sh
$ chmod u+x llvm.sh
$ sudo ./llvm.sh 17

$ sudo apt list --installed >/dev/null | grep clang
$ dpkg -L clang-17

remove
$ sudo apt remove --purge clang-17
$ sudo apt autoremove --purge

もしかしたら、下記も必要かも?
$ sudo dpkg-reconfigure clang-14

下記は、参考にしたページの記載です。
$ sudo rm /etc/apt/sources.list.d/archive_uri-http_apt_llvm_org_*.list
sudo rm /etc/apt/trusted.gpg.d/apt.llvm.org.asc

TensorFlow 2.16.2 C++ library build

TensorFlow 2.16.2 C++ library build

TensorFlow 2.16.2 C++ library をソースからビルドしてみた。

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#9 LSTM で経路計画をする。 で、最終的には、C++ から実行する事になるので、試してみた。

参考にしたのは、
ソースからビルドする
Ubuntu20.04 LTS上で、TensorFlow 2.3.1をソースからビルドし、C++言語の共有ライブラリを作成する
tensorflow 2.0 c++ apiをcmakeで利用する

1. 開発環境
PC: Ubuntu Mate 22.04
Virtual_env
python 3.10.12
bazel 6.4.0
llvm-14

追加パッケージのインストール。
下記エラーが出たので、


https://stackoverflow.com/questions/16661167/fatal-error-when-compiling-llvm-clang-cstddef-file-not-found より、
$ sudo apt install libstdc++-12-dev

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#9 LSTM で経路計画をする。

--- ROS2 ロボット自律走行の経路計画の補助に、機械学習(Transformer、LSTM)を使う。 ----

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#8 Transformer で経路計画をする。 の続きです。

Transformer で、学習データ 1000個作って、学習させてみたが、1000個では、まるっきり足りないようで、 val=0.7 を切らない。

業を煮やして、それならと、 Speech to text の LSTM を同じ様に学習させてみました。

こちらは。1000件ほどのデータで、うまく学習できました。
これは、凄い!!
こんなにうまく行くとは、予想できませんでした。
本当に、うまく予測できているのか、今も、半信半疑です。
余りの感激に、涙がちょちょでるぞね!!

github に公開しました。
tosa-no-onchan/opp_with_lstm

1. 開発環境
PC: Ubuntu Mate 22.04
Python 3.10.12
virtual_env
tensorflow 2.16.2
keras 3.6.0

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#8 Transformer で経路計画をする。

--- ROS2 ロボット自律走行の経路計画の補助に、機械学習(Transformer、LSTM)を使う。 ----

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#6 Nav2 Planner を替えてみる で、ThetaStarPlanner を使って、Auto Mower 時の走行の直進性の改善がみられた。

しかし、まだおんちゃんが望む直進性能には、足りない。
そこで、ThetaStarPlanner の経路プランの一部補正として、機械学習が使えないか、無い知恵を絞って、考えてみた。

1. 概要
結論を先に言ってしまえば、経路プランに、Transformer、Lstm による、Speech To Text モデルのロジックを使えないだろうか? と言う話じゃ。

下の画像だと、赤線の経路を、青線の様にしたい。
障害物の手前まで真っ直ぐ進んで、障害物をなぞるように進んで、再度、スタートとストップの直線上に戻る、走行が欲しい。


2024-09-30 14-25-56-1.jpg

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#7 障害物からの脱出に機械学習を使う。

---- Auto Mower で、障害物に囲まれた際の脱出方向の算出に、機械学習の画像分類 (Image Classify) を使ってみる。-----

Auto Mower で、ロボットを動かして、目的地に到達させた場合に、障害物に近づき過ぎる場合がある。
そうすると、navigation2 で、その場所から抜け出せずに、エラー終了してしまう。

これを、防ぐ為に、static map 上で、障害物に囲まれた際に、脱出方向を計算して、cmd_vel モードで、ロボットを少し遠ざけている。

2024-09-30 17-04-16-1.jpg
現状は、ProControl::obstacle_escape() で処理を行っています。
処理概要は、
Static Map から、ロボットの周りを、OpenCV の cv::Mat に取りこんで、8方向のMaskを用意して、Mask と AND を取って、障害物の Dot を取得した後、
それぞれの方向で、一番障害物が少ない(Dot が少ない)方向に、cmd_vel を使って動かす。
注) 今は、Local Cost Map(static_layer + obstacle_layer) を、resolution: 0.01 の解像度で使っています。

これって、画像(2値画像か、グレースケール画像)を取りこんで、その画像パーターン(黒い部分が障害物、白が空きスペース)から、8クラス(クラス=方向) に分類する、
Image Classify ではないじゃろか?

Image Classify だったら、Orange Pi 5 の NPUでも使えそうじゃ!!。
少し、試してみないといかん。

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#6 Nav2 Planner を替えてみる。

---- Ros2 Navigation2 Planner を、NavfnPlanner から、ThetaStarPlanner に替えてみた。 ----

nav2.org / tuning を見ていたら、

Planner Plugin Selection
NavFn will typically make broad, sweeping curves; Theta* prefers straight lines and supports them at any angle;
and Smac 2D is essentially a classical A* algorithm with cost-aware penalties.

と記述があったので、
Theta を使えば、少しは、ロボットを直線的に走らせられるのではないか?
と思ったので、早速試してみた。

具体的には、xxx.yaml の中の、
planner_server:
で指定するので、ここを変更すれば良い。

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#5 C++ cmd_vel 走行で障害物をよける方法。

今回は、ROS2 自作 Turtlebot3 や、Gazebo Turtlebot3 で、C++ cmd_vel でコントロールしているときに、障害物を検知する機能を組み込んでみました。

方法としては、Stero Camera、Lidar、Depth Camera を入力として、Local Costmap に 障害物が、Topic として出てくるので、
それを、定期的(1 [sec]) に取りこんで、ロボットの前方に障害物が投影されたら、ロボットの方で、なんらかの対応処理をする。

Navigation2 を使えば、かんたんですが、 rpp 等を使うと、まずロボットがまっすぐ走行しません。

草刈りロボットとしては、障害物が無い間は、常に直線上を走行させたいので、cmd_vel で走行させています。
この時に、障害物が現れたら、Nav2 走行に切り替わって、障害物を避ける動きを組み込んでみました。

cmd_vel 走行のみの場合は、そこで、障害物がなくなるのを待つか、走行処理を終了させる か、どちらかになります。

市民目線の兵庫県知事のパワハラ問題について。

市民の目からみた、兵庫県知事のパワハラ問題 はどうなんだろうか?

まず、今回、公益通報者として、安易に却下されて、自ら命をおとされた、兵庫県職員のかたと、その家族様に、お悔やみを申しあげます。

さて、他県のおんちゃんが、兵庫県知事のパワハラ問題について、コメントできる立場に無いことを重々承知していなければなりませんが、

確かに、兵庫県知事の同職員に対する行動は、あまり、褒められないかもしれない。
ただ、この一連の騒動は、県民とは直接関係のない事とも取れます。

兵庫県の職員は、自分達の直接の利害に関することであれば、非常に勇敢に立ち向かわれていると感じますが、
これが、同県民の直接の利益に関する上での不正を目にしたときに、 この場合は、同じ県職員の行為になりますが、
公益通報者たりえるのか?

あくまでも、部外者なので、口をはすむべきではないのかもしれませんが。

ただ、この事は、おんちゃんの住む、高知県土佐市の市職員に、そっくり当てはめてみる事ができます。

高知県土佐市の恥ずべき行政について。

高知県土佐市の恥ずべき行政。

R5年 5-6月の "南風(まぜ)" の件に寄せて。

自分が住む土佐市が、詐欺まがいの事をしていて、高知県全体のイメージを損なったのは、 県民の皆様に対して、本当に申し訳なく思う。

誠に、申し訳ありません。

また、多分、土佐市は、地域おこし協力隊で、土佐市に来ていただいた方と、NPO法人の両方に虚偽の説明をして、結果として、両方に、迷惑をかけたのだと思います。

※国の助成金を使った施設で、本当は、飲食店として使えないことを伏せて。
であるが故に、書面による賃貸借契約もかわさないまま、口約束で、7年も続けて、これが、カフェの方の法的立場を奪った。

NPOの人も思い描いた利用ビジョンがあった。通常であれば、法的に対等者同士の話し合いであれば、お互い譲歩して、
折り合い点をみつけだす努力をするところが、今回相手が、そうではなかった、
が故に、図らずに強くでてしまって、話がこじれたのだろう。

大事な田畑を手放す苦渋を強いてしまう代わりに、振興策として、土佐市が持ちかけた条件は、わからないが、念書の取り交わしであれば、公文書なので、
公開請求できるだろうが、市職員との口約束あれば、内容はわからない。
もしかしたら、NPOの人に、施設の絶対的利用権の授与に近い約束だったのかもしれない。

両方の方々にも、土佐市の一市民として、お詫びを申し上げたい。

高知県土佐市の防災、緊急放送の迷惑さ。#2

高知県土佐市の防災、緊急放送の迷惑さ。#2

高知県土佐市の防災、緊急放送の迷惑さ。の続きです。

R5年末頃から、市の迷惑スピーカー放送も下火になっていたので、それ以来このブログも、更新せずに、そのままにしていたが、
また、R6年7月から、市の迷惑スピーカー放送が、増えてきた。

この件に関して、2024.8.8 土佐市の市長宛に、メールを送ったが、なんの返事もない。

注) これでも、メールを送るまでに、結構我慢もしたが、また、毎日毎日流された始めたので、仕方なく、出しました。

土佐市連絡フォーム



まあ、一向に、返事もない。

岸田首相が今期限りで首相を止めてしまうのは残念だ。

岸田さんには、もっと首相を続けてほしかった。まっこと残念でしようがない。
コロナ感染の真っ最中に、どうしようもない、菅政権を引きついで、よく頑張ってくれたと、おんちゃんは、感謝しています。

首相官邸で、よく、記者連の問いかけに、真摯に対応して、国民に説明をくれたのを見ていて、その人柄が十分伝わってきたぞね。

一番感謝しているのは、今までの政権とは違って、真剣に、労働者賃金の底上げに声を上げてくれて、今までずっと、企業の利益を社員に分配せずに、
内部留保にばかり貯め込んできた、企業の経営者側の意識を変えて、今年の春闘の賃上げにつなげてくれた事。

マスコミ、政治、経済評論家が、口を揃えるように、岸田政権の政策に花がない、期待が持てないと、囃し立てて、
その口車に載せられた多くの国民が、同じような事を言って、岸田政権を評価していたのは、まことに残念。

過去の政権で、大きな改革や目標をぶちあげて、でも大した成果も無いままだった事を忘れてしまったのか?

省庁再編、郵政民営化、あべのミックス、規制改革(非正規労働者の増加)などは、どう評価されているのだろうか?

とかく、人が他人を評する時は、悪い面ばかりを取り上げる、しかし、必ず良い面も必ずあるはずだ。
公平に、両方を取り上げるべきだ。

おんちゃんにとって、岸田政権は、昔の小渕政権を思い起こさせる。花はあまり無いように思えるが、じわじわと、その良さが現れてくる。そんな感じじゃ。

岸田首相は、眼の前にある一番の国民の問題に、十分に取り組んでくれたと思う。

今期で、首相を辞められるのは、残念でしょうがないが、
まっこと、ありがとうございました。

On ubuntu 22.04 docker build source l4t for ubuntu 22.04 Jetson Nano 2G.

ubuntu 22.04 docker 上で、l4t source を ubuntu 22.04 Jetson Nano 2G 向けにビルドできるのか試して見る。
本来であれば、aarch64 toolchain を使うところだが、今回は、 Jetson Nano armbian jammy でビルドするとどうなるのかの参考にしたいので、
あえて、arm64 のままでビルドしてみます。

参考は、
Compiling Custom Kernel Modules on the Jetson Nano

開発環境
PC: Ubuntu Mate 22.04
docker version 24.0.7
他に、
$ sudo apt install docker-buildx
$ sudo apt install qemu binfmt-support qemu-user-static

はじめに、
Dockerを使ってポータブルなArm64エミュレート環境を構築 を参考にして、
Ubuntu 22.04 x86-64 上で、arm64 を実行できるようにします。

$ docker run --privileged --rm tonistiigi/binfmt --install all

$ export DOCKER_DEFAULT_PLATFORM=linux/arm64/v8
$ docker run --rm -it arm64v8/ubuntu:22.04 bash
が実行できるようにします。

ここから開始。

$ export DOCKER_DEFAULT_PLATFORM=linux/arm64/v8

Transformers Object detection - detr の転移学習とONNX変換と実行。
---- 雑草の独自データの転移学習とONNXでの変換、実行を試す ----

Transformers Object detection

1. 最初に、オリジナルの転移学習を試す。
次に、雑草画像の独自データを用意して、YOLO アノテーションを作成して、それを、COCO 形式に変換して、
雑草画像の転移学習を、試してみた。

開発環境
Ubuntu Mate 22.04
GPU: GeForce GTX 1070
Python 3.10
virtualenv

checkpoint = "facebook/detr-resnet-50"
が、転移学習のベースモデルみたい。
huggingface.co/facebook/detr-resnet-50

num_train_epochs=30
位必要みたい。
一応、オリジナル版の転移学習は、OK でした。

transformer asr japanese サンプルがある。

おんちゃんは、transformer asr のサンプルの、下記を試しておったが、
Automatic speech recognition
なんとも、日本語対応がすでに、ありますっと。

google で検索していたら、transformer asr japanese があった。
kotoba-tech/kotoba-whisper-v1.0 を ONNX に変換して動かしてみた。

1. 自分で転移学習をするなら、
August 2023, Fine-Tuning ASR Models for Japanese and Vietnamese by using OpenAI Whisper and Azure Speech Studio

2. そのまま使うなら、
kotoba-tech/kotoba-whisper-v1.0

ここのサンプルで、最近、判ったことだが、

torch_dtype = torch.bfloat16 if torch.cuda.is_available() else torch.float32

の部分は、使う GPU によっては、注意が必要みたいぞね。
おんちゃんの、GPU は、 GTX-1070 じゃが、この場合は、float16 は、使えないみたいぞね。

#torch_dtype = torch.bfloat16 if torch.cuda.is_available() else torch.float32
torch_dtype = torch.float32
こちらにすべきです。
これで、3.8 sec/f だったのが、 1.18 sec/f になったぞね。

日本語音声認識に特化したWhisperである kotoba-whisper-v1.0を早速試してみた
Kotoba-Whisper入門 - 日本語音声認識の新しい選択肢

結論を言えば、kotoba-whisper-v1.0 で、GTX-170 の場合、torch_dtype = torch.float32 で使うと、
リアルタイム MIC 入力で使えば、それなりに快適に動きます。
Yutube の怪談の動画の音声をスピーカーに出して、それをマイクで拾って遊んでいます。
まあ、間違いは、お愛嬌か。

OAK-D-Lite Object Detection YOLOv7 transfer learning.

OAK-D-Lite Object Detection YOLOv7 転移学習をしてみた。

単純に下記ページの YOLOv7 tutorial を実行するだけ。
docs.luxonis.com/software/ai-inference/training

結論から先に言えば、うまくできました。
OAK-D Lite で、動きました。

ただし、サンプルは、google colaboratory と、Google Drive を使っています。
おんちゃんも当初は、お同じにしていましたが、どうも、Google Drive への保存が良くわからなくて、学習結果が消えてしまいました。

結局、ubuntu 22.04 PC 上で、実行しました。

1. PC環境
Ubuntu Mate 22.04
GPU: GeForce GTX 1070
Python 3.10
virtualenv
OAK-D Lite

2. 手順
$ cd
$ python3 -m pip install virtualenv --user
$ python3 -m virtualenv torch_env
$ source ~/torch_env/bin/activate
(troch_env) xxx@xxx:~$
$ python -m pip install --upgrade pip

あとは、PyTorch のインストールをします。
https://github.com/WongKinYiu/yolov7 の環境を、そのまま使用します。
$ cd ~/Documents/Visualstudio-torch_env
$ git clone https://github.com/WongKinYiu/yolov7.git
$ cd yolo7
$ python -m pip install -r requirements.txt
$ python -m pip install notebook

これで、pytorch GPU も、OK です。
ただし、
Ubuntu 22.04 Tensorflow GPU Install. でシステム側にインストールした、
cudnn か、なにかのライブラリーと競合するようで、
~/.bashrc の記述の、LD_LIBRARY_PATH を取ります。
# add for libcudnn8
#export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/home/nishi/usr/local/share/TensorRT-8.6.1.6/lib:$LD_LIBRARY_PATH

ROS2 OAK-D-Lite で、Stereo depth と Mobilenet object detection を同時に動かす。

Sub Title: Does an OAK-D run Stereo depth and Mobilenet object detection at the same time?

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#4 草むらの判定 で、Stereo Camera Depth と、
Object Detection を同時に実行できるハードを検討しないと行けないので、
とりあえず、OAK-D Lite で試してみた。

なんか、同時に動くみたいぞね。
google で検索したけど、該当記事がないので、できないかと思ったが、
なぜか動くみたいぞね。
後で、github に上げちょきます。
tosa-no-onchan / depthai_ros_my
rgb_stereo_mobilenet_node_my.cpp

ただし、今は、Mobilenet で試しただけで、Tiny YOLOv4 では、どうなのか?

ROS2 C++ rclcpp::Node を継承した、Sub class で、親の nodeポインタがほしい。

忘れないように、書いておきます。
/opt/ros/humble/include/rclcpp/rclcpp/node.hpp

enable_shared_from_this
を見ると、shared_from_this() 親メソッドが使えるみたい。

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#4 草むらの判定。

一連の、ROS2 草刈りロボット の開発で、 GPS を使って畑を走行させる事は実現できそうだと、判った。
最後に残った懸案は、

1. 草むらを障害物とせずに、どうやってロボットを進めるか?
しかし、これも、
Keras V3 Object detection with Vision Transformers を試す。 で、最近の、Object Detection を体感する事で、解決策が浮かんできた。
今は、単なる思いつきじゃが、
YOLOx、Transformer Object detection で草むらを判定させて、それを Local CostMap に取り込めば良い。

Local CostMap での障害物の判定は、
obstacle_layer の plugins で行っている。
実際のプログラムは、plugin: "nav2_costmap_2d::ObstacleLayer" で、
こいつで、入力を、/scan:"LaserScan" か、 /cloudXYZ:"PointCloud2" のどちらかを取り込んで、障害物と判定している。

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'

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

アイテム

  • v_6.jpg
  • 2024-09-30 14-25-56-1b.jpg
  • 2024-09-30 17-59-18-1.jpg
  • 2024-09-30 17-04-16-1.jpg
  • 2024-09-30 14-25-56-1.jpg
  • LC29H_QGNSS-2024-3-5_2.jpg
  • DSC03477-1.jpg
  • robotcar-DSC03445.jpg
  • foxbot3_core_chassis-img007.jpg
  • foxbot3_core_chassis-img006.jpg

タグクラウド

カテゴリ

ウェブページ

サイトナビ