« Meta Quest 3を1日使ってみて | トップページ | Quest 3でVRな宇宙体験をやってみた »

2024年2月16日 (金)

Raspberry Pi 5 8GBが来たので画像生成AI「Stable Diffusion」と物体検出「YOLOX」を動かしてみた

ついに、Raspberry Pi 5が発売になりました。

Raspberry Pi Shop by KSY

で、2月13日の夜にKSYのサイトにつないだら、なんということでしょう

まだ在庫があるではありませんか。
ポチッてしまったのは、言うまでもありません。

で、15日に届きました。

Pxl_20240215_054109856

8GBのモデルで、KSYでは1.4万円ほど。
ついでに、Amazonでファン付きヒートシンクも頼んでおきました。
4ですらヒートシンクなしで動作不可能なのに、5が大丈夫なわけがない。

Pxl_20240215_054205142

中身を開封し、

Pxl_20240215_054349441

ヒートシンクを取り付けて、このピンみたいなやつを押し込みます。

Pxl_20240215_054354398mp

少し悩んだのは、このファンのコネクターってどこにあるの?
USB端子の根元辺りにありました。

Pxl_20240215_054432659

あとは、以下のサイトからインストーラーを入手し、手ごろなSDカードにOSをインストールします。

Raspberry Pi OS – Raspberry Pi

なお、今回は256GBのSDカードを使ったのですが、ちゃんと入りました。

Pxl_20240215_055409686

このRaspberry Pi 5ですが、USB-Cの電源は5V/5A以上、つまり25W以上が必要とのこと。
専用電源の仕様がそれなんですが、我が家のは65Wあるので大丈夫でした。

Pxl_20240215_065553601

さて、あっさりと起動しました。
まあ、ここまでは順調。
ですが、ここからが大変でした。

表題にもある通り、何を思ったのか画像生成AI「Stable Diffusion」を使ってみたんですが、思わぬトラップに引っかかっておりました。
参考にしたのは、以下のサイト。

raspberry pi 4でStable Diffusionを動かしてみる(画像自動生成&更新フォトフレームの作成)その1 #Python - Qiita

以前、Raspberry Pi 4で同じことを遣ろうとしたんですが、4GBモデルではメモリーが足らず不可能でした。
で、せっかく8GBのモデルなので、そのリベンジを遣ろうと思った次第です。
で、ここにある通り動かせば、行けるはず・・・と思いきや、

pipコマンドが効かない!!

というトラップに引っかかりました。
えっ、なんで?と思ったんですが、「PEP668」とかいうやつのおかげで、pipコマンドが通らないことが判明。

Pythonでpipが使えないなんて、どうやってライブラリを入れりゃあいいんだ!

Raspberry Pi OSでもbookwormでpipインストールエラー「externally-managed-environment」 | ラズパイダ

上のサイトを見て試行錯誤しましたが、結局、対処法は以下の2つでした。

(1) sudo apt install python3-(ライブラリ名) 

なんか、pip使わずにaptを使えってことみたいです。
が、これでインストールできないライブラリの場合は、

(2) sudo -H pip install --break-system-packages (ライブラリ名)

とすればインストールできました。
つまり、(1)、(2)の順に試せってことです。

なお「.pip」というディレクトリを作って、その中にpip.confを作り・・・という対処法は、なぜか上手くいきませんでした。

てことで、今回のインストール手順を書いておきます。

【環境設定】

etcにあるdphys-swapfileを編集します。

sudo vi /etc/dphys-swapfile

(viのところはnanoでも可)

中ほどに「CONF_SWAPSIZE=100」というのがあるので、この100を4096に変えて保存します。

【ライブラリ・インストール】

以下の順番に実行。

sudo apt-get update

sudo -H pip install --break-system-packages setuptool==58.3.0

sudo apt install python3-Cython

sudo apt install python3-torch

sudo -H pip install --break-system-packages transformers

sudo -H pip install --break-system-packages diffusers

sudo -H pip install --break-system-packages accelerate

sudo -H pip install --break-system-packages scipy

sudo -H pip install --break-system-packages safetensors

とりあえず、これで動くようになりました。
基本的には、上の(1)、(2)の順に試してます。

