52
複数台のKinectV2の使い方 福嶋 慶繁 名古屋工業大学 1 2015/3/21 第35回 名古屋CV/PRML勉強会

複数台のKinectV2の使い方

Embed Size (px)

Citation preview

Page 1: 複数台のKinectV2の使い方

複数台のKinectV2の使い方福嶋慶繁

名古屋工業大学

1

2015/3/21 第35回 名古屋CV/PRML勉強会

Page 2: 複数台のKinectV2の使い方

注意事項 2

Kinectは「ナチュラルユーザーインターフェース」

しかし,主な機能である

• ジャスチャー認識したり

• 人を検出したり

• ボーンとったり

といった代表的な機能に私は

触ったことがほぼありません(笑)

Page 3: 複数台のKinectV2の使い方

Kinect V2 3

RGB 1920x1080

Depth 512x424

FPS 30

接続端子 USB3.0

TOF形式の安価なデプスセンサー

Page 4: 複数台のKinectV2の使い方

Kinect V2の通信容量と制限 4

接続台数上限は1PCに1台に制限?

必要な大域幅は

(1920x1080x24bit + 512x424x16bit) x 30fps

=1.597Gbps※USB3.0は5Gbpsまで

Page 5: 複数台のKinectV2の使い方

対策 5

たくさん接続するために,PCクラスタを構築し

高速なネットワークと符号化をうまく使いましょう

• 10GbEのハブ 10万円

• 10GbEのNIC 5万円

• 安めのPC 5万

• 手間隙 プライスレス

※通信機器だけでも本体よりも高い

Page 6: 複数台のKinectV2の使い方

システム構成

圧縮・通信

キャリブレーション

目次 6

Page 7: 複数台のKinectV2の使い方

システム

7

Page 8: 複数台のKinectV2の使い方

システム構成イメージ 8

USB3.0 10GbE

RGB: JPEG 8bit

Depth:LZ4 16bit

ClientsServer

Imaged decode (CPU)

Rendering (GPU)

10GbE

Hub

Kinect V2(s)

Page 9: 複数台のKinectV2の使い方

PCクラスタ 9

システムは

カメラ付でアシンメトリックなPCクラスタ

複数台のクライアントと中央のサーバで

効率的な負荷分散!

• 重たい処理はクライアントで並列処理

• 符号化などの並列に不向きな処理はCPUで

• レンダリングはGPUで

Page 10: 複数台のKinectV2の使い方

符号化

10

Page 11: 複数台のKinectV2の使い方

Kinect V2の通信容量と制限(再掲) 11

デプスの符号量はたいしたことが無い?

必要な大域幅は

(1920x1080x24bit + 512x424x16bit) x 30fps

=1.493 Gbps + 0.104 Gbps

=1.597Gbps ※USB3.0は5Gbpsまで

Page 12: 複数台のKinectV2の使い方

RGB画像非可逆圧縮でOK(JPEG,H.264/AVC,H.265/HEVC)人間の目にとって自然であればOK圧縮効率大

デプスマップ自然画像の非可逆圧縮は,符号化後に再変換するポストフィルタが必要なため実時間処理には向かない可逆圧縮が望ましい(ZIP,PNG)圧縮効率小

RGB画像とデプスマップの符号化特性 12

Page 13: 複数台のKinectV2の使い方

動画像の圧縮形式 13

Motion-JPEG:携帯

MPEG2:DVD,テレビ

AVC:ブルーレイ,ワンセグ

HEVC:次世代コーデック

Page 14: 複数台のKinectV2の使い方

モーションJPEG

高効率な非可逆圧縮

FullHDを13msでエンコード,11.2msでデコード

圧縮率 3.83%(品質80)

1493 Mbps → 57.2 Mbps

デプスマップは非圧縮で104Mbps

RGB画像のM-JPEG圧縮 14

Page 15: 複数台のKinectV2の使い方

可逆圧縮は基本的には重たい軽くて早いのを!

候補一覧RAW

PNG(RLE)

JPEG-LS

DPCM+LZ4

デプスマップの可逆圧縮 15

Page 16: 複数台のKinectV2の使い方

圧縮しない形式

104Mbpsで通信しても問題ないならこれでOK

計算の負荷は最小

RAW 16

Page 17: 複数台のKinectV2の使い方

代表的な画像の可逆圧縮フォーマット

予測変換(フィルタ)+zip圧縮(RLE)フィルタの種類

• Sub:左,Up:上,Average:左と上の平均,Peath:左,上,左上との差分,None:なし

圧縮の種類(zipのオプション,OpenCVでも選択可能)• DEFAULT→Deflate• FILTERED• HUFFMAN_ONLY• RLE• FIXED

