最速のディープラーニングモデルを求めて「PINTO_model_zoo」を探検してみる

# ツアー案内
　より深いPINTO_model_zooのツアーを以下記事で実施しています。興味ある方はおこしください。

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


# 最速モデルを求めて
　@PINTO さんのおかげで、Raspberry Piで爆速エッジコンピューティングに入門することができました。以下記事参照ください（PINTOさんの成果物をそのまま使わさせていただいただけです）。

[Raspberry PiでPINTOさん謹製「TensorFlowLite-bin」を使ってお手軽に爆速エッジコンピューティング](https://qiita.com/karaage0703/items/38f314d01a67ded949c2)

　少しだけ、ラズパイカメラモジュール対応で貢献（PR）したところ、Mergeいただき更に次のようなありがたい啓示をいただきました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/karaage0703?ref_src=twsrc%5Etfw">@karaage0703</a> さんからプルリク頂けました。帰宅して動確したらすぐMergeしますね。ラズパイカメラ対応ですね。有難うございます。ちなみにInteger Quant済みのMobileNetv2ssd-liteモデルを私のPINTO_model_zooからダウンロードするだけでインスタ動画の何倍も速くなります。<a href="https://t.co/tUizgM5PWs">https://t.co/tUizgM5PWs</a></p>&mdash; Super PINTO (@PINTO03091) <a href="https://twitter.com/PINTO03091/status/1250268043889930240?ref_src=twsrc%5Etfw">April 15, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

　最速モデルはどこに？ その謎をあきらかにすべく我々は「PINTO_model_zoo」奥地へ向かった。

<a href="https://github.com/PINTO0309/PINTO_model_zoo"><img src="https://github-link-card.s3.ap-northeast-1.amazonaws.com/PINTO0309/PINTO_model_zoo.png" width="460px"></a>

# 「PINTO_model_zoo」を探検
　これ以降は、下記記事の通りRaspberry PiとTensorFlow Liteのセットアップが完了していることを前提にしています。

[Raspberry PiでPINTOさん謹製「TensorFlowLite-bin」を使ってお手軽に爆速エッジコンピューティング](https://qiita.com/karaage0703/items/38f314d01a67ded949c2)

　コマンドは、Raspberry Piのターミナルを前提としています。

　まずは「PINTO_model_zoo」をcloneして

```sh
$ git clone https://github.com/PINTO0309/PINTO_model_zoo
```

　中身を軽くtreeコマンドで確認してみましょう。

```sh
$ tree -d PINTO_model_zoo
```

```
PINTO_model_zoo/
├── 01_deeplabv3
│   ├── 01_mobilenetv3_small
│   │   ├── 01_pascalvoc
│   │   │   ├── 01_float32
│   │   │   ├── 02_quantization-aware
│   │   │   ├── 03_export_model
│   │   │   └── 04_tflite
│   │   └── 02_cityscapes
│   │       ├── 01_float32
│   │       ├── 02_quantization-aware
│   │       ├── 03_export_model
│   │       └── 04_tflite
│   │           ├── 01_uint8-float32-float32
│   │           ├── 02_uint8-dequant_float32-float32
│   │           ├── 03_uint8-uint8-uint8
│   │           └── 04_weight-quant-float32-float32-float32
│   ├── 02_mobilenetv3_large
│   │   ├── 01_pascalvoc
│   │   │   ├── 01_float32
│   │   │   ├── 02_quantization-aware
│   │   │   ├── 03_export_model
│   │   │   └── 04_tflite
│   │   └── 02_cityscapes
│   │       ├── 01_float32
│   │       ├── 02_quantization-aware
│   │       ├── 03_export_model
│   │       └── 04_tflite
│   │           ├── 01_uint8-float32-float32
│   │           ├── 02_uint8-dequant_float32-float32
│   │           ├── 03_uint8-uint8-uint8
│   │           └── 04_weight-quant-float32-float32-float32
│   ├── 03_mobilenetv2_dm05
│   │   ├── 01_coco_voc_trainaug
│   │   └── 02_coco_voc_trainval
│   ├── 04_mobilenetv2_dm10
│   │   ├── 01_coco_voc_trainaug
│   │   └── 02_coco_voc_trainval
│   └── 05_mobilenetv3_gpu

（恐ろしくなって 01〜21 まで略）

├── 22_Learning_to_See_Moving_Objects_in_the_Dark
│   ├── 01_float32
│   ├── 02_weight_quantization
│   └── 03_float16_quantization
└── 99_media

197 directories
```

　やだ、頭おかしい（褒め言葉）。すみません、途中で恐ろしくなって省略してしまいました。ディレクトリだけで197、ファイルは780あります（2020/04/16現在）。

　「PINTO_model_zoo」にはPINTOさんが丹精込めて作り上げたTensorFlow Liteの爆速モデルが大量に眠っているようです。

　最速モデルがどれか全く分からなかったので、PINTOさんに聞いたら爆速で教えてくださいました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">こちらですね。<a href="https://t.co/OfSdeKG4WW">https://t.co/OfSdeKG4WW</a></p>&mdash; Super PINTO (@PINTO03091) <a href="https://twitter.com/PINTO03091/status/1250303937120329732?ref_src=twsrc%5Etfw">April 15, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

　最高です！

# 最速モデルをテスト
　Raspberry PiにUSBカメラを接続して、以下実行するだけです。

```
$ cd PINTO_model_zoo/06_mobilenetv2-ssdlite/02_voc
$ python3 mobilenetv2ssdlite_usbcam_sync.py
```

　2021/10/03追記、最新のPINTO_model_zooだとディレクトリ構成が代わり、モデルをダウンロードする必要があるため、以下コマンドを実行する必要があります。

```
$ cd PINTO_model_zoo/006_mobilenetv2-ssdlite/02_voc
$ 03_integer_quantization/download.sh 
$ python3 mobilenetv2ssdlite_usbcam_sync.py
```

　実行結果です。

![tflite_detection.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81919/0bb604c2-71d9-a63b-abf1-aa6d871c61a0.jpeg)

　もはや動体視力超えているので私の目には差がわかりませんでしたが、数字上はそれほどは速くなっていない？

　ちなみに軽量化（量子化）したモデルは、モデルに合わせた推論プログラムが必要になることに注意して下さい（知らなかったです）。ラズパイカメラ対応したい人は、以下を参考に修正してみて下さい（今回はちょっと見送り）。

[mobilenetv2ssd-sync-usbcam.py](https://github.com/PINTO0309/TensorflowLite-bin/blob/master/mobilenetv2ssd-sync-usbcam.py)


# まとめ
　最速モデルを求めて「PINTO_model_zoo」を探検してみました。思ったほど速くならなかったなーと思っていたら、PINTO神から新たな啓示が！

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">念のためお伝えしておきますと、私のTensorflow LiteインストーラはRaspbianではなく64bit Ubuntuで実行すると2.5倍の速度が出て本来のラズベリーパイの性能を最大限引き出せます。<a href="https://t.co/oP0MaBIemh">https://t.co/oP0MaBIemh</a></p>&mdash; Super PINTO (@PINTO03091) <a href="https://twitter.com/PINTO03091/status/1250404766011682818?ref_src=twsrc%5Etfw">April 15, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

　最速への道は、まだ遠い…！

　オレはようやくのぼりはじめたばかりだからな このはてしなく遠い「PINTO_model_zoo」を！からあげ先生の次回作にご期待ください！（未完）

# 変更履歴
- 2021/11/26 PINTO model zoo Tourへのリンクを追記