既存技術調査:ポーズ推定:ThreeDPoseTracker 処理内容調査めも
ThreeDPoseTrackerの処理内容調査のめも
ThreeDPoseTracker
github.com
概要:カメラ画像をつかってポーズ推定
使用技術:Unity , ニューラルネットワーク , Barracuda
使用ニューラルネットワークモデル
HighQualityTrainedModel.nn
tensorflow_to_barracuda.pyで変換したTensorflowモデル
input:3x448x448 が3つ
簡易版NN
input:3x224x224が1つ
Barracuda
Unityでニューラルネットワークを処理するライブラリ
CPUやGPUでNNを実行できる
いろいろなNNモデル形式のデータを読み込める
ThreeDPoseTrackerの前バージョン
github.com
ニューラルネットワークモデルがonnx形式
使用ニューラルネットワークモデル
Resnet34_3inputs_448x448_20200417.onnx
114MB
おそらくResnetの34レイヤー版
ジョイント数 24
HeatMapCol 28
input:1x3x448x448 が 3つ(カラー画像448x448を3枚。連続する3フレーム分)
output: 1x2x24x28x28 1x24x28x28 1x3x24x28x28x28 1x24x28x28x28
入力
private void UpdateVNectModel() { input = new Tensor(videoCapture.MainTexture); if (inputs[inputName_1] == null) { inputs[inputName_1] = input; inputs[inputName_2] = new Tensor(videoCapture.MainTexture); inputs[inputName_3] = new Tensor(videoCapture.MainTexture); }
ビデオキャプチャ画像3フレームを入力にわたしている
入力画像サイズ448x448
出力
offset3D = b_outputs[2].data.Download(b_outputs[2].data.GetMaxCount()); heatMap3D = b_outputs[3].data.Download(b_outputs[3].data.GetMaxCount());
出力は1、2個目は未使用で3つ目をオフセット、4つ目をヒートマップとして利用
出力からジョイントの座標への計算
Assets/Scripts/VNectBarracudaRunner.csでNN処理してる
PredictPose()で実行している
まず24個のジョイント毎に、ヒートマップ3Dデータから最大を探す。(大ざっぱに座標を決定)
次に、その位置のオフセットデータを使って座標値の調整。
その他のジョイント位置は計算で算出。
カルマンフィルタで座標値のノイズを軽減。
という感じっぽい。
パフォーマンス
RTX2080super 30fps
RTX1070 20fps
2013/02/19 [GPU][spec] GTX TITAN 4709GFLOPS
2013/05/30 [GPU][spec] GTX770 3333GFLOPS
2014/09/19 [GPU][spec] GTX970 3920GFLOPS
2016/07/19 [GPU][spec] GTX1060 3855 GFLOPS
2017/12/07 [GPU][spec] TITAN V 14899 GFLOPS FP32
2019/04/-- [GPU][spec] GTX1650 2984 GFLOPS FP32
2018/10/-- [GPU][spec] GTX2070 7465 GFLOPS FP32
2018/09/-- [GPU][spec] GTX2080 10070 GFLOPS FP32
2019/07/-- [GPU][spec] GTX2080super 11150 GFLOPS FP32
ONNX(Open Neural Network eXchange)
ニューラルネットワークのモデルを定義するためのオープンフォーマット
ファイル名 *.onnx
github.com
ONNXモデル集
models/vision/classification/resnet at master · onnx/models · GitHub
ResNetのonnx
python3でonnxの確認
pip3 install onnx
import onnx model = onnx.load("model_file_path.onnx") model.graph.input
でグラフの情報をとれる
ResNet
ResNetの仕組み
機械学習論文読み:Deep Residual Learning for Image Recognition - Qiita
ニューラルネットワークの構造の1つ。
Residual networkのこと
2015年ごろImageNetに登場
深いニューラルネットの学習を適切に行えるようにネット構造を改良したもの。少し前の層の値をバイパスして利用するネット構造。
従来は十数層以上にするとエラーが増えていたが、ResNetだと層を増やすことでエラーを減らせるようになった。1202層では少し悪化する
学習が長いという欠点あり。2015年ごろ152層でGPU8枚で数週間
計算量
VGG-19のモデル。計算量は19.6 GFlops
Residual network付きの34レイヤ。計算量は3.6GFlops
ImageNet
画像用のNNコンテスト コンペティション
ImageNet データベース [1]
技術調査:iPhoneX の FaceTracking
FaceTracking:顔追跡。顔の向き、顔パーツ(目鼻口など)の位置や状態を検出。
iPhoneXシリーズやiPadProでは特別になにか追加しなくても精度の高いFaceTrackingが可能。
アップルのARKitフレームワークから機能にアクセスできる。
UnityやUnrealEngine4からも利用することが可能。
UE4でFaceTrackingして3Dモデルを操作する事例
www.youtube.com
ARFaceAnchor.BlendShapeLocationで顔の各パーツの情報を取得可能なのでLive2Dモデルや3Dモデルを動かすのに使えそう。
ARFaceAnchor.BlendShapeLocationの値は全部で52個(各値は0.0から1.0の範囲)
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation
目:開閉、視線(左右上下)、すぼめ、みひらき
口とあご:あご移動(左右前)、あご開、口閉、唇の表情(すぼめ開閉、口角上げ下げ(+開閉)など)
眉頬鼻:眉上下(内側、外側)、頬(上下)、鼻(上下)
舌:出すかどうかの1パラメータのみ
※各パーツは左右独立
ARSCNFaceGeometryで認識状態を3Dモデルにして表示させることもできる
出典:
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928235-mouthstretchleft
iPhone X (2017/11発売)
2020年5月時点での中古価格は4万円前後。
既存のVTuber関係システム
おおざっぱに既存のVTuber関係のシステムを調べてまとめてみた。
スマホ用アプリ
REALITY | アバター+顔操作+配信 |
ホロライブ | アバター+顔操作 |
SHOWROOM V | アバター+顔操作+配信 任意モデル利用可能 |
カスタムキャスト | アバター+顔操作+配信(nicocasアプリ連動でニコ生) |
トピア | アバター+顔操作+配信 |
ナカノヒトライブ | アバター+顔操作+配信 |
ミチコンPlus | 全身認識 |
Live Link Face | iOS用(ARkit M1Macbookにも対応) スマホで表情認識をしてUnrealEngineのキャラの表情を操作、記録 |
MakeAvatar | アバター作成 |
Mirrativ | スマホ画面をそのまま配信。エモモ機能でアバター配信もできる |
nicocas | スマホ画面をそのままニコ生に配信 |
一部はiOSのみ。
アバター作成は用意されているパーツを組み合わせるタイプが多い。
配信先は各アプリの専用プラットフォーム。ニコ生はnicocas経由で可能。YouTubeはPC経由しないとできなそう。
iPhoneXだけ目口対応していたり、フェイストラッキングなしで音声認識で口を動かしたりするなど、すべてのアプリが顔認識をしているわけでもなさそう。
PC用アプリ
Vカツ | アバター作成 |
カスタムオーダーメイド3D2 | アバター作成、VRトラッカーで全身操作 |
VRoid Studio | アバター作成 |
セシル変身アプリ | アバター作成 |
FaceVTuber | Webカメラでアバターを顔操作 |
FaceRig | Webカメラでアバターを顔操作 |
VRChat | VRデバイスでアバターを操作 |
Live2D | イラストなどの2D画像から3Dっぽく動くモデルを作成する |
OBS Studio | 映像や音声を合成して配信や録画 |
streamlabs OBS | チャット・登録・スーパーチャットなどを表示できるようにしたOBS |
アバター操作のアプリで操作して、その画面をOBSでウィンドウキャプチャなどで取り込んでYouTubeなどに配信するという流れ。
スマホのアバター操作アプリの画面を利用する場合は、スマホ画面をPCに取り込んでOBSで配信する。
スマホ画面の取り込みは、
などで可能。
参考:
www.moguravr.com