カメラ不要!? Wi-Fiの"電波"を使った3D姿勢推定モデル「WiPose」

<img width="100%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/a317ca48-f371-d3b9-5d1c-d9a59e13ef8d.gif" >


# はじめに
 
遂に、テクノロジーがここまで来ました。 

**＊＊ カメラなしで、姿勢推定できる時代が来ます ＊＊** 

Wi-Fiの電波を使って、障害物の向こうにいる人の姿勢や動きを高精度で推定する技術 『[**WiPose**](https://cse.buffalo.edu/~lusu/papers/MobiCom2020.pdf)』 がニューヨーク州立大学の研究チームから発表されたので、ご紹介します！

この技術で驚くべき点の１つは、<u>**市販のWi-Fi電波送信機1台と、受信アンテナ数台だけで**</u>、3次元の姿勢推定ができる点です。

![q2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/49626f0b-7766-26f4-2465-9232b8c27cfc.png)



また、RGBカメラでは推定が難しかった**「暗闇での姿勢推定」**ができるのも驚きです。

![q3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/5a17e6d2-0d9b-2815-1bd7-5f55dae86c52.png)


# どんな仕組み？

この技術でベースとなっている原理は「**ドップラー効果**」です。
救急車が目の前を通り過ぎるときに、サイレンの音の高さが変わるあの現象ですね。
一般に、波が発生している空間内で物体が動くと、波長が長くなったり短くなったりします。

今回の場合、Wi-Fiシグナルが発生している空間内を人が動くことで、波長が"わずかに"変化します。このわずかな変化を複数ヶ所で収集し、ディープラーニングモデルに流し込むことで姿勢を推定する、というのがWiPoseの推論の仕組みになります。



### システム全体図

システム全体図は、下図の通り、①データ収集→②データ処理→③骨格構築の３ステップになっています。

①**データ収集**
 　一台のWi-Fi電波発信機と、6〜9台の受信機を使って、データを収集。
②**データ処理**
　 Wi-Fiシグナルから、CSI(チャネル状態情報)を抽出。
③**骨格構築**
　 CSIをインプットに、ディープラーニングモデルを使って、骨格を推定。

![q4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/6716311b-064a-2610-d536-c89d5eaf065f.png)

### 【WiPoseのここがすごい】

WiPoseの平均誤差はわずか**2.83cm**です。2019年のSOTAモデルより、1.5cm(約35%)も精度が改善されています。
高精度を達成できた理由を２つ紹介します。


#### ①骨格モデルの導入

1つ目は、人体骨格モデルを導入した点です。Wi-Fiシグナルは空間分解能が低く、シグナル情報が誤りがちなので関節点を独立に推定すると、最終的に不自然なポーズができあがることがあります。
彼らはこの課題を解決するために、「**身体の各部位の長さは一定である**」という特徴をモデルに組み込み、それぞれのボーンが親ノードを中心に何度回転しているかを考えることにしました。その結果、腕や足の長さは常に一定になり、自然な見た目を実現し、推論を安定させることができました。

![q5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/7a8f8fa3-9a42-3a0c-63b0-98b15d2b9544.png)


#### ②時系列情報の利用

2つ目は、時系列データを利用した点です。通常、身体の動きは複数のタイムフレームにまたがるため、**連続するデータサンプル間には強い時間依存性があります**。彼らはこの連続するデータサンプル間の関係を学習するために、RNN(再帰型ニューラルネットワーク)を使う手法を考案しました。

![q6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346997/8fdbc15f-4d1a-ec79-30c1-eb6d0ec4237b.png)

### 損失関数

損失関数についても少し触れておきます。

損失関数は、位置に関する損失 $L_p$、動きの滑らかさに関する損失 $L_s$、回転に関する損失 $L_r$の3種類を組み合わせて定義しています。

```math
J = L_p + \beta L_s + \gamma L_r
```

（a）`位置に関する損失`
　　正解座標と推定座標との距離を計算します。（$p$は位置座標。）→**正確な位置に近づけるための定義です。**

```math
\left|\left| \, p_{ground \, truth}^{t} - p_{predicted}^{t} \right|\right|_2
```

（b)`動きの滑らかさに関する損失`
　　ground truthと同じ方向に動いているかを計算します。（$||\cdot||_H$は、[Huber損失](https://ja.wikipedia.org/wiki/Huber%E6%90%8D%E5%A4%B1)。）→**不自然な動きを抑制し、より人間らしい動きに近づけるための定義です。**

```math
\left|\left| \, v_{ground \, truth}^{t} - v_{predicted}^{t}\right|\right|_H
```

（c）`回転に関する損失`
　　推定されたボーンの向きが、ground truthの向きと同じかを計算します。($u:=p_{(child)}-p_{(parent)}$ 親ノードから見た子ノードの相対位置ベクトル)→**手足の振れ幅や曲がり具合をより正確にするための定義です。**

```math
\left|\left| \, u_{ground \, truth}^{t} - u_{predicted}^{t}\right|\right|_H
```


# WiPoseの応用先

WiPoseは、市販の機器の組み合わせで安価に作ることができ、また物隠れにも強いため、以下のように幅広い応用事例が論文にて紹介されています。

1. **ヘルスケア**：プライバシーを侵害せずに、高齢者や患者をモニタリングし、アラートを出す。（RGBカメラで24時間モニタリングされるのは嫌ですよね）
2. **VR/ゲーム**：障害物などにより手足が物に隠れてしまうような環境でも、人を正確に認識し、バーチャル空間に投影する。(十分に広い部屋でなくても、バーチャル空間に自分を投影し、ゲームを楽しめるようになります）
3. **盗難検知**：カメラだと検知が難しい、服やカバンで手を覆って行う万引きを検知する。（犯罪の抑制が期待できます）


# まとめ

今回は、Wi-Fiを使った姿勢推定モデルについて、解説しました。
Wi-Fiの普及率は70%と言われており、今後、様々なシーンでの応用が期待できる技術です。

もっと詳しく知りたい！という方は、ぜひ論文を読んでみてください ↓↓

- WiPose: https://cse.buffalo.edu/~lusu/papers/MobiCom2020.pdf