PNG 17

http://optipng.sourceforge.net/pngtech/z_rle.html

Page 18: 複数台のKinectV2の使い方

Run Length Encoding (RLE) 18

A A A A A B B B B B B B B B A A A

A 5 B 9 A 3

何個連続するかで短く符号化する方法

Run Length Encoding(ランレングス符号化)

Page 19: 複数台のKinectV2の使い方

RLEの特徴 19

FAXなどで使われる符号化方式

速い

必ずしも短くなるとは限らない(全く連続していない文字列は2倍の長さになる)

ex

12345678→1121314151617181

Page 20: 複数台のKinectV2の使い方

RLE の派生 20

Zero RLE:ゼロが何個連続するかで符号化

ゼロに集中する変換を施し,ゼロの符号長だけ短くすることで高い符号化効率を達成可能

Switched RLE:RLEを使うかどうかを切り替える

0が続かないときに得をする方法

Page 21: 複数台のKinectV2の使い方

OpenCVによる詳しいpng圧縮 21

void encodePNG(InputArray src, vector<uchar> buff){

vector<int> param(4);param[0]=IMWRITE_PNG_COMPRESSION;param[1]=9;//1-9param[2]=IMWRITE_PNG_STRATEGY;//DEFAULT, FILTERED, HUFFMAN_ONLY, FIXEDparam[3]=IMWRITE_PNG_STRATEGY_RLE;

imencode(".png", src, buff, param);}

Page 22: 複数台のKinectV2の使い方

マイナーな可逆圧縮方式

LOCO-I で予測

ゴロム・ライス符号+スイッチトRLEで圧縮

CharLSの実装が速い

http://charls.codeplex.com/

JPEG-LS( Lossless JPEG) 22

Page 23: 複数台のKinectV2の使い方

JPEG2000 23

マイナーな(略)

Page 24: 複数台のKinectV2の使い方

WebP 24

マイ(略)

Page 25: 複数台のKinectV2の使い方

LZ4 -Extremely fast compression- 25

https://code.google.com/p/lz4/

極限まで高速な可逆圧縮符号化方式

zipよりも圧縮効率が少し悪いが,とにかく速い

DPCM(前方予測)と組み合わせることで

かなり高速な符号化が可能

Page 26: 複数台のKinectV2の使い方

PNG+Default356ms, 36.8%36.8 Mbps

PNG+RLE14ms, 37.7%36.8 Mbps

JPEG-LS9ms, 28.8%28.8bps

DPCM+LZ42.4ms, 66.7%66.7 Mbps

可逆符号化まとめ 26

Page 27: 複数台のKinectV2の使い方

通信

27

Page 28: 複数台のKinectV2の使い方

TCPパケット落ちないパケットの順番が変わらない速度が可変かつ遅い(様々な制御を含むため)

UDPパケット落ちるパケットの順番が変わる最速(全力)

TCPとUDP 28

Page 29: 複数台のKinectV2の使い方

ローカル環境とUDP 29

ローカル環境ではパケットは

ほぼ落ちない&ほぼ順序も入れ代えも無い

UDP+自分で簡単な制御

(バッファにためて順序制御など)

Page 30: 複数台のKinectV2の使い方

キャリブレーション

30

Page 31: 複数台のKinectV2の使い方

カメラの内部パラメータ,外部パラメータを求める方法焦点距離,光学中心,レンズ歪位置,姿勢

OpenCVに実装あり

カメラキャリブレーション 31

Page 32: 複数台のKinectV2の使い方

RGB,IRカメラの内部パラメータ焦点距離,光学中心,レンズ歪

外部パラメータRGBカメラ-IRカメラ間多視点カメラ間(RGB-RGB間)

• RGBーIR間,多視点間は,ステレオキャリブレーション関数を使えばOK

IRカメラ,デプスマップ間• キャリブレーションで得たIRカメラのXYZ座標とデプスマップの

XYZ座標は異なる.

キャリブレーションすべきパラメータ 32

Page 33: 複数台のKinectV2の使い方

GetDepthCameraIntrinsics内部パラメータを取得

GetDepthFrameToCameraSpaceTableデプスをRGB画像へ飛ばす

Kinect for Windowsの関数群 33

Page 34: 複数台のKinectV2の使い方

実は簡単? 34

理想的には,すてべのKinectにおいて,RGBカメラに

デプスマップをマップした後,RGBカメラ間の多視点

カメラキャリブレーションをすれば,完了.

※ただし,誤差がひどい(なんで?)

Page 35: 複数台のKinectV2の使い方

Camera Setup 35

Page 36: 複数台のKinectV2の使い方

