🐘

PINTO model zoo Tour

9 min read 2

PINTO model zooとは?

PINTOさんによるモデル動物園です。

https://github.com/PINTO0309/PINTO_model_zoo

古今東西の様々な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でも動かせると思います。興味ある方はチャレンジしてみてください。

適当なUSBカメラを接続しておいてください。

以下記事参考にPyenvで環境構築します。

https://zenn.dev/karaage0703/articles/5af7ce4b8b1a8a

以下最低限の環境構築のコマンドです。汎用的な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
$ cd && git clone https://github.com/PINTO0309/PINTO_model_zoo

TensorFlowをインストールしたい場合は以下です。

$ python3 -m pip install tensorflow==2.7.0

Windows(WSL2)

USBカメラが鬼門です。私は試していませんが、以下記事などが参考になるかもしれません。基本はLinuxを使うのが良いかと思います。

https://zenn.dev/pinto0309/articles/0723ae46501beb

Apple Silicon Mac

Apple Silicon Macの場合は、オススメしませんが、以下参考にセットアップしたら動くかもしれません。

https://zenn.dev/karaage0703/articles/0ab9e654cfb0ec

Raspberry Pi(ラズパイ)

基本的に大体動くと思いますが、動作実績のあるモデルや動かし方の情報です。

https://karaage.hatenadiary.jp/entry/rpi4-dl-setup

https://github.com/karaage0703/pose_estimation_pi

https://github.com/Kazuhito00/PyCon-mini-Shizuoka-2021-Talk4

Jetson

ラズパイと大体同じ要領で動くと思います。基礎的なセットアップなどは、以下参照ください。

https://qiita.com/karaage0703/items/b14c249aa33112669ee4

PINTO model zoo Tour

公式README

全部は試していませんが、 Sample1〜4はそのまま動くと思います。

https://github.com/PINTO0309/PINTO_model_zoo

007_mobilenetv2-poseestimation

姿勢検出のデモができます。

サンプル

動かし方

$ cd ~/PINTO_model_zoo/007_mobilenetv2-poseestimation/dm100_224/
$ ./download.sh
$ python3 90_tflite-usbcamera-cpu-sync.py

関連リンク

ラズパイでの動かし方は以下参照ください。

https://github.com/karaage0703/pose_estimation_pi

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

線検出・四角検出のデモができます。

サンプル

https://twitter.com/KzhtTkhs/status/1463130084122894345

動かし方

$ 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

関連リンク

https://kazuhito00.hatenablog.com/entry/2021/11/23/221634

129_SCRFD

顔検出のデモができます。

サンプル

https://twitter.com/KzhtTkhs/status/1464919910123917318

動かし方

$ cd ~/PINTO_model_zoo/129_SCRFD
$ ./download.sh
$ python3 demo/demo_SCRFD_onnx.py
$ python3 demo/demo_SCRFD_tflite.py

関連リンク

https://kazuhito00.hatenablog.com/entry/2021/11/28/225947

136_road-segmentation-adas-0001

道路のセグメンテーション

サンプル

https://twitter.com/KzhtTkhs/status/1463092563338874894

動かし方

$ 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 

関連リンク

https://kazuhito00.hatenablog.com/entry/2021/11/23/195459

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

関連リンク

https://github.com/Kazuhito00/YuNet-ONNX-TFLite-Sample

146_FastDepth

単眼Depth推定のデモができます。

サンプル

https://twitter.com/KzhtTkhs/status/1442863729306075141

動かし方

$ 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

関連リンク

https://kazuhito00.hatenablog.com/entry/2021/11/14/021832

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

関連リンク

https://kazuhito00.hatenablog.com/entry/2021/11/14/021832

171_Fast-SRGAN

超解像のデモができます。

サンプル

https://twitter.com/KzhtTkhs/status/1454377892272476162

動かし方

$ cd ~/PINTO_model_zoo/171_Fast-SRGAN
$ ./download.sh
$ python3 demo/demo_fast_srgan_onnx.py
$ python3 demo/demo_fast_srgan_tflite.py

関連リンク

https://kazuhito00.hatenablog.com/entry/2021/10/30/230257

172_Real-Time-Super-Resolution

超解像のデモができます。

サンプル

https://twitter.com/KzhtTkhs/status/1461696380087328778

動かし方

$ 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

関連リンク

https://kazuhito00.hatenablog.com/entry/2021/11/20/010840

176_StableLLVE

暗所ノイズ除去のデモができます。

サンプル

https://twitter.com/KzhtTkhs/status/1459479600170356736

動かし方

$ cd ~/PINTO_model_zoo/176_StableLLVE
$ ./download.sh
$ python3 demo/demo_StableLLVE_onnx.py
$ python3 demo/demo_StableLLVE_tflite.py

関連リンク

https://kazuhito00.hatenablog.com/entry/2021/11/14/022616

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

関連リンク

https://github.com/microsoft/CoCosNet

https://kazuhito00.hatenablog.com/entry/2021/11/27/210240

Unity関連

今後追記予定です。

今後追加予定

エラーで動かない

そのうち修正チャレンジします。

https://kazuhito00.hatenablog.com/entry/2021/09/20/175134
 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

https://github.com/shinmura0/Faster-Grad-CAM

https://kazuhito00.hatenablog.com/entry/2021/11/25/022920
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飼育員は君だ!

関連ページ

https://qiita.com/karaage0703/items/97e7b1fc3bf8395f1c1d

https://qiita.com/karaage0703/items/38f314d01a67ded949c2

変更履歴

  • 2021/11/27 環境セットアップに関して追記
  • 2021/11/26 モデル追加

この記事に贈られたバッジ

Discussion

最初の段落でのtypo報告です。
CPUなしでは流石に動かないっす。
誤) ...CPU無しで動かすことができます。
正) ...GPU無しで動かすことができます。

PINTO model zoo動かしてみます。

TYPO報告ありがとうございます。修正いたしました。

ログインするとコメントできます