{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.10","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":52950,"databundleVersionId":5973250,"sourceType":"competition"}],"dockerImageVersionId":30512,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import warnings\nwarnings.filterwarnings(\"ignore\")","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:07:51.073663Z","iopub.execute_input":"2024-04-02T15:07:51.074046Z","iopub.status.idle":"2024-04-02T15:07:51.085847Z","shell.execute_reply.started":"2024-04-02T15:07:51.074018Z","shell.execute_reply":"2024-04-02T15:07:51.084778Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Import the libraries","metadata":{}},{"cell_type":"code","source":"import os\nimport shutil\nimport numpy as np\nimport pandas as pd\nimport pyarrow.parquet as pq\nimport tensorflow as tf\nimport json\nimport matplotlib\nimport matplotlib.pyplot as plt\nimport random\n\nfrom skimage.transform import resize\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nfrom tqdm.notebook import tqdm\nfrom matplotlib import animation, rc","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-04-02T15:07:51.087618Z","iopub.execute_input":"2024-04-02T15:07:51.087987Z","iopub.status.idle":"2024-04-02T15:07:59.728144Z","shell.execute_reply.started":"2024-04-02T15:07:51.087932Z","shell.execute_reply":"2024-04-02T15:07:59.727302Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"TensorFlow v\" + tf.__version__)","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:07:59.729449Z","iopub.execute_input":"2024-04-02T15:07:59.730045Z","iopub.status.idle":"2024-04-02T15:07:59.735423Z","shell.execute_reply.started":"2024-04-02T15:07:59.730012Z","shell.execute_reply":"2024-04-02T15:07:59.73402Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Load the Dataset","metadata":{}},{"cell_type":"code","source":"dataset_df = pd.read_csv('/kaggle/input/asl-fingerspelling/train.csv')\nprint(\"Full train dataset shape is {}\".format(dataset_df.shape))","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:07:59.737885Z","iopub.execute_input":"2024-04-02T15:07:59.738262Z","iopub.status.idle":"2024-04-02T15:07:59.938924Z","shell.execute_reply.started":"2024-04-02T15:07:59.738233Z","shell.execute_reply":"2024-04-02T15:07:59.938024Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"The data is composed of 5 columns and 67208 entries. We can see all 5 dimensions of our dataset by printing out the first 5 entries using the following code:","metadata":{}},{"cell_type":"code","source":"dataset_df.head()","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:07:59.940076Z","iopub.execute_input":"2024-04-02T15:07:59.940335Z","iopub.status.idle":"2024-04-02T15:07:59.956663Z","shell.execute_reply.started":"2024-04-02T15:07:59.940313Z","shell.execute_reply":"2024-04-02T15:07:59.955668Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Quick basic dataset exploration\n\nEach entry in **train.csv** contains a `phrase`, its `sequence_id`, `path` and `file_id`. The `file_id` indicates the file that holds the **_landmarks_** data for that particular `phrase` and `sequence_id` is the unique index of the landmark sequence within the landmarks data file.\n\nThe following diagram shows an example of how files are connected.\n\n![files2.png](attachment:751e38db-4def-4177-bf5b-27071bb1b3e3.png)","metadata":{},"attachments":{"751e38db-4def-4177-bf5b-27071bb1b3e3.png":{"image/png":"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RUXx5ptvMnPmTJo3b87KlSsxGo3a+krjV9rLq9fr+frrr1m6dCk//fQT7733HmPGjMFisWA2mzl//jw9e/bkgw8+oG/fvhQWFvL9998zZcoUvvjiC7799lt69uxJZmYmo0ePRqfTce7cOU6ePMkvv/zyu73JBQUFAFy8eJFZs2axdOlSQkJCOHbsWLnvL3t7e5YuXcrrr7/ORx99xOzZszl69CgXL14kLi6OvXv3MnToUHr16oVer8fe3p5vv/2WatWq8a9//YvWrVvTvHlz3nrrLW2ddnZ27N69m/HjxzN9+nS+++47nnnmGRITE9Hr9VqZt7e3Z82aNQwbNozFixfz6aefcuDAASIiIjh79ixbt27lzTffpHHjxtp6V65cSZUqVfjkk09Yvnw5Z8+e1abzrFq1ijp16vxumdLpdFy6dIlp06Yxd+5cWrduzZYtWyrUcXL16lV69erFli1b+P7771mxYgV2dnY4Ozvz3nvv8fLLLxMQEMDWrVtJTEzExcWFzz77jJEjR/Lkk0/y5Zdf8vDDD7NhwwaaN2/OP//5T2w2GwMHDuS9995j165dXL16lcTERBITE+nTpw8fffQR+/btY+DAgb/boBPibjNICMTf7fHHHycgIIBevXpx48YN3NzcePvtt7XWva+vL6mpqQQEBABQv3597bOhoaG89dZbREZG8vHHH8uQeumBajBQp04dXFxcCA4O5tq1a2Xe9/X1JTo6muTkZPr164eLiwv9+/dn3rx59O7dm5CQkN9d9/bt22nWrBkDBw6kWrVqTJw48U/PCb5fKIpCixYtePXVVwkODmbw4MFUr16dc+fOAeDv70+NGjUYNmwYGzduRKfTERoayuDBgwkKCuLChQtl5nSWJjSlf+t0OpYtW0afPn1o2bIlBQUFHD16FKvViqqqtGzZkmeeeYbw8HCtF3bdunX06NGDl156ieLiYlq1akVaWhpZWVl06dIFT09Phg0bxsqVK2nXrt0t0xbK9FLodGzZsoV+/frRp08fHBwcOHToULkfKyUlJUyZMoX69evj6+vLrFmzCA8PZ/z48SxcuBBXV1fc3Ny03nWr1crw4cN5/vnn8fPzw9PTk7y8PB566CEiIyO1xsTevXsBeP3117FarURGRhIQEKD1lJeua+zYsYSGhlKnTh2WL1/OgQMHmD59OosXL8bV1ZWTJ0+W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+J1x48aRmZnJnDlzMJlMzJgxw/jZoUOHAIiPjzdea9GiBXFxcQC89957xuuffPLJr96nb/fu3fTq1QuXy8WhQ4eM3/v444+1l/4PEydO5OTJk7z33nvs3LmTsLAwWrVqRZUqVXjnnXfYv3+/UZ5+fn5kZWVx+fJlTCYTDz/8MN27d8dkMhEZGUn16tUxmUysWLECgBMnTlCnTh18fX3p2LGjUefy+zgcDubNm4fJZCIhIYEVK1ZgMplYunTpNd+/YsUKJk6cyIkTJ/jyyy85ePAgI0eONOpz/vz5AFy8eJGxY8de9XpkZCSenp6YTCbCwsLIzc29brty5swZAJ555hmef/55AKKiokpWAd/mQczU1FQeeOABunXrht1u5+WXX6Z27docPXr0qvfm5OTw3XffMXv2bL7++mu+/PJLjhw5YtRZs2bNjDqIjY01Xu/cuTMnTpwA4LXXXjNe//bbb3+1Q1u9enWOHz+up0WKSMkMvHa7naeffpr33nuP9evX06xZM+NRuJGRkezcuZMFCxbQvn178vPzGT9+PG3btmXLli3cf//9wM9PnypTpgz33nuv0Xg2atQIb29vrFYrLVu2ZNKkSRw9epTjx4+zf/9+PDw88PHxISEhgZ07d+Lm5mY8ErJ3794MGDCAvXv30qdPH3bv3s28efN49tlnWb58Ofv37+epp55i9+7d1/1eFsvPD70zm800bNiQkSNHEh0draed3YDXX38dgBkzZjB06FBatWrFnj17+PTTT+nRowe7du1i/vz5bNu2jcDAQD766CM8PT2Bn59aFR4eTo8ePejSpQsLFizgoYceYvXq1aSlpfHmm29StWpVDh06RPv27VmxYoVOoH+Am5sb/fr147HHHmPZsmV89NFHvPTSSwwePPia7+/WrRvh4eH079+f1157jbS0NOrXr098fDzh4eEsWrSI5ORkli1bRkREBHv27GHGjBls376ddevW8e9//5sPP/yQkydPcvr0aaZPn37dIH706FH69++PyWSiUqVK1KxZk5MnT/62L3iHTcRUrlyZp59+mg0bNrBs2TLeeOMNPvvsM+rVq3fVe8uUKcOgQYMIDQ3l7bff5p///Cc//fQTERER7Ny5E09PTzZu3IjVaqVx48Y8+OCD7N69m9atW7N7926++eYbXn31VdasWUN0dDSjR4/m8OHD1/1sAwcO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/f18fHz48MMPefzxx42RmKysLPbt20e9evUICAigX79+REZGYjab6dKlC2+++SYVKlTAZPq5B5KXl4fZbOYvf/kLHTp0wG634+npSZUqVahatSply5YlLi6OiIgIAL777jtGjRpFcHAwPXr0YN68eQC8++67PP/88wQHB/P1119Tt25d43M+++yzvPnmmzidTgCqVq3K119/TY0aNejYsSO7du3i8uXLBAQE8P333+Pj42N8vuLcWyqJMjMz+eGHH3jhhRdo2LAh999/Pxs3bsRms6lwbpPs7Gw8PT3p1KkTLVq0ICwsjAULFhR5j7+/P1WrViUwMJDNmzczfPhwatasSZkyZfjvf/9Lp06djGPk9OnTnD17lk6dOlGnTh3efPNN1q5di8lkolq1atSsWZPAwEACAwNxd3cnJyeHLl26EBwcTEhICLt27eL48ePs2LGDe++9l4oVKxISEsKPP/6o8ZUbEB0dzfvvv2/MbJ08eZK4uLgi7/noo48YOXIkwcHBvPLKK/Tv35+UlBQ2btzIhAkTaNKkCY888ggHDhxgyZIlPPjggzRo0IBWrVpx9uxZ0tLSiIqK4oMPPqBmzZr069ePn376iZSUFFwuF/Xr1zfabF9fX2w2G926dWPcuHFUrlxZB538KZKSkhg3bhx9+/bl9ddfZ+fOnXz++efFa0bxDooXJTrwFp4Ar+Tr60vr1q05ffo0VquVFStWEBYWhslkonr16nh7exvBE+DSpUtER0cTHh6OyWTiyy+/vGr0ws3NjYCAAADc3NyMdWPu7u7s37+fS5cucezYMb7++mtMJhPPP/886enpAEyfPp2uXbvSo0cPI1T179+f6tWrk5mZyerVq+nRowf+/v40atQIi8XyP9alyR9x9OhRatWqZfx/uXLliIuLw263q3BuE4fDQZ06dfD39wegfv36VwWkQgUFBXz22WfGiEi9evWuOlnk5uYSFBRkvN64cWPS0tIwmUwsW7aMbt264evryyuvvAKAt7c3P/74I8nJyezatYuaNWtSv359QkNDSUhIoKCggOjoaIYMGaLKusEOTJMmTTCZTFgsFmrXrm20f4XmzJnDtm3bCAoKonv37qSkpODm5lakLbZYLMTHx5Ofn2+0gWazGZvNht1ux2w2G6+bTCYSEhLIy8vD19eXCRMmUL9+ffr06cOBAwdwd3cnKCgI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"}}},{"cell_type":"code","source":"# Fetch sequence_id, file_id, phrase from first row\nsequence_id, file_id, phrase = dataset_df.iloc[0][['sequence_id', 'file_id', 'phrase']]\nprint(f\"sequence_id: {sequence_id}, file_id: {file_id}, phrase: {phrase}\")","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:07:59.957708Z","iopub.execute_input":"2024-04-02T15:07:59.957952Z","iopub.status.idle":"2024-04-02T15:07:59.966363Z","shell.execute_reply.started":"2024-04-02T15:07:59.957931Z","shell.execute_reply":"2024-04-02T15:07:59.965431Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Now, let us open the parquet file and fetch the data for the particular `sequence_id`.","metadata":{}},{"cell_type":"code","source":"# Fetch data from parquet file\nsample_sequence_df = pq.read_table(f\"/kaggle/input/asl-fingerspelling/train_landmarks/{str(file_id)}.parquet\",\n    filters=[[('sequence_id', '=', sequence_id)],]).to_pandas()\nprint(\"Full sequence dataset shape is {}\".format(sample_sequence_df.shape))","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:07:59.967477Z","iopub.execute_input":"2024-04-02T15:07:59.967807Z","iopub.status.idle":"2024-04-02T15:08:06.011104Z","shell.execute_reply.started":"2024-04-02T15:07:59.967778Z","shell.execute_reply":"2024-04-02T15:08:06.01018Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"This particular phrase(***3 creekhouse***) contains 123 entries (or frames) and 1630 columns including 1628 landmark coordinates. Let us print the first 5 entries.","metadata":{}},{"cell_type":"code","source":"sample_sequence_df.head()","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:08:06.012354Z","iopub.execute_input":"2024-04-02T15:08:06.012668Z","iopub.status.idle":"2024-04-02T15:08:06.039351Z","shell.execute_reply.started":"2024-04-02T15:08:06.012642Z","shell.execute_reply":"2024-04-02T15:08:06.038131Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Preprocess the data","metadata":{}},{"cell_type":"markdown","source":"# Fetch the pose landmark coordinates related to hand movement.","metadata":{}},{"cell_type":"markdown","source":"This image illustrates the pose coordinates related to hand movement. The pose coordinates also come from the parquet file.\n\n\n![pose.png](attachment:1389643c-6068-4c7d-9275-0b42f25b836e.png)\n\n[Image source](https://developers.google.com/mediapipe/solutions/vision/pose_landmarker)","metadata":{},"attachments":{"1389643c-6068-4c7d-9275-0b42f25b836e.png":{"image/png":"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"}}},{"cell_type":"code","source":"# Pose coordinates for hand movement.\nLPOSE = [13, 15, 17, 19, 21]\nRPOSE = [14, 16, 18, 20, 22]\nPOSE = LPOSE + RPOSE","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:08:06.041303Z","iopub.execute_input":"2024-04-02T15:08:06.041923Z","iopub.status.idle":"2024-04-02T15:08:06.049158Z","shell.execute_reply.started":"2024-04-02T15:08:06.041889Z","shell.execute_reply":"2024-04-02T15:08:06.048212Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Create x,y,z label names from coordinates","metadata":{}},{"cell_type":"code","source":"X = [f'x_right_hand_{i}' for i in range(21)] + [f'x_left_hand_{i}' for i in range(21)] + [f'x_pose_{i}' for i in POSE]\nY = [f'y_right_hand_{i}' for i in range(21)] + [f'y_left_hand_{i}' for i in range(21)] + [f'y_pose_{i}' for i in POSE]\nZ = [f'z_right_hand_{i}' for i in range(21)] + [f'z_left_hand_{i}' for i in range(21)] + [f'z_pose_{i}' for i in POSE]","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:08:06.052729Z","iopub.execute_input":"2024-04-02T15:08:06.053254Z","iopub.status.idle":"2024-04-02T15:08:06.059942Z","shell.execute_reply.started":"2024-04-02T15:08:06.053228Z","shell.execute_reply":"2024-04-02T15:08:06.058984Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:08:06.061226Z","iopub.execute_input":"2024-04-02T15:08:06.061814Z","iopub.status.idle":"2024-04-02T15:08:06.073102Z","shell.execute_reply.started":"2024-04-02T15:08:06.061758Z","shell.execute_reply":"2024-04-02T15:08:06.072238Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Create feature columns from the extracted coordinates.","metadata":{}},{"cell_type":"code","source":"FEATURE_COLUMNS = X + Y + Z","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:08:06.074235Z","iopub.execute_input":"2024-04-02T15:08:06.074605Z","iopub.status.idle":"2024-04-02T15:08:06.082705Z","shell.execute_reply.started":"2024-04-02T15:08:06.074573Z","shell.execute_reply":"2024-04-02T15:08:06.081848Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Store ids of each coordinate labels to lists","metadata":{}},{"cell_type":"code","source":"X_IDX = [i for i, col in enumerate(FEATURE_COLUMNS)  if \"x_\" in col]\nY_IDX = [i for i, col in enumerate(FEATURE_COLUMNS)  if \"y_\" in col]\nZ_IDX = [i for i, col in enumerate(FEATURE_COLUMNS)  if \"z_\" in col]\n\nRHAND_IDX = [i for i, col in enumerate(FEATURE_COLUMNS)  if \"right\" in col]\nLHAND_IDX = [i for i, col in enumerate(FEATURE_COLUMNS)  if  \"left\" in col]\nRPOSE_IDX = [i for i, col in enumerate(FEATURE_COLUMNS)  if  \"pose\" in col and int(col[-2:]) in RPOSE]\nLPOSE_IDX = [i for i, col in enumerate(FEATURE_COLUMNS)  if  \"pose\" in col and int(col[-2:]) in LPOSE]","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:08:06.083904Z","iopub.execute_input":"2024-04-02T15:08:06.08446Z","iopub.status.idle":"2024-04-02T15:08:06.092856Z","shell.execute_reply.started":"2024-04-02T15:08:06.084436Z","shell.execute_reply":"2024-04-02T15:08:06.092168Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Preprocess and write the dataset as TFRecords","metadata":{}},{"cell_type":"code","source":"# Set length of frames to 128\nFRAME_LEN = 128\n\n# Create directory to store the new data\nif not os.path.isdir(\"preprocessed\"):\n    os.mkdir(\"preprocessed\")\nelse:\n    shutil.rmtree(\"preprocessed\")\n    os.mkdir(\"preprocessed\")\n\n# Loop through each file_id\nfor file_id in tqdm(dataset_df.file_id.unique()):\n    # Parquet file name\n    pq_file = f\"/kaggle/input/asl-fingerspelling/train_landmarks/{file_id}.parquet\"\n    # Filter train.csv and fetch entries only for the relevant file_id\n    file_df = dataset_df.loc[dataset_df[\"file_id\"] == file_id]\n    # Fetch the parquet file\n    parquet_df = pq.read_table(f\"/kaggle/input/asl-fingerspelling/train_landmarks/{str(file_id)}.parquet\",\n                              columns=['sequence_id'] + FEATURE_COLUMNS).to_pandas()\n    # File name for the updated data\n    tf_file = f\"preprocessed/{file_id}.tfrecord\"\n    parquet_numpy = parquet_df.to_numpy()\n    # Initialize the pointer to write the output of \n    # each `for loop` below as a sequence into the file.\n    with tf.io.TFRecordWriter(tf_file) as file_writer:\n        # Loop through each sequence in file.\n        for seq_id, phrase in zip(file_df.sequence_id, file_df.phrase):\n            # Fetch sequence data\n            frames = parquet_numpy[parquet_df.index == seq_id]\n            \n            # Calculate the number of NaN values in each hand landmark\n            r_nonan = np.sum(np.sum(np.isnan(frames[:, RHAND_IDX]), axis = 1) == 0)\n            l_nonan = np.sum(np.sum(np.isnan(frames[:, LHAND_IDX]), axis = 1) == 0)\n            no_nan = max(r_nonan, l_nonan)\n            \n            if 2*len(phrase)<no_nan:\n                features = {FEATURE_COLUMNS[i]: tf.train.Feature(\n                    float_list=tf.train.FloatList(value=frames[:, i])) for i in range(len(FEATURE_COLUMNS))}\n                features[\"phrase\"] = tf.train.Feature(bytes_list=tf.train.BytesList(value=[bytes(phrase, 'utf-8')]))\n                record_bytes = tf.train.Example(features=tf.train.Features(feature=features)).SerializeToString()\n                file_writer.write(record_bytes)","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:08:06.095064Z","iopub.execute_input":"2024-04-02T15:08:06.096076Z","iopub.status.idle":"2024-04-02T15:17:22.668092Z","shell.execute_reply.started":"2024-04-02T15:08:06.096053Z","shell.execute_reply":"2024-04-02T15:17:22.667134Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Get the saved TFRecord files into a list","metadata":{}},{"cell_type":"code","source":"tf_records = dataset_df.file_id.map(lambda x: f'/kaggle/working/preprocessed/{x}.tfrecord').unique()\nprint(f\"List of {len(tf_records)} TFRecord files.\")","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:17:22.669257Z","iopub.execute_input":"2024-04-02T15:17:22.669539Z","iopub.status.idle":"2024-04-02T15:17:22.725137Z","shell.execute_reply.started":"2024-04-02T15:17:22.669515Z","shell.execute_reply":"2024-04-02T15:17:22.724217Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Load character_to_prediction json file","metadata":{}},{"cell_type":"markdown","source":"This json file contains a character and its value. We will add three new characters, \"<\" and \">\" to mark the start and end of each phrase, and \"P\" for padding.","metadata":{}},{"cell_type":"code","source":"with open (\"/kaggle/input/asl-fingerspelling/character_to_prediction_index.json\", \"r\") as f:\n    char_to_num = json.load(f)\n\n# Add pad_token, start pointer and end pointer to the dict\npad_token = 'P'\nstart_token = '<'\nend_token = '>'\npad_token_idx = 59\nstart_token_idx = 60\nend_token_idx = 61\n\nchar_to_num[pad_token] = pad_token_idx\nchar_to_num[start_token] = start_token_idx\nchar_to_num[end_token] = end_token_idx\nnum_to_char = {j:i for i,j in char_to_num.items()}","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:17:22.726311Z","iopub.execute_input":"2024-04-02T15:17:22.726595Z","iopub.status.idle":"2024-04-02T15:17:22.736748Z","shell.execute_reply.started":"2024-04-02T15:17:22.726571Z","shell.execute_reply":"2024-04-02T15:17:22.735941Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Function to resize and add padding.\ndef resize_pad(x):\n    if tf.shape(x)[0] < FRAME_LEN:\n        x = tf.pad(x, ([[0, FRAME_LEN-tf.shape(x)[0]], [0, 0], [0, 0]]))\n    else:\n        x = tf.image.resize(x, (FRAME_LEN, tf.shape(x)[1]))\n    return x\n\n# Detect the dominant hand from the number of NaN values.\n# Dominant hand will have less NaN values since it is in frame moving.\ndef pre_process(x):\n    rhand = tf.gather(x, RHAND_IDX, axis=1)\n    lhand = tf.gather(x, LHAND_IDX, axis=1)\n    rpose = tf.gather(x, RPOSE_IDX, axis=1)\n    lpose = tf.gather(x, LPOSE_IDX, axis=1)\n    \n    rnan_idx = tf.reduce_any(tf.math.is_nan(rhand), axis=1)\n    lnan_idx = tf.reduce_any(tf.math.is_nan(lhand), axis=1)\n    \n    rnans = tf.math.count_nonzero(rnan_idx)\n    lnans = tf.math.count_nonzero(lnan_idx)\n    \n    # For dominant hand\n    if rnans > lnans:\n        hand = lhand\n        pose = lpose\n        \n        hand_x = hand[:, 0*(len(LHAND_IDX)//3) : 1*(len(LHAND_IDX)//3)]\n        hand_y = hand[:, 1*(len(LHAND_IDX)//3) : 2*(len(LHAND_IDX)//3)]\n        hand_z = hand[:, 2*(len(LHAND_IDX)//3) : 3*(len(LHAND_IDX)//3)]\n        hand = tf.concat([1-hand_x, hand_y, hand_z], axis=1)\n        \n        pose_x = pose[:, 0*(len(LPOSE_IDX)//3) : 1*(len(LPOSE_IDX)//3)]\n        pose_y = pose[:, 1*(len(LPOSE_IDX)//3) : 2*(len(LPOSE_IDX)//3)]\n        pose_z = pose[:, 2*(len(LPOSE_IDX)//3) : 3*(len(LPOSE_IDX)//3)]\n        pose = tf.concat([1-pose_x, pose_y, pose_z], axis=1)\n    else:\n        hand = rhand\n        pose = rpose\n    \n    hand_x = hand[:, 0*(len(LHAND_IDX)//3) : 1*(len(LHAND_IDX)//3)]\n    hand_y = hand[:, 1*(len(LHAND_IDX)//3) : 2*(len(LHAND_IDX)//3)]\n    hand_z = hand[:, 2*(len(LHAND_IDX)//3) : 3*(len(LHAND_IDX)//3)]\n    hand = tf.concat([hand_x[..., tf.newaxis], hand_y[..., tf.newaxis], hand_z[..., tf.newaxis]], axis=-1)\n    \n    mean = tf.math.reduce_mean(hand, axis=1)[:, tf.newaxis, :]\n    std = tf.math.reduce_std(hand, axis=1)[:, tf.newaxis, :]\n    hand = (hand - mean) / std\n\n    pose_x = pose[:, 0*(len(LPOSE_IDX)//3) : 1*(len(LPOSE_IDX)//3)]\n    pose_y = pose[:, 1*(len(LPOSE_IDX)//3) : 2*(len(LPOSE_IDX)//3)]\n    pose_z = pose[:, 2*(len(LPOSE_IDX)//3) : 3*(len(LPOSE_IDX)//3)]\n    pose = tf.concat([pose_x[..., tf.newaxis], pose_y[..., tf.newaxis], pose_z[..., tf.newaxis]], axis=-1)\n    \n    x = tf.concat([hand, pose], axis=1)\n    x = resize_pad(x)\n    \n    x = tf.where(tf.math.is_nan(x), tf.zeros_like(x), x)\n    x = tf.reshape(x, (FRAME_LEN, len(LHAND_IDX) + len(LPOSE_IDX)))\n    return x","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:17:22.738046Z","iopub.execute_input":"2024-04-02T15:17:22.738392Z","iopub.status.idle":"2024-04-02T15:17:22.757855Z","shell.execute_reply.started":"2024-04-02T15:17:22.738362Z","shell.execute_reply":"2024-04-02T15:17:22.756936Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Create function to parse data from TFRecord format\n\nThis function will read the `TFRecord` data and convert it to Tensors.","metadata":{}},{"cell_type":"code","source":"def decode_fn(record_bytes):\n    schema = {COL: tf.io.VarLenFeature(dtype=tf.float32) for COL in FEATURE_COLUMNS}\n    schema[\"phrase\"] = tf.io.FixedLenFeature([], dtype=tf.string)\n    features = tf.io.parse_single_example(record_bytes, schema)\n    phrase = features[\"phrase\"]\n    landmarks = ([tf.sparse.to_dense(features[COL]) for COL in FEATURE_COLUMNS])\n    # Transpose to maintain the original shape of landmarks data.\n    landmarks = tf.transpose(landmarks)\n    \n    return landmarks, phrase","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:17:22.758973Z","iopub.execute_input":"2024-04-02T15:17:22.759268Z","iopub.status.idle":"2024-04-02T15:17:22.773027Z","shell.execute_reply.started":"2024-04-02T15:17:22.759244Z","shell.execute_reply":"2024-04-02T15:17:22.772157Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Create function to convert the data \n\nThis function transposes and applies masks to the landmark coordinates. It also vectorizes the phrase corresponding to the landmarks using `character_to_prediction_index.json`.","metadata":{}},{"cell_type":"code","source":"table = tf.lookup.StaticHashTable(\n    initializer=tf.lookup.KeyValueTensorInitializer(\n        keys=list(char_to_num.keys()),\n        values=list(char_to_num.values()),\n    ),\n    default_value=tf.constant(-1),\n    name=\"class_weight\"\n)\n\ndef convert_fn(landmarks, phrase):\n    # Add start and end pointers to phrase.\n    phrase = start_token + phrase + end_token\n    phrase = tf.strings.bytes_split(phrase)\n    phrase = table.lookup(phrase)\n    # Vectorize and add padding.\n    phrase = tf.pad(phrase, paddings=[[0, 64 - tf.shape(phrase)[0]]], mode = 'CONSTANT',\n                    constant_values = pad_token_idx)\n    # Apply pre_process function to the landmarks.\n    return pre_process(landmarks), phrase","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:17:22.774117Z","iopub.execute_input":"2024-04-02T15:17:22.774397Z","iopub.status.idle":"2024-04-02T15:17:25.248889Z","shell.execute_reply.started":"2024-04-02T15:17:22.774374Z","shell.execute_reply":"2024-04-02T15:17:25.247877Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Train and validation split/Create the final datasets","metadata":{}},{"cell_type":"code","source":"batch_size = 64\ntrain_len = int(0.8 * len(tf_records))\n\ntrain_ds = tf.data.TFRecordDataset(tf_records[:train_len]).map(decode_fn).map(convert_fn).batch(batch_size).prefetch(buffer_size=tf.data.AUTOTUNE).cache()\nvalid_ds = tf.data.TFRecordDataset(tf_records[train_len:]).map(decode_fn).map(convert_fn).batch(batch_size).prefetch(buffer_size=tf.data.AUTOTUNE).cache()","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:17:25.250176Z","iopub.execute_input":"2024-04-02T15:17:25.250468Z","iopub.status.idle":"2024-04-02T15:17:26.874899Z","shell.execute_reply.started":"2024-04-02T15:17:25.250443Z","shell.execute_reply":"2024-04-02T15:17:26.874129Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Define the Transformer Input Layers","metadata":{}},{"cell_type":"code","source":"class TokenEmbedding(layers.Layer):\n    def __init__(self, num_vocab=1000, maxlen=100, num_hid=64):\n        super().__init__()\n        self.emb = tf.keras.layers.Embedding(num_vocab, num_hid)\n        self.pos_emb = layers.Embedding(input_dim=maxlen, output_dim=num_hid)\n\n    def call(self, x):\n        maxlen = tf.shape(x)[-1]\n        x = self.emb(x)\n        positions = tf.range(start=0, limit=maxlen, delta=1)\n        positions = self.pos_emb(positions)\n        return x + positions\n\n\nclass LandmarkEmbedding(layers.Layer):\n    def __init__(self, num_hid=64, maxlen=100):\n        super().__init__()\n        self.conv1 = tf.keras.layers.Conv1D(\n            num_hid, 11, strides=2, padding=\"same\", activation=\"relu\"\n        )\n        self.conv2 = tf.keras.layers.Conv1D(\n            num_hid, 11, strides=2, padding=\"same\", activation=\"relu\"\n        )\n        self.conv3 = tf.keras.layers.Conv1D(\n            num_hid, 11, strides=2, padding=\"same\", activation=\"relu\"\n        )\n        self.pos_emb = layers.Embedding(input_dim=maxlen, output_dim=num_hid)\n\n    def call(self, x):\n        x = self.conv1(x)\n        x = self.conv2(x)\n        return self.conv3(x)","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:17:26.876012Z","iopub.execute_input":"2024-04-02T15:17:26.876298Z","iopub.status.idle":"2024-04-02T15:17:26.886015Z","shell.execute_reply.started":"2024-04-02T15:17:26.876273Z","shell.execute_reply":"2024-04-02T15:17:26.885149Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Encoder layer for Transformer","metadata":{}},{"cell_type":"code","source":"class TransformerEncoder(layers.Layer):\n    def __init__(self, embed_dim, num_heads, feed_forward_dim, rate=0.1):\n        super().__init__()\n        self.att = layers.MultiHeadAttention(num_heads=num_heads, key_dim=embed_dim)\n        self.ffn = keras.Sequential(\n            [\n                layers.Dense(feed_forward_dim, activation=\"relu\"),\n                layers.Dense(embed_dim),\n            ]\n        )\n        self.layernorm1 = layers.LayerNormalization(epsilon=1e-6)\n        self.layernorm2 = layers.LayerNormalization(epsilon=1e-6)\n        self.dropout1 = layers.Dropout(rate)\n        self.dropout2 = layers.Dropout(rate)\n\n    def call(self, inputs, training):\n        attn_output = self.att(inputs, inputs)\n        attn_output = self.dropout1(attn_output, training=training)\n        out1 = self.layernorm1(inputs + attn_output)\n        ffn_output = self.ffn(out1)\n        ffn_output = self.dropout2(ffn_output, training=training)\n        return self.layernorm2(out1 + ffn_output)","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:17:26.887241Z","iopub.execute_input":"2024-04-02T15:17:26.887485Z","iopub.status.idle":"2024-04-02T15:17:26.903688Z","shell.execute_reply.started":"2024-04-02T15:17:26.887464Z","shell.execute_reply":"2024-04-02T15:17:26.903006Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Decoder layer for Transformer","metadata":{}},{"cell_type":"code","source":"# Reference: https://www.kaggle.com/code/shlomoron/aslfr-a-simple-transformer/notebook\n\nclass TransformerDecoder(layers.Layer):\n    def __init__(self, embed_dim, num_heads, feed_forward_dim, dropout_rate=0.1):\n        super().__init__()\n        self.layernorm1 = layers.LayerNormalization(epsilon=1e-6)\n        self.layernorm2 = layers.LayerNormalization(epsilon=1e-6)\n        self.layernorm3 = layers.LayerNormalization(epsilon=1e-6)\n        self.self_att = layers.MultiHeadAttention(\n            num_heads=num_heads, key_dim=embed_dim\n        )\n        self.enc_att = layers.MultiHeadAttention(num_heads=num_heads, key_dim=embed_dim)\n        self.self_dropout = layers.Dropout(0.5)\n        self.enc_dropout = layers.Dropout(0.1)\n        self.ffn_dropout = layers.Dropout(0.1)\n        self.ffn = keras.Sequential(\n            [\n                layers.Dense(feed_forward_dim, activation=\"relu\"),\n                layers.Dense(embed_dim),\n            ]\n        )\n\n    def causal_attention_mask(self, batch_size, n_dest, n_src, dtype):\n        \"\"\"Masks the upper half of the dot product matrix in self attention.\n\n        This prevents flow of information from future tokens to current token.\n        1's in the lower triangle, counting from the lower right corner.\n        \"\"\"\n        i = tf.range(n_dest)[:, None]\n        j = tf.range(n_src)\n        m = i >= j - n_src + n_dest\n        mask = tf.cast(m, dtype)\n        mask = tf.reshape(mask, [1, n_dest, n_src])\n        mult = tf.concat(\n            [batch_size[..., tf.newaxis], tf.constant([1, 1], dtype=tf.int32)], 0\n        )\n        return tf.tile(mask, mult)\n\n    def call(self, enc_out, target, training):\n        input_shape = tf.shape(target)\n        batch_size = input_shape[0]\n        seq_len = input_shape[1]\n        causal_mask = self.causal_attention_mask(batch_size, seq_len, seq_len, tf.bool)\n        target_att = self.self_att(target, target, attention_mask=causal_mask)\n        target_norm = self.layernorm1(target + self.self_dropout(target_att, training = training))\n        enc_out = self.enc_att(target_norm, enc_out)\n        enc_out_norm = self.layernorm2(self.enc_dropout(enc_out, training = training) + target_norm)\n        ffn_out = self.ffn(enc_out_norm)\n        ffn_out_norm = self.layernorm3(enc_out_norm + self.ffn_dropout(ffn_out, training = training))\n        return ffn_out_norm","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:17:26.905058Z","iopub.execute_input":"2024-04-02T15:17:26.905439Z","iopub.status.idle":"2024-04-02T15:17:26.919774Z","shell.execute_reply.started":"2024-04-02T15:17:26.905407Z","shell.execute_reply":"2024-04-02T15:17:26.919011Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Complete the Transformer model","metadata":{}},{"cell_type":"code","source":"class Transformer(keras.Model):\n    def __init__(\n        self,\n        num_hid=64,\n        num_head=2,\n        num_feed_forward=128,\n        source_maxlen=100,\n        target_maxlen=100,\n        num_layers_enc=4,\n        num_layers_dec=1,\n        num_classes=60,\n    ):\n        super().__init__()\n        self.loss_metric = keras.metrics.Mean(name=\"loss\")\n        self.acc_metric = keras.metrics.Mean(name=\"edit_dist\")\n        self.num_layers_enc = num_layers_enc\n        self.num_layers_dec = num_layers_dec\n        self.target_maxlen = target_maxlen\n        self.num_classes = num_classes\n\n        self.enc_input = LandmarkEmbedding(num_hid=num_hid, maxlen=source_maxlen)\n        self.dec_input = TokenEmbedding(\n            num_vocab=num_classes, maxlen=target_maxlen, num_hid=num_hid\n        )\n\n        self.encoder = keras.Sequential(\n            [self.enc_input]\n            + [\n                TransformerEncoder(num_hid, num_head, num_feed_forward)\n                for _ in range(num_layers_enc)\n            ]\n        )\n\n        for i in range(num_layers_dec):\n            setattr(\n                self,\n                f\"dec_layer_{i}\",\n                TransformerDecoder(num_hid, num_head, num_feed_forward),\n            )\n\n        self.classifier = layers.Dense(num_classes)\n\n    def decode(self, enc_out, target, training):\n        y = self.dec_input(target)\n        for i in range(self.num_layers_dec):\n            y = getattr(self, f\"dec_layer_{i}\")(enc_out, y, training)\n        return y\n\n    def call(self, inputs, training):\n        source = inputs[0]\n        target = inputs[1]\n        x = self.encoder(source, training)\n        y = self.decode(x, target, training)\n        return self.classifier(y)\n\n    @property\n    def metrics(self):\n        return [self.loss_metric]\n\n    def train_step(self, batch):\n        \"\"\"Processes one batch inside model.fit().\"\"\"\n        source = batch[0]\n        target = batch[1]\n\n        input_shape = tf.shape(target)\n        batch_size = input_shape[0]\n        \n        dec_input = target[:, :-1]\n        dec_target = target[:, 1:]\n        with tf.GradientTape() as tape:\n            preds = self([source, dec_input])\n            one_hot = tf.one_hot(dec_target, depth=self.num_classes)\n            mask = tf.math.logical_not(tf.math.equal(dec_target, pad_token_idx))\n            loss = self.compiled_loss(one_hot, preds, sample_weight=mask)\n        trainable_vars = self.trainable_variables\n        gradients = tape.gradient(loss, trainable_vars)\n        self.optimizer.apply_gradients(zip(gradients, trainable_vars))\n        # Computes the Levenshtein distance between sequences since the evaluation\n        # metric for this contest is the normalized total levenshtein distance.\n        edit_dist = tf.edit_distance(tf.sparse.from_dense(target), \n                                     tf.sparse.from_dense(tf.cast(tf.argmax(preds, axis=1), tf.int32)))\n        edit_dist = tf.reduce_mean(edit_dist)\n        self.acc_metric.update_state(edit_dist)\n        self.loss_metric.update_state(loss)\n        return {\"loss\": self.loss_metric.result(), \"edit_dist\": self.acc_metric.result()}\n\n    def test_step(self, batch):        \n        source = batch[0]\n        target = batch[1]\n\n        input_shape = tf.shape(target)\n        batch_size = input_shape[0]\n        \n        dec_input = target[:, :-1]\n        dec_target = target[:, 1:]\n        preds = self([source, dec_input])\n        one_hot = tf.one_hot(dec_target, depth=self.num_classes)\n        mask = tf.math.logical_not(tf.math.equal(dec_target, pad_token_idx))\n        loss = self.compiled_loss(one_hot, preds, sample_weight=mask)\n        # Computes the Levenshtein distance between sequences since the evaluation\n        # metric for this contest is the normalized total levenshtein distance.\n        edit_dist = tf.edit_distance(tf.sparse.from_dense(target), \n                                     tf.sparse.from_dense(tf.cast(tf.argmax(preds, axis=1), tf.int32)))\n        edit_dist = tf.reduce_mean(edit_dist)\n        self.acc_metric.update_state(edit_dist)\n        self.loss_metric.update_state(loss)\n        return {\"loss\": self.loss_metric.result(), \"edit_dist\": self.acc_metric.result()}\n\n    def generate(self, source, target_start_token_idx):\n        \"\"\"Performs inference over one batch of inputs using greedy decoding.\"\"\"\n        bs = tf.shape(source)[0]\n        enc = self.encoder(source, training = False)\n        dec_input = tf.ones((bs, 1), dtype=tf.int32) * target_start_token_idx\n        dec_logits = []\n        for i in range(self.target_maxlen - 1):\n            dec_out = self.decode(enc, dec_input, training = False)\n            logits = self.classifier(dec_out)\n            logits = tf.argmax(logits, axis=-1, output_type=tf.int32)\n            last_logit = logits[:, -1][..., tf.newaxis]\n            dec_logits.append(last_logit)\n            dec_input = tf.concat([dec_input, last_logit], axis=-1)\n        return dec_input","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:17:26.920908Z","iopub.execute_input":"2024-04-02T15:17:26.921387Z","iopub.status.idle":"2024-04-02T15:17:26.945426Z","shell.execute_reply.started":"2024-04-02T15:17:26.921363Z","shell.execute_reply":"2024-04-02T15:17:26.94455Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Train the Transformer model","metadata":{}},{"cell_type":"code","source":"batch = next(iter(valid_ds))\n\nmodel = Transformer(\n    num_hid=200,\n    num_head=4,\n    num_feed_forward=400,\n    source_maxlen = FRAME_LEN,\n    target_maxlen=64,\n    num_layers_enc=2,\n    num_layers_dec=1,\n    num_classes=62\n)\nloss_fn = tf.keras.losses.CategoricalCrossentropy(\n    from_logits=True, label_smoothing=0.1,\n)\n\n\noptimizer = keras.optimizers.Adam(0.0001)\nmodel.compile(optimizer=optimizer, loss=loss_fn)\n\nhistory = model.fit(train_ds, validation_data=valid_ds, epochs=15)","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:17:26.946499Z","iopub.execute_input":"2024-04-02T15:17:26.946771Z","iopub.status.idle":"2024-04-02T15:23:52.627285Z","shell.execute_reply.started":"2024-04-02T15:17:26.946749Z","shell.execute_reply":"2024-04-02T15:23:52.626278Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Plot training loss and validation loss","metadata":{}},{"cell_type":"code","source":"plt.plot(history.history['loss'])\nplt.plot(history.history['val_loss'])\nplt.legend(['training loss', 'val_loss'])","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:23:52.62857Z","iopub.execute_input":"2024-04-02T15:23:52.628868Z","iopub.status.idle":"2024-04-02T15:23:52.929614Z","shell.execute_reply.started":"2024-04-02T15:23:52.628842Z","shell.execute_reply":"2024-04-02T15:23:52.928704Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history.history","metadata":{"execution":{"iopub.status.busy":"2024-04-02T15:23:52.930903Z","iopub.execute_input":"2024-04-02T15:23:52.931265Z","iopub.status.idle":"2024-04-02T15:23:52.938075Z","shell.execute_reply.started":"2024-04-02T15:23:52.931232Z","shell.execute_reply":"2024-04-02T15:23:52.937133Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}