【プログラム実行】

さて、これでやっと実行環境が整ったので、早速動かしてみます。
以下のようなコード「stabledf.py」を準備します。


from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler

model_id = "CompVis/stable-diffusion-v1-4"
scheduler = EulerDiscreteScheduler.from_pretrained(model_id, subfolder="scheduler")

pipe = StableDiffusionPipeline.from_pretrained(model_id, scheduler=scheduler, low_cpu_mem_usage=True)
pipe = pipe.to("cpu")

prompt = "Hiace aiming for the summit of Mount Everest, realistic photo"
steps = 50

image = pipe(prompt=prompt, num_inference_steps=steps, height=256, width=256).images[0]
image.save("image.png")

これを実行。

python stabledf.py

Pxl_20240215_114714518

最初だけ、ダウンロードに時間がかかります。
画像サイズやステップ数によりけりですが、256×256の画像で50ステップならば、12分程度で完了しました。

が、ここで一つ問題が。
なぜか、上のコマンドライン上で実行すると、真っ黒な画面しか出力されません。

Pxl_20240215_221511971
で、上のようにファイルマネージャーからコードをダブルクリックして出てくる「Geany」という実行環境上から実行すると、画像が出力されました。
理由はよく分かっておりません。

Pxl_20240215_114329720

なお、実行中のCPU使用率は98%、

Pxl_20240215_114339716

CPU温度は65度まで上昇。取り付けたファンが、大活躍です。
ヒートシンクがなければ、即死でしたね。

Image

で、生成された画像がこちら。
「エベレスト山頂を目指すハイエース」と書いたつもりですが、ハイエースっぽい車の姿がないですね。
まあ、なかなか一発では上手くいかないものです。

と、頑張って動かしてはみたんですが。

残念なことに、Raspberry Pi 5としての性能向上を実感できるものではなかったですね。メモリーが8GBになったメリットしか感じてません。
生成AIが動かせるということ自体が素晴らしいことですし、おそらくはRaspberry Pi 4と比べたら速いんでしょうが、元々、我が家のRaspberry Pi 4では動かなかったものを動かしたため、比較ができません。

てことで、比較できるものを動かしてみました。

PINTO_model_zoo/426_YOLOX-Body-Head-Hand at main · PINTO0309/PINTO_model_zoo · GitHub 

こちらのPINTO様のYOLOXによる身体、頭、手を検出するやつを動かしてみました。

Pxl_20240215_220608771

先のライブラリに加えて、OpenCVとonnxruntimeが必要です。まずは、いかを実行。

sudo apt install python3-opencv

sudo -H pip install --break-system-packages onnxruntime

その後、上のGithubから「demo_yolox_onnx.py」を入手し、かつdownload_n.shでモデルを入手しておき、

python demo_yolox_onnx.py -m yolox_n_body_head_hand_post_0461_0.4428_1x3x256x320.onnx

のようにモデルを指定して実行します。
(使用するモデルは、予めdemo_yolox_onnx.pyと同じ階層に置きます)

解像度が256×320のnanoモデルを動かしました。推論速度は30~40ms程度と、結構な速度です。
Raspberry Pi 4では70msほどでしたので、確かに倍は速くなってる。
が、描画速度が遅いのか、推論時間のわりにカクカクしてます。そこは要調査。

ということで、買って早々にRaspberry Pi 5で遊んでみました。
M.2 SSDが使えるなどのメリットをまだ活かせていないので、こちらもいずれ。


Raspberry Pi 5 8gb 技適マーク付き ラズベリーパイ5 8gb Development Board BCM2712 Arm Cortex-A76 64-bit quad-core 2.4GHz RTC WiFi/Bluetooth 5.0 SDR104対応 ラズベリーパイ5 (8GB RAM)コンピューター 技適対応品 (raspberry Pi 5 8GB)

« Meta Quest 3を1日使ってみて | トップページ | Quest 3でVRな宇宙体験をやってみた »

Raspberry Pi・Arduino・電子工作」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« Meta Quest 3を1日使ってみて | トップページ | Quest 3でVRな宇宙体験をやってみた »