{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "ba8dc4a1", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "ba8dc4a1", "outputId": "b86a1cf8-9afa-40d4-8135-dec3ab6fa072" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Requirement already satisfied: huggingface_hub in /usr/local/lib/python3.12/dist-packages (0.36.0)\n", "Requirement already satisfied: filelock in /usr/local/lib/python3.12/dist-packages (from huggingface_hub) (3.20.0)\n", "Requirement already satisfied: fsspec>=2023.5.0 in /usr/local/lib/python3.12/dist-packages (from huggingface_hub) (2025.3.0)\n", "Requirement already satisfied: packaging>=20.9 in /usr/local/lib/python3.12/dist-packages (from huggingface_hub) (25.0)\n", "Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.12/dist-packages (from huggingface_hub) (6.0.3)\n", "Requirement already satisfied: requests in /usr/local/lib/python3.12/dist-packages (from huggingface_hub) (2.32.4)\n", "Requirement already satisfied: tqdm>=4.42.1 in /usr/local/lib/python3.12/dist-packages (from huggingface_hub) (4.67.1)\n", "Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.12/dist-packages (from huggingface_hub) (4.15.0)\n", "Requirement already satisfied: hf-xet<2.0.0,>=1.1.3 in /usr/local/lib/python3.12/dist-packages (from huggingface_hub) (1.2.0)\n", "Requirement already satisfied: charset_normalizer<4,>=2 in /usr/local/lib/python3.12/dist-packages (from requests->huggingface_hub) (3.4.4)\n", "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.12/dist-packages (from requests->huggingface_hub) (3.11)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.12/dist-packages (from requests->huggingface_hub) (2.5.0)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.12/dist-packages (from requests->huggingface_hub) (2025.11.12)\n", "Requirement already satisfied: opencv-python in /usr/local/lib/python3.12/dist-packages (4.12.0.88)\n", "Requirement already satisfied: torch in /usr/local/lib/python3.12/dist-packages (2.9.0+cu126)\n", "Requirement already satisfied: numpy in /usr/local/lib/python3.12/dist-packages (2.0.2)\n", "Requirement already satisfied: torchvision in /usr/local/lib/python3.12/dist-packages (0.24.0+cu126)\n", "Requirement already satisfied: tqdm in /usr/local/lib/python3.12/dist-packages (4.67.1)\n", "Requirement already satisfied: pandas in /usr/local/lib/python3.12/dist-packages (2.2.2)\n", "Requirement already satisfied: filelock in /usr/local/lib/python3.12/dist-packages (from torch) (3.20.0)\n", "Requirement already satisfied: typing-extensions>=4.10.0 in /usr/local/lib/python3.12/dist-packages (from torch) (4.15.0)\n", "Requirement already satisfied: setuptools in /usr/local/lib/python3.12/dist-packages (from torch) (75.2.0)\n", "Requirement already satisfied: sympy>=1.13.3 in /usr/local/lib/python3.12/dist-packages (from torch) (1.14.0)\n", "Requirement already satisfied: networkx>=2.5.1 in /usr/local/lib/python3.12/dist-packages (from torch) (3.6.1)\n", "Requirement already satisfied: jinja2 in /usr/local/lib/python3.12/dist-packages (from torch) (3.1.6)\n", "Requirement already satisfied: fsspec>=0.8.5 in /usr/local/lib/python3.12/dist-packages (from torch) (2025.3.0)\n", "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.6.77 in /usr/local/lib/python3.12/dist-packages (from torch) (12.6.77)\n", "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.6.77 in /usr/local/lib/python3.12/dist-packages (from torch) (12.6.77)\n", "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.6.80 in /usr/local/lib/python3.12/dist-packages (from torch) (12.6.80)\n", "Requirement already satisfied: nvidia-cudnn-cu12==9.10.2.21 in /usr/local/lib/python3.12/dist-packages (from torch) (9.10.2.21)\n", "Requirement already satisfied: nvidia-cublas-cu12==12.6.4.1 in /usr/local/lib/python3.12/dist-packages (from torch) (12.6.4.1)\n", "Requirement already satisfied: nvidia-cufft-cu12==11.3.0.4 in /usr/local/lib/python3.12/dist-packages (from torch) (11.3.0.4)\n", "Requirement already satisfied: nvidia-curand-cu12==10.3.7.77 in /usr/local/lib/python3.12/dist-packages (from torch) (10.3.7.77)\n", "Requirement already satisfied: nvidia-cusolver-cu12==11.7.1.2 in /usr/local/lib/python3.12/dist-packages (from torch) (11.7.1.2)\n", "Requirement already satisfied: nvidia-cusparse-cu12==12.5.4.2 in /usr/local/lib/python3.12/dist-packages (from torch) (12.5.4.2)\n", "Requirement already satisfied: nvidia-cusparselt-cu12==0.7.1 in /usr/local/lib/python3.12/dist-packages (from torch) (0.7.1)\n", "Requirement already satisfied: nvidia-nccl-cu12==2.27.5 in /usr/local/lib/python3.12/dist-packages (from torch) (2.27.5)\n", "Requirement already satisfied: nvidia-nvshmem-cu12==3.3.20 in /usr/local/lib/python3.12/dist-packages (from torch) (3.3.20)\n", "Requirement already satisfied: nvidia-nvtx-cu12==12.6.77 in /usr/local/lib/python3.12/dist-packages (from torch) (12.6.77)\n", "Requirement already satisfied: nvidia-nvjitlink-cu12==12.6.85 in /usr/local/lib/python3.12/dist-packages (from torch) (12.6.85)\n", "Requirement already satisfied: nvidia-cufile-cu12==1.11.1.6 in /usr/local/lib/python3.12/dist-packages (from torch) (1.11.1.6)\n", "Requirement already satisfied: triton==3.5.0 in /usr/local/lib/python3.12/dist-packages (from torch) (3.5.0)\n", "Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in /usr/local/lib/python3.12/dist-packages (from torchvision) (11.3.0)\n", "Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.12/dist-packages (from pandas) (2.9.0.post0)\n", "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.12/dist-packages (from pandas) (2025.2)\n", "Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.12/dist-packages (from pandas) (2025.3)\n", "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.12/dist-packages (from python-dateutil>=2.8.2->pandas) (1.17.0)\n", "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.12/dist-packages (from sympy>=1.13.3->torch) (1.3.0)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.12/dist-packages (from jinja2->torch) (3.0.3)\n", "Requirement already satisfied: lap in /usr/local/lib/python3.12/dist-packages (0.5.12)\n", "Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.12/dist-packages (from lap) (2.0.2)\n", "Requirement already satisfied: ultralytics in /usr/local/lib/python3.12/dist-packages (8.3.248)\n", "Requirement already satisfied: numpy>=1.23.0 in /usr/local/lib/python3.12/dist-packages (from ultralytics) (2.0.2)\n", "Requirement already satisfied: matplotlib>=3.3.0 in /usr/local/lib/python3.12/dist-packages (from ultralytics) (3.10.0)\n", "Requirement already satisfied: opencv-python>=4.6.0 in /usr/local/lib/python3.12/dist-packages (from ultralytics) (4.12.0.88)\n", "Requirement already satisfied: pillow>=7.1.2 in /usr/local/lib/python3.12/dist-packages (from ultralytics) (11.3.0)\n", "Requirement already satisfied: pyyaml>=5.3.1 in /usr/local/lib/python3.12/dist-packages (from ultralytics) (6.0.3)\n", "Requirement already satisfied: requests>=2.23.0 in /usr/local/lib/python3.12/dist-packages (from ultralytics) (2.32.4)\n", "Requirement already satisfied: scipy>=1.4.1 in /usr/local/lib/python3.12/dist-packages (from ultralytics) (1.16.3)\n", "Requirement already satisfied: torch>=1.8.0 in /usr/local/lib/python3.12/dist-packages (from ultralytics) (2.9.0+cu126)\n", "Requirement already satisfied: torchvision>=0.9.0 in /usr/local/lib/python3.12/dist-packages (from ultralytics) (0.24.0+cu126)\n", "Requirement already satisfied: psutil>=5.8.0 in /usr/local/lib/python3.12/dist-packages (from ultralytics) (5.9.5)\n", "Requirement already satisfied: polars>=0.20.0 in /usr/local/lib/python3.12/dist-packages (from ultralytics) (1.31.0)\n", "Requirement already satisfied: ultralytics-thop>=2.0.18 in /usr/local/lib/python3.12/dist-packages (from ultralytics) (2.0.18)\n", "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib>=3.3.0->ultralytics) (1.3.3)\n", "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.12/dist-packages (from matplotlib>=3.3.0->ultralytics) (0.12.1)\n", "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.12/dist-packages (from matplotlib>=3.3.0->ultralytics) (4.61.1)\n", "Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib>=3.3.0->ultralytics) (1.4.9)\n", "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.12/dist-packages (from matplotlib>=3.3.0->ultralytics) (25.0)\n", "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib>=3.3.0->ultralytics) (3.2.5)\n", "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.12/dist-packages (from matplotlib>=3.3.0->ultralytics) (2.9.0.post0)\n", "Requirement already satisfied: charset_normalizer<4,>=2 in /usr/local/lib/python3.12/dist-packages (from requests>=2.23.0->ultralytics) (3.4.4)\n", "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.12/dist-packages (from requests>=2.23.0->ultralytics) (3.11)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.12/dist-packages (from requests>=2.23.0->ultralytics) (2.5.0)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.12/dist-packages (from requests>=2.23.0->ultralytics) (2025.11.12)\n", "Requirement already satisfied: filelock in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (3.20.0)\n", "Requirement already satisfied: typing-extensions>=4.10.0 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (4.15.0)\n", "Requirement already satisfied: setuptools in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (75.2.0)\n", "Requirement already satisfied: sympy>=1.13.3 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (1.14.0)\n", "Requirement already satisfied: networkx>=2.5.1 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (3.6.1)\n", "Requirement already satisfied: jinja2 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (3.1.6)\n", "Requirement already satisfied: fsspec>=0.8.5 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (2025.3.0)\n", "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.6.77 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (12.6.77)\n", "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.6.77 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (12.6.77)\n", "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.6.80 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (12.6.80)\n", "Requirement already satisfied: nvidia-cudnn-cu12==9.10.2.21 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (9.10.2.21)\n", "Requirement already satisfied: nvidia-cublas-cu12==12.6.4.1 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (12.6.4.1)\n", "Requirement already satisfied: nvidia-cufft-cu12==11.3.0.4 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (11.3.0.4)\n", "Requirement already satisfied: nvidia-curand-cu12==10.3.7.77 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (10.3.7.77)\n", "Requirement already satisfied: nvidia-cusolver-cu12==11.7.1.2 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (11.7.1.2)\n", "Requirement already satisfied: nvidia-cusparse-cu12==12.5.4.2 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (12.5.4.2)\n", "Requirement already satisfied: nvidia-cusparselt-cu12==0.7.1 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (0.7.1)\n", "Requirement already satisfied: nvidia-nccl-cu12==2.27.5 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (2.27.5)\n", "Requirement already satisfied: nvidia-nvshmem-cu12==3.3.20 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (3.3.20)\n", "Requirement already satisfied: nvidia-nvtx-cu12==12.6.77 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (12.6.77)\n", "Requirement already satisfied: nvidia-nvjitlink-cu12==12.6.85 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (12.6.85)\n", "Requirement already satisfied: nvidia-cufile-cu12==1.11.1.6 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (1.11.1.6)\n", "Requirement already satisfied: triton==3.5.0 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.0->ultralytics) (3.5.0)\n", "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.12/dist-packages (from python-dateutil>=2.7->matplotlib>=3.3.0->ultralytics) (1.17.0)\n", "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.12/dist-packages (from sympy>=1.13.3->torch>=1.8.0->ultralytics) (1.3.0)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.12/dist-packages (from jinja2->torch>=1.8.0->ultralytics) (3.0.3)\n" ] } ], "source": [ "# ===== INSTALL DEPENDENCIES =====\n", "!pip install huggingface_hub\n", "!pip install boto3 -q\n", "!pip install opencv-python torch numpy torchvision tqdm pandas\n", "!pip install lap\n", "!pip install ultralytics" ] }, { "cell_type": "markdown", "id": "91153249", "metadata": { "id": "91153249" }, "source": [ "## Parameters and Global Variables" ] }, { "cell_type": "code", "source": [ "# Import the required libraries\n", "import torch\n", "import torch.nn as nn\n", "from torch.utils.data import Dataset, DataLoader\n", "from huggingface_hub import hf_hub_download\n", "import boto3\n", "from botocore import UNSIGNED\n", "from botocore.config import Config\n", "import os\n", "import cv2\n", "import numpy as np\n", "from tqdm import tqdm\n", "import time" ], "metadata": { "id": "mtIQ989lQOOH" }, "id": "mtIQ989lQOOH", "execution_count": 2, "outputs": [] }, { "cell_type": "code", "execution_count": 3, "id": "9ba61cb6", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "9ba61cb6", "outputId": "11dc637c-e17f-4c79-c317-ce60b75720f1" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Device: cuda\n", "Training Start Time (UNIX): 1767564156\n" ] } ], "source": [ "# Admin =================================================================================\n", "import os\n", "import time\n", "DOWNLOAD_DIR = './training-data'\n", "CACHE_DIR = './cache-data'\n", "WEIGHTS_DIR = './model-weights'\n", "os.makedirs(DOWNLOAD_DIR, exist_ok=True)\n", "os.makedirs(CACHE_DIR, exist_ok=True)\n", "os.makedirs(WEIGHTS_DIR, exist_ok=True)\n", "\n", "# To GPU or not to GPU =================================================================\n", "import torch\n", "DEVICE = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", "print(f\"Device: {DEVICE}\")\n", "\n", "# Landmark Extraction ==================================================================\n", "from ultralytics import YOLO\n", "YOLO_DIR = './yolo-weights'\n", "os.makedirs(YOLO_DIR, exist_ok=True)\n", "YOLO_DIR\n", "YOLO_MODEL = \"yolov8s\"\n", "YOLO_MODEL_FILE = os.path.join(YOLO_DIR, f\"{YOLO_MODEL}-pose.pt\")\n", "# assert os.path.exists(YOLO_MODEL_FILE)\n", "YOLO_TRACKER = \"bytetrack.yaml\"\n", "YOLO_TRACKER_FILE = os.path.join(YOLO_DIR, YOLO_TRACKER)\n", "# assert os.path.exists(YOLO_TRACKER_FILE)\n", "\n", "# Model Stuff ===========================================================================\n", "DEBUG = False\n", "RAND_SEED = 711\n", "VID_STRIDE = 2\n", "MAX_FRAMES = 1000\n", "MAX_EPOCHS = 200\n", "MAX_FRAME_LENGTH = 640\n", "\n", "# Mandatory timestamps for the 5-hour limit\n", "print(f\"Training Start Time (UNIX): {int(time.time())}\")" ] }, { "cell_type": "markdown", "id": "397089dc", "metadata": { "id": "397089dc" }, "source": [ "## Download Training Videos" ] }, { "cell_type": "code", "execution_count": 4, "id": "21717985", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "21717985", "outputId": "188a3fa8-285a-43fb-fc2c-0592553ca96d" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "File already exists, skipping: 1_dksksjfwijf.mp4\n", "File already exists, skipping: 2_dfsaeklnvvalkej.mp4\n", "File already exists, skipping: 2_difficult_2.mp4\n", "File already exists, skipping: 2_difficult_sdafkljsalkfj.mp4\n", "File already exists, skipping: 2_dkdjwkndkfw.mp4\n", "File already exists, skipping: 2_dkdmkejkeimdh.mp4\n", "File already exists, skipping: 2_dkjd823kjf.mp4\n", "File already exists, skipping: 2_dsalkfjalwkenlke.mp4\n", "File already exists, skipping: 2_kling_20251205_Text_to_Video_On_a_sandy_4976_0.mp4\n", "File already exists, skipping: 2_kling_20251206_Text_to_Video_Generate_a_71_1.mp4\n", "File already exists, skipping: 2_sadfasjldkfjaseifj.mp4\n", "File already exists, skipping: 2_sdafkjaslkclaksdjkas.mp4\n", "File already exists, skipping: 2_sdfkjsaleijflaskdjf.mp4\n", "File already exists, skipping: 2_sdjfhafsldkjhjk.mp4\n", "File already exists, skipping: 2_sdkjdsflkjfwa.mp4\n", "File already exists, skipping: 2_sdlfjlewlkjkj.mp4\n", "File already exists, skipping: 2_sdlkjsaelijfksdjf.mp4\n", "File already exists, skipping: 3_asldkfjalwieaskdfaskdf.mp4\n", "File already exists, skipping: 3_dkk873lkjlksajdf.mp4\n", "File already exists, skipping: 3_dsjlaeijlksjdfie.mp4\n", "File already exists, skipping: 3_dsksdfjbvsdkj.mp4\n", "File already exists, skipping: 3_dslkaldskjflakjs.mp4\n", "File already exists, skipping: 3_ewdfkjwaeoihjlkasdjf.mp4\n", "File already exists, skipping: 3_kling_20251205_Text_to_Video_In_a_grass_4697_0.mp4\n", "File already exists, skipping: 3_kling_20251205_Text_to_Video_On_a_playg_5028_0.mp4\n", "File already exists, skipping: 3_kling_20251205_Text_to_Video_On_a_playg_5064_0.mp4\n", "File already exists, skipping: 3_kling_20251206_Text_to_Video_Generate_a_17_0.mp4\n", "File already exists, skipping: 3_kling_20251206_Text_to_Video_Generate_a_315_0.mp4\n", "File already exists, skipping: 3_kling_20251206_Text_to_Video_Generate_a_315_2.mp4\n", "File already exists, skipping: 3_kling_20251206_Text_to_Video_Generate_a_712_3.mp4\n", "File already exists, skipping: 3_kling_20251206_Text_to_Video_Generate_a_71_0.mp4\n", "File already exists, skipping: 3_kling_20251206_Text_to_Video_Generate_a_71_2.mp4\n", "File already exists, skipping: 3_kling_20251206_Text_to_Video_Generate_a_71_3.mp4\n", "File already exists, skipping: 3_kling_20251209_Image_to_Video_Generate_a_613_1.mp4\n", "File already exists, skipping: 3_kling_20251209_Image_to_Video_Generate_a_635_0.mp4\n", "File already exists, skipping: 3_kling_20251209_Text_to_Video_Generate_a_190_1.mp4\n", "File already exists, skipping: 3_kling_20251209_Text_to_Video_Generate_a_403_1.mp4\n", "File already exists, skipping: 3_kling_20251209_Text_to_Video_Generate_a_491_0.mp4\n", "File already exists, skipping: 3_kling_20251209_Text_to_Video_Generate_a_491_1.mp4\n", "File already exists, skipping: 3_kling_20251209_Text_to_Video_Generate_a_491_2.mp4\n", "File already exists, skipping: 3_kling_dskfseu.mp4\n", "File already exists, skipping: 3_kling_kdjflaskdjf.mp4\n", "File already exists, skipping: 3_sadklfjasbnlkjlfkj.mp4\n", "File already exists, skipping: 3_sadlfkjasldkfjasleijlkjfd.mp4\n", "File already exists, skipping: 3_sadlfkjawelnflksdjf.mp4\n", "File already exists, skipping: 3_sdfjwaiejflkasjdf.mp4\n", "File already exists, skipping: 3_sdflkjliejkjdf.mp4\n", "File already exists, skipping: 3_sdlkfjaleknaksej.mp4\n", "File already exists, skipping: 3_sdlkfjalkjejafe.mp4\n", "File already exists, skipping: 3_sdlkjfaslkjfalskjdf.mp4\n", "File already exists, skipping: 3_sdlkjslndflkseijlkjef.mp4\n", "File already exists, skipping: 4_20251209_Text_to_Video_Generate_a_561_0.mp4\n", "File already exists, skipping: 4_asdlkfjalsflnekj.mp4\n", "File already exists, skipping: 4_aslkcasckmwlejk.mp4\n", "File already exists, skipping: 4_aslkjasmcalkewjlkje.mp4\n", "File already exists, skipping: 4_dssalsdkfjweijf.mp4\n", "File already exists, skipping: 4_kling_20251206_Text_to_Video_Generate_a_28_0.mp4\n", "File already exists, skipping: 4_kling_20251206_Text_to_Video_Generate_a_315_3.mp4\n", "File already exists, skipping: 4_kling_20251206_Text_to_Video_Generate_a_58_0.mp4\n", "File already exists, skipping: 4_kling_20251207_Text_to_Video_Generate_a_521_1.mp4\n", "File already exists, skipping: 4_kling_20251209_Image_to_Video_Generate_a_635_1.mp4\n", "File already exists, skipping: 4_kling_20251209_Text_to_Video_Generate_a_190_0.mp4\n", "File already exists, skipping: 4_kling_20251209_Text_to_Video_Generate_a_218_0.mp4\n", "File already exists, skipping: 4_kling_20251209_Text_to_Video_Generate_a_263_1.mp4\n", "File already exists, skipping: 4_kling_20251209_Text_to_Video_Generate_a_377_1.mp4\n", "File already exists, skipping: 4_kling_20251209_Text_to_Video_Generate_a_452_0.mp4\n", "File already exists, skipping: 4_kling_20251209_Text_to_Video_Generate_a_452_1.mp4\n", "File already exists, skipping: 4_kling_20251209_Text_to_Video_Generate_a_561_1.mp4\n", "File already exists, skipping: 4_kling_20251209_Text_to_Video_Generate_a_588_2.mp4\n", "File already exists, skipping: 4_pushup_1f2da596-7619-4d55-9376-069e15a42a1a_h264.mp4\n", "File already exists, skipping: 4_sadflkjasldkjfalseij.mp4\n", "File already exists, skipping: 4_sadlfkjlknewkjejk.mp4\n", "File already exists, skipping: 5_sadfjhaslfkjasdlkfjsa.mp4\n", "File already exists, skipping: 5_sdfkljweoijlkjdsflkjweaij.mp4\n", "File already exists, skipping: 6_dfjewaijsldkjfsaef.mp4\n", "File already exists, skipping: 6_kling_20251209_Text_to_Video_Generate_a_218_1.mp4\n", "File already exists, skipping: 7_sadkjfkljekj.mp4\n", "\n", "==================================================\n", "Downloaded videos:\n", "==================================================\n", "1_dksksjfwijf.mp4\n", "2_dfsaeklnvvalkej.mp4\n", "2_difficult_2.mp4\n", "2_difficult_sdafkljsalkfj.mp4\n", "2_dkdjwkndkfw.mp4\n", "2_dkdmkejkeimdh.mp4\n", "2_dkjd823kjf.mp4\n", "2_dsalkfjalwkenlke.mp4\n", "2_kling_20251205_Text_to_Video_On_a_sandy_4976_0.mp4\n", "2_kling_20251206_Text_to_Video_Generate_a_71_1.mp4\n", "2_sadfasjldkfjaseifj.mp4\n", "2_sdafkjaslkclaksdjkas.mp4\n", "2_sdfkjsaleijflaskdjf.mp4\n", "2_sdjfhafsldkjhjk.mp4\n", "2_sdkjdsflkjfwa.mp4\n", "2_sdlfjlewlkjkj.mp4\n", "2_sdlkjsaelijfksdjf.mp4\n", "3_asldkfjalwieaskdfaskdf.mp4\n", "3_dkk873lkjlksajdf.mp4\n", "3_dsjlaeijlksjdfie.mp4\n", "3_dsksdfjbvsdkj.mp4\n", "3_dslkaldskjflakjs.mp4\n", "3_ewdfkjwaeoihjlkasdjf.mp4\n", "3_kling_20251205_Text_to_Video_In_a_grass_4697_0.mp4\n", "3_kling_20251205_Text_to_Video_On_a_playg_5028_0.mp4\n", "3_kling_20251205_Text_to_Video_On_a_playg_5064_0.mp4\n", "3_kling_20251206_Text_to_Video_Generate_a_17_0.mp4\n", "3_kling_20251206_Text_to_Video_Generate_a_315_0.mp4\n", "3_kling_20251206_Text_to_Video_Generate_a_315_2.mp4\n", "3_kling_20251206_Text_to_Video_Generate_a_712_3.mp4\n", "3_kling_20251206_Text_to_Video_Generate_a_71_0.mp4\n", "3_kling_20251206_Text_to_Video_Generate_a_71_2.mp4\n", "3_kling_20251206_Text_to_Video_Generate_a_71_3.mp4\n", "3_kling_20251209_Image_to_Video_Generate_a_613_1.mp4\n", "3_kling_20251209_Image_to_Video_Generate_a_635_0.mp4\n", "3_kling_20251209_Text_to_Video_Generate_a_190_1.mp4\n", "3_kling_20251209_Text_to_Video_Generate_a_403_1.mp4\n", "3_kling_20251209_Text_to_Video_Generate_a_491_0.mp4\n", "3_kling_20251209_Text_to_Video_Generate_a_491_1.mp4\n", "3_kling_20251209_Text_to_Video_Generate_a_491_2.mp4\n", "3_kling_dskfseu.mp4\n", "3_kling_kdjflaskdjf.mp4\n", "3_sadklfjasbnlkjlfkj.mp4\n", "3_sadlfkjasldkfjasleijlkjfd.mp4\n", "3_sadlfkjawelnflksdjf.mp4\n", "3_sdfjwaiejflkasjdf.mp4\n", "3_sdflkjliejkjdf.mp4\n", "3_sdlkfjaleknaksej.mp4\n", "3_sdlkfjalkjejafe.mp4\n", "3_sdlkjfaslkjfalskjdf.mp4\n", "3_sdlkjslndflkseijlkjef.mp4\n", "4_20251209_Text_to_Video_Generate_a_561_0.mp4\n", "4_asdlkfjalsflnekj.mp4\n", "4_aslkcasckmwlejk.mp4\n", "4_aslkjasmcalkewjlkje.mp4\n", "4_dssalsdkfjweijf.mp4\n", "4_kling_20251206_Text_to_Video_Generate_a_28_0.mp4\n", "4_kling_20251206_Text_to_Video_Generate_a_315_3.mp4\n", "4_kling_20251206_Text_to_Video_Generate_a_58_0.mp4\n", "4_kling_20251207_Text_to_Video_Generate_a_521_1.mp4\n", "4_kling_20251209_Image_to_Video_Generate_a_635_1.mp4\n", "4_kling_20251209_Text_to_Video_Generate_a_190_0.mp4\n", "4_kling_20251209_Text_to_Video_Generate_a_218_0.mp4\n", "4_kling_20251209_Text_to_Video_Generate_a_263_1.mp4\n", "4_kling_20251209_Text_to_Video_Generate_a_377_1.mp4\n", "4_kling_20251209_Text_to_Video_Generate_a_452_0.mp4\n", "4_kling_20251209_Text_to_Video_Generate_a_452_1.mp4\n", "4_kling_20251209_Text_to_Video_Generate_a_561_1.mp4\n", "4_kling_20251209_Text_to_Video_Generate_a_588_2.mp4\n", "4_pushup_1f2da596-7619-4d55-9376-069e15a42a1a_h264.mp4\n", "4_sadflkjasldkjfalseij.mp4\n", "4_sadlfkjlknewkjejk.mp4\n", "5_sadfjhaslfkjasdlkfjsa.mp4\n", "5_sdfkljweoijlkjdsflkjweaij.mp4\n", "6_dfjewaijsldkjfsaef.mp4\n", "6_kling_20251209_Text_to_Video_Generate_a_218_1.mp4\n", "7_sadkjfkljekj.mp4\n", "\n", "Total: 77 files\n" ] } ], "source": [ "import boto3\n", "from botocore import UNSIGNED\n", "from botocore.config import Config\n", "import os\n", "\n", "# Connect to S3 without authentication (public bucket)\n", "s3 = boto3.client('s3', config=Config(signature_version=UNSIGNED))\n", "\n", "bucket_name = 'prism-mvta'\n", "prefix = 'training-and-validation-data/'\n", "\n", "# List all objects in the S3 path\n", "paginator = s3.get_paginator('list_objects_v2')\n", "pages = paginator.paginate(Bucket=bucket_name, Prefix=prefix)\n", "\n", "video_names = []\n", "\n", "for page in pages:\n", " if 'Contents' not in page:\n", " print(\"No files found at the specified path! Go and complain to the TAs!\")\n", " break\n", "\n", " for obj in page['Contents']:\n", " key = obj['Key']\n", " filename = os.path.basename(key)\n", "\n", " if not filename:\n", " continue\n", "\n", " video_names.append(filename)\n", "\n", " remote_path = os.path.join(DOWNLOAD_DIR, filename)\n", " if os.path.exists(remote_path):\n", " print(f\"File already exists, skipping: {filename}\")\n", " continue\n", " print(f\"Downloading: {filename}\")\n", " s3.download_file(bucket_name, key, remote_path)\n", "\n", "print(\"\\n\" + \"=\"*50)\n", "print(\"Downloaded videos:\")\n", "print(\"=\"*50)\n", "for name in video_names:\n", " print(name)\n", "\n", "print(f\"\\nTotal: {len(video_names)} files\")" ] }, { "cell_type": "markdown", "id": "c5b3333e", "metadata": { "id": "c5b3333e" }, "source": [ "## Secret Sauce" ] }, { "cell_type": "markdown", "source": [ "### Sprinkle Seeds" ], "metadata": { "id": "AL_ItrXgO5o2" }, "id": "AL_ItrXgO5o2" }, { "cell_type": "code", "source": [ "import time\n", "import torch\n", "import numpy as np\n", "import random\n", "\n", "def set_seed(seed):\n", " random.seed(seed)\n", " np.random.seed(seed)\n", " torch.manual_seed(seed)\n", " torch.cuda.manual_seed_all(seed)\n", " # Essential for preventing algorithm-switching mid-training\n", " # torch.backends.cudnn.deterministic = True\n", " # torch.backends.cudnn.benchmark = False\n", " print(f\"Seed set to: {seed}\")\n", "\n", "set_seed(RAND_SEED)" ], "metadata": { "id": "Bl88s3O2O-Pq", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "c87588b1-7db2-435e-b40e-b2d30927f807" }, "id": "Bl88s3O2O-Pq", "execution_count": 5, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Seed set to: 711\n" ] } ] }, { "cell_type": "markdown", "id": "86fa605d", "metadata": { "id": "86fa605d" }, "source": [ "### Transformation" ] }, { "cell_type": "code", "execution_count": 6, "id": "4c884713", "metadata": { "id": "4c884713" }, "outputs": [], "source": [ "import torchvision.transforms.functional as TF\n", "import random\n", "import torch # Needed for TF.to_tensor which uses torch internally\n", "\n", "\n", "class VideoResizerSingle:\n", " def __init__(self, largest_dim):\n", " # resize such that aspect ratio is retained\n", " self.largest_dim = largest_dim\n", "\n", " def __call__(self, single_frame):\n", " original_width, original_height = single_frame.size\n", " scale = max(self.largest_dim/original_width, self.largest_dim/original_height)\n", " new_width = int(original_width * scale)\n", " new_height = int(original_height * scale)\n", " single_frame = TF.resize(single_frame, (new_height, new_width))\n", " return single_frame\n", "\n", "\n", "class VideoResizer:\n", " def __init__(self, largest_dim):\n", " self.largest_dim = largest_dim\n", "\n", " def __call__(self, frames_list_pil):\n", " if not frames_list_pil:\n", " return []\n", "\n", " transformed_frames_pil = []\n", " helper = VideoResizerSingle(self.largest_dim)\n", " for img_pil in frames_list_pil:\n", " img_pil = helper(img_pil)\n", " transformed_frames_pil.append(img_pil)\n", " return transformed_frames_pil\n", "\n", "\n", "class VideoTransform:\n", " def __init__(self, rotation_degrees, hflip_p, vflip_p, color_jitter_params, resize_dims=None):\n", " self.rotation_degrees = rotation_degrees\n", " self.hflip_p = hflip_p\n", " self.vflip_p = vflip_p\n", " self.color_jitter_params = color_jitter_params # (brightness, contrast, saturation, hue)\n", " self.resize_dims = resize_dims # (height, width)\n", "\n", " def __call__(self, frames_list_pil):\n", " if not frames_list_pil:\n", " return []\n", "\n", " # Sample parameters once per video\n", " angle = random.uniform(-self.rotation_degrees, self.rotation_degrees)\n", " h_flip = random.random() < self.hflip_p\n", " v_flip = random.random() < self.vflip_p\n", "\n", " # Manually compute ColorJitter factors for consistency across frames\n", " brightness_param = self.color_jitter_params[0]\n", " contrast_param = self.color_jitter_params[1]\n", " saturation_param = self.color_jitter_params[2]\n", " hue_param = self.color_jitter_params[3]\n", "\n", " brightness_factor = random.uniform(max(0, 1 - brightness_param), 1 + brightness_param)\n", " contrast_factor = random.uniform(max(0, 1 - contrast_param), 1 + contrast_param)\n", " saturation_factor = random.uniform(max(0, 1 - saturation_param), 1 + saturation_param)\n", " hue_factor = random.uniform(-hue_param, hue_param)\n", "\n", "\n", " transformed_frames_pil = [] # Changed variable name to reflect return type\n", " for img_pil in frames_list_pil:\n", " # Apply same random parameters to each frame\n", " img_pil = TF.rotate(img_pil, angle)\n", " if h_flip:\n", " img_pil = TF.hflip(img_pil)\n", " if v_flip:\n", " img_pil = TF.vflip(img_pil)\n", " img_pil = TF.adjust_brightness(img_pil, brightness_factor)\n", " img_pil = TF.adjust_contrast(img_pil, contrast_factor)\n", " img_pil = TF.adjust_saturation(img_pil, saturation_factor)\n", " img_pil = TF.adjust_hue(img_pil, hue_factor)\n", "\n", " # Resize while maintaining aspect ratio\n", " if self.resize_dims:\n", " original_width, original_height = img_pil.size\n", " target_height, target_width = self.resize_dims\n", "\n", " # Calculate new dimensions to fit within target while maintaining aspect ratio\n", " scale_w = target_width / original_width\n", " scale_h = target_height / original_height\n", " scale = min(scale_w, scale_h)\n", "\n", " new_width = int(original_width * scale)\n", " new_height = int(original_height * scale)\n", "\n", " img_pil = TF.resize(img_pil, (new_height, new_width))\n", "\n", " # Pad if necessary to reach target_dims\n", " pad_left = (target_width - new_width) // 2\n", " pad_right = target_width - new_width - pad_left\n", " pad_top = (target_height - new_height) // 2\n", " pad_bottom = target_height - new_height - pad_top\n", "\n", " img_pil = TF.pad(img_pil, (pad_left, pad_top, pad_right, pad_bottom))\n", "\n", " transformed_frames_pil.append(img_pil) # Append PIL image directly, remove TF.to_tensor\n", "\n", " return transformed_frames_pil # Return list of PIL images\n", "\n", "TRANSFORMATIONS = VideoTransform(\n", " rotation_degrees=180,\n", " hflip_p=0.5,\n", " vflip_p=0.5,\n", " color_jitter_params=(0.2, 0.2, 0.2, 0.2),\n", " resize_dims=(640, 640) # Example: resize to 224x224\n", ")\n", "\n", "RESIZER = VideoResizerSingle(MAX_FRAME_LENGTH)" ] }, { "cell_type": "markdown", "id": "aabf9bdb", "metadata": { "id": "aabf9bdb" }, "source": [ "### Signal Calculators and Utils" ] }, { "cell_type": "code", "execution_count": 7, "id": "b1f96bf6", "metadata": { "id": "b1f96bf6" }, "outputs": [], "source": [ "import pandas as pd\n", "import torch\n", "import torch.nn as nn\n", "import numpy as np\n", "\n", "class SignalPerturbator:\n", " @staticmethod\n", " def __call__(self, signals):\n", " \"\"\"Applies dynamic 1D augmentation to the signal sequence.\"\"\"\n", " # Add Gaussian noise\n", " noise = torch.randn_like(signals) * 0.01\n", " # Random scaling (simulates different range of motion)\n", " scale = random.uniform(0.9, 1.1)\n", " # Random baseline shift\n", " shift = random.uniform(-0.05, 0.05)\n", " return torch.clamp(signals * scale + noise + shift, 0, 1)\n", "\n", "\n", "class SignalAverager:\n", " @staticmethod\n", " def __call__(signal_tensor, window_size=3):\n", " \"\"\"\n", " Applies a moving average to smooth signals.\n", " \"\"\"\n", " # 1. Ensure the tensor is at least 2D (Batch, Length)\n", " if signal_tensor.dim() == 1:\n", " signal_tensor = signal_tensor.unsqueeze(0)\n", "\n", " # 2. Reshape to (Batch, Channels, Length) for avg_pool1d\n", " # We treat the elbow angle as a single channel\n", " x = signal_tensor.unsqueeze(1)\n", "\n", " # 3. Apply average pooling\n", " # stride=1 keeps the resolution the same\n", " # padding=1 ensures the output length matches the input length\n", " smoothed = nn.functional.avg_pool1d(x, kernel_size=window_size, stride=1, padding=window_size//2)\n", "\n", " # 4. Remove the extra channel dimension and return\n", " return smoothed.squeeze(1)\n", "\n", "class SignalMedianator:\n", " @staticmethod\n", " def __call__(signal_tensor, window_size=3):\n", " \"\"\"\n", " Applies a moving media to smooth the signals.\n", " Good for bring out local signals dwarfed by global normalization\n", " \"\"\"\n", " def moving_median(data, window):\n", " return np.array([np.median(data[max(0, i-window//2):min(len(data), i+window//2+1)])\n", " for i in range(len(data))])\n", " smoothed = moving_median(signal_tensor, window_size)\n", " mean = np.mean(smoothed)\n", " std = np.std(smoothed) + 1e-6\n", " smoothed = (smoothed - mean) / std\n", " return torch.tensor(smoothed, dtype=torch.float32)" ] }, { "cell_type": "markdown", "id": "0739d1f9", "metadata": { "id": "0739d1f9" }, "source": [ "### Elbow Calculation" ] }, { "cell_type": "code", "execution_count": 8, "id": "bd0ed587", "metadata": { "id": "bd0ed587" }, "outputs": [], "source": [ "import numpy as np\n", "from enum import Enum\n", "\n", "\n", "class COCO(Enum):\n", " R_SHOULDER = 5\n", " L_SHOULDER = 6\n", " R_ELBOW = 7\n", " L_ELBOW = 8\n", " R_WRIST = 9\n", " L_WRIST = 10\n", " L_HIP = 11\n", " R_HIP = 12\n", " L_KNEE = 13\n", " R_KNEE = 14\n", "\n", "\n", "class AngleCalculator:\n", " \"\"\"Calculates the elbow angle of a person from landmarks.\"\"\"\n", " def __init__(self, landmarks) -> None:\n", " # landmarks as returned by Ultralytics: np.ndarray[np._AnyShape, np.dtype[np.Any]] | np.Any\n", " self.landmarks = landmarks\n", "\n", " def _ref_len(self):\n", " # Determine Scale Reference (Hips or Fallback to Shoulder Width)\n", " if self.landmarks[COCO.L_HIP.value].any() and self.landmarks[COCO.R_HIP.value].any():\n", " ref_len = np.linalg.norm(self.landmarks[COCO.L_SHOULDER.value] - self.landmarks[COCO.L_HIP.value])\n", " else:\n", " ref_len = np.linalg.norm(self.landmarks[COCO.L_SHOULDER.value] - self.landmarks[COCO.R_SHOULDER.value]) / 0.75\n", " return ref_len\n", "\n", " def _uplift_arm_to_3d(self, sh_idx, el_idx, wr_idx, ref_len):\n", " \"\"\"Uplifts 2D keypoints to 3D using Da Vinci's ratios\"\"\"\n", " # Ratios (relative to torso length)\n", " R_UPPER_ARM = 0.45\n", " R_FOREARM = 0.42\n", "\n", " # 1. Shoulder is the root (z=0)\n", " sh_3d = np.array([self.landmarks[sh_idx][0], self.landmarks[sh_idx][1], 0.0])\n", "\n", " # 2. Lift Elbow (Relative to Shoulder)\n", " L_upper = R_UPPER_ARM * ref_len\n", " dx1 = self.landmarks[el_idx][0] - self.landmarks[sh_idx][0]\n", " dy1 = self.landmarks[el_idx][1] - self.landmarks[sh_idx][1]\n", " dz1 = np.sqrt(max(0, L_upper**2 - (dx1**2 + dy1**2)))\n", " el_3d = np.array([self.landmarks[el_idx][0], self.landmarks[el_idx][1], dz1])\n", "\n", " # 3. Lift Wrist (Relative to Elbow)\n", " L_fore = R_FOREARM * ref_len\n", " dx2 = self.landmarks[wr_idx][0] - self.landmarks[el_idx][0]\n", " dy2 = self.landmarks[wr_idx][1] - self.landmarks[el_idx][1]\n", " dz2 = np.sqrt(max(0, L_fore**2 - (dx2**2 + dy2**2)))\n", " # Z-coordinate is cumulative\n", " wr_3d = np.array([self.landmarks[wr_idx][0], self.landmarks[wr_idx][1], dz1 + dz2])\n", "\n", " return sh_3d, el_3d, wr_3d\n", "\n", " def __call__(self) -> float:\n", " def get_angle(a, b, c) -> float:\n", " ba, bc = a - b, c - b\n", " cosine = np.dot(ba, bc) / (np.linalg.norm(ba) * np.linalg.norm(bc))\n", " return np.degrees(np.arccos(np.clip(cosine, -1.0, 1.0)))\n", "\n", " ref_len = self._ref_len()\n", "\n", " # Calculate elbow angle for both arms\n", " l_sh, l_el, l_wr = self._uplift_arm_to_3d(COCO.L_SHOULDER.value, COCO.L_ELBOW.value, COCO.L_WRIST.value, ref_len)\n", " r_sh, r_el, r_wr = self._uplift_arm_to_3d(COCO.R_SHOULDER.value, COCO.R_ELBOW.value, COCO.R_WRIST.value, ref_len)\n", "\n", " l_angle = get_angle(l_sh, l_el, l_wr)\n", " r_angle = get_angle(r_sh, r_el, r_wr)\n", "\n", " # Use average angle for robustness (handles side-on views better)\n", " avg_angle = (l_angle + r_angle) / 2\n", " return avg_angle" ] }, { "cell_type": "markdown", "id": "402a2666", "metadata": { "id": "402a2666" }, "source": [ "### Adhoc Code" ] }, { "cell_type": "code", "execution_count": 9, "id": "bfcc310e", "metadata": { "id": "bfcc310e" }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "import numpy as np\n", "\n", "def plot_angles_with_moving_averages(angles, title=\"Elbow Angles Over Time\"):\n", " \"\"\"\n", " Plots raw elbow angle data along with 5 different moving averages.\n", "\n", " Args:\n", " angles (np.ndarray or list): A 1D array or list of elbow angles.\n", " title (str): The title for the plot.\n", " \"\"\"\n", " if not isinstance(angles, np.ndarray):\n", " angles = np.array(angles)\n", " angles = np.squeeze(angles)\n", "\n", " # Define different window sizes for moving averages\n", " window_sizes = [2, 3, 4, 5, 7] # Example window sizes\n", "\n", " plt.figure(figsize=(15, 7))\n", "\n", " # Plot raw data\n", " plt.plot(angles, label='Raw Angles', alpha=0.7, color='lightgray')\n", "\n", " # Plot moving averages\n", " for window in window_sizes:\n", " # Ensure window size is not greater than the data length\n", " if window <= len(angles):\n", " moving_avg = pd.Series(angles).rolling(window=window).mean()\n", " plt.plot(moving_avg, label=f'MA ({window} frames)')\n", " else:\n", " print(f\"Warning: Window size {window} is larger than data length. Skipping MA.\")\n", "\n", " plt.title(title)\n", " plt.xlabel('Frame Number')\n", " plt.ylabel('Elbow Angle (degrees)')\n", " plt.legend()\n", " plt.grid(True)\n", " plt.show()\n", "\n", "\n", "def plot_angles_with_moving_median(angles, title=\"Elbow Angles Over Time\"):\n", " \"\"\"\n", " Plots raw elbow angle data along with 5 different moving averages.\n", "\n", " Args:\n", " angles (np.ndarray or list): A 1D array or list of elbow angles.\n", " title (str): The title for the plot.\n", " \"\"\"\n", " def rolling_median(data, window_size=5):\n", " \"\"\"Robust noise reduction without scipy.\"\"\"\n", " result = np.zeros_like(data)\n", " for i in range(len(data)):\n", " start = max(0, i - window_size // 2)\n", " end = min(len(data), i + window_size // 2 + 1)\n", " result[i] = np.median(data[start:end])\n", " return result\n", "\n", " def moving_median(data, window):\n", " return np.array([np.median(data[max(0, i-window//2):min(len(data), i+window//2+1)])\n", " for i in range(len(data))])\n", "\n", " if not isinstance(angles, np.ndarray):\n", " angles = np.array(angles)\n", " angles = np.squeeze(angles)\n", "\n", " # Define different window sizes for moving averages\n", " window_sizes = [2, 3, 4, 5, 7] # Example window sizes\n", "\n", " plt.figure(figsize=(15, 7))\n", "\n", " # Plot raw data\n", " plt.plot(angles, label='Raw Angles', alpha=0.7, color='lightgray')\n", "\n", " # Plot moving averages\n", " for window in window_sizes:\n", " # Ensure window size is not greater than the data length\n", " if window <= len(angles):\n", " moving_med = rolling_median(angles, window)\n", " moving_med = moving_median(angles, window)\n", " mean = np.mean(moving_med)\n", " std = np.std(moving_med) + 1e-6\n", " moving_med = (moving_med - mean) / std\n", " plt.plot(moving_med, label=f'MM ({window} frames)')\n", " else:\n", " print(f\"Warning: Window size {window} is larger than data length. Skipping MA.\")\n", "\n", " plt.title(title)\n", " plt.xlabel('Frame Number')\n", " plt.ylabel('Elbow Angle (degrees)')\n", " plt.legend()\n", " plt.grid(True)\n", " plt.show()" ] }, { "cell_type": "code", "source": [ "import os\n", "\n", "def ls_r():\n", " for root, dirs, files in os.walk(os.getcwd()):\n", " if DOWNLOAD_DIR not in root and CACHE_DIR not in root:\n", " for file in files:\n", " # Create the full path by joining the directory path and file name\n", " full_path = os.path.join(root, file)\n", " print(full_path)\n", "\n", "def clear_cache():\n", " for root, dirs, files in os.walk(os.getcwd()):\n", " if CACHE_DIR in root:\n", " for file in files:\n", " # Create the full path by joining the directory path and file name\n", " full_path = os.path.join(root, file)\n", " print(f\"Removing: {full_path}\")\n", " os.remove(full_path)\n", "\n", "def hug_a_face(repo_id):\n", " from huggingface_hub import hf_hub_download\n", " yolo_model_file = hf_hub_download(repo_id=repo_id, filename=f\"{YOLO_MODEL_FILE}\", local_dir=os.getcwd())\n", " yolo_tracker_file = hf_hub_download(repo_id=repo_id, filename=f\"{YOLO_TRACKER_FILE}\", local_dir=os.getcwd())\n", "# ls_r()\n", "clear_cache()\n", "HUGGING_FACE_REPO_ID = f\"maatt4face/mv-final-assignment\"\n", "hug_a_face(HUGGING_FACE_REPO_ID)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "oIyiVkS4_3za", "outputId": "7c4c6642-bf77-4ef7-e04b-35b252004e0c" }, "id": "oIyiVkS4_3za", "execution_count": 10, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.12/dist-packages/huggingface_hub/utils/_auth.py:94: UserWarning: \n", "The secret `HF_TOKEN` does not exist in your Colab secrets.\n", "To authenticate with the Hugging Face Hub, create a token in your settings tab (https://huggingface.co/settings/tokens), set it as secret in your Google Colab and restart your session.\n", "You will be able to reuse this secret in all of your notebooks.\n", "Please note that authentication is recommended but still optional to access public models or datasets.\n", " warnings.warn(\n" ] } ] }, { "cell_type": "markdown", "id": "273bea44", "metadata": { "id": "273bea44" }, "source": [ "## Loader" ] }, { "cell_type": "code", "execution_count": 11, "id": "4c58edbd", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "4c58edbd", "outputId": "4286753d-5959-4976-8503-f469bdce66fa" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Extracting features for 6_kling_20251209_Text_to_Video_Generate_a_218_1.mp4 (20/77)...\n", "Extracting features for 2_dkdjwkndkfw.mp4 (21/77)...\n", "Extracting features for 3_sdlkjslndflkseijlkjef.mp4 (22/77)...\n", "Extracting features for 2_sdkjdsflkjfwa.mp4 (23/77)...\n", "Extracting features for 4_aslkjasmcalkewjlkje.mp4 (24/77)...\n", "Extracting features for 4_kling_20251206_Text_to_Video_Generate_a_28_0.mp4 (25/77)...\n", "Extracting features for 3_sdlkjfaslkjfalskjdf.mp4 (26/77)...\n", "Extracting features for 3_kling_20251209_Text_to_Video_Generate_a_491_2.mp4 (27/77)...\n", "Extracting features for 3_kling_20251206_Text_to_Video_Generate_a_712_3.mp4 (28/77)...\n", "Extracting features for 4_20251209_Text_to_Video_Generate_a_561_0.mp4 (29/77)...\n", "Extracting features for 3_kling_20251206_Text_to_Video_Generate_a_71_2.mp4 (30/77)...\n", "Extracting features for 4_kling_20251209_Image_to_Video_Generate_a_635_1.mp4 (31/77)...\n", "Extracting features for 4_pushup_1f2da596-7619-4d55-9376-069e15a42a1a_h264.mp4 (32/77)...\n", "Extracting features for 4_kling_20251209_Text_to_Video_Generate_a_263_1.mp4 (33/77)...\n", "Extracting features for 3_dslkaldskjflakjs.mp4 (34/77)...\n", "Extracting features for 3_sdfjwaiejflkasjdf.mp4 (35/77)...\n", "Extracting features for 4_kling_20251209_Text_to_Video_Generate_a_452_0.mp4 (36/77)...\n", "Extracting features for 2_dfsaeklnvvalkej.mp4 (37/77)...\n", "Extracting features for 4_aslkcasckmwlejk.mp4 (38/77)...\n", "Extracting features for 2_difficult_2.mp4 (39/77)...\n", "Extracting features for 3_sdlkfjalkjejafe.mp4 (40/77)...\n", "Extracting features for 2_sdafkjaslkclaksdjkas.mp4 (41/77)...\n", "Extracting features for 3_kling_20251209_Text_to_Video_Generate_a_491_0.mp4 (42/77)...\n", "Extracting features for 2_kling_20251205_Text_to_Video_On_a_sandy_4976_0.mp4 (43/77)...\n", "Extracting features for 2_sdlkjsaelijfksdjf.mp4 (44/77)...\n", "Extracting features for 3_sdflkjliejkjdf.mp4 (45/77)...\n", "Extracting features for 3_kling_20251209_Image_to_Video_Generate_a_613_1.mp4 (46/77)...\n", "Extracting features for 3_kling_20251206_Text_to_Video_Generate_a_71_0.mp4 (47/77)...\n", "Extracting features for 3_dsksdfjbvsdkj.mp4 (48/77)...\n", "Extracting features for 3_sadklfjasbnlkjlfkj.mp4 (49/77)...\n", "Extracting features for 2_sdfkjsaleijflaskdjf.mp4 (50/77)...\n", "Extracting features for 3_asldkfjalwieaskdfaskdf.mp4 (51/77)...\n", "Extracting features for 2_dkdmkejkeimdh.mp4 (52/77)...\n", "Extracting features for 2_sdlfjlewlkjkj.mp4 (53/77)...\n", "Extracting features for 2_dsalkfjalwkenlke.mp4 (54/77)...\n", "Extracting features for 2_dkjd823kjf.mp4 (55/77)...\n", "Extracting features for 3_kling_20251209_Text_to_Video_Generate_a_190_1.mp4 (56/77)...\n", "Extracting features for 2_sdjfhafsldkjhjk.mp4 (57/77)...\n", "Extracting features for 3_sadlfkjasldkfjasleijlkjfd.mp4 (58/77)...\n", "Extracting features for 4_kling_20251209_Text_to_Video_Generate_a_218_0.mp4 (59/77)...\n", "Extracting features for 4_kling_20251206_Text_to_Video_Generate_a_315_3.mp4 (60/77)...\n", "Extracting features for 3_dsjlaeijlksjdfie.mp4 (61/77)...\n", "Extracting features for 3_dkk873lkjlksajdf.mp4 (62/77)...\n", "Extracting features for 2_kling_20251206_Text_to_Video_Generate_a_71_1.mp4 (63/77)...\n", "Extracting features for 4_dssalsdkfjweijf.mp4 (64/77)...\n", "Extracting features for 5_sdfkljweoijlkjdsflkjweaij.mp4 (65/77)...\n", "Extracting features for 2_sadfasjldkfjaseifj.mp4 (66/77)...\n", "Extracting features for 4_kling_20251209_Text_to_Video_Generate_a_190_0.mp4 (67/77)...\n", "Extracting features for 3_kling_20251206_Text_to_Video_Generate_a_315_0.mp4 (68/77)...\n", "Extracting features for 3_kling_20251206_Text_to_Video_Generate_a_17_0.mp4 (69/77)...\n", "Extracting features for 5_sadfjhaslfkjasdlkfjsa.mp4 (70/77)...\n", "Extracting features for 3_kling_20251209_Text_to_Video_Generate_a_403_1.mp4 (71/77)...\n", "Extracting features for 3_kling_20251205_Text_to_Video_On_a_playg_5064_0.mp4 (72/77)...\n", "Extracting features for 4_sadflkjasldkjfalseij.mp4 (73/77)...\n", "Extracting features for 3_kling_20251205_Text_to_Video_In_a_grass_4697_0.mp4 (74/77)...\n", "Extracting features for 4_kling_20251207_Text_to_Video_Generate_a_521_1.mp4 (75/77)...\n", "Extracting features for 7_sadkjfkljekj.mp4 (76/77)...\n", "Extracting features for 4_kling_20251206_Text_to_Video_Generate_a_58_0.mp4 (77/77)...\n", "Train: 62 videos, Val: 15 videos\n", "\n" ] } ], "source": [ "import gc\n", "import torch\n", "import torch.nn as nn\n", "from torch.utils.data import Dataset, DataLoader, random_split, Subset, WeightedRandomSampler\n", "import os\n", "import cv2\n", "import numpy as np\n", "import PIL.Image # Import PIL\n", "import torchvision.transforms as T # Keep this for T.ToTensor() in else branch\n", "\n", "\n", "class VideoDataset(Dataset):\n", " \"\"\"Dataset for loading videos from a folder, calculating elbow angles.\"\"\"\n", "\n", " def __init__(self, video_dir, transform=None, feature_dir=None, signal_transform=None):\n", " self.video_dir = video_dir\n", " self.transform = transform # Store transform\n", " self.feature_dir = feature_dir\n", " self.signal_transform = signal_transform\n", "\n", " self.video_files = [\n", " f for f in os.listdir(video_dir)\n", " if f.endswith(('.mp4', '.avi', '.mov'))\n", " ]\n", "\n", " self.labels = [\n", " int(f.split('_')[0]) for f in self.video_files\n", " ]\n", "\n", " self.lengths = [0] * len(self.video_files)\n", "\n", " def __len__(self):\n", " return len(self.video_files)\n", "\n", " def __getitem__(self, idx):\n", " if self.feature_dir:\n", " feature_path = os.path.join(self.feature_dir, self.video_files[idx] + \".pt\")\n", " if os.path.exists(feature_path):\n", " data = torch.load(feature_path, weights_only=False)\n", " angles = data['angles']\n", " self.lengths[idx] = data['length']\n", " if self.signal_transform:\n", " angles = self.signal_transform(angles)\n", " return angles, data['label'], self.lengths[idx]\n", "\n", " video_path = os.path.join(self.video_dir, self.video_files[idx])\n", "\n", " list_of_pil_frames = [] # Collect PIL images first\n", " cap = cv2.VideoCapture(video_path)\n", " while True:\n", " ret, frame = cap.read()\n", " if not ret:\n", " break\n", " # Convert frame from BGR to RGB numpy array, then to PIL Image\n", " rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)\n", " list_of_pil_frames.append(PIL.Image.fromarray(rgb_frame))\n", " cap.release()\n", "\n", " if not list_of_pil_frames:\n", " # Handle empty video or no frames\n", " return torch.tensor([]), self.labels[idx]\n", "\n", " frames_for_yolo = self.__get_frames_for_yolo(list_of_pil_frames)\n", "\n", "\n", " # Use YOLO to track on all frames at once. \"trackers\" only exists once you have called the model\n", " pose_model = YOLO(YOLO_MODEL_FILE, task='pose', verbose=False).to(DEVICE)\n", " if hasattr(pose_model, \"trackers\") and pose_model.predictor:\n", " pose_model.predictor.trackers[0].reset()\n", " results_generator = pose_model.track(frames_for_yolo, verbose=False, device=DEVICE, persist=True, vid_stride=VID_STRIDE, show=False, tracker=YOLO_TRACKER_FILE)\n", "\n", " # Calculate angles using landmarks\n", " angles = self.__calculate_angles(results_generator)\n", " angles_tensor = torch.tensor(angles, dtype=torch.float32)\n", " signal_cleanser = SignalMedianator()\n", " angles_tensor = signal_cleanser(angles_tensor)\n", "\n", " # clean up\n", " del frames_for_yolo\n", " del results_generator\n", " del pose_model\n", " torch.cuda.empty_cache()\n", " gc.collect()\n", "\n", " return angles_tensor, self.labels[idx], angles_tensor.shape[0]\n", "\n", " def __get_frames_for_yolo(self, list_of_pil_frames):\n", " frames_for_yolo = []\n", " if self.transform:\n", " # Our custom VideoTransform expects a list of PIL images\n", " if isinstance(self.transform, VideoTransform):\n", " frames_for_yolo = self.transform(list_of_pil_frames)\n", " else:\n", " # If a different transform is provided (e.g., a torchvision.transforms.Compose\n", " # that expects single images), apply it to each image individually.\n", " transformed_frames_tensor = []\n", " for img_pil in list_of_pil_frames:\n", " # Apply the transform (which might return another PIL image or a tensor)\n", " transformed_img = self.transform(img_pil)\n", " transformed_frames_tensor.append(transformed_img)\n", " frames_for_yolo = transformed_frames_tensor\n", " else:\n", " frames_for_yolo = list_of_pil_frames\n", " return frames_for_yolo\n", "\n", " @staticmethod\n", " def __calculate_angles(results_generator):\n", " angles = []\n", " # max_num_humans_in_any_frame = 0 # To report max humans in any frame\n", "\n", " for frame_idx, results in enumerate(results_generator): # results_generator yields one result object per frame\n", " current_frame_angle = 0.0 # Default if no person detected or angle cannot be calculated\n", "\n", " # Filter for detections that are persons (class 0)\n", " person_mask = (results.boxes.cls == 0)\n", " person_boxes = results.boxes[person_mask]\n", " num_persons_in_frame = len(person_boxes)\n", "\n", " # max_num_humans_in_any_frame = max(max_num_humans_in_any_frame, num_persons_in_frame)\n", "\n", " if num_persons_in_frame == 0:\n", " angles.append(current_frame_angle)\n", " del results # Explicitly clear results from GPU/memory\n", " continue\n", "\n", " # Find the index of the most confident person within the filtered person_boxes\n", " max_conf_person_idx_in_filtered = person_boxes.conf.argmax().item()\n", "\n", " # Get the actual index of this most confident person in the original results.boxes\n", " # This maps the index from the filtered list back to the original list\n", " original_indices_of_persons = person_mask.nonzero(as_tuple=True)[0]\n", " original_index_of_most_confident_person = original_indices_of_persons[max_conf_person_idx_in_filtered]\n", "\n", " # Get the Keypoints object for this specific person\n", " most_confident_person_keypoints_obj = results.keypoints[original_index_of_most_confident_person]\n", "\n", " if num_persons_in_frame > 1:\n", " # Removed print statement for verbosity during dataloading\n", " pass # Or uncomment: print(f\"Multiple Humans in Frame {frame_idx}: {num_persons_in_frame} detected. Selecting most confident.\")\n", "\n", " # Access keypoint data directly from the returned human (which is a Keypoints object for one person)\n", " if most_confident_person_keypoints_obj.xy.shape[0] > 0: # Check if keypoints exist for the human\n", " landmarks_tensor = most_confident_person_keypoints_obj.xy[0] # Already (num_keypoints, 3)\n", " landmarks_np = landmarks_tensor.cpu().numpy()\n", "\n", " if landmarks_np.shape[0] > max(COCO.R_WRIST.value, COCO.L_WRIST.value):\n", " calculator = AngleCalculator(landmarks_np)\n", " try:\n", " angle = calculator()\n", " if 0 <= angle <= 180:\n", " current_frame_angle = angle\n", " except Exception as e:\n", " pass\n", " angles.append(current_frame_angle)\n", " del results # Explicitly clear results from GPU/memory\n", "\n", " # Now, after processing all frames, perform normalization\n", " if not angles: # If no angles were calculated (e.g., empty video or no detections)\n", " return []\n", "\n", " angles_np = np.array(angles, dtype=np.float32)\n", " min_angle, max_angle = np.min(angles_np), np.max(angles_np)\n", " if max_angle > 0:\n", " angles_np = (angles_np - min_angle) / (max_angle - min_angle) # Normalize to [0, 1]\n", "\n", " return angles_np.tolist() # Return as list or keep as np array based on preference.\n", "\n", "\n", "def collate_fn(batch):\n", " \"\"\"Pad all sequences of angles to a target length.\"\"\"\n", " angles_list, labels, lengths = zip(*batch)\n", "\n", " padded_angles = []\n", " for angle_tensor, current_length in zip(angles_list, lengths):\n", " angle_tensor = angle_tensor.flatten()\n", " if current_length < MAX_FRAMES:\n", " # Pad with zeros at the end\n", " padding = torch.zeros(MAX_FRAMES - current_length, dtype=torch.float32)\n", " angles = torch.cat([angle_tensor.flatten(), padding], dim=0)\n", " elif current_length > MAX_FRAMES:\n", " # Truncate if longer\n", " angles = angle_tensor[:MAX_FRAMES]\n", " else:\n", " angles = angle_tensor\n", " padded_angles.append(angles)\n", "\n", " angles_batch = torch.stack(padded_angles, dim=0)\n", " labels_batch = torch.tensor(labels)\n", " lengths_batch = torch.tensor(lengths)\n", "\n", " return angles_batch, labels_batch, lengths_batch\n", "\n", "\n", "def get_dataloaders(video_dir, batch_size=4, val_split=0.2, transform=None, feature_dir=None, signal_transform=None):\n", " \"\"\"Create train and validation dataloaders.\"\"\"\n", "\n", " full_dataset = VideoDataset(video_dir, transform=transform, feature_dir=feature_dir, signal_transform=signal_transform)\n", "\n", " val_size = int(len(full_dataset) * val_split)\n", " train_size = len(full_dataset) - val_size\n", "\n", " train_dataset, val_dataset = random_split(\n", " full_dataset,\n", " [train_size, val_size],\n", " generator=torch.Generator().manual_seed(RAND_SEED)\n", " )\n", "\n", " train_loader = DataLoader(\n", " train_dataset,\n", " batch_size=batch_size,\n", " shuffle=True,\n", " num_workers=0, # Changed from 2 to 0 to avoid multiprocessing issues with YOLO model\n", " collate_fn=collate_fn\n", " )\n", "\n", " val_loader = DataLoader(\n", " val_dataset,\n", " batch_size=batch_size,\n", " shuffle=False,\n", " num_workers=0, # Changed from 2 to 0\n", " collate_fn=collate_fn\n", " )\n", "\n", " print(f\"Train: {len(train_dataset)} videos, Val: {len(val_dataset)} videos\\n\")\n", "\n", " return train_loader, val_loader\n", "\n", "\n", "def get_balanced_dataloaders(video_dir, batch_size=4, val_split=0.2, transform=None, feature_dir=None, signal_transform=None):\n", " \"\"\"Create balanced train and validation dataloaders using WeightedRandomSampler.\"\"\"\n", "\n", " # 1. Initialize the full dataset\n", " full_dataset = VideoDataset(video_dir, transform=transform, feature_dir=feature_dir, signal_transform=signal_transform)\n", "\n", " # 2. Manual Index Split (to keep track of labels for the sampler)\n", " dataset_size = len(full_dataset)\n", " indices = list(range(dataset_size))\n", " split = int(np.floor(val_split * dataset_size))\n", "\n", " # Shuffle indices to ensure random distribution before splitting\n", " np.random.seed(RAND_SEED)\n", " np.random.shuffle(indices)\n", "\n", " train_indices, val_indices = indices[split:], indices[:split]\n", "\n", " # 3. Calculate Weights for the Training Set ONLY\n", " # We pull the labels corresponding to our training indices\n", " train_labels = [full_dataset.labels[i] for i in train_indices]\n", " train_labels = np.array(train_labels).astype(int)\n", "\n", " # Count occurrences of each push-up count (class)\n", " class_sample_count = np.bincount(train_labels)\n", " # Avoid division by zero for classes that might not exist in the subset\n", " class_sample_count[class_sample_count == 0] = 1\n", "\n", " weight = 1. / class_sample_count\n", "\n", " # Assign a weight to every sample in the training set\n", " samples_weight = torch.from_numpy(weight[train_labels]).double()\n", "\n", " # 4. Create the Sampler\n", " # replacement=True is required to oversample rare classes (like 1s, 6s, 7s)\n", " sampler = WeightedRandomSampler(samples_weight, len(samples_weight), replacement=True)\n", "\n", " # 5. Create Subsets and DataLoaders\n", " train_dataset = Subset(full_dataset, train_indices)\n", " val_dataset = Subset(full_dataset, val_indices)\n", "\n", " train_loader = DataLoader(\n", " train_dataset,\n", " batch_size=batch_size,\n", " sampler=sampler, # SHUFFLE must be False when using a Sampler\n", " num_workers=0,\n", " collate_fn=collate_fn\n", " )\n", "\n", " val_loader = DataLoader(\n", " val_dataset,\n", " batch_size=batch_size,\n", " shuffle=False,\n", " num_workers=0,\n", " collate_fn=collate_fn\n", " )\n", "\n", " print(f\"Dataset Balanced: Oversampling rare labels to match common labels.\")\n", " print(f\"Train: {len(train_dataset)} videos, Val: {len(val_dataset)} videos\\n\")\n", "\n", " return train_loader, val_loader\n", "\n", "\n", "# Run pre-computation once. This will take time but saves hours during training.\n", "def precompute_features(video_dir, output_dir, transform=None):\n", " os.makedirs(output_dir, exist_ok=True)\n", " # Create a temporary dataset without transforms for extraction\n", " ds = VideoDataset(video_dir, transform=transform)\n", " for i in range(len(ds)):\n", " filename = ds.video_files[i]\n", " save_path = os.path.join(output_dir, filename + \".pt\")\n", " if os.path.exists(save_path):\n", " continue\n", " print(f\"Extracting features for {filename} ({i+1}/{len(ds)})...\")\n", " angles, label, length = ds[i]\n", " torch.save({'angles': angles, 'length': length, 'label': label}, save_path)\n", " if DEBUG:\n", " plot_angles_with_moving_median(angles, title=f\"Expected Pushups: {label}\")\n", "\n", "precompute_features(DOWNLOAD_DIR, CACHE_DIR, RESIZER)\n", "\n", "\n", "train_loader, val_loader = get_dataloaders( # get_balanced_dataloaders\n", " DOWNLOAD_DIR,\n", " batch_size=4,\n", " val_split=0.2,\n", " transform=RESIZER,\n", " feature_dir=CACHE_DIR,\n", " signal_transform=None\n", ")\n", "\n", "if DEBUG:\n", " for angles, labels, lengths in train_loader:\n", " print(f\"Angles shape: {angles.shape}\") # (B, 1000)\n", " print(f\"Lengths: {lengths}\")\n", " print(f\"Labels: {labels}\")\n", " for a, l in zip(angles, labels):\n", " plot_angles_with_moving_median(a, title=f\"Expected Pushups: {l}\")" ] }, { "cell_type": "markdown", "id": "37b44192", "metadata": { "id": "37b44192" }, "source": [ "## Model" ] }, { "cell_type": "code", "execution_count": 12, "id": "e35ebb62", "metadata": { "id": "e35ebb62" }, "outputs": [], "source": [ "import torch\n", "import torch.nn as nn\n", "from torch.nn.utils.rnn import pack_padded_sequence, pad_packed_sequence\n", "import torch.nn.init as init\n", "\n", "class PushupCounterSingleOutput(nn.Module):\n", " def __init__(self, input_size=1, hidden_size=64):\n", " super().__init__()\n", " self.bn = nn.BatchNorm1d(input_size)\n", " self.lstm = nn.LSTM(\n", " input_size,\n", " hidden_size,\n", " bidirectional=True,\n", " batch_first=True\n", " )\n", "\n", " # Regression head to map the 'essence' of the video to a count\n", " self.regressor = nn.Sequential(\n", " nn.Linear(hidden_size * 2, 64),\n", " nn.ReLU(),\n", " nn.Linear(64, 1) # Output: Single scalar\n", " )\n", "\n", " # Apply custom initialization\n", " self.apply(self._init_weights)\n", "\n", " def _init_weights(self, module):\n", " if isinstance(module, nn.Linear):\n", " # He initialization for Linear layers\n", " init.kaiming_normal_(module.weight, mode='fan_out', nonlinearity='relu')\n", " if module.bias is not None:\n", " init.constant_(module.bias, 0)\n", "\n", " elif isinstance(module, nn.LSTM):\n", " # Orthogonal initialization for recurrent weights\n", " for name, param in module.named_parameters():\n", " if 'weight_ih' in name:\n", " init.xavier_uniform_(param.data)\n", " elif 'weight_hh' in name:\n", " init.orthogonal_(param.data)\n", " elif 'bias' in name:\n", " init.constant_(param.data, 0)\n", " # Forget gate bias initialization (standard trick for LSTMs)\n", " n = param.size(0)\n", " param.data[n//4:n//2].fill_(1.0)\n", "\n", " elif isinstance(module, nn.BatchNorm1d):\n", " # Standard BN initialization\n", " init.constant_(module.weight, 1)\n", " init.constant_(module.bias, 0)\n", "\n", " def forward(self, data, lengths):\n", " # If input is (Batch, SeqLen), turn it into (Batch, SeqLen, 1)\n", " if data.dim() == 2:\n", " data = data.unsqueeze(-1)\n", "\n", " # 1. Normalize (ignoring camera angle effects)\n", " data = data.transpose(1, 2)\n", " data = self.bn(data)\n", " data = data.transpose(1, 2)\n", "\n", " # 2. Pack the padded sequence\n", " packed_x = pack_padded_sequence(data, lengths.cpu(), batch_first=True, enforce_sorted=False)\n", " packed_out, (hn, cn) = self.lstm(packed_x)\n", "\n", " # 3. Use the Final Hidden State\n", " # In a Bi-LSTM, the final context is the concatenation of:\n", " # - The last hidden state of the forward pass\n", " # - The first hidden state of the backward pass\n", " # This represents the 'summary' of the entire erratic video.\n", "\n", " # hn shape: (num_layers * num_directions, batch, hidden_size)\n", " # Extract the last layer's forward and backward hidden states\n", " h_forward = hn[-2, :, :]\n", " h_backward = hn[-1, :, :]\n", " combined = torch.cat((h_forward, h_backward), dim=1) # (Batch, hidden_size * 2)\n", "\n", " # 4. Predict the final count\n", " count = self.regressor(combined)\n", " return count\n" ] }, { "cell_type": "code", "execution_count": 13, "id": "255983ec", "metadata": { "id": "255983ec" }, "outputs": [], "source": [ "from torch.nn.utils.rnn import pack_padded_sequence, pad_packed_sequence\n", "\n", "class PushupCounterMaxPool(nn.Module):\n", " def __init__(self, input_size=1, hidden_size=64):\n", " super().__init__()\n", " self.bn = nn.BatchNorm1d(input_size)\n", " self.lstm = nn.LSTM(\n", " input_size,\n", " hidden_size,\n", " bidirectional=True,\n", " batch_first=True)\n", "\n", " self.regressor = nn.Sequential(\n", " nn.Linear(hidden_size * 2, 64),\n", " nn.ReLU(),\n", " nn.Linear(64, 1)\n", " )\n", " # Apply custom weight initialization\n", " self.apply(self._init_weights)\n", "\n", " def _init_weights(self, module):\n", " \"\"\"\n", " Professional initialization strategy:\n", " - Linear: Kaiming (He) Normal for ReLU activation.\n", " - LSTM: Orthogonal for recurrent weights to prevent gradient issues.\n", " - BatchNorm: Constant 1 for weights, 0 for biases.\n", " \"\"\"\n", " if isinstance(module, nn.Linear):\n", " init.kaiming_normal_(module.weight, mode='fan_out', nonlinearity='relu')\n", " if module.bias is not None:\n", " init.constant_(module.bias, 0)\n", "\n", " elif isinstance(module, nn.LSTM):\n", " for name, param in module.named_parameters():\n", " if 'weight_ih' in name:\n", " init.xavier_uniform_(param.data)\n", " elif 'weight_hh' in name:\n", " # Orthogonal init is critical for stable LSTM training\n", " init.orthogonal_(param.data)\n", " elif 'bias' in name:\n", " init.constant_(param.data, 0)\n", " # Set forget gate bias to 1.0 (standard LSTM trick)\n", " n = param.size(0)\n", " param.data[n//4:n//2].fill_(1.0)\n", "\n", " elif isinstance(module, nn.BatchNorm1d):\n", " init.constant_(module.weight, 1)\n", " init.constant_(module.bias, 0)\n", "\n", " def forward(self, data, lengths):\n", " # If input is (Batch, SeqLen), turn it into (Batch, SeqLen, 1)\n", " if data.dim() == 2:\n", " data = data.unsqueeze(-1)\n", "\n", " # 1. Normalize\n", " data = data.transpose(1, 2)\n", " data = self.bn(data)\n", " data = data.transpose(1, 2)\n", "\n", " # 2. LSTM Pass\n", " packed_x = pack_padded_sequence(data, lengths.cpu(), batch_first=True, enforce_sorted=False)\n", " packed_out, _ = self.lstm(packed_x)\n", "\n", " # Unpack back to (Batch, SeqLen, Hidden*2)\n", " out, _ = pad_packed_sequence(packed_out, batch_first=True)\n", "\n", " # --- GLOBAL MAX POOLING ---\n", " # We must mask the padded areas before max pooling so the model\n", " # doesn't pick up '0' as a maximum if the real features are negative.\n", " mask = torch.arange(out.size(1)).expand(len(lengths), out.size(1)).to(out.device) >= lengths.unsqueeze(1).to(out.device)\n", " # Fill padded areas with a very small number\n", " out.masked_fill_(mask.unsqueeze(-1), -1e9)\n", "\n", " # Max pool over the time dimension (dim 1)\n", " # Result: (Batch, Hidden*2)\n", " pooled, _ = torch.max(out, dim=1)\n", "\n", " # 3. Predict single count\n", " return self.regressor(pooled)\n" ] }, { "cell_type": "code", "execution_count": 14, "id": "a1893719", "metadata": { "id": "a1893719" }, "outputs": [], "source": [ "import torch\n", "import torch.nn as nn\n", "import torch.nn.init as init\n", "import math\n", "\n", "class PositionalEncoding(nn.Module):\n", " \"\"\"Injects information about the relative or absolute position of the tokens in the sequence.\"\"\"\n", " def __init__(self, d_model, max_len=5000):\n", " super().__init__()\n", " pe = torch.zeros(max_len, d_model)\n", " position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)\n", " div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model))\n", " pe[:, 0::2] = torch.sin(position * div_term)\n", " pe[:, 1::2] = torch.cos(position * div_term)\n", " self.register_buffer('pe', pe.unsqueeze(0))\n", "\n", " def forward(self, x):\n", " # x shape: (batch_size, seq_len, d_model)\n", " return x + self.pe[:, :x.size(1), :]\n", "\n", "class PushupCounterSingleOutputWithTransformer(nn.Module):\n", " def __init__(self, input_size=1, d_model=64, nhead=4, num_layers=2, dim_feedforward=128, dropout=0.1):\n", " super().__init__()\n", "\n", " # 1. Normalization (applied to the raw input feature)\n", " self.bn = nn.BatchNorm1d(input_size)\n", "\n", " # 2. Linear Projection: Transformers work better in a higher-dimensional space (d_model)\n", " self.embedding = nn.Linear(input_size, d_model)\n", "\n", " # 3. Positional Encoding: Essential since Transformers don't have recurrence\n", " self.pos_encoder = PositionalEncoding(d_model)\n", "\n", " # 4. Transformer Encoder\n", " encoder_layer = nn.TransformerEncoderLayer(\n", " d_model=d_model,\n", " nhead=nhead,\n", " dim_feedforward=dim_feedforward,\n", " dropout=dropout,\n", " batch_first=True # Keeps shape as (Batch, Seq, Feature)\n", " )\n", " self.transformer_encoder = nn.TransformerEncoder(encoder_layer, num_layers=num_layers)\n", "\n", " # 5. Regression head\n", " # The input to the first linear layer is d_model (the size of the pooled sequence)\n", " self.regressor = nn.Sequential(\n", " nn.Linear(d_model, 64),\n", " nn.ReLU(),\n", " nn.Linear(64, 1)\n", " )\n", "\n", " # Apply custom initialization\n", " self.apply(self._init_weights)\n", "\n", " def _init_weights(self, module):\n", " if isinstance(module, nn.Linear):\n", " init.kaiming_normal_(module.weight, mode='fan_out', nonlinearity='relu')\n", " if module.bias is not None:\n", " init.constant_(module.bias, 0)\n", " elif isinstance(module, nn.BatchNorm1d):\n", " init.constant_(module.weight, 1)\n", " init.constant_(module.bias, 0)\n", "\n", " def forward(self, data, lengths):\n", " # Ensure data is (Batch, SeqLen, input_size)\n", " if data.dim() == 2:\n", " data = data.unsqueeze(-1)\n", "\n", " # 1. Normalize\n", " data = data.transpose(1, 2)\n", " data = self.bn(data)\n", " data = data.transpose(1, 2)\n", "\n", " # 2. Project to d_model and add Positional Encoding\n", " x = self.embedding(data)\n", " x = self.pos_encoder(x)\n", "\n", " # 3. Create Padding Mask\n", " # Transformer needs to know which parts of the sequence are padding.\n", " # Mask shape: (Batch, SeqLen), True values are ignored by attention.\n", " batch_size, seq_len, _ = x.shape\n", " mask = torch.arange(seq_len, device=x.device).expand(batch_size, seq_len) >= lengths.unsqueeze(1)\n", "\n", " # 4. Transformer Forward Pass\n", " # encoded shape: (Batch, SeqLen, d_model)\n", " encoded = self.transformer_encoder(x, src_key_padding_mask=mask)\n", "\n", " # 5. Global Average Pooling (Handling variable lengths)\n", " # Instead of taking the last hidden state, we average all non-padded tokens.\n", " mask_expanded = mask.unsqueeze(-1).expand_as(encoded)\n", " encoded_masked = encoded.masked_fill(mask_expanded, 0.0)\n", "\n", " # Sum across the sequence and divide by actual lengths\n", " sum_encoded = torch.sum(encoded_masked, dim=1)\n", " mean_encoded = sum_encoded / lengths.unsqueeze(1).float()\n", "\n", " # 6. Predict the final count\n", " count = self.regressor(mean_encoded)\n", " return count\n" ] }, { "cell_type": "code", "execution_count": 15, "id": "c41798f4", "metadata": { "id": "c41798f4" }, "outputs": [], "source": [ "import torch\n", "import torch.nn as nn\n", "import torch.nn.init as init\n", "\n", "class PushupCounterSingleOutputLight(nn.Module):\n", " def __init__(self, input_size=1, hidden_size=32, stride=2):\n", " super().__init__()\n", "\n", " # 1. Convolutional Stem to implement 'Stride'\n", " # This reduces the sequence length by the stride factor and\n", " # projects the input_size to hidden_size.\n", " self.stride = stride\n", " self.conv_stem = nn.Conv1d(\n", " in_channels=input_size,\n", " out_channels=hidden_size,\n", " kernel_size=3,\n", " stride=stride,\n", " padding=1\n", " )\n", "\n", " self.bn = nn.BatchNorm1d(hidden_size)\n", "\n", " # 2. Lightweight LSTM - smaller hidden_size makes this much lighter\n", " self.lstm = nn.LSTM(\n", " hidden_size,\n", " hidden_size,\n", " bidirectional=True,\n", " batch_first=True\n", " )\n", "\n", " # 3. Slimmed Regression head\n", " self.regressor = nn.Sequential(\n", " nn.Linear(hidden_size, 32),\n", " nn.ReLU(),\n", " nn.Linear(32, 1)\n", " )\n", "\n", " self.apply(self._init_weights)\n", "\n", " def _init_weights(self, module):\n", " if isinstance(module, (nn.Linear, nn.Conv1d)):\n", " init.kaiming_normal_(module.weight, mode='fan_out', nonlinearity='relu')\n", " if module.bias is not None:\n", " init.constant_(module.bias, 0)\n", " elif isinstance(module, nn.LSTM):\n", " for name, param in module.named_parameters():\n", " if 'weight_ih' in name:\n", " init.xavier_uniform_(param.data)\n", " elif 'weight_hh' in name:\n", " init.orthogonal_(param.data)\n", " elif 'bias' in name:\n", " init.constant_(param.data, 0)\n", "\n", " def forward(self, data, lengths):\n", " # Ensure data is (Batch, SeqLen, input_size)\n", " if data.dim() == 2:\n", " data = data.unsqueeze(-1)\n", "\n", " # 1. Apply Stride via Conv1d\n", " # Conv1d expects (Batch, Channels, SeqLen)\n", " x = data.transpose(1, 2)\n", " x = self.conv_stem(x)\n", " x = self.bn(x)\n", " x = x.transpose(1, 2) # Back to (Batch, NewSeqLen, hidden_size)\n", "\n", " # 2. Adjust lengths for the stride\n", " # Since we used a Conv1d with stride, the sequence length is shorter\n", " new_lengths = torch.div(lengths, self.stride, rounding_mode='floor')\n", " # Ensure length is at least 1 to avoid packing errors\n", " new_lengths = torch.clamp(new_lengths, min=1)\n", "\n", " # 3. LSTM Processing\n", " packed_x = nn.utils.rnn.pack_padded_sequence(\n", " x, new_lengths.cpu(), batch_first=True, enforce_sorted=False\n", " )\n", " _, (hn, _) = self.lstm(packed_x)\n", "\n", " # hn shape: (num_layers * num_directions, batch, hidden_size)\n", " # Since it's unidirectional, we just take the last layer\n", " combined = hn[-1, :, :]\n", "\n", " # 4. Predict\n", " count = self.regressor(combined)\n", " return count\n" ] }, { "cell_type": "markdown", "id": "d482fc69", "metadata": { "id": "d482fc69" }, "source": [ "## Training and Testing" ] }, { "cell_type": "markdown", "id": "e7f08201", "metadata": { "id": "e7f08201" }, "source": [ "### Training" ] }, { "cell_type": "markdown", "id": "fe58ddc9", "metadata": { "id": "fe58ddc9" }, "source": [ "#### Run per Epoch" ] }, { "cell_type": "code", "execution_count": 16, "id": "8f3bc7db", "metadata": { "id": "8f3bc7db" }, "outputs": [], "source": [ "def run_epoch(model, loader, criterion, optimizer=None, device='cpu', debug=False):\n", " is_train = optimizer is not None\n", " model.train() if is_train else model.eval()\n", "\n", " total_diffs = 0\n", " total_loss = 0\n", " total_abs_error = 0\n", " total_samples = 0\n", "\n", " context = torch.enable_grad() if is_train else torch.no_grad()\n", "\n", " with context:\n", " for batch_x, batch_y, lengths in loader:\n", " # 1. Prepare Data\n", " batch_x = batch_x.to(device)\n", " batch_y = batch_y.to(device).float() # Labels must be float for MSE/Huber loss\n", "\n", " if is_train:\n", " optimizer.zero_grad()\n", "\n", " # 2. Forward Pass\n", " # outputs shape: (Batch, 1)\n", " outputs = model(batch_x, lengths)\n", " outputs = outputs.squeeze(-1) # Match batch_y shape: (Batch,)\n", "\n", " # 3. Loss Calculation\n", " loss = criterion(outputs, batch_y)\n", "\n", " if is_train:\n", " loss.backward()\n", " optimizer.step()\n", "\n", " total_loss += loss.item()\n", "\n", " # 4. Metrics: Round the predicted float to the nearest whole pushup\n", " preds = torch.round(outputs)\n", "\n", " # Calculate Absolute Error (e.g., predicted 5.2, actual 5 -> error 0.2)\n", " # We use absolute error to track how many pushups we are off by\n", " total_diffs += (preds != batch_y).sum().item()\n", " total_abs_error += torch.abs(preds - batch_y).sum().item()\n", " total_samples += batch_y.size(0)\n", "\n", " # Debug Printing\n", " if debug:\n", " print(f\"Expected Counts: {batch_y.cpu().numpy()}\")\n", " print(f\"outputs : {outputs}\")\n", " print(f\"Predicted Counts: {preds.detach().cpu().numpy()}\")\n", "\n", " avg_loss = total_loss / len(loader)\n", " # This represents 'Mean Absolute Error' - Average pushups missed per video\n", " mae = total_abs_error / total_samples\n", " acc = (total_samples - total_diffs) / total_samples\n", "\n", " return avg_loss, mae, acc" ] }, { "cell_type": "markdown", "id": "0f55b94e", "metadata": { "id": "0f55b94e" }, "source": [ "#### Actual Training" ] }, { "cell_type": "code", "execution_count": 17, "id": "01258d83", "metadata": { "id": "01258d83" }, "outputs": [], "source": [ "import torch\n", "import torch.optim as optim\n", "\n", "def train_model(model, epochs=MAX_EPOCHS, patience=10):\n", " outputs = {\n", " \"train_loss\": [],\n", " \"train_mae\": [],\n", " \"train_acc\": [],\n", " \"val_loss\": [],\n", " \"val_mae\": [],\n", " \"val_acc\": [],\n", " \"model\": None\n", " }\n", " # Hyperparameters\n", " base_lr = 1e-3\n", " warmup_epochs = 5\n", " # Stuff for Training\n", " criterion = nn.HuberLoss()\n", " # Use pos_weight if 'rep completion' is rare (e.g., 1 frame in 100)\n", " optimizer = optim.Adam(model.parameters(), lr=base_lr)\n", "\n", " # Warmup Scheduler: Linearly increases LR from 0 to base_lr\n", " # The lambda function returns a multiplier for the base_lr\n", " lr_lambda = lambda epoch: (epoch + 1) / warmup_epochs if epoch < warmup_epochs else 1\n", " warmup_scheduler = optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lr_lambda)\n", "\n", " # Main Scheduler: Reduces LR when validation loss stalls\n", " # mode='min': we want to minimize validation loss\n", " # factor=0.5: cut LR in half when stalled\n", " # patience=5: wait 5 epochs of no improvement before cutting\n", " plateau_scheduler = optim.lr_scheduler.ReduceLROnPlateau(\n", " optimizer,\n", " mode='min',\n", " factor=0.5,\n", " patience=5\n", " )\n", "\n", " # Tracking variables before the loop\n", " best_val_loss = float('inf')\n", " model_name = type(model).__name__\n", " save_path = os.path.join(WEIGHTS_DIR, f\"best_model_weights_{model_name}.pth\")\n", "\n", " for epoch in range(epochs):\n", " # Train and Validate\n", " train_loss, train_mae, train_acc = run_epoch(model, train_loader, criterion, optimizer, DEVICE)\n", " val_loss, val_mae, val_acc = run_epoch(model, val_loader, criterion, None, DEVICE)\n", "\n", " # --- Scheduler Step Logic ---\n", " if epoch < warmup_epochs:\n", " # During warmup, we step the warmup scheduler every epoch\n", " warmup_scheduler.step()\n", " current_lr = optimizer.param_groups[0]['lr']\n", " print(f\"Epoch {epoch+1}: Warmup Phase - LR: {current_lr:.6f}\")\n", " else:\n", " # After warmup, we switch to the plateau scheduler\n", " plateau_scheduler.step(val_loss)\n", " current_lr = optimizer.param_groups[0]['lr']\n", " print(f\"Epoch {epoch+1}: Plateau Phase - LR: {current_lr:.6f}\")\n", "\n", " print(f\"Epoch [{epoch+1:>3d}/{epochs}] | \"\n", " f\"Train Loss: {train_loss:.4f} | Train MAE: {train_mae:.4f} | Train Acc: {train_acc:.4f} |\"\n", " f\"Val Loss: {val_loss:.4f} | Val MAE: {val_mae:.4f} | Val Acc: {val_acc:.4f}\")\n", " outputs[\"train_loss\"].append(train_loss)\n", " outputs[\"train_mae\"].append(train_mae)\n", " outputs[\"train_acc\"].append(train_acc)\n", " outputs[\"val_loss\"].append(val_loss)\n", " outputs[\"val_mae\"].append(val_mae)\n", " outputs[\"val_acc\"].append(val_acc)\n", "\n", " # 2. Check if this is the best model we've seen so far\n", " if val_loss < best_val_loss:\n", " best_val_loss = val_loss\n", "\n", " # 3. Save the state_dict (the weights)\n", " torch.save({\n", " 'epoch': epoch,\n", " 'model_state_dict': model.state_dict(),\n", " 'optimizer_state_dict': optimizer.state_dict(),\n", " 'loss': val_loss,\n", " }, save_path)\n", "\n", " print(f\"--> Best model saved with Val Loss: {val_loss:.4f}\")\n", "\n", " outputs[\"model\"] = model\n", " return outputs" ] }, { "cell_type": "markdown", "id": "bf52fb55", "metadata": { "id": "bf52fb55" }, "source": [ "#### Let's Do It!" ] }, { "cell_type": "code", "execution_count": 18, "id": "f21b0cf1", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "f21b0cf1", "outputId": "2ebafe12-c533-4e4e-f55c-cb42e7363f77" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Epoch 1: Warmup Phase - LR: 0.000400\n", "Epoch [ 1/120] | Train Loss: 1.4334 | Train MAE: 1.9355 | Train Acc: 0.1774 |Val Loss: 1.0967 | Val MAE: 1.6000 | Val Acc: 0.0667\n", "--> Best model saved with Val Loss: 1.0967\n", "Epoch 2: Warmup Phase - LR: 0.000600\n", "Epoch [ 2/120] | Train Loss: 1.0902 | Train MAE: 1.5161 | Train Acc: 0.0806 |Val Loss: 1.1907 | Val MAE: 1.8667 | Val Acc: 0.0000\n", "Epoch 3: Warmup Phase - LR: 0.000800\n", "Epoch [ 3/120] | Train Loss: 0.7728 | Train MAE: 1.0806 | Train Acc: 0.3387 |Val Loss: 0.8256 | Val MAE: 1.2667 | Val Acc: 0.2667\n", "--> Best model saved with Val Loss: 0.8256\n", "Epoch 4: Warmup Phase - LR: 0.001000\n", "Epoch [ 4/120] | Train Loss: 0.8040 | Train MAE: 1.2097 | Train Acc: 0.2097 |Val Loss: 2.0236 | Val MAE: 2.6000 | Val Acc: 0.0667\n", "Epoch 5: Warmup Phase - LR: 0.001000\n", "Epoch [ 5/120] | Train Loss: 1.0803 | Train MAE: 1.4839 | Train Acc: 0.2258 |Val Loss: 0.5075 | Val MAE: 0.7333 | Val Acc: 0.4000\n", "--> Best model saved with Val Loss: 0.5075\n", "Epoch 6: Plateau Phase - LR: 0.001000\n", "Epoch [ 6/120] | Train Loss: 0.5821 | Train MAE: 0.9516 | Train Acc: 0.3710 |Val Loss: 0.6215 | Val MAE: 0.8000 | Val Acc: 0.4667\n", "Epoch 7: Plateau Phase - LR: 0.001000\n", "Epoch [ 7/120] | Train Loss: 0.5272 | Train MAE: 0.7903 | Train Acc: 0.4516 |Val Loss: 0.6305 | Val MAE: 1.0667 | Val Acc: 0.2667\n", "Epoch 8: Plateau Phase - LR: 0.001000\n", "Epoch [ 8/120] | Train Loss: 0.4291 | Train MAE: 0.7097 | Train Acc: 0.4677 |Val Loss: 0.5088 | Val MAE: 0.8667 | Val Acc: 0.2667\n", "Epoch 9: Plateau Phase - LR: 0.001000\n", "Epoch [ 9/120] | Train Loss: 0.2364 | Train MAE: 0.4677 | Train Acc: 0.5806 |Val Loss: 0.5926 | Val MAE: 0.9333 | Val Acc: 0.2667\n", "Epoch 10: Plateau Phase - LR: 0.001000\n", "Epoch [ 10/120] | Train Loss: 0.2195 | Train MAE: 0.4839 | Train Acc: 0.5484 |Val Loss: 0.4461 | Val MAE: 0.6667 | Val Acc: 0.4000\n", "--> Best model saved with Val Loss: 0.4461\n", "Epoch 11: Plateau Phase - LR: 0.001000\n", "Epoch [ 11/120] | Train Loss: 0.2328 | Train MAE: 0.4677 | Train Acc: 0.6129 |Val Loss: 0.5061 | Val MAE: 0.9333 | Val Acc: 0.3333\n", "Epoch 12: Plateau Phase - LR: 0.001000\n", "Epoch [ 12/120] | Train Loss: 0.3485 | Train MAE: 0.6452 | Train Acc: 0.5000 |Val Loss: 0.5057 | Val MAE: 0.8667 | Val Acc: 0.4000\n", "Epoch 13: Plateau Phase - LR: 0.001000\n", "Epoch [ 13/120] | Train Loss: 0.2548 | Train MAE: 0.5161 | Train Acc: 0.5323 |Val Loss: 0.5073 | Val MAE: 0.8667 | Val Acc: 0.4000\n", "Epoch 14: Plateau Phase - LR: 0.001000\n", "Epoch [ 14/120] | Train Loss: 0.2665 | Train MAE: 0.5323 | Train Acc: 0.5161 |Val Loss: 0.7518 | Val MAE: 1.2000 | Val Acc: 0.0667\n", "Epoch 15: Plateau Phase - LR: 0.001000\n", "Epoch [ 15/120] | Train Loss: 0.3119 | Train MAE: 0.6452 | Train Acc: 0.4677 |Val Loss: 0.5888 | Val MAE: 0.9333 | Val Acc: 0.3333\n", "Epoch 16: Plateau Phase - LR: 0.000500\n", "Epoch [ 16/120] | Train Loss: 0.2272 | Train MAE: 0.5161 | Train Acc: 0.5161 |Val Loss: 0.4836 | Val MAE: 0.9333 | Val Acc: 0.2000\n", "Epoch 17: Plateau Phase - LR: 0.000500\n", "Epoch [ 17/120] | Train Loss: 0.2490 | Train MAE: 0.5000 | Train Acc: 0.5968 |Val Loss: 0.4691 | Val MAE: 0.6667 | Val Acc: 0.4000\n", "Epoch 18: Plateau Phase - LR: 0.000500\n", "Epoch [ 18/120] | Train Loss: 0.1378 | Train MAE: 0.3226 | Train Acc: 0.6935 |Val Loss: 0.5086 | Val MAE: 0.8667 | Val Acc: 0.4000\n", "Epoch 19: Plateau Phase - LR: 0.000500\n", "Epoch [ 19/120] | Train Loss: 0.1013 | Train MAE: 0.2581 | Train Acc: 0.7419 |Val Loss: 0.4777 | Val MAE: 0.8667 | Val Acc: 0.2667\n", "Epoch 20: Plateau Phase - LR: 0.000500\n", "Epoch [ 20/120] | Train Loss: 0.1062 | Train MAE: 0.2742 | Train Acc: 0.7419 |Val Loss: 0.4689 | Val MAE: 0.7333 | Val Acc: 0.4000\n", "Epoch 21: Plateau Phase - LR: 0.000500\n", "Epoch [ 21/120] | Train Loss: 0.0858 | Train MAE: 0.1774 | Train Acc: 0.8226 |Val Loss: 0.4385 | Val MAE: 0.6667 | Val Acc: 0.4000\n", "--> Best model saved with Val Loss: 0.4385\n", "Epoch 22: Plateau Phase - LR: 0.000500\n", "Epoch [ 22/120] | Train Loss: 0.0653 | Train MAE: 0.1290 | Train Acc: 0.8710 |Val Loss: 0.4267 | Val MAE: 0.6667 | Val Acc: 0.4000\n", "--> Best model saved with Val Loss: 0.4267\n", "Epoch 23: Plateau Phase - LR: 0.000500\n", "Epoch [ 23/120] | Train Loss: 0.0657 | Train MAE: 0.1613 | Train Acc: 0.8387 |Val Loss: 0.3642 | Val MAE: 0.5333 | Val Acc: 0.5333\n", "--> Best model saved with Val Loss: 0.3642\n", "Epoch 24: Plateau Phase - LR: 0.000500\n", "Epoch [ 24/120] | Train Loss: 0.0555 | Train MAE: 0.0806 | Train Acc: 0.9194 |Val Loss: 0.4534 | Val MAE: 0.8667 | Val Acc: 0.2667\n", "Epoch 25: Plateau Phase - LR: 0.000500\n", "Epoch [ 25/120] | Train Loss: 0.0568 | Train MAE: 0.1452 | Train Acc: 0.8548 |Val Loss: 0.4453 | Val MAE: 0.7333 | Val Acc: 0.4000\n", "Epoch 26: Plateau Phase - LR: 0.000500\n", "Epoch [ 26/120] | Train Loss: 0.0349 | Train MAE: 0.0645 | Train Acc: 0.9355 |Val Loss: 0.3769 | Val MAE: 0.5333 | Val Acc: 0.5333\n", "Epoch 27: Plateau Phase - LR: 0.000500\n", "Epoch [ 27/120] | Train Loss: 0.0253 | Train MAE: 0.0645 | Train Acc: 0.9355 |Val Loss: 0.3729 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 28: Plateau Phase - LR: 0.000500\n", "Epoch [ 28/120] | Train Loss: 0.0472 | Train MAE: 0.0968 | Train Acc: 0.9032 |Val Loss: 0.4077 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 29: Plateau Phase - LR: 0.000250\n", "Epoch [ 29/120] | Train Loss: 0.0357 | Train MAE: 0.0645 | Train Acc: 0.9355 |Val Loss: 0.3962 | Val MAE: 0.7333 | Val Acc: 0.3333\n", "Epoch 30: Plateau Phase - LR: 0.000250\n", "Epoch [ 30/120] | Train Loss: 0.0272 | Train MAE: 0.0806 | Train Acc: 0.9194 |Val Loss: 0.3985 | Val MAE: 0.5333 | Val Acc: 0.5333\n", "Epoch 31: Plateau Phase - LR: 0.000250\n", "Epoch [ 31/120] | Train Loss: 0.0266 | Train MAE: 0.0323 | Train Acc: 0.9677 |Val Loss: 0.3777 | Val MAE: 0.5333 | Val Acc: 0.5333\n", "Epoch 32: Plateau Phase - LR: 0.000250\n", "Epoch [ 32/120] | Train Loss: 0.0180 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.4065 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 33: Plateau Phase - LR: 0.000250\n", "Epoch [ 33/120] | Train Loss: 0.0291 | Train MAE: 0.0484 | Train Acc: 0.9516 |Val Loss: 0.4106 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 34: Plateau Phase - LR: 0.000250\n", "Epoch [ 34/120] | Train Loss: 0.0204 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3794 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 35: Plateau Phase - LR: 0.000125\n", "Epoch [ 35/120] | Train Loss: 0.0188 | Train MAE: 0.0323 | Train Acc: 0.9677 |Val Loss: 0.3765 | Val MAE: 0.5333 | Val Acc: 0.5333\n", "Epoch 36: Plateau Phase - LR: 0.000125\n", "Epoch [ 36/120] | Train Loss: 0.0207 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3725 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 37: Plateau Phase - LR: 0.000125\n", "Epoch [ 37/120] | Train Loss: 0.0121 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3796 | Val MAE: 0.5333 | Val Acc: 0.5333\n", "Epoch 38: Plateau Phase - LR: 0.000125\n", "Epoch [ 38/120] | Train Loss: 0.0160 | Train MAE: 0.0323 | Train Acc: 0.9677 |Val Loss: 0.3882 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 39: Plateau Phase - LR: 0.000125\n", "Epoch [ 39/120] | Train Loss: 0.0137 | Train MAE: 0.0323 | Train Acc: 0.9677 |Val Loss: 0.3744 | Val MAE: 0.5333 | Val Acc: 0.5333\n", "Epoch 40: Plateau Phase - LR: 0.000125\n", "Epoch [ 40/120] | Train Loss: 0.0118 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3897 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 41: Plateau Phase - LR: 0.000063\n", "Epoch [ 41/120] | Train Loss: 0.0111 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3910 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 42: Plateau Phase - LR: 0.000063\n", "Epoch [ 42/120] | Train Loss: 0.0127 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3865 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 43: Plateau Phase - LR: 0.000063\n", "Epoch [ 43/120] | Train Loss: 0.0121 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3820 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 44: Plateau Phase - LR: 0.000063\n", "Epoch [ 44/120] | Train Loss: 0.0099 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3845 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 45: Plateau Phase - LR: 0.000063\n", "Epoch [ 45/120] | Train Loss: 0.0116 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3817 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 46: Plateau Phase - LR: 0.000063\n", "Epoch [ 46/120] | Train Loss: 0.0206 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3688 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 47: Plateau Phase - LR: 0.000031\n", "Epoch [ 47/120] | Train Loss: 0.0107 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3655 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 48: Plateau Phase - LR: 0.000031\n", "Epoch [ 48/120] | Train Loss: 0.0139 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3673 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 49: Plateau Phase - LR: 0.000031\n", "Epoch [ 49/120] | Train Loss: 0.0097 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3693 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 50: Plateau Phase - LR: 0.000031\n", "Epoch [ 50/120] | Train Loss: 0.0088 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3702 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 51: Plateau Phase - LR: 0.000031\n", "Epoch [ 51/120] | Train Loss: 0.0110 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3714 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 52: Plateau Phase - LR: 0.000031\n", "Epoch [ 52/120] | Train Loss: 0.0107 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3716 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 53: Plateau Phase - LR: 0.000016\n", "Epoch [ 53/120] | Train Loss: 0.0084 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3698 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 54: Plateau Phase - LR: 0.000016\n", "Epoch [ 54/120] | Train Loss: 0.0109 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3693 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 55: Plateau Phase - LR: 0.000016\n", "Epoch [ 55/120] | Train Loss: 0.0080 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3716 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 56: Plateau Phase - LR: 0.000016\n", "Epoch [ 56/120] | Train Loss: 0.0151 | Train MAE: 0.0323 | Train Acc: 0.9677 |Val Loss: 0.3729 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 57: Plateau Phase - LR: 0.000016\n", "Epoch [ 57/120] | Train Loss: 0.0091 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3736 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 58: Plateau Phase - LR: 0.000016\n", "Epoch [ 58/120] | Train Loss: 0.0107 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3743 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 59: Plateau Phase - LR: 0.000008\n", "Epoch [ 59/120] | Train Loss: 0.0111 | Train MAE: 0.0323 | Train Acc: 0.9677 |Val Loss: 0.3737 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 60: Plateau Phase - LR: 0.000008\n", "Epoch [ 60/120] | Train Loss: 0.0100 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3726 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 61: Plateau Phase - LR: 0.000008\n", "Epoch [ 61/120] | Train Loss: 0.0109 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3718 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 62: Plateau Phase - LR: 0.000008\n", "Epoch [ 62/120] | Train Loss: 0.0103 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3714 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 63: Plateau Phase - LR: 0.000008\n", "Epoch [ 63/120] | Train Loss: 0.0086 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3735 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 64: Plateau Phase - LR: 0.000008\n", "Epoch [ 64/120] | Train Loss: 0.0081 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3717 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 65: Plateau Phase - LR: 0.000004\n", "Epoch [ 65/120] | Train Loss: 0.0156 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3719 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 66: Plateau Phase - LR: 0.000004\n", "Epoch [ 66/120] | Train Loss: 0.0097 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3729 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 67: Plateau Phase - LR: 0.000004\n", "Epoch [ 67/120] | Train Loss: 0.0099 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3715 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 68: Plateau Phase - LR: 0.000004\n", "Epoch [ 68/120] | Train Loss: 0.0086 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3720 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 69: Plateau Phase - LR: 0.000004\n", "Epoch [ 69/120] | Train Loss: 0.0160 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3714 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 70: Plateau Phase - LR: 0.000004\n", "Epoch [ 70/120] | Train Loss: 0.0104 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3710 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 71: Plateau Phase - LR: 0.000002\n", "Epoch [ 71/120] | Train Loss: 0.0084 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3704 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 72: Plateau Phase - LR: 0.000002\n", "Epoch [ 72/120] | Train Loss: 0.0099 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3696 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 73: Plateau Phase - LR: 0.000002\n", "Epoch [ 73/120] | Train Loss: 0.0092 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3706 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 74: Plateau Phase - LR: 0.000002\n", "Epoch [ 74/120] | Train Loss: 0.0079 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3697 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 75: Plateau Phase - LR: 0.000002\n", "Epoch [ 75/120] | Train Loss: 0.0079 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3707 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 76: Plateau Phase - LR: 0.000002\n", "Epoch [ 76/120] | Train Loss: 0.0099 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3701 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 77: Plateau Phase - LR: 0.000001\n", "Epoch [ 77/120] | Train Loss: 0.0100 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3707 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 78: Plateau Phase - LR: 0.000001\n", "Epoch [ 78/120] | Train Loss: 0.0077 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3708 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 79: Plateau Phase - LR: 0.000001\n", "Epoch [ 79/120] | Train Loss: 0.0107 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3694 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 80: Plateau Phase - LR: 0.000001\n", "Epoch [ 80/120] | Train Loss: 0.0080 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3699 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 81: Plateau Phase - LR: 0.000001\n", "Epoch [ 81/120] | Train Loss: 0.0102 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3707 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 82: Plateau Phase - LR: 0.000001\n", "Epoch [ 82/120] | Train Loss: 0.0084 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3711 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 83: Plateau Phase - LR: 0.000000\n", "Epoch [ 83/120] | Train Loss: 0.0083 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3702 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 84: Plateau Phase - LR: 0.000000\n", "Epoch [ 84/120] | Train Loss: 0.0081 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3710 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 85: Plateau Phase - LR: 0.000000\n", "Epoch [ 85/120] | Train Loss: 0.0086 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3706 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 86: Plateau Phase - LR: 0.000000\n", "Epoch [ 86/120] | Train Loss: 0.0094 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3700 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 87: Plateau Phase - LR: 0.000000\n", "Epoch [ 87/120] | Train Loss: 0.0105 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3684 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 88: Plateau Phase - LR: 0.000000\n", "Epoch [ 88/120] | Train Loss: 0.0067 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3707 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 89: Plateau Phase - LR: 0.000000\n", "Epoch [ 89/120] | Train Loss: 0.0069 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3707 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 90: Plateau Phase - LR: 0.000000\n", "Epoch [ 90/120] | Train Loss: 0.0141 | Train MAE: 0.0323 | Train Acc: 0.9677 |Val Loss: 0.3709 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 91: Plateau Phase - LR: 0.000000\n", "Epoch [ 91/120] | Train Loss: 0.0117 | Train MAE: 0.0323 | Train Acc: 0.9677 |Val Loss: 0.3711 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 92: Plateau Phase - LR: 0.000000\n", "Epoch [ 92/120] | Train Loss: 0.0184 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3702 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 93: Plateau Phase - LR: 0.000000\n", "Epoch [ 93/120] | Train Loss: 0.0098 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3700 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 94: Plateau Phase - LR: 0.000000\n", "Epoch [ 94/120] | Train Loss: 0.0080 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3711 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 95: Plateau Phase - LR: 0.000000\n", "Epoch [ 95/120] | Train Loss: 0.0106 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3699 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 96: Plateau Phase - LR: 0.000000\n", "Epoch [ 96/120] | Train Loss: 0.0105 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3705 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 97: Plateau Phase - LR: 0.000000\n", "Epoch [ 97/120] | Train Loss: 0.0089 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3703 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 98: Plateau Phase - LR: 0.000000\n", "Epoch [ 98/120] | Train Loss: 0.0087 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3711 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 99: Plateau Phase - LR: 0.000000\n", "Epoch [ 99/120] | Train Loss: 0.0102 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3708 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 100: Plateau Phase - LR: 0.000000\n", "Epoch [100/120] | Train Loss: 0.0098 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3701 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 101: Plateau Phase - LR: 0.000000\n", "Epoch [101/120] | Train Loss: 0.0074 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3689 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 102: Plateau Phase - LR: 0.000000\n", "Epoch [102/120] | Train Loss: 0.0096 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3693 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 103: Plateau Phase - LR: 0.000000\n", "Epoch [103/120] | Train Loss: 0.0076 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3693 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 104: Plateau Phase - LR: 0.000000\n", "Epoch [104/120] | Train Loss: 0.0092 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3695 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 105: Plateau Phase - LR: 0.000000\n", "Epoch [105/120] | Train Loss: 0.0070 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3701 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 106: Plateau Phase - LR: 0.000000\n", "Epoch [106/120] | Train Loss: 0.0095 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3695 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 107: Plateau Phase - LR: 0.000000\n", "Epoch [107/120] | Train Loss: 0.0119 | Train MAE: 0.0323 | Train Acc: 0.9677 |Val Loss: 0.3697 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 108: Plateau Phase - LR: 0.000000\n", "Epoch [108/120] | Train Loss: 0.0100 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3698 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 109: Plateau Phase - LR: 0.000000\n", "Epoch [109/120] | Train Loss: 0.0099 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3703 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 110: Plateau Phase - LR: 0.000000\n", "Epoch [110/120] | Train Loss: 0.0082 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3710 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 111: Plateau Phase - LR: 0.000000\n", "Epoch [111/120] | Train Loss: 0.0091 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3703 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 112: Plateau Phase - LR: 0.000000\n", "Epoch [112/120] | Train Loss: 0.0071 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3698 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 113: Plateau Phase - LR: 0.000000\n", "Epoch [113/120] | Train Loss: 0.0092 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3710 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 114: Plateau Phase - LR: 0.000000\n", "Epoch [114/120] | Train Loss: 0.0067 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3700 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 115: Plateau Phase - LR: 0.000000\n", "Epoch [115/120] | Train Loss: 0.0087 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3709 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 116: Plateau Phase - LR: 0.000000\n", "Epoch [116/120] | Train Loss: 0.0113 | Train MAE: 0.0161 | Train Acc: 0.9839 |Val Loss: 0.3691 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 117: Plateau Phase - LR: 0.000000\n", "Epoch [117/120] | Train Loss: 0.0092 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3702 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 118: Plateau Phase - LR: 0.000000\n", "Epoch [118/120] | Train Loss: 0.0088 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3700 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 119: Plateau Phase - LR: 0.000000\n", "Epoch [119/120] | Train Loss: 0.0059 | Train MAE: 0.0000 | Train Acc: 1.0000 |Val Loss: 0.3703 | Val MAE: 0.6000 | Val Acc: 0.4667\n", "Epoch 120: Plateau Phase - LR: 0.000000\n", "Epoch [120/120] | Train Loss: 0.0131 | Train MAE: 0.0323 | Train Acc: 0.9677 |Val Loss: 0.3704 | Val MAE: 0.6000 | Val Acc: 0.4667\n" ] } ], "source": [ "model = PushupCounterSingleOutput().to(DEVICE)\n", "outputs = train_model(model, epochs=120)" ] }, { "cell_type": "markdown", "id": "a836629b", "metadata": { "id": "a836629b" }, "source": [ "### Performance Plots" ] }, { "cell_type": "code", "execution_count": 19, "id": "83473ef3", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 441 }, "id": "83473ef3", "outputId": "bc33d9e9-ac84-421d-a158-dc95e21cf700" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", "==============================\n", " TOP 5 PERFORMANCE TABLE\n", "==============================\n", " train_loss train_mae train_acc val_loss val_mae val_acc model\n", "Epoch \n", "23 0.065747 0.161290 0.838710 0.364240 0.533333 0.533333 PushupCounterSingleOutput(\\n (bn): BatchNorm1d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\\n (lstm): LSTM(1, 64, batch_first=True, bidirectional=True)\\n (regressor): Sequential(\\n (0): Linear(in_features=128, out_features=64, bias=True)\\n (1): ReLU()\\n (2): Linear(in_features=64, out_features=1, bias=True)\\n )\\n)\n", "47 0.010742 0.000000 1.000000 0.365467 0.600000 0.466667 PushupCounterSingleOutput(\\n (bn): BatchNorm1d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\\n (lstm): LSTM(1, 64, batch_first=True, bidirectional=True)\\n (regressor): Sequential(\\n (0): Linear(in_features=128, out_features=64, bias=True)\\n (1): ReLU()\\n (2): Linear(in_features=64, out_features=1, bias=True)\\n )\\n)\n", "48 0.013944 0.016129 0.983871 0.367342 0.600000 0.466667 PushupCounterSingleOutput(\\n (bn): BatchNorm1d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\\n (lstm): LSTM(1, 64, batch_first=True, bidirectional=True)\\n (regressor): Sequential(\\n (0): Linear(in_features=128, out_features=64, bias=True)\\n (1): ReLU()\\n (2): Linear(in_features=64, out_features=1, bias=True)\\n )\\n)\n", "87 0.010483 0.016129 0.983871 0.368440 0.600000 0.466667 PushupCounterSingleOutput(\\n (bn): BatchNorm1d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\\n (lstm): LSTM(1, 64, batch_first=True, bidirectional=True)\\n (regressor): Sequential(\\n (0): Linear(in_features=128, out_features=64, bias=True)\\n (1): ReLU()\\n (2): Linear(in_features=64, out_features=1, bias=True)\\n )\\n)\n", "46 0.020582 0.016129 0.983871 0.368792 0.600000 0.466667 PushupCounterSingleOutput(\\n (bn): BatchNorm1d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\\n (lstm): LSTM(1, 64, batch_first=True, bidirectional=True)\\n (regressor): Sequential(\\n (0): Linear(in_features=128, out_features=64, bias=True)\\n (1): ReLU()\\n (2): Linear(in_features=64, out_features=1, bias=True)\\n )\\n)\n", "==============================\n", "\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": {} } ], "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "\n", "def plot_training_performance(history):\n", " \"\"\"\n", " Generates a summary table of the best epochs and plots learning curves.\n", "\n", " Args:\n", " history (dict): A dictionary containing lists of metrics.\n", " Expected keys: 'train_loss', 'val_loss', 'train_mae', 'val_mae'.\n", " Optional keys: 'train_acc', 'val_acc'.\n", " \"\"\"\n", " # Convert history to a DataFrame for easy manipulation\n", " df = pd.DataFrame(history)\n", " df.index.name = 'Epoch'\n", " df.index += 1 # Shift index to start from Epoch 1\n", "\n", " # 1. Display the Performance Table (Top 5 Epochs by Validation Loss)\n", " print(\"\\n\" + \"=\"*30)\n", " print(\" TOP 5 PERFORMANCE TABLE\")\n", " print(\"=\"*30)\n", " # Sorting by val_loss to find the most stable models\n", " top_epochs = df.sort_values(by='val_loss').head(5)\n", " print(top_epochs.to_string())\n", " print(\"=\"*30 + \"\\n\")\n", "\n", " # 2. Create Plots\n", " fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(20, 6))\n", "\n", " # Loss Plot (MSE)\n", " ax1.plot(df.index, df['train_loss'], label='Train Loss', color='#1f77b4', linewidth=2)\n", " ax1.plot(df.index, df['val_loss'], label='Val Loss', color='#ff7f0e', linewidth=2, linestyle='--')\n", " ax1.set_title('Model Loss (MSE)', fontsize=14, fontweight='bold')\n", " ax1.set_ylim(bottom=0)\n", " ax1.set_xlabel('Epoch')\n", " ax1.set_ylabel('Loss')\n", " ax1.legend()\n", " ax1.grid(True, linestyle=':', alpha=0.6)\n", "\n", " # MAE Plot (Mean Absolute Error)\n", " ax2.plot(df.index, df['train_mae'], label='Train MAE', color='#2ca02c', linewidth=2)\n", " ax2.plot(df.index, df['val_mae'], label='Val MAE', color='#d62728', linewidth=2, linestyle='--')\n", " ax2.set_title('Mean Absolute Error (MAE)', fontsize=14, fontweight='bold')\n", " ax2.set_ylim(bottom=0)\n", " ax2.set_xlabel('Epoch')\n", " ax2.set_ylabel('MAE (Pushup Count Error)')\n", " ax2.legend()\n", " ax2.grid(True, linestyle=':', alpha=0.6)\n", "\n", " # Accuracy Plot\n", " ax3.plot(df.index, df['train_acc'], label='Train Acc', color=\"#2842a8\", linewidth=2)\n", " ax3.plot(df.index, df['val_acc'], label='Val Acc', color=\"#b1197c\", linewidth=2, linestyle='--')\n", "\n", " # Admin\n", " model = outputs['model']\n", " model_name = type(model).__name__\n", " ax3.set_title(f'Accuracy (Exact Prediction) for {model_name}', fontsize=14, fontweight='bold')\n", " ax3.set_ylim(bottom=0)\n", " ax3.set_xlabel('Epoch')\n", " ax3.set_ylabel('Accuracy')\n", " ax3.legend()\n", " ax3.grid(True, linestyle=':', alpha=0.6)\n", "\n", " plt.ylim(bottom=0)\n", " plt.tight_layout()\n", " plt.show()\n", "\n", "plot_training_performance(outputs)" ] }, { "cell_type": "markdown", "id": "8319211b", "metadata": { "id": "8319211b" }, "source": [ "### Testing" ] }, { "cell_type": "code", "execution_count": 20, "id": "f2746ae5", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "f2746ae5", "outputId": "37bad5be-4141-4c40-867a-057cbb084edb" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "[Video Load] Elapsed time: 2.7275 seconds\n", "[Video Transformation] Elapsed time: 3.8203 seconds\n", "[Feature Extraction] Elapsed time: 2.4425 seconds\n", "[Featurn Engineering 1] Elapsed time: 0.0593 seconds\n", "[Featurn Engineering 2] Elapsed time: 0.0094 seconds\n", "[Prediction] Elapsed time: 0.0046 seconds\n", "Predicted pushups: 6\n" ] } ], "source": [ "# Inference Code\n", "import torch\n", "import cv2\n", "import numpy as np\n", "import PIL.Image\n", "from ultralytics import YOLO\n", "import time\n", "\n", "class Timer:\n", " def __init__(self, name=\"Timer\"):\n", " self.name = name\n", "\n", " def __enter__(self):\n", " self.start = time.time()\n", " return self # optional, if you want to access it\n", "\n", " def __exit__(self, exc_type, exc_val, exc_tb):\n", " self.end = time.time()\n", " elapsed = self.end - self.start\n", " print(f\"[{self.name}] Elapsed time: {elapsed:.4f} seconds\")\n", "\n", "# Load the trained model\n", "model = outputs[\"model\"]\n", "model_name = type(model).__name__\n", "save_path = os.path.join(WEIGHTS_DIR, f\"best_model_weights_{model_name}.pth\")\n", "checkpoint = torch.load(save_path)\n", "model.load_state_dict(checkpoint['model_state_dict'])\n", "model.eval()\n", "\n", "def predict_pushups(video_path):\n", " # 1. Extract angles from video\n", " list_of_pil_frames = []\n", " with Timer(\"Video Load\"):\n", " cap = cv2.VideoCapture(video_path)\n", " while True:\n", " ret, frame = cap.read()\n", " if not ret:\n", " break\n", " rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)\n", " list_of_pil_frames.append(PIL.Image.fromarray(rgb_frame))\n", " cap.release()\n", "\n", " if not list_of_pil_frames:\n", " return 0\n", "\n", " # Resize frames\n", " with Timer(\"Video Transformation\"):\n", " resizer = VideoResizer(MAX_FRAME_LENGTH)\n", " frames_for_yolo = resizer(list_of_pil_frames)\n", "\n", " # YOLO pose\n", " with Timer(\"Feature Extraction\"):\n", " pose_model = YOLO(YOLO_MODEL_FILE, task='pose', verbose=False)\n", " if hasattr(pose_model, \"trackers\") and pose_model.predictor:\n", " pose_model.predictor.trackers[0].reset()\n", " results_generator = pose_model.track(frames_for_yolo, verbose=False, device=DEVICE, persist=True, vid_stride=VID_STRIDE, show=False, tracker=YOLO_TRACKER_FILE)\n", "\n", " # Calculate angles\n", " angles = []\n", " with Timer(\"Featurn Engineering 1\"):\n", " for results in results_generator:\n", " current_frame_angle = 0.0\n", " person_mask = (results.boxes.cls == 0)\n", " person_boxes = results.boxes[person_mask]\n", " if len(person_boxes) > 0:\n", " max_conf_idx = person_boxes.conf.argmax().item()\n", " original_indices = person_mask.nonzero(as_tuple=True)[0]\n", " original_idx = original_indices[max_conf_idx]\n", " keypoints_obj = results.keypoints[original_idx]\n", " if keypoints_obj.xy.shape[0] > 0:\n", " landmarks_np = keypoints_obj.xy[0].cpu().numpy()\n", " if landmarks_np.shape[0] > max(COCO.R_WRIST.value, COCO.L_WRIST.value):\n", " calculator = AngleCalculator(landmarks_np)\n", " try:\n", " angle = calculator()\n", " if 0 <= angle <= 180:\n", " current_frame_angle = angle\n", " except:\n", " pass\n", " angles.append(current_frame_angle)\n", " del results\n", "\n", " if not angles:\n", " return 0\n", "\n", " with Timer(\"Featurn Engineering 2\"):\n", " angles_np = np.array(angles, dtype=np.float32)\n", " min_angle, max_angle = np.min(angles_np), np.max(angles_np)\n", " if max_angle > min_angle:\n", " angles_np = (angles_np - min_angle) / (max_angle - min_angle)\n", "\n", " angles_tensor = torch.tensor(angles_np, dtype=torch.float32)\n", " signal_cleanser = SignalMedianator()\n", " angles_tensor = signal_cleanser(angles_tensor)\n", "\n", " # Pad/truncate\n", " current_length = angles_tensor.shape[0]\n", " if current_length < MAX_FRAMES:\n", " padding = torch.zeros(MAX_FRAMES - current_length, dtype=torch.float32)\n", " angles_tensor = torch.cat([angles_tensor, padding], dim=0)\n", " elif current_length > MAX_FRAMES:\n", " angles_tensor = angles_tensor[:MAX_FRAMES]\n", "\n", " # Prepare for model\n", " angles_tensor = angles_tensor.unsqueeze(0).to(DEVICE) # (1, MAX_FRAMES)\n", " lengths = torch.tensor([min(current_length, MAX_FRAMES)], dtype=torch.long).to(DEVICE)\n", "\n", " # Predict\n", " with Timer(\"Prediction\"):\n", " with torch.no_grad():\n", " output = model(angles_tensor, lengths)\n", " predicted_count = torch.round(output.squeeze()).item()\n", "\n", " return int(predicted_count), angles_tensor, lengths\n", "\n", "# Example usage\n", "predicted, angles_tensor, lengths = predict_pushups(os.path.join(DOWNLOAD_DIR, \"7_sadkjfkljekj.mp4\"))\n", "print(f\"Predicted pushups: {predicted}\")\n" ] }, { "cell_type": "markdown", "id": "ded002ff", "metadata": { "id": "ded002ff" }, "source": [ "### Evaluation Code" ] }, { "cell_type": "code", "execution_count": 21, "id": "4e6511d3", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "4e6511d3", "outputId": "db466059-8541-4771-c25c-19606bd9b0a4" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Using device: cuda\n", "\n", "Running inference on 77 test videos...\n", "\n", "\n", "✓ pred=4 true=4 | 5.9ms | 4_kling_20251209_Text_to_Video_Generate_a_588_2.mp4\n", "✓ pred=3 true=3 | 5.0ms | 3_kling_20251206_Text_to_Video_Generate_a_315_2.mp4\n", "✓ pred=6 true=6 | 4.3ms | 6_dfjewaijsldkjfsaef.mp4\n", "✓ pred=4 true=4 | 5.5ms | 4_kling_20251209_Text_to_Video_Generate_a_561_1.mp4\n", "✓ pred=1 true=1 | 3.7ms | 1_dksksjfwijf.mp4\n", "✓ pred=3 true=3 | 5.4ms | 3_kling_20251209_Image_to_Video_Generate_a_635_0.mp4\n", "✓ pred=3 true=3 | 4.8ms | 3_sdlkfjaleknaksej.mp4\n", "✓ pred=2 true=2 | 4.5ms | 2_difficult_sdafkljsalkfj.mp4\n", "✓ pred=4 true=4 | 4.9ms | 4_sadlfkjlknewkjejk.mp4\n", "✓ pred=3 true=3 | 5.0ms | 3_kling_kdjflaskdjf.mp4\n", "✓ pred=3 true=3 | 4.9ms | 3_kling_20251206_Text_to_Video_Generate_a_71_3.mp4\n", "✓ pred=3 true=3 | 5.2ms | 3_kling_dskfseu.mp4\n", "✗ pred=4 true=3 | 3.4ms | 3_sadlfkjawelnflksdjf.mp4\n", "✓ pred=3 true=3 | 4.5ms | 3_kling_20251205_Text_to_Video_On_a_playg_5028_0.mp4\n", "✓ pred=3 true=3 | 8.0ms | 3_kling_20251209_Text_to_Video_Generate_a_491_1.mp4\n", "✓ pred=4 true=4 | 5.0ms | 4_asdlkfjalsflnekj.mp4\n", "✓ pred=4 true=4 | 6.0ms | 4_kling_20251209_Text_to_Video_Generate_a_377_1.mp4\n", "✓ pred=3 true=3 | 4.6ms | 3_ewdfkjwaeoihjlkasdjf.mp4\n", "✓ pred=4 true=4 | 5.4ms | 4_kling_20251209_Text_to_Video_Generate_a_452_1.mp4\n", "✓ pred=6 true=6 | 5.4ms | 6_kling_20251209_Text_to_Video_Generate_a_218_1.mp4\n", "✗ pred=3 true=2 | 4.6ms | 2_dkdjwkndkfw.mp4\n", "✗ pred=4 true=3 | 4.5ms | 3_sdlkjslndflkseijlkjef.mp4\n", "✓ pred=2 true=2 | 4.6ms | 2_sdkjdsflkjfwa.mp4\n", "✓ pred=4 true=4 | 4.6ms | 4_aslkjasmcalkewjlkje.mp4\n", "✓ pred=4 true=4 | 5.3ms | 4_kling_20251206_Text_to_Video_Generate_a_28_0.mp4\n", "✗ pred=4 true=3 | 5.0ms | 3_sdlkjfaslkjfalskjdf.mp4\n", "✗ pred=4 true=3 | 5.4ms | 3_kling_20251209_Text_to_Video_Generate_a_491_2.mp4\n", "✓ pred=3 true=3 | 5.4ms | 3_kling_20251206_Text_to_Video_Generate_a_712_3.mp4\n", "✗ pred=3 true=4 | 5.4ms | 4_20251209_Text_to_Video_Generate_a_561_0.mp4\n", "✓ pred=3 true=3 | 3.3ms | 3_kling_20251206_Text_to_Video_Generate_a_71_2.mp4\n", "✓ pred=4 true=4 | 5.3ms | 4_kling_20251209_Image_to_Video_Generate_a_635_1.mp4\n", "✓ pred=4 true=4 | 7.2ms | 4_pushup_1f2da596-7619-4d55-9376-069e15a42a1a_h264.mp4\n", "✓ pred=4 true=4 | 5.3ms | 4_kling_20251209_Text_to_Video_Generate_a_263_1.mp4\n", "✓ pred=3 true=3 | 4.6ms | 3_dslkaldskjflakjs.mp4\n", "✓ pred=3 true=3 | 4.1ms | 3_sdfjwaiejflkasjdf.mp4\n", "✓ pred=4 true=4 | 5.3ms | 4_kling_20251209_Text_to_Video_Generate_a_452_0.mp4\n", "✗ pred=3 true=2 | 3.8ms | 2_dfsaeklnvvalkej.mp4\n", "✓ pred=4 true=4 | 5.0ms | 4_aslkcasckmwlejk.mp4\n", "✓ pred=2 true=2 | 3.8ms | 2_difficult_2.mp4\n", "✓ pred=3 true=3 | 7.1ms | 3_sdlkfjalkjejafe.mp4\n", "✓ pred=2 true=2 | 2.8ms | 2_sdafkjaslkclaksdjkas.mp4\n", "✗ pred=4 true=3 | 5.5ms | 3_kling_20251209_Text_to_Video_Generate_a_491_0.mp4\n", "✓ pred=2 true=2 | 3.5ms | 2_kling_20251205_Text_to_Video_On_a_sandy_4976_0.mp4\n", "✓ pred=2 true=2 | 6.4ms | 2_sdlkjsaelijfksdjf.mp4\n", "✗ pred=4 true=3 | 4.5ms | 3_sdflkjliejkjdf.mp4\n", "✓ pred=3 true=3 | 5.6ms | 3_kling_20251209_Image_to_Video_Generate_a_613_1.mp4\n", "✗ pred=4 true=3 | 3.4ms | 3_kling_20251206_Text_to_Video_Generate_a_71_0.mp4\n", "✓ pred=3 true=3 | 4.2ms | 3_dsksdfjbvsdkj.mp4\n", "✓ pred=3 true=3 | 4.4ms | 3_sadklfjasbnlkjlfkj.mp4\n", "✗ pred=3 true=2 | 4.1ms | 2_sdfkjsaleijflaskdjf.mp4\n", "✓ pred=3 true=3 | 4.8ms | 3_asldkfjalwieaskdfaskdf.mp4\n", "✗ pred=4 true=2 | 7.9ms | 2_dkdmkejkeimdh.mp4\n", "✓ pred=2 true=2 | 5.1ms | 2_sdlfjlewlkjkj.mp4\n", "✓ pred=2 true=2 | 4.1ms | 2_dsalkfjalwkenlke.mp4\n", "✓ pred=2 true=2 | 4.5ms | 2_dkjd823kjf.mp4\n", "✓ pred=3 true=3 | 5.2ms | 3_kling_20251209_Text_to_Video_Generate_a_190_1.mp4\n", "✓ pred=2 true=2 | 4.3ms | 2_sdjfhafsldkjhjk.mp4\n", "✗ pred=2 true=3 | 4.4ms | 3_sadlfkjasldkfjasleijlkjfd.mp4\n", "✓ pred=4 true=4 | 5.3ms | 4_kling_20251209_Text_to_Video_Generate_a_218_0.mp4\n", "✓ pred=4 true=4 | 5.4ms | 4_kling_20251206_Text_to_Video_Generate_a_315_3.mp4\n", "✓ pred=3 true=3 | 4.0ms | 3_dsjlaeijlksjdfie.mp4\n", "✓ pred=3 true=3 | 4.9ms | 3_dkk873lkjlksajdf.mp4\n", "✓ pred=2 true=2 | 3.0ms | 2_kling_20251206_Text_to_Video_Generate_a_71_1.mp4\n", "✗ pred=5 true=4 | 3.7ms | 4_dssalsdkfjweijf.mp4\n", "✓ pred=5 true=5 | 4.6ms | 5_sdfkljweoijlkjdsflkjweaij.mp4\n", "✓ pred=2 true=2 | 4.3ms | 2_sadfasjldkfjaseifj.mp4\n", "✓ pred=4 true=4 | 7.1ms | 4_kling_20251209_Text_to_Video_Generate_a_190_0.mp4\n", "✓ pred=3 true=3 | 5.4ms | 3_kling_20251206_Text_to_Video_Generate_a_315_0.mp4\n", "✓ pred=3 true=3 | 4.5ms | 3_kling_20251206_Text_to_Video_Generate_a_17_0.mp4\n", "✓ pred=5 true=5 | 4.4ms | 5_sadfjhaslfkjasdlkfjsa.mp4\n", "✓ pred=3 true=3 | 5.5ms | 3_kling_20251209_Text_to_Video_Generate_a_403_1.mp4\n", "✓ pred=3 true=3 | 4.7ms | 3_kling_20251205_Text_to_Video_On_a_playg_5064_0.mp4\n", "✗ pred=5 true=4 | 4.0ms | 4_sadflkjasldkjfalseij.mp4\n", "✓ pred=3 true=3 | 4.9ms | 3_kling_20251205_Text_to_Video_In_a_grass_4697_0.mp4\n", "✓ pred=4 true=4 | 5.5ms | 4_kling_20251207_Text_to_Video_Generate_a_521_1.mp4\n", "✗ pred=6 true=7 | 6.5ms | 7_sadkjfkljekj.mp4\n", "✓ pred=4 true=4 | 5.3ms | 4_kling_20251206_Text_to_Video_Generate_a_58_0.mp4\n", "\n", "==================================================\n", "SUMMARY\n", "==================================================\n", "Total videos: 77\n", "Correct: [61]\n", "Incorrect: [16]\n", "\n", "ACCURACY: 79.22%\n", "\n", "Total time: 512.60s\n", "Avg per video: 4.9ms\n", "Min latency: 2.8ms\n", "Max latency: 8.0ms\n", "==================================================\n" ] } ], "source": [ "def evaluate(model, test_loader, dataset, device):\n", " model.eval()\n", " correct = 0\n", " total = 0\n", "\n", " all_preds = []\n", " all_labels = []\n", " all_times = []\n", "\n", " print(\"\\n\")\n", "\n", " with torch.no_grad():\n", " for idx, (angles, labels, lengths) in enumerate(test_loader):\n", " angles, labels = angles.to(device), labels.to(device)\n", "\n", " # Time the forward pass\n", " start_time = time.time()\n", " outputs = model(angles, lengths)\n", " if device.type == 'cuda':\n", " torch.cuda.synchronize() # wait for GPU to finish\n", " end_time = time.time()\n", "\n", " inference_time = (end_time - start_time) * 1000 # ms\n", " all_times.append(inference_time)\n", "\n", " preds = outputs\n", "\n", " for i in range(labels.size(0)):\n", " batch_idx = idx * test_loader.batch_size + i\n", " video_name = dataset.video_files[batch_idx]\n", " pred = int(torch.round(preds[i]).item())\n", " true_label = labels[i].item()\n", " is_correct = \"✓\" if pred == true_label else \"✗\"\n", "\n", " print(f\"{is_correct} pred={pred} true={true_label} | {inference_time:>7.1f}ms | {video_name}\")\n", " correct += pred == true_label\n", "\n", " # correct += preds.eq(labels).sum().item()\n", " total += labels.size(0)\n", "\n", " all_preds.extend(preds.cpu().numpy())\n", " all_labels.extend(labels.cpu().numpy())\n", "\n", " accuracy = correct / total\n", " return accuracy, all_preds, all_labels, all_times\n", "\n", "\n", "# =============================================================================\n", "# RUN INFERENCE\n", "# =============================================================================\n", "\n", "def run_inference(model):\n", " device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", " print(f\"Using device: {device}\")\n", "\n", " # Download test data\n", " test_dir = DOWNLOAD_DIR\n", "\n", " model = model.to(device)\n", "\n", " # Create dataloader\n", " test_dataset = VideoDataset(test_dir)\n", " test_loader = DataLoader(\n", " test_dataset,\n", " batch_size=1,\n", " shuffle=False,\n", " num_workers=0,\n", " collate_fn=collate_fn\n", " )\n", "\n", " print(f\"\\nRunning inference on {len(test_dataset)} test videos...\")\n", "\n", " # Warmup (optional, helps get consistent GPU timings)\n", " if device.type == 'cuda':\n", " dummy_data = torch.randn(1, MAX_FRAMES, device=device) # (Batch, SeqLen)\n", " dummy_lengths = torch.tensor([MAX_FRAMES], dtype=torch.long, device=device) # (Batch,)\n", " with torch.no_grad():\n", " _ = model(dummy_data, dummy_lengths)\n", " torch.cuda.synchronize()\n", "\n", " total_start = time.time()\n", " accuracy, preds, labels, times = evaluate(model, test_loader, test_dataset, device)\n", " total_end = time.time()\n", "\n", " # Summary\n", " preds = np.round(preds).astype(int)\n", " num_correct = sum(p == l for p, l in zip(preds.astype(int), labels))\n", " num_wrong = len(preds) - num_correct\n", "\n", " print(\"\\n\" + \"=\"*50)\n", " print(\"SUMMARY\")\n", " print(\"=\"*50)\n", " print(f\"Total videos: {len(preds)}\")\n", " print(f\"Correct: {num_correct}\")\n", " print(f\"Incorrect: {num_wrong}\")\n", " print(f\"\")\n", " print(f\"ACCURACY: {accuracy*100:.2f}%\")\n", " print(f\"\")\n", " print(f\"Total time: {total_end - total_start:.2f}s\")\n", " print(f\"Avg per video: {sum(times) / len(times):.1f}ms\")\n", " print(f\"Min latency: {min(times):.1f}ms\")\n", " print(f\"Max latency: {max(times):.1f}ms\")\n", " print(\"=\"*50)\n", " return accuracy, preds, labels\n", "\n", "\n", "\n", "# model_weights = os.path.join(WEIGHTS_DIR, f\"final_model_weights_PushupCounterSingleOutput.pth\")\n", "# model = PushupCounterSingleOutput()\n", "# checkpoint = torch.load(model_weights, map_location='cpu', weights_only=False)\n", "# model.load_state_dict(checkpoint['model_state_dict'])\n", "_, _, _ = run_inference(model)" ] }, { "cell_type": "code", "source": [ "import gc\n", "import torch\n", "\n", "gc.collect()\n", "torch.cuda.empty_cache()\n", "del checkpoint" ], "metadata": { "id": "RIK6Ll4kgbJ7" }, "id": "RIK6Ll4kgbJ7", "execution_count": 22, "outputs": [] }, { "cell_type": "code", "execution_count": 23, "id": "e488cd0a", "metadata": { "id": "e488cd0a", "colab": { "base_uri": "https://localhost:8080/", "height": 127 }, "outputId": "8e44cb91-13a2-496e-e156-6950535391f7" }, "outputs": [ { "output_type": "error", "ename": "SyntaxError", "evalue": "invalid syntax (ipython-input-1184596467.py, line 1)", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"/tmp/ipython-input-1184596467.py\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m torch.cuda.empty_cache()print(f\"Training Stop Time (UNIX): {int(time.time())}\")\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "torch.cuda.empty_cache()print(f\"Training Stop Time (UNIX): {int(time.time())}\")\n", "raise RuntimeError(\"Stop Here\")" ] }, { "cell_type": "code", "source": [ "# repo_id = f\"{hf_username}/mv-final-assignment\"\n", "# yolo_model_file = hf_hub_download(repo_id=repo_id, filename=f\"{YOLO_MODEL_FILE}\", local_dir=os.getcwd())\n", "# yolo_tracker_file = hf_hub_download(repo_id=repo_id, filename=f\"{YOLO_TRACKER_FILE}\", local_dir=os.getcwd())\n", "#print(yolo_model_file)\n", "#print(yolo_tracker_file)\n", "import os\n", "def ls_r():\n", " for root, dirs, files in os.walk(os.getcwd()):\n", " if 'cache-data' in root:\n", " for file in files:\n", " # Create the full path by joining the directory path and file name\n", " full_path = os.path.join(root, file)\n", " print(full_path)\n", " os.remove(full_path)\n", "ls_r()" ], "metadata": { "id": "JFNrlEusXUZ1" }, "id": "JFNrlEusXUZ1", "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "id": "2937be7d", "metadata": { "id": "2937be7d" }, "source": [ "## Hugging Face" ] }, { "cell_type": "markdown", "id": "9a1cf00c", "metadata": { "id": "9a1cf00c" }, "source": [ "### Command Lines" ] }, { "cell_type": "code", "execution_count": null, "id": "6a527bea", "metadata": { "id": "6a527bea" }, "outputs": [], "source": [ "!pip install huggingface_hub" ] }, { "cell_type": "code", "execution_count": null, "id": "6cfc8a81", "metadata": { "id": "6cfc8a81" }, "outputs": [], "source": [ "!hf auth login" ] }, { "cell_type": "markdown", "id": "1c7806b8", "metadata": { "id": "1c7806b8" }, "source": [ "### Code" ] }, { "cell_type": "markdown", "id": "d4a13690", "metadata": { "id": "d4a13690" }, "source": [ "#### Admin" ] }, { "cell_type": "code", "execution_count": null, "id": "466d51ad", "metadata": { "id": "466d51ad" }, "outputs": [], "source": [ "import tqdm\n", "import os\n", "from huggingface_hub import HfApi, hf_hub_download, login as HfLogin, logout as HfLogout\n", "\n", "class HugMyFace:\n", " def __init__(self, username, repo_id):\n", " self.username = username\n", " self.repo_id = repo_id\n", " self.api = HfApi()\n", "\n", " def login(self):\n", " try:\n", " user_info = self.api.whoami()\n", " print(f\"Logged in as: {user_info['name']}\")\n", " except Exception:\n", " print(\"Logging in.\")\n", " HfLogin()\n", "\n", " def logout(self):\n", " try:\n", " user_info = self.api.whoami()\n", " print(f\"Logging out: {user_info['name']}\")\n", " HfLogout()\n", " except Exception:\n", " print(\"Not logged in.\")\n", "\n", " def whoami(self):\n", " user_info = self.api.whoami()\n", " print(f\"{user_info}\")\n", "\n", " def create_repo(self):\n", " # Create the repo first (if it already exists, this will just skip)\n", " self.api.create_repo(\n", " repo_id=self.repo_id,\n", " repo_type=\"model\",\n", " exist_ok=True, # Don't error if it already exists\n", " private=False, # Make it public so TAs can access\n", " )\n", "\n", " def list_repo(self):\n", " repo_info = self.api.repo_info(repo_id=self.repo_id)\n", " print(f\"[{[f.rfilename for f in repo_info.siblings]}]\")\n", "\n", " def upload_to_hub(self, local_path, commit_msg=None, commit_desc=None):\n", " if os.path.isfile(local_path):\n", " self.api.upload_file(\n", " path_or_fileobj=local_path,\n", " path_in_repo=local_path,\n", " repo_id=self.repo_id,\n", " repo_type=\"model\", # can be \"model\", \"dataset\", or \"space\"\n", " commit_message=commit_msg,\n", " commit_description=commit_desc\n", " )\n", " elif os.path.isdir(local_path):\n", " # Upload an entire folder (e.g., weights + config + scripts)\n", " self.api.upload_folder(\n", " folder_path=local_path,\n", " path_in_repo=local_path,\n", " repo_id=self.repo_id,\n", " repo_type=\"model\",\n", " commit_message=commit_msg,\n", " commit_description=commit_desc\n", " )\n", " else:\n", " raise RuntimeError(f\"Ivalid Object {local_path}\")\n", "\n", " def delete_file(self, remote_path, is_folder, commit_msg):\n", " if is_folder:\n", " self.api.delete_folder(\n", " path_in_repo=remote_path,\n", " repo_id=self.repo_id,\n", " commit_message=commit_msg\n", " )\n", " else:\n", " self.api.delete_file(\n", " path_in_repo=remote_path,\n", " repo_id=self.repo_id,\n", " repo_type=\"model\", # can also be \"dataset\" or \"space\"\n", " commit_message=commit_msg\n", " )" ] }, { "cell_type": "code", "execution_count": null, "id": "d38b8e1b", "metadata": { "id": "d38b8e1b" }, "outputs": [], "source": [ "HF_USERNAME = 'maatt4face'\n", "HF_REPO_ID = f\"{HF_USERNAME}/mv-final-assignment\"\n", "HF = HugMyFace(HF_USERNAME, HF_REPO_ID)\n", "HF.login()" ] }, { "cell_type": "markdown", "id": "99d882c8", "metadata": { "id": "99d882c8" }, "source": [ "#### Repo Interactions" ] }, { "cell_type": "code", "execution_count": null, "id": "fc3da1cb", "metadata": { "id": "fc3da1cb" }, "outputs": [], "source": [ "# HF.create_repo()\n", "\n", "# Training File and Model Weights\n", "# HF.upload_to_hub(\"Final_Training.ipynb\", commit_msg=\"Clean up\")\n", "# HF.upload_to_hub(WEIGHTS_DIR, commit_msg=\"Model weights\")\n", "# upload_to_hub(\"best_model_weights_PushupCounterSingleOutput_v01.pth\", commit_msg=\"PushupCounterSingleOutput model weights\")\n", "# upload_to_hub(\"best_model_weights_PushupCounterSingleOutput.pth\", commit_msg=\"PushupCounterSingleOutput model weights\")\n", "# upload_to_hub(\"best_model_weights_PushupCounterMaxPool.pth\", commit_msg=\"PushupCounterMaxPool model weights\")\n", "\n", "# YOLO Weights\n", "# HF.upload_to_hub(YOLO_DIR, commit_msg=\"landpark detection weights\")\n", "# delete_file(\"botsort.yaml\", is_folder=False, commit_msg=\"Real Estate Organization\")\n", "# delete_file(\"bytetrack.yaml\", is_folder=False, commit_msg=\"Real Estate Organization\")\n", "# delete_file(\"yolo11n-pose.pt\", is_folder=False, commit_msg=\"Real Estate Organization\")" ] }, { "cell_type": "markdown", "id": "606affc6", "metadata": { "id": "606affc6" }, "source": [] }, { "cell_type": "code", "execution_count": null, "id": "892ba310", "metadata": { "id": "892ba310" }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "3aa64d74", "metadata": { "id": "3aa64d74" }, "source": [] }, { "cell_type": "code", "execution_count": null, "id": "eed737e3", "metadata": { "id": "eed737e3" }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "738ea760", "metadata": { "id": "738ea760" }, "outputs": [], "source": [ "model = YOLO('yolov8n-pose.pt')" ] }, { "cell_type": "code", "execution_count": null, "id": "aaedcb40", "metadata": { "id": "aaedcb40" }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.12" }, "colab": { "provenance": [], "collapsed_sections": [ "397089dc", "AL_ItrXgO5o2", "86fa605d", "aabf9bdb", "0739d1f9", "273bea44", "37b44192", "e7f08201", "2937be7d", "9a1cf00c", "1c7806b8", "d4a13690" ], "gpuType": "T4" }, "accelerator": "GPU" }, "nbformat": 4, "nbformat_minor": 5 }