梶研 [ST-GCN 判別して欲しい]
2024年06月25日
ST-GCN 判別して欲しい
出席率
- 3年セミナー:??%
スケジュール
短期的な予定
- mocopi と お料理センシング
- シーンとランドマークを決める(~2月上旬)
- SVM で動作判別する
- 機械学習を深める
- お料理センシング
- お料理でどんな動作があるかを知る
- レシピを決める
- 関節を3次元座標に変換する
-
関節を2次元座標に変換する - ST-GCN を大体理解
- ST-GCN で動作推定
- 伊達巻きで動作推定する
- レシピ(手順書)を元に動作推定を補う
- 論文書く
- 発表
- BookWorm
- Pasori と デスクトップアプリを接続する(技術検証)
- nfc読み込み機能 & 画面を作る
- API と連携させる
- 管理者画面を作る
長期的な予定
- 6月 精度は置いておき、動作認識を完成させる
- 7月 リファクターと精度を向上させる
- 8月 仕上げ
- 9月 論文書き始め
- 10月末 論文提出
- 12月 WiNF
目的
料理中の動作を mocopi を使ってセンシングする。
このデータから最終的に位置推定を行う。
- 一定の区間でどの動作をしているかを当てる (クラス分類)
- 料理の手順を元にシーン検知を補正する
- 例) 焼く動作 → 卵割る動作 はおかしい
- 位置とシーンを相補的に補正する
- 例) 冷蔵庫の前で焼く動作 はおかしい
目標
12月頃の WiNF に出たい
(10月末 論文完成)
進捗報告
前回
- ST-GCN 動いた
- 全部同じ動作と判定された
- 回転を与えた後の骨格が正しくなさそう
原因さがす
ベクトルの回転方法が悪い
[1, 0, 0]
を [0, 90, 0] (deg)
回転させてみた
1vec = np.array([1, 0, 0]) 2rot = Rotation.from_euler('xyz', [0, 90, 0], degrees=True) 3print(rot.apply(vec))
悪く無い
デフォルトの姿勢が悪い
悪く無い
やっぱり回転みすってるかも
BVHの中身確認
MOTION部 を書き換えてみる
1行目: 元の1行目
2行目: 全て0
0 93.2929 0 -0 0 -0 0 5.07867 -1.15138 -0 0 -0 0 5.61661 1.07143 -0 0 -0 -1.02604e-17 5.98978 0.11501 -0 0 -0 -1.10457e-17 6.50583 -0.443523 -0 0 -0 -1.97295e-17 7.60548 -1.50593 -0 0 -0 -2.53307e-17 9.49737 -0.914492 -0 0 -0 -2.90401e-17 10.5513 1.57691 -0 0 -0 -1.29193e-17 4.78644 0.715339 -0 0 -0 -1.8116e-17 4.82109 0.421791 -0 0 -0 -2.00958e-17 4.83041 0.765062 -0 0 -0 1.23299 -7.60731 7.53374 -0 0 -0 12.9547 3.2495 -3.26872 -0 0 -0 29.2081 0.0598081 0.137039 -0 0 -0 24.234 0.0496219 0.113701 -0 0 -0 -1.23299 -7.60729 7.53365 -0 0 -0 -12.9547 3.2495 -3.26872 -0 0 -0 -29.2081 0.0598081 0.137039 -0 0 -0 -24.234 0.0496218 0.113702 -0 0 -0 9.23673 -4.20556 2.0327 -0 0 -0 -0.852353 -38.7721 -0.655187 -0 0 -0 -2.32622 -40.4017 -6.04875 -0 0 -0 0.779096 -9.8844 12.4959 -0 0 -0 -9.23673 -4.20556 2.0327 -0 0 -0 0.852353 -38.7721 -0.655187 -0 0 -0 2.32622 -40.4017 -6.04875 -0 0 -0 -0.779096 -9.8844 12.4959 -0 0 -0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
←1行目
2行目→
全て0 の場合、関節の位置が全て0になるらしい...
(OFFSETの存在意義はなに)
root の OFFSET 0 93.2929 0
root の1フレーム目 0 93.2929 0
OFFSET
== 1フレーム目.position
&& 1フレーム目.rotation
== [-0, 0, 0]
ぽい。
(OFFSET
+ nフレーム目.position
) * nフレーム目.rotation
= nフレーム目の関節位置&向き
だと思ってた
回転の向き
全パターン試す!
[x_rotate, 0, 0]
[y_rotate, 0, 0]
[z_rotate, 0, 0]
[0, x_rotate, 0]
[0, y_rotate, 0] *
[0, 0, y_rotate] *
[0, 0, x_rotate] *
体を動かそうという意志を感じる
[x_rotate, y_rotate, z_rotate]
[z_rotate, y_rotate, x_rotate]
回転のまとめ
index を [0, 1, 2]
とした時...
0
: 体を横から見た時の回転 (消去法的に)
1
: 頭上から見た時の回転
2
: 体を正面から見た時の回転
bvhの...
x_rotate
:
y_rotate
: 頭上から見た時の回転
z_rotate
:
進路関係
余談
ラーメンたべた
toyamaさんありがとう
BBQした
60人規模のイベントですごく疲れた