🐘

PINTO model zooの歩き方 ~ Tour of PINTO model zoo ~

2021/11/21に公開
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でも動かせると思います。興味ある方はチャレンジしてみてください。

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で環境構築します。

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

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

$ python3 -m pip install tensorflow==2.7.0

Windows(WSL2)

WSL2上で動かすためには、WSL2上でUSBカメラを扱えるようにセットアップする必要があります。ただ、少し手順は多く比較的なれている人向けです。

まずは、以下記事を参考にWSL2上でUSB機器を使えるようにする設定をします。以下はWindows11が前提となっていますが、Windows10でも問題ありませんでした。

最初のwsl --updateもしなくて大丈夫です(カーネル 5.4.72でいけました)。

https://zenn.dev/pinto0309/articles/7c7ce81bea8b6c

私がハマったポイントは以下です。

  • <windows username>に必ずWindowsのユーザー名を入れる(2箇所あるので注意)
  • 管理者権限でターミナルを起動する
  • WSL2が起動しなくなったら C:\Users\<windows username>/.wslconfigを削除して復帰

上記設定が終わったら、WSL2上でUSBカメラが使えるようになります。

WSL2がもし起動しなくなったら以下記事参照ください。

https://zenn.dev/karaage0703/articles/e30c9614a55bdb

あとは、Linuxと同様、Dockerで動かすことができるはずですが、まだ私はDocker上での確認まではできていません。

Apple Silicon Mac

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

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

Raspberry Pi(ラズパイ)

以下記事参照ください。

https://zenn.dev/karaage0703/articles/3d3d443244da2c

Jetson

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

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

PINTO model zoo Tour

以下、基本的にカメラを使ったデモなので、適当なUSBカメラを接続して実行してください。

上述しているセットアップを完了させたあと、最初に以下を実行してPINTO_model_zooをクローンしてください。

$ cd && git clone https://github.com/PINTO0309/PINTO_model_zoo

追記:モデルのダウンロードに関して

2022年3月現在PINTO_model_zooのダウンロードスクリプトでモデルがダウンロードできません。

原因と対応方法は以下2つになります。

  1. 多くの人が同時にアクセスし過ぎている → 直接ブラウザでダウンロード
  2. Googleの仕様変更 → スクリプトの変更 or 直接ブラウザでダウンロード

確実なのは、直接ブラウザでダウンロードする方法です。また、Macの場合はファイル容量大きい場合は、スクリプトを変更してもスクリプトからではダウンロードできない場合があるようです(原因は未調査)。

ブラウザでダウンロードするには、ダウンロードスクリプト冒頭の以下の<file id>部分をコピペします。

fileid="<file id>"

続いて、ブラウザのアドレスバーに以下のようにペーストするだけです。

https://drive.google.com/uc?export=download&id=<file id>

スクリプトの変更に関しては、こちらの記事参考に修正ください。ただし、スクリプト修正しても、多くの人が同時にアクセスしすぎているとダウンロードできないので、直接ブラウザでダウンロードするのが確実です。

スクリプトは、多くの飼育員の活躍により、無事全て変換されました参考PR

公式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

441_YOLOX-Body-Head-Hand-Face-Dist

すごい性能の人体の検出モデルです。

サンプル

https://github.com/PINTO0309/PINTO_model_zoo/tree/main/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

サンプル

https://github.com/PINTO0309/PINTO_model_zoo/tree/main/462_Gaze-LLE

動かし方

Gaze-LLE.ipynb

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.

これから試す

https://kazuhito00.hatenablog.com/entry/2021/11/29/233126

https://kazuhito00.hatenablog.com/entry/2021/12/01/022651

https://kazuhito00.hatenablog.com/entry/2021/12/06/002551

https://kazuhito00.hatenablog.com/entry/2021/12/08/015122

https://kazuhito00.hatenablog.com/entry/2021/12/19/002515

https://kazuhito00.hatenablog.com/entry/2021/12/18/222937

https://kazuhito00.hatenablog.com/entry/2021/12/15/000141

まとめ

PINTO model zooツアーをしてみました。他にも面白そうなモデルを発見したら追加していきます。

動物園には、まだまだ手軽に動かせるデモソフトが存在しない大量のモデルが埋もれています。デモソフトを作ってPull Requestしたら一躍(一部界隈で)ヒーローです!次のPINTO model zoo飼育員は君だ!

参考リンク

https://zenn.dev/zinziroge/articles/74856bdb4aae86

https://speakerdeck.com/kazuhitotakahashi/unagi-dot-py-56mei-mu-dong-wu-yuan-pinto-model-zoo-niyou-binixing-kou

関連ページ

https://zenn.dev/karaage0703/articles/e068452900f47b

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

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

変更履歴

  • 2022/03/24 モデルのダウンロード方法に関して追記
  • 2021/01/16 Dockerイメージに関して追記
  • 2021/11/27 環境セットアップに関して追記
  • 2021/11/26 モデル追加

Discussion

zinzirogezinziroge

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

PINTO model zoo動かしてみます。