まず作るもの。
今回はこの赤丸部分です。
サムターンの開閉を物体検出します。
モデルはyolo5を使用します。
【要件】10FPSくらいで画像処理しながら物体検出したい。
使うラズパイは4B RAM 4GB
できたもの
バッファクリアの処理いれてるんですが遅延しますね。
FPS:0.5の世界初めてみたw
物体検出はできている模様
物体検出できてもこんだけ遅いと要件に合わないので失敗でした。
なぜ失敗したか
・モデルが重い
→ラズパイ用に軽いモデルを使うのが吉 今回はwindowsで作ったモデルを流用しようとした。
→MobileNet SSD など。
・ラズパイのスペックが足りない
→GPUがない
→CPUも弱い
次回成功するために。
①これを購入 -¥13,000 (泣)
エッジデバイス(ラズパイ)での物体検出の手助けをしてくれるらしい。youtubeで動画見てたら30FPSで画像処理しながら推論してた。強い。
②軽めのモデルを使用。
↑のCoral USB Accelerator は Edge TPU を搭載しており、主に TensorFlow Lite(TFLite) を最適化したモデルで動作します。
TensorFlow Liteあたりを学習して臨む。
次回の記事ではこれの挑戦です。
失敗談(まだある)
・windowsで作ったyolo5のモデルはラズパイで使えません。
・ラズパイで、windowsで作ったモデルを使うためにモデルをonnxに変換するも、うまくいきません。
・ラズパイで学習させるも20時間かかる。
一つずつ書いていく。
windowsで作ったyolo5のモデルはラズパイで使えません。
学習した結果のモデルはこのbest.ptなのですが、ラズパイで使おうとするとwindowsPathが書かれていてラズパイで認識しませんみたいなこと言われます。
chatgptに相談すると、ラズパイでも使えるようにモデル変換することを勧められます。
ラズパイで、windowsで作ったモデルを使うためにモデルをonnxに変換するも、うまくいきません。
onnxを使うための環境設定がうまくいきませんでした。
Raspberry Pi は ONNX Runtime の公式サポートがないため、onnxruntime をビルドする必要があります。
→色々chatgptしたり検索したりして進めましたがうまくいかず、windowsでモデルを作ったノリでラズパイでモデルを作ることにしました。
ラズパイで学習させるも20時間かかる。
ラズパイは非力なので機会学習(めっちゃリソースを消費するという認識でおけ)に適さないことはわかっていたのですが、ラズパイで使うモデル作成に手間取っているので、ラズパイで学習させることに。
↓実際使ったコマンド
python train.py --img 640 --batch 4 --epochs 100 --data /home/pcmainte/project_ras3/dataset/dataset.yaml --weights yolov5s.pt
--img 640 入力画像のサイズ(640×640ピクセル)
--batch 4 バッチサイズ(1回の学習で処理する画像の数)
--epochs 100 学習エポック数(学習を100回繰り返す)
1. --img 640(入力画像サイズ)
YOLOv5 は 正方形の画像 を使用するため、この例では 640×640 で学習。
小さくするとメモリ消費が減るが精度が落ちる。
大きくすると精度は上がるが処理速度が落ちる。
一般的なサイズ: 416, 512, 640, 1280 など
2. --batch 4(バッチサイズ)
1回の学習ステップ(ミニバッチ)で処理する画像の数。
大きくすると学習が速くなる が、メモリを大量に消費する。
小さくすると学習が安定する が、時間がかかる。
Raspberry Pi では 2以下が推奨(VRAMが少ないため)。
3. --epochs 100(学習エポック数)
学習データを何回繰り返して学習するか。
例えば 100 にすると、全データを 100 回学習。
一般的には 50 〜 300 が適切。
--epochs 50 で結果を見て、調整するのが良い。
ただしこのコマンドではラズパイのリソースが足りず処理が強制終了しています。
→batch 1で学習開始したら成功しました。
ただし20時間かかりました(^_^;)
後半でリソース不足で強制終了させられたり、エラー落ちしたりしなくて良かった・・・
実際のコマンドはこれです。
python train.py --img 640 --batch 1 --epochs 100 --data /home/pcmainte/project_ras3/dataset/dataset.yaml --weights yolov5s.pt