IR画像を用いて2台のKinectをキャリブレーションし,デプスマップを使って反対側の画像へ射影

RGB画像上にデプスマップをKinectの関数を使ってマップし,RGB画像を用いて2台ののKinectをキャリブレーションし,マップされたデプスマップを使って反対側の画像へ射影

キャリブレーション環境 36

Page 37: 複数台のKinectV2の使い方

左カメラ(IR) 37

Page 38: 複数台のKinectV2の使い方

右カメラ(IR) 38

Page 39: 複数台のKinectV2の使い方

左カメラ(RGB) 39

Page 40: 複数台のKinectV2の使い方

右カメラ(RGB) 40

Page 41: 複数台のKinectV2の使い方

センサとキャリブレーション結果のずれ 41

y = 1.0261x + 2.5975

1000

1500

2000

2500

1000 1500 2000 2500

キャリブレーションのz値

センサのz値

オフセットと定数倍のずれ.

Page 42: 複数台のKinectV2の使い方

XYZとRGBの値を持つ点群データ

画像上にRGB-Dのデータがあれば変換可能

デプスマップをRGB画像の座標系へレジストレーションする必要性解像度変換:512x424 →FullHD位置あわせ:視点位置を合わせる

ー懸念事項ーレジストレーション&アップサンプルは

いつするの?

ポイントクラウド 42

Page 43: 複数台のKinectV2の使い方

取得直後にレジストレーションXYZRGBを圧縮(24bit(色)+96bit(座標)の情報)

• 符号化効率は最悪といって良い• PCLの圧縮はただのサブサンプル

通信後にレジストレーションとアップサンプルRGB画像とデプスマップを圧縮

• 符号化効率は最大• サーバでレジストレーションとアップサンプルをする必要性

取得後にレジストレーションだけレジストレーション+穴埋めをして符号化サーバ側でアップサンプル

• 上記よりも負荷分散に優れ符号化効率も問題ない

レジストレーションと符号化効率 43

Page 44: 複数台のKinectV2の使い方

RGB画像モーションJPEGで圧縮

デプスマップ1. RGB視点にレジストレーション(後述)2. 穴埋め3. DPCM+LZ4で圧縮4. 高解像度ガイド情報付のアップサンプル

ポイントクラウド符号化の手順 44

Page 45: 複数台のKinectV2の使い方

デプスマップの解像度をRGB画像の大きさに拡大デプスマップの特性を失わないように拡大輪郭がぼけないRGBの輪郭はエッジと一致

NN Upsamplingただの最近傍法.2ms.KinectV2のマッピングはこれ.

Joint Bilateral UpsamplingRGB画像の情報をガイドにしてエッジ保持をした拡大

アップサンプル 45

Page 46: 複数台のKinectV2の使い方

Joint Bilateral Upsampling 46

高解像度の色情報をガイド

にして補間する値を決定

処理速度 40ms(CPU)

Page 47: 複数台のKinectV2の使い方

RGB画像が57.2Mbps

デプスマップが66.7Mbps

1000/(57.2+66.7)≒8台

1GbEで何台までいける? 47

※1Gbpsの理論値に近いスペックがでるNICは非常に高い

ボトルネックは

デコードとアップサンプル時間

帯域は圧縮により,結構な台数を連結可能

Page 48: 複数台のKinectV2の使い方

RGB画像1枚:11.2ms

デプスマップ1枚:1.3ms+40msすべてシングルコア処理

8コアのマシンであれば,理想的に分割されるとしても5台までしか処理不可能

GPUでアップサンプラーを作る必要性クライアントで半分,サーバーで残りをアップサンプルするとか?

NN upsampleなら可能

計算時間見積もり 48

Page 49: 複数台のKinectV2の使い方

負荷をどこにかけるか考えよう圧縮アップサンプルレンダリング

キャリブレーションなんでずれてるんでしょう?

• TOFのデプス“値”のレンズディストーションって,どうなるのが正しいのでしょうか?

•エッジが歪むのはわかるのですが,値自体も曲がるのでしょうか?

まとめ 49

Page 50: 複数台のKinectV2の使い方

50

Page 51: 複数台のKinectV2の使い方

マウスとキーボードのネットワーク共有ソフトhttp://synergy-project.org/?hl=ja2画面ディスプレイのように複数台のマシンを使用可能隣の画面にマウスを持っていけば隣のマシンのウィンドウを操作可能いろんなOSを混ぜることも可能!

•クライアントWindows 8 サーバーLinuxな環境も

Synergy 51

左で右のマシン“も“操作可能LAN

Page 52: 複数台のKinectV2の使い方

そのままキャプチャすると左右反転 52