PINTO model zooの歩き方 ~ Tour of PINTO model zoo ~
PINTO model zooとは?
PINTOさんによるモデル動物園です。
古今東西の様々なAI(ディープラーニング)モデルが、軽量化され様々なフォーマットで格納されています。
軽量なモデルや、汎用的なONNX形式のモデルが多数あるので、Linux PCをはじめとして、Windows, Mac, Unity, Raspberry Pi(ラズパイ), JetsonなどのあらゆるプラットフォームでGPU無しで動かすことができます。
そんなPINTO model zooですが、あまりに巨大かつ、ある程度分かっている人向けなので、初心者向けに、モデルを使ってどんなことができるかというツアーをしてみたいと思います。
具体的には、動物園に隠されているデモを次々と動かしていきPINTO model zooの凄さを体感していきます。その凄さにあなたは、きっと驚きおののくことでしょう!
環境構築
Linux PC(Intel Mac)
一番おすすめと考えられるLinux PCでの動かし方です。ここでは記載しませんが、同じ要領で、Intel Macでも動かせると思います。興味ある方はチャレンジしてみてください。
Pyenvでネイティブにインストールする方法と、Dockerを使う方法の2つを記載します。Dockerを使う方法がラクラクです。
Dockerを使ったセットアップ方法
PINTOさんが最強のDockerイメージを用意してくださっているので、以下コマンド実行するだけでOKです。20GB以上あるので、容量だけ注意ください。
$ xhost +local: && \
docker run -it --rm \
-v `pwd`:/home/user/workdir \
-v /tmp/.X11-unix/:/tmp/.X11-unix:rw \
--device /dev/video0:/dev/video0:mwr \
--net=host \
-e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \
-e DISPLAY=$DISPLAY \
--privileged \
ghcr.io/pinto0309/openvino2tensorflow:latest
これで、なんとDocker上でGUIもUSBカメラも使えるようになります。神イメージですね。
参考:openvino2tensorflow#4-1-environment-construction-pattern-1-execution-by-docker-strongly-recommended
Pyenvを使ったセットアップ方法
以下記事参考にPyenvで環境構築します。
以下最低限の環境構築のコマンドです。汎用的なONNX形式のモデルならこれで動かせます。TensorFlowやPyTorchが無くても動かせるのがポイントです。環境によっては、なかなかこれらのソフトのインストールが大変なので、無しで動くのは嬉しいですね。
$ pyenv install 3.8.12
$ pyenv global 3.8.12
$ pyenv virtualenv 3.8.12 ml
$ pyenv global 3.8.12/envs/ml
$ python3 -m pip install opencv-python
$ python3 -m pip install onnxruntime
$ python -m pip install pillow
TensorFlowをインストールしたい場合は以下です。
$ python3 -m pip install tensorflow==2.7.0
Windows(WSL2)
WSL2上で動かすためには、WSL2上でUSBカメラを扱えるようにセットアップする必要があります。ただ、少し手順は多く比較的なれている人向けです。
まずは、以下記事を参考にWSL2上でUSB機器を使えるようにする設定をします。以下はWindows11が前提となっていますが、Windows10でも問題ありませんでした。
最初のwsl --update
もしなくて大丈夫です(カーネル 5.4.72
でいけました)。
私がハマったポイントは以下です。
-
<windows username>
に必ずWindowsのユーザー名を入れる(2箇所あるので注意) - 管理者権限でターミナルを起動する
- WSL2が起動しなくなったら
C:\Users\<windows username>/.wslconfig
を削除して復帰
上記設定が終わったら、WSL2上でUSBカメラが使えるようになります。
WSL2がもし起動しなくなったら以下記事参照ください。
あとは、Linuxと同様、Dockerで動かすことができるはずですが、まだ私はDocker上での確認まではできていません。
Apple Silicon Mac
Apple Silicon Macの場合は、オススメしませんが、以下参考にセットアップしたら動くかもしれません。
Raspberry Pi(ラズパイ)
以下記事参照ください。
Jetson
ラズパイと大体同じ要領で動くと思います。基礎的なセットアップなどは、以下記事参照ください。
PINTO model zoo Tour
以下、基本的にカメラを使ったデモなので、適当なUSBカメラを接続して実行してください。
上述しているセットアップを完了させたあと、最初に以下を実行してPINTO_model_zoo
をクローンしてください。
$ cd && git clone https://github.com/PINTO0309/PINTO_model_zoo
追記:モデルのダウンロードに関して
2022年3月現在PINTO_model_zoo
のダウンロードスクリプトでモデルがダウンロードできません。
原因と対応方法は以下2つになります。
- 多くの人が同時にアクセスし過ぎている → 直接ブラウザでダウンロード
- Googleの仕様変更 → スクリプトの変更 or 直接ブラウザでダウンロード
確実なのは、直接ブラウザでダウンロードする方法です。また、Macの場合はファイル容量大きい場合は、スクリプトを変更してもスクリプトからではダウンロードできない場合があるようです(原因は未調査)。
ブラウザでダウンロードするには、ダウンロードスクリプト冒頭の以下の<file id>
部分をコピペします。
fileid="<file id>"
続いて、ブラウザのアドレスバーに以下のようにペーストするだけです。
https://drive.google.com/uc?export=download&id=<file id>
スクリプトの変更に関しては、こちらの記事参考に修正ください。ただし、スクリプト修正しても、多くの人が同時にアクセスしすぎているとダウンロードできないので、直接ブラウザでダウンロードするのが確実です。
スクリプトは、多くの飼育員の活躍により、無事全て変換されました参考PR。
公式README
全部は試していませんが、 Sample1〜4はそのまま動くと思います。
007_mobilenetv2-poseestimation
姿勢検出のデモができます。
サンプル
動かし方
$ cd ~/PINTO_model_zoo/007_mobilenetv2-poseestimation/dm100_224/
$ ./download.sh
$ python3 90_tflite-usbcamera-cpu-sync.py
関連リンク
ラズパイ用にカスタムしたリポジトリです。
115_MoveNet
姿勢推定ができます。
サンプル
動かし方
$ cd ~/PINTO_model_zoo/115_MoveNet
$ ./download_lightning_v3.sh
$ python3 demo/demo_singlepose_onnx.py --model saved_model/model_float32.onnx
$ python3 demo/demo_singlepose_tflite.py --model saved_model/model_float32.tflite
関連リンク
119_M-LSD
線検出・四角検出のデモができます。
サンプル
動かし方
$ cd ~/PINTO_model_zoo/119_M-LSD
$ ./download.sh
$ python3 demo/demo_mlsd-lines_onnx.py
$ python3 demo/demo_mlsd-lines_tflite.py
$ python3 demo/demo_mlsd-squares_onnx.py
$ python3 demo/demo_mlsd-squares_tflite.py
関連リンク
129_SCRFD
顔検出のデモができます。
サンプル
動かし方
$ cd ~/PINTO_model_zoo/129_SCRFD
$ ./download.sh
$ python3 demo/demo_SCRFD_onnx.py
$ python3 demo/demo_SCRFD_tflite.py
関連リンク
136_road-segmentation-adas-0001
道路のセグメンテーション
サンプル
動かし方
$ cd ~/PINTO_model_zoo/136_road-segmentation-adas-0001
$ ./download.sh
$ cd YuNet-ONNX-TFLite-Sample
$ python3 demo/demo_road-segmentation-adas-0001_onnx.py
$ python3 demo/demo_road-segmentation-adas-0001_tflite.py
関連リンク
137_MoveNet_MultiPose
複数人の姿勢検出デモです。
サンプル
動かし方
$ cd ~/PINTO_model_zoo/137_MoveNet_MultiPose
$ ./download_multipose_lightning.sh
$ python3 demo/demo_multipose_onnx.py
$ python3 demo/demo_multipose_tflite.py
関連リンク
144_YuNet
顔検出のデモ
サンプル
https://github.com/Kazuhito00/YuNet-ONNX-TFLite-Sample より引用
動かし方
$ git clone https://github.com/Kazuhito00/YuNet-ONNX-TFLite-Sample
$ cd YuNet-ONNX-TFLite-Sample
$ python sample_onnx.py
関連リンク
146_FastDepth
単眼Depth推定のデモができます。
サンプル
動かし方
$ cd ~/PINTO_model_zoo/146_FastDepth
$ ./download.sh
$ python3 demo/demo_fast_depth_onnx.py --model saved_model_128x160/fast_depth_128x160.onnx
$ ython3 demo/demo_fast_depth_tflite.py --model saved_model_128x160/model_weight_quant.tflite
関連リンク
158_HR-Depth
単眼Depth推定のデモができます。
サンプル
動かし方
$ cd ~/PINTO_model_zoo/158_HR-Depth
$ ./download_saved_model_lite_hr_depth_k_t_encoder_depth_192x640.sh
$ python3 demo/demo_hr_depth_onnx.py --model saved_model_lite_hr_depth_k_t_encoder_depth_192x640/lite_hr_depth_k_t_encoder_depth_192x640.onnx
$ python3 demo/demo_hr_depth_tflite.py --model saved_model_lite_hr_depth_k_t_encoder_depth_192x640/model_float16_quant.tflite
関連リンク
171_Fast-SRGAN
超解像のデモができます。
サンプル
動かし方
$ cd ~/PINTO_model_zoo/171_Fast-SRGAN
$ ./download.sh
$ python3 demo/demo_fast_srgan_onnx.py
$ python3 demo/demo_fast_srgan_tflite.py
関連リンク
172_Real-Time-Super-Resolution
超解像のデモができます。
サンプル
動かし方
$ cd ~/PINTO_model_zoo/172_Real-Time-Super-Resolution
$ ./download.sh
$ python demo/demo_Real-Time-Super-Resolution_onnx.py
$ python demo/demo_Real-Time-Super-Resolution_tflite.py
関連リンク
176_StableLLVE
暗所ノイズ除去のデモができます。
サンプル
動かし方
$ cd ~/PINTO_model_zoo/176_StableLLVE
$ ./download.sh
$ python3 demo/demo_StableLLVE_onnx.py
$ python3 demo/demo_StableLLVE_tflite.py
関連リンク
193_CoCosNet
画風変換のデモです。
サンプル
動かし方
$ cd ~/PINTO_model_zoo/193_CoCosNet
$ ./download.sh
$ cd demo
$ python3 demo_CoCosNet\(only_cocosnet_onnx\).py --model ../saved_model_256x256/cocosnet.onnx
関連リンク
441_YOLOX-Body-Head-Hand-Face-Dist
すごい性能の人体の検出モデルです。
サンプル
動かし方
$ cd PINTO_model_zoo/441_YOLOX-Body-Head-Hand-Face-Dist
$ ./download_x_withpost.sh
$ python demo/demo_yolox_onnx_tfite.py -v <movie file>
関連リンク
462_Gaze-LLE
サンプル
動かし方
Unity関連
今後追記予定です。
今後追加予定
エラーで動かない
そのうち修正チャレンジします。
File "sample_onnx.py", line 182, in <module>
main()
File "sample_onnx.py", line 111, in main
bboxes, scores, class_ids = nanodet.inference(frame)
File "/home/karaage/NanoDet-ONNX-Sample/nanodet/nanodet_onnx.py", line 73, in inference
bboxes, scores, class_ids = self._post_process(results)
File "/home/karaage/NanoDet-ONNX-Sample/nanodet/nanodet_onnx.py", line 184, in _post_process
bboxes, scores, class_ids = self._get_bboxes_single(
File "/home/karaage/NanoDet-ONNX-Sample/nanodet/nanodet_onnx.py", line 263, in _get_bboxes_single
bboxes = bboxes[indexes[:, 0]]
IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed
Traceback (most recent call last):
File "demo/demo_vehicle-detection-0200_onnx.py", line 187, in <module>
main()
File "demo/demo_vehicle-detection-0200_onnx.py", line 152, in main
bboxes, scores = run_inference(
File "demo/demo_vehicle-detection-0200_onnx.py", line 114, in run_inference
nms_bbox_list.append(bbox_list[index[0]])
IndexError: invalid index to scalar variable.
これから試す
まとめ
PINTO model zooツアーをしてみました。他にも面白そうなモデルを発見したら追加していきます。
動物園には、まだまだ手軽に動かせるデモソフトが存在しない大量のモデルが埋もれています。デモソフトを作ってPull Requestしたら一躍(一部界隈で)ヒーローです!次のPINTO model zoo飼育員は君だ!
参考リンク
関連ページ
変更履歴
- 2022/03/24 モデルのダウンロード方法に関して追記
- 2021/01/16 Dockerイメージに関して追記
- 2021/11/27 環境セットアップに関して追記
- 2021/11/26 モデル追加
Discussion
最初の段落でのtypo報告です。
CPUなしでは流石に動かないっす。
誤) ...CPU無しで動かすことができます。
正) ...GPU無しで動かすことができます。
PINTO model zoo動かしてみます。
TYPO報告ありがとうございます。修正いたしました。