アイコン

佐藤さとる

梶研 [ST-GCN動いて欲しい-入力データを変換]

2024年06月04日

thumbnail

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月末 論文完成)

適当なデータ取った

お料理は何度もデータ取るのが大変なため、
データが取りやすい動作を1分ずつ行った

体を曲げる運動
両手を上げ下げ
体を捻る
ジャンプ
何もしない

扱いやすいように結合&csvに変換する

1bending_exercise_bvhp = BVHparser("./data/bending_exercise.bvh") 2bending_exercise_motion_df = bending_exercise_bvhp.get_motion_df() 3bending_exercise_motion_df["label"] = 1 4 5hands_updown_bvhp = BVHparser("./data/hands_updown.bvh") 6hands_updown_motion_df = hands_updown_bvhp.get_motion_df() 7hands_updown_motion_df["label"] = 2 8 9... 10 11# 全ての motion_df を結合 12motion_df = pd.concat( 13 [ 14 bending_exercise_motion_df, 15 hands_updown_motion_df, 16 twist_your_body_motion_df, 17 jump_motion_df, 18 do_nothing_motion_df, 19 ] 20) 21 22# csv に保存 23motion_df.to_csv("csv/train.csv", index=False)

※ テスト用も同様

自作BVHパーサライブラリでエラー吐いた

アップデートの影響で形式が微妙に変わっていた
半角スペースで split して frame time を取り出していたので Time:0.016667 となって数値化に失敗してた

1骨格のデータ 2... 3- Frame Time: 0.016667 4+ Frame Time:0.016667 5... 6モーションのデータ

: で判定するように直した

前にBVH用に改変した ST-GCN に入れてみる

脳内デバッグなので当然エラーが出まくった → いい感じに修正

現在のエラー

ValueError: not enough values to unpack (expected 4, got 2)

入力した tensor の次元が違うらしい(本来:4次元, 実際:2次元)

問題点

  • 各関節が相対座標なのを世界座標にするやつ使ってなかった
  • そもそも '"各関節の座標の配列"(フレーム)' の配列(+時間軸) という形(少なくとも3次元) にしてない
    • 高次元になってくるため入力はcsvにするべきではないかも
    • npy 形式等がよさそう
# イメージ
[
    [
        [関節の座標(x), 関節の座標(y), 関節の座標(z)],
        [関節の座標(x), 関節の座標(y), 関節の座標(z)],
        [関節の座標(x), 関節の座標(y), 関節の座標(z)],
        ...
    ], // 1フレーム分のデータ
    [
        [関節の座標(x), 関節の座標(y), 関節の座標(z)],
        [関節の座標(x), 関節の座標(y), 関節の座標(z)],
        [関節の座標(x), 関節の座標(y), 関節の座標(z)],
        ...
    ],
    [
        [関節の座標(x), 関節の座標(y), 関節の座標(z)],
        [関節の座標(x), 関節の座標(y), 関節の座標(z)],
        [関節の座標(x), 関節の座標(y), 関節の座標(z)],
        ...
    ]
] // 一定時間分のデータ

サンプルコードより
スクリーンショット 2024-06-04 10.13.03.png (64.3 kB)

修正した
スクリーンショット 2024-06-04 11.09.27.png (304.0 kB)

(フレーム数, 関節数, 次元数) になっていてサンプルの配列の順番(?) が違うが、機械学習側で対応する

TODO

  • 入力データの変更に対応して ST-GCN ができるようにする

進路関係

気が向いたので、ゆめみパスポートに応募してみた
ゆめみのコーディング試験を受けれるやつ. 腕試しとしてやってみる
https://hrmos.co/pages/yumemi/jobs/101000000010

ゆめみパスポートげっとした
(YUMEMIを受ける場合、コーディングテストスキップできる)
お金もらえなかった(終了済み)

余談

焼肉たべた

pluszero組で食べた

IMG_6879.JPG (4.2 MB)

ローカル5G触ってます

中村先生からサークルへの依頼で、ローカル5Gを学生目線で伝えるプロジェクト(?)をやってます
with makino先輩
IMG_6873.JPG (3.4 MB)

オーキャンに出すので makino先輩 と僕が交互に梶研エリアから消える可能性があります