M1Macで姿勢推定「Kapao」を試す

ヒートマップを使わない姿勢推定「Kapao」をM1MacBookProで試してみます。
ちなみに以前Intel Core i7のMacBookProでもやってみたのですが、普通に動きましたので
多くのMacユーザーが簡単に試せると思います。

こちらのcedroさんの記事を参考に進めます。
[Kapaoで、人物検出と姿勢推定を行う](http://cedro3.com/ai/kapao/)

# Kapaoをクローンする

Google Colabで動くソースが用意されていますが、今回はあえてMacのローカルで動かします。

```
git clone https://github.com/cedro3/kapao.git
```

ライブラリのインストールが必要です。
環境に合わせてインストールしてみてください。

```
pip install torch==1.9.1
pip install torchvision==0.10.1
pip install pytube
pip install imageio==2.4.1
pip install -r requirements.txt
```

必要なものだけでいいと思います。
内部的にpytorchを使うみたいですね。

mp4形式の「動いている人が映った」動画ファイルを準備します。
人が動いていればなんでもOKです。

それをcloneしたmovieフォルダに保存してください。

pathはkapao→movieです。

動作確認で一番手っ取り早いのはkapao.ipynbをjupyter notebook上で動かすことです。
今回はあくまでローカルで簡易的に動かしてみます。

# Kapaoを動かしてみる

学習済みモデルをダウンロードします。
```
sh data/scripts/download_models.sh
Downloading...
From: https://drive.google.com/uc?id=1hv0xwdbdf-Ym06Hpjy6wKyIklNmKmB99
To: /Users/satoshi/git/kapao/kapao_s_coco.pt
100%|██████████████████████████████████████| 25.7M/25.7M [00:02<00:00, 9.78MB/s]
Downloading...
From: https://drive.google.com/uc?id=1B-QGa99n7ZrxkgKCQ1XHnm6j0Y-lvOQz
To: /Users/satoshi/git/kapao/kapao_m_coco.pt
100%|██████████████████████████████████████| 72.2M/72.2M [00:03<00:00, 19.0MB/s]
Downloading...
From: https://drive.google.com/uc?id=1jYDfvRjhMoDf5xpMq1AuzdkFzUeLwt85
To: /Users/satoshi/git/kapao/kapao_l_coco.pt
100%|████████████████████████████████████████| 155M/155M [00:10<00:00, 14.8MB/s]
Downloading...
From: https://drive.google.com/uc?id=1SmWwmqPwb_G6d9UPAFSUnWZ-4eaL9TTv
To: /Users/satoshi/git/kapao/kapao_s_crowdpose.pt
100%|██████████████████████████████████████| 25.6M/25.6M [00:02<00:00, 10.7MB/s]
Downloading...
From: https://drive.google.com/uc?id=1IqrAk-gBdcfONrlIT6d4ndaDqnlFmT0r
To: /Users/satoshi/git/kapao/kapao_m_crowdpose.pt
100%|██████████████████████████████████████| 72.1M/72.1M [00:05<00:00, 12.6MB/s]
Downloading...
From: https://drive.google.com/uc?id=146DW9ELzIBY2oDofPru446yLErxHrjJU
To: /Users/satoshi/git/kapao/kapao_l_crowdpose.pt
100%|████████████████████████████████████████| 155M/155M [00:09<00:00, 16.7MB/s]
```

なんかめっちゃDLされてきた。。

今回はデフォルトで入っているsample.mp4を利用してみます。

```
python test.py --name './movie/sample.mp4' --weights kapao_s_coco.pt --start 0 --end 8
```

0秒から8秒までの動画を切り出して分析するという意味になります。
もっと長くしたい場合は、-endのパラメータを変えるといいですね。
元動画を編集する必要がないので良きです。
モデルはkapao_sを使います。

```
Using device: cpu
Writing inference video:   0%|                          | 0/239 [00:00<?, ?it/s]
Traceback (most recent call last):
  File "/Users/satoshi/git/kapao/test.py", line 120, in <module>
    out = model(img, augment=True, kp_flip=data['kp_flip'], scales=data['scales'], flips=data['flips'])[0]
  File "/opt/homebrew/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1130, in _call_impl
    return forward_call(*input, **kwargs)
  File "/Users/satoshi/git/kapao/models/yolo.py", line 137, in forward
    return self.forward_augment(x, kp_flip, s=scales, f=flips)  # augmented inference, None
  File "/Users/satoshi/git/kapao/models/yolo.py", line 148, in forward_augment
    yi, train_out_i = self.forward_once(xi)  # forward
  File "/Users/satoshi/git/kapao/models/yolo.py", line 173, in forward_once
    x = m(x)  # run
  File "/opt/homebrew/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1130, in _call_impl
    return forward_call(*input, **kwargs)
  File "/opt/homebrew/lib/python3.9/site-packages/torch/nn/modules/upsampling.py", line 154, in forward
    recompute_scale_factor=self.recompute_scale_factor)
  File "/opt/homebrew/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1207, in __getattr__
    raise AttributeError("'{}' object has no attribute '{}'".format(
AttributeError: 'Upsample' object has no attribute 'recompute_scale_factor'
```
おっと、torchとtorchvisionのバージョンは指定のバージョンじゃないと動かない部分があるようです。
インストールし直して、、、

サイドコマンドを叩くと、
```
Using device: cpu
Writing inference video: 100%|███████████████▉| 238/239 [01:05<00:00,  3.63it/s]
```
M1MAXのCPUで1分くらいかかって処理が完了しました。

![ScreenShot 2022-09-06 1.02.12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565773/d62b92df-1139-cdd4-e398-2a8c56a0446d.jpeg)

おお、ちゃんと骨格が出ていますね。

割とサクサク動きますし、骨格推定も細かい人の動きや速い動きにも追従していてすごいなと思いました。
GPUでも動くかなと思いましたがそこそこのプログラム修正が必要そうなので今日は一旦ここまでとします。