アイコン

佐藤さとる

梶研 [ST-GCNしてます]

2024年06月04日

thumbnail

ST-GCNしてます

出席率

  • 3年セミナー:??%

スケジュール

短期的な予定

長期的な予定

進捗報告

前回

入力のデータ適当すぎた
BVHのモーション部分をそのままcsvとして(2次元配列)
→ 関節ごとの座標(配列, len=3) を1フレーム分の配列(len=関節の数) を一定時間分の配列(len=フレームレート*秒) の3次元配列にする必要がある

# イメージ
[
    [
        [関節の座標(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)
(フレーム数, 関節数, 次元数) になっていて、サンプルの配列の順番(?) が違うが機械学習側で変更する


ST-GCNさせる

ラベルも同様に npy形式 にした

np.save("data/test_label.npy", motion_df["label"].values)

Feader を修正

npy 形式に合わせる
結局サンプルコード通りになった

1# データセットの定義 2class Feeder(torch.utils.data.Dataset): 3 def __init__(self, data_path, label_path): 4 super().__init__() 5 self.data = np.load(data_path) 6 self.label = np.load(label_path) 7 8 def __len__(self): 9 return len(self.label) 10 11 def __iter__(self): 12 return self 13 14 def __getitem__(self, index): 15 data = self.data[index] 16 label = self.label[index] 17 18 return data, label

エラー

ValueError: not enough values to unpack (expected 4, got 3)
4次元が欲しいのに3次元になってるよ

先週より近づいた

ValueError: not enough values to unpack (expected 4, got 2)
4次元が欲しいのに2次元になってるよ

データの形を出力: torch.Size([64, 27, 3])
サンプルのデータの形 torch.Size([64, 3, 80, 25])

サンプルのデータの構造

torch.Size([64, 3, 80, 25])

(3, 80, 25)
(次元数, フレーム数, 関節数)

64 は何者 → バッチサイズ

1BATCH_SIZE = 64 2data_loader['train'] = DataLoader(dataset=Feeder(...), batch_size=BATCH_SIZE)

特に改変していないのでそもそもの入力の形が間違えている可能性

サンプルの入力データ(npy)の形

(2000, 3, 80, 25)
(200, 3, 80, 25)

実際の入力データ(npy)の形

(21871, 27, 3)
(7248, 27, 3)

なんか次元が一つ足りない

(2000, 3, 80, 25)
(データ数, 次元数(座標), ???, 関節数)

学習データ数が2000(10クラス×200データ), 評価データ数が200(10クラス×20データ)あります.
(200, 3, 80, 25)

つまり、1動作ごとに配列なってた

(ラベル付けと動作の分割が簡単にできるアプリ欲しい)

データを取り直す

  • 後から1動作ごとに分割しやすいようにする
    • 5秒に1回的な
  • 訓練用: 各動作(5つ) x 20 ずつ用意
  • 訓練用: 各動作(5つ) x 5 ずつ用意

(何回伊達巻を作ればいいのだろうか)

その他細々修正

100 epoch 文動かす

# Epoch: 1 | Loss: 0.0337 | Accuracy: 19.7917
# Epoch: 2 | Loss: 0.0336 | Accuracy: 19.7917
# Epoch: 3 | Loss: 0.0337 | Accuracy: 19.7917
# Epoch: 4 | Loss: 0.0337 | Accuracy: 19.7917
# Epoch: 5 | Loss: 0.0336 | Accuracy: 19.7917
# Epoch: 6 | Loss: 0.0337 | Accuracy: 19.7917
# Epoch: 7 | Loss: 0.0336 | Accuracy: 19.7917
# Epoch: 8 | Loss: 0.0336 | Accuracy: 19.7917
# Epoch: 9 | Loss: 0.0336 | Accuracy: 19.7917
# Epoch: 10 | Loss: 0.0336 | Accuracy: 19.7917
# Epoch: 11 | Loss: 0.0336 | Accuracy: 19.7917
# Epoch: 12 | Loss: 0.0336 | Accuracy: 19.7917
# Epoch: 13 | Loss: 0.0335 | Accuracy: 19.7917
# Epoch: 14 | Loss: 0.0336 | Accuracy: 19.7917
# Epoch: 15 | Loss: 0.0335 | Accuracy: 19.7917
# Epoch: 16 | Loss: 0.0335 | Accuracy: 19.7917
# Epoch: 17 | Loss: 0.0335 | Accuracy: 19.7917
# Epoch: 18 | Loss: 0.0335 | Accuracy: 19.7917
# Epoch: 19 | Loss: 0.0335 | Accuracy: 19.7917
# Epoch: 20 | Loss: 0.0335 | Accuracy: 19.7917
# Epoch: 21 | Loss: 0.0335 | Accuracy: 17.7083
# Epoch: 22 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 23 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 24 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 25 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 26 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 27 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 28 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 29 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 30 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 31 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 32 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 33 | Loss: 0.0334 | Accuracy: 22.9167
# Epoch: 34 | Loss: 0.0334 | Accuracy: 22.9167
# Epoch: 35 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 36 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 37 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 38 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 39 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 40 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 41 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 42 | Loss: 0.0334 | Accuracy: 22.9167
# Epoch: 43 | Loss: 0.0334 | Accuracy: 22.9167
# Epoch: 44 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 45 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 46 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 47 | Loss: 0.0334 | Accuracy: 22.9167
# Epoch: 48 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 49 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 50 | Loss: 0.0334 | Accuracy: 22.9167
# Epoch: 51 | Loss: 0.0334 | Accuracy: 22.9167
# Epoch: 52 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 53 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 54 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 55 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 56 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 57 | Loss: 0.0334 | Accuracy: 22.9167
# Epoch: 58 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 59 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 60 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 61 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 62 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 63 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 64 | Loss: 0.0334 | Accuracy: 22.9167
# Epoch: 65 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 66 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 67 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 68 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 69 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 70 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 71 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 72 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 73 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 74 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 75 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 76 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 77 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 78 | Loss: 0.0334 | Accuracy: 22.9167
# Epoch: 79 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 80 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 81 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 82 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 83 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 84 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 85 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 86 | Loss: 0.0334 | Accuracy: 22.9167
# Epoch: 87 | Loss: 0.0336 | Accuracy: 22.9167
# Epoch: 88 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 89 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 90 | Loss: 0.0334 | Accuracy: 22.9167
# Epoch: 91 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 92 | Loss: 0.0336 | Accuracy: 22.9167
# Epoch: 93 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 94 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 95 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 96 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 97 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 98 | Loss: 0.0335 | Accuracy: 22.9167
# Epoch: 99 | Loss: 0.0334 | Accuracy: 22.9167
# Epoch: 100 | Loss: 0.0334 | Accuracy: 22.9167
image.png (27.0 kB)

全て 体を捻る 判定になった...

↓理想
image.png (32.1 kB)

問題点

  • データの分割が適当すぎた
    • 5秒区切りで分割 → 後半2秒は動作がない
  • データがたりない
    • お料理で24個以上求められても辛い...

進路関係

余談