ofraij123 commited on
Commit
fd7796d
·
verified ·
1 Parent(s): dbacab4

Sync from GitHub via hub-sync

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. README.md +0 -17
  2. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/.gitattributes +0 -0
  3. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/.gitignore +0 -0
  4. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/Dockerfile +0 -0
  5. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/README.md +0 -0
  6. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/configs/asl_citizen_qwen25vl_3b_qlora.yaml +0 -0
  7. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/configs/how2sign_qwen25vl_3b_qlora.yaml +0 -0
  8. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/data/README.md +0 -0
  9. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/data/how2sign_train.jsonl +0 -0
  10. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/data/how2sign_train.missing_videos.txt +0 -0
  11. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/data/how2sign_val.jsonl +0 -0
  12. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/data/how2sign_val.missing_videos.txt +0 -0
  13. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/requirements.txt +0 -0
  14. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/archive_how2sign_experiment.sh +0 -0
  15. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/compare_results.py +0 -0
  16. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/evaluate_asl_citizen.py +0 -0
  17. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/evaluate_how2sign.py +0 -0
  18. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/make_video_audit.sh +0 -0
  19. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/prepare_asl_citizen.py +0 -0
  20. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/prepare_how2sign.py +0 -0
  21. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/run_baseline.py +0 -0
  22. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/test_single_video_inference.py +0 -0
  23. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/train_qlora.py +0 -0
  24. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/src/__init__.py +0 -0
  25. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/src/datasets.py +0 -0
  26. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/src/io_utils.py +0 -0
  27. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/src/label_utils.py +0 -0
  28. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/src/metrics.py +0 -0
  29. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/src/qwen_video_utils.py +0 -0
  30. {vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/src/train_utils.py +0 -0
  31. presentation/visuals/README.md +3 -10
  32. presentation/visuals/how2sign_dataset_constraint.png +2 -2
  33. presentation/visuals/how2sign_dataset_constraint.svg +342 -451
  34. presentation/visuals/how2sign_plot_metrics.json +0 -24
  35. presentation/visuals/how2sign_subset_benchmark.png +2 -2
  36. presentation/visuals/how2sign_subset_benchmark.svg +463 -646
  37. presentation/visuals/how2sign_top25_class_distribution.png +2 -2
  38. presentation/visuals/how2sign_top25_class_distribution.svg +0 -0
  39. presentation/visuals/how2sign_top25_experiment_comparison.png +2 -2
  40. presentation/visuals/how2sign_top25_experiment_comparison.svg +794 -941
  41. report/BridgeLink_ASL_Final_Report.pdf +0 -3
  42. report/figures/how2sign_dataset_constraint.png +0 -3
  43. report/figures/how2sign_subset_benchmark.png +0 -3
  44. report/figures/how2sign_top25_class_distribution.png +0 -3
  45. report/figures/how2sign_top25_experiment_comparison.png +0 -3
  46. report/figures/vlm_how2sign_metrics.png +0 -0
  47. report/main.tex +241 -299
  48. report/references.bib +0 -43
  49. results/how2sign_top25_dataset_summary.json +9 -5
  50. results/vlm_how2sign_metrics_summary.json +0 -22
README.md CHANGED
@@ -120,22 +120,6 @@ Report the three comparison numbers: CNN top-1 accuracy, CNN top-5 coverage,
120
  and VLM-reranked top-5 accuracy. The Transformer result is kept as an optional
121
  attention/extra-credit experiment.
122
 
123
- ## Imported How2Sign VLM Workspace
124
-
125
- The teammate Qwen2.5-VL fine-tuning workspace is now included directly in this
126
- repo under `vlm_hf_space/`.
127
-
128
- That folder preserves:
129
-
130
- - QLoRA training scripts
131
- - How2Sign/ASL Citizen prep scripts
132
- - experiment configs
133
- - archived baseline vs fine-tuned metrics
134
- - sample prediction outputs from the Hugging Face Space repo
135
-
136
- The original source repo was:
137
- `https://huggingface.co/spaces/ofraij123/ASL-Video-To-Sentence-Translation`
138
-
139
  ## Wrapper Scaffold
140
 
141
  The repo also includes a sentence-wrapper CLI for phase-3 style comparisons
@@ -182,7 +166,6 @@ notebooks/
182
  report/
183
  main.tex CVPR-style project report
184
  references.bib Bibliography
185
- vlm_hf_space/ Imported Qwen2.5-VL workspace from Hugging Face Space
186
  docs/ Architecture notes, phase plans, literature review
187
  tests/ Unit tests
188
  ```
 
120
  and VLM-reranked top-5 accuracy. The Transformer result is kept as an optional
121
  attention/extra-credit experiment.
122
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  ## Wrapper Scaffold
124
 
125
  The repo also includes a sentence-wrapper CLI for phase-3 style comparisons
 
166
  report/
167
  main.tex CVPR-style project report
168
  references.bib Bibliography
 
169
  docs/ Architecture notes, phase plans, literature review
170
  tests/ Unit tests
171
  ```
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/.gitattributes RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/.gitignore RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/Dockerfile RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/README.md RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/configs/asl_citizen_qwen25vl_3b_qlora.yaml RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/configs/how2sign_qwen25vl_3b_qlora.yaml RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/data/README.md RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/data/how2sign_train.jsonl RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/data/how2sign_train.missing_videos.txt RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/data/how2sign_val.jsonl RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/data/how2sign_val.missing_videos.txt RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/requirements.txt RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/archive_how2sign_experiment.sh RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/compare_results.py RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/evaluate_asl_citizen.py RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/evaluate_how2sign.py RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/make_video_audit.sh RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/prepare_asl_citizen.py RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/prepare_how2sign.py RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/run_baseline.py RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/test_single_video_inference.py RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/scripts/train_qlora.py RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/src/__init__.py RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/src/datasets.py RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/src/io_utils.py RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/src/label_utils.py RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/src/metrics.py RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/src/qwen_video_utils.py RENAMED
File without changes
{vlm_hf_space → VLM/ASL-Video-To-Sentence-Translation}/src/train_utils.py RENAMED
File without changes
presentation/visuals/README.md CHANGED
@@ -9,9 +9,9 @@ Generated slide-ready visuals for BridgeLink ASL.
9
  - `cnn_vs_vlm_comparison.svg`: final comparison numbers for the presentation
10
  - `metrics-summary.json`: source values used to render the comparison slide
11
  - `how2sign_dataset_constraint.(png|svg)`: explains why the full 31k How2Sign clips cannot be used as sentence classes
12
- - `how2sign_subset_benchmark.(png|svg)`: Top-12, Top-25, and Top-25 normalized benchmark growth and accuracy
13
- - `how2sign_top25_class_distribution.(png|svg)`: class imbalance view for the normalized repeated-sentence subset
14
- - `how2sign_top25_experiment_comparison.(png|svg)`: comparison of the Top-25 baseline, normalized checkpoint, continued training, and balanced-weight experiments
15
  - `how2sign_plot_metrics.json`: source values used by the matplotlib How2Sign plots
16
 
17
  ## Current values
@@ -29,10 +29,3 @@ Generated slide-ready visuals for BridgeLink ASL.
29
  python scripts\generate_presentation_visuals.py
30
  python scripts\generate_how2sign_presentation_plots.py
31
  ```
32
-
33
- ## Current How2Sign 3D CNN values
34
-
35
- - Top-12 test accuracy: 14.7%
36
- - Top-25 test accuracy: 20.8%
37
- - Top-25 normalized test accuracy: 27.8%
38
- - Top-25 normalized classes: 21
 
9
  - `cnn_vs_vlm_comparison.svg`: final comparison numbers for the presentation
10
  - `metrics-summary.json`: source values used to render the comparison slide
11
  - `how2sign_dataset_constraint.(png|svg)`: explains why the full 31k How2Sign clips cannot be used as sentence classes
12
+ - `how2sign_subset_benchmark.(png|svg)`: Top-12 versus Top-25 benchmark growth and accuracy
13
+ - `how2sign_top25_class_distribution.(png|svg)`: class imbalance view for the current Top-25 subset
14
+ - `how2sign_top25_experiment_comparison.(png|svg)`: comparison of the Top-25 baseline, continued training, and balanced-weight experiments
15
  - `how2sign_plot_metrics.json`: source values used by the matplotlib How2Sign plots
16
 
17
  ## Current values
 
29
  python scripts\generate_presentation_visuals.py
30
  python scripts\generate_how2sign_presentation_plots.py
31
  ```
 
 
 
 
 
 
 
presentation/visuals/how2sign_dataset_constraint.png CHANGED

Git LFS Details

  • SHA256: dfd910751ddf5416b15996d922c7dd8436db4a2dec027e409b3b51d1e93e4047
  • Pointer size: 131 Bytes
  • Size of remote file: 241 kB

Git LFS Details

  • SHA256: 36888ca19742cdb1c889aabd46be81477366a5dec46a9c412e6ed588a0cd5913
  • Pointer size: 131 Bytes
  • Size of remote file: 227 kB
presentation/visuals/how2sign_dataset_constraint.svg CHANGED
presentation/visuals/how2sign_plot_metrics.json CHANGED
@@ -34,11 +34,6 @@
34
  "label": "Top-25 subset",
35
  "clip_count": 479,
36
  "class_count": 25
37
- },
38
- {
39
- "label": "Top-25 normalized",
40
- "clip_count": 479,
41
- "class_count": 21
42
  }
43
  ],
44
  "benchmark_stats": [
@@ -65,18 +60,6 @@
65
  "test_accuracy": 0.2083333283662796,
66
  "val_loss": 2.953240394592285,
67
  "test_loss": 2.8787331581115723
68
- },
69
- {
70
- "name": "Top-25 normalized",
71
- "total_clips": 479,
72
- "num_classes": 21,
73
- "train_clips": 335,
74
- "val_clips": 72,
75
- "test_clips": 72,
76
- "val_accuracy": 0.1944444477558136,
77
- "test_accuracy": 0.2777777910232544,
78
- "val_loss": 2.7069199085235596,
79
- "test_loss": 2.5848894119262695
80
  }
81
  ],
82
  "experiment_stats": [
@@ -87,13 +70,6 @@
87
  "test_accuracy": 0.2083333283662796,
88
  "test_loss": 2.8787331581115723
89
  },
90
- {
91
- "name": "Top-25 normalized",
92
- "training_change": "merged duplicate labels",
93
- "val_accuracy": 0.1944444477558136,
94
- "test_accuracy": 0.2777777910232544,
95
- "test_loss": 2.5848894119262695
96
- },
97
  {
98
  "name": "Top-25 continued",
99
  "training_change": "18 more epochs",
 
34
  "label": "Top-25 subset",
35
  "clip_count": 479,
36
  "class_count": 25
 
 
 
 
 
37
  }
38
  ],
39
  "benchmark_stats": [
 
60
  "test_accuracy": 0.2083333283662796,
61
  "val_loss": 2.953240394592285,
62
  "test_loss": 2.8787331581115723
 
 
 
 
 
 
 
 
 
 
 
 
63
  }
64
  ],
65
  "experiment_stats": [
 
70
  "test_accuracy": 0.2083333283662796,
71
  "test_loss": 2.8787331581115723
72
  },
 
 
 
 
 
 
 
73
  {
74
  "name": "Top-25 continued",
75
  "training_change": "18 more epochs",
presentation/visuals/how2sign_subset_benchmark.png CHANGED

Git LFS Details

  • SHA256: ad3e6b4a7e520d2fba57f30cc0cae9e5e811b9cf23c15189fd7522c30fb37d0e
  • Pointer size: 131 Bytes
  • Size of remote file: 210 kB

Git LFS Details

  • SHA256: 4946390ccc708e050df5612dc2f7767ae40c296d1bc27f2aaaa28c37082bbdb7
  • Pointer size: 131 Bytes
  • Size of remote file: 190 kB
presentation/visuals/how2sign_subset_benchmark.svg CHANGED
presentation/visuals/how2sign_top25_class_distribution.png CHANGED

Git LFS Details

  • SHA256: 5dda0325d7fa22e407081d3c8a45b8a6998fad4cf903d248cfced93d823eb285
  • Pointer size: 131 Bytes
  • Size of remote file: 208 kB

Git LFS Details

  • SHA256: ff7d719e0ffa4bb8c74e009de95ee8b81f3cedc21b9c5d9cab6964af34d32722
  • Pointer size: 131 Bytes
  • Size of remote file: 218 kB
presentation/visuals/how2sign_top25_class_distribution.svg CHANGED
presentation/visuals/how2sign_top25_experiment_comparison.png CHANGED

Git LFS Details

  • SHA256: 4f1b59c4c1e8f9b48c6b128f872ea8449a8df68479afc57e078e386aa445d2fd
  • Pointer size: 131 Bytes
  • Size of remote file: 161 kB

Git LFS Details

  • SHA256: cd69a1e3a5af643ea648d3fc1e510b378808b0cae09ec1028fc854ebfae11cad
  • Pointer size: 131 Bytes
  • Size of remote file: 145 kB
presentation/visuals/how2sign_top25_experiment_comparison.svg CHANGED
report/BridgeLink_ASL_Final_Report.pdf DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:ed317f29207a8db5859dcaeb49d11df80fec0eda95e7aa40d6cb75511547e691
3
- size 923924
 
 
 
 
report/figures/how2sign_dataset_constraint.png DELETED

Git LFS Details

  • SHA256: dfd910751ddf5416b15996d922c7dd8436db4a2dec027e409b3b51d1e93e4047
  • Pointer size: 131 Bytes
  • Size of remote file: 241 kB
report/figures/how2sign_subset_benchmark.png DELETED

Git LFS Details

  • SHA256: ad3e6b4a7e520d2fba57f30cc0cae9e5e811b9cf23c15189fd7522c30fb37d0e
  • Pointer size: 131 Bytes
  • Size of remote file: 210 kB
report/figures/how2sign_top25_class_distribution.png DELETED

Git LFS Details

  • SHA256: 5dda0325d7fa22e407081d3c8a45b8a6998fad4cf903d248cfced93d823eb285
  • Pointer size: 131 Bytes
  • Size of remote file: 208 kB
report/figures/how2sign_top25_experiment_comparison.png DELETED

Git LFS Details

  • SHA256: 4f1b59c4c1e8f9b48c6b128f872ea8449a8df68479afc57e078e386aa445d2fd
  • Pointer size: 131 Bytes
  • Size of remote file: 161 kB
report/figures/vlm_how2sign_metrics.png DELETED
Binary file (48.5 kB)
 
report/main.tex CHANGED
@@ -1,361 +1,303 @@
1
- % BridgeLink ASL final project report
2
- % ITCS 4152/5010 Introduction to Computer Vision, Spring 2026
3
- % Compile from this directory with:
4
- % pdflatex main.tex ; bibtex main ; pdflatex main.tex ; pdflatex main.tex
5
 
6
  \documentclass[10pt,twocolumn,letterpaper]{article}
7
 
8
- \usepackage[margin=0.72in]{geometry}
9
  \usepackage{graphicx}
10
  \usepackage{amsmath}
11
  \usepackage{amssymb}
12
  \usepackage{booktabs}
13
  \usepackage{url}
14
  \usepackage{hyperref}
 
15
 
16
- \hypersetup{
17
- hidelinks=true
18
- }
19
-
20
- \setlength{\parskip}{0.35em}
21
- \setlength{\parindent}{0pt}
22
 
23
- \title{\vspace{-1.0em}\textbf{BridgeLink ASL: CNN vs VLM for Sign Recognition and Sentence Translation}}
24
 
25
- \author{
26
- Dalen Gordon \quad Ervin Gordon III \quad Frank Garcia \quad Omar Fraij\\
27
- University of North Carolina at Charlotte\\
28
- ITCS 4152/5010 -- Introduction to Computer Vision, Spring 2026
 
29
  }
30
 
31
- \date{}
32
-
33
  \begin{document}
34
  \maketitle
35
 
 
36
  \begin{abstract}
37
- BridgeLink ASL is a computer vision system for translating American Sign Language (ASL) video into English text. The project compares convolutional neural network (CNN) approaches against a vision-language model (VLM) approach across both isolated-sign recognition and sentence-level translation. The first branch is a real-time landmark CNN that converts webcam frames into MediaPipe Holistic pose and hand landmarks and classifies isolated WLASL signs from a rolling temporal buffer. The second branch is a sentence-level 3D CNN that consumes RGB How2Sign sentence clips directly, sampling 16 frames per video and learning spatiotemporal features with Conv3D layers. The third branch is a Qwen2.5-VL-3B VLM fine-tuned with QLoRA on How2Sign video-text pairs for open-ended sentence translation. The final deployed system supports live webcam recognition, uploaded word-sign clips, and uploaded sentence clips through a Gradio/Hugging Face interface with confidence-gated captions. On a 36-clip WLASL hybrid evaluation subset, the landmark CNN reaches 25.0\% top-1 accuracy and 58.3\% top-5 coverage, while a zero-shot VLM reranking workflow over the CNN top-5 reaches 25.0\% accuracy. On the repeated-sentence How2Sign subset, the strongest 3D CNN is the label-normalized top-25 model with 21 sentence classes, 335 training clips, 72 validation clips, 72 test clips, and 27.8\% held-out test accuracy. On a separate How2Sign translation experiment using 500 training clips and 100 validation clips, QLoRA fine-tuning improves the VLM from BLEU 0.13 / chrF 11.96 / ROUGE-L 0.067 to BLEU 1.26 / chrF 14.08 / ROUGE-L 0.107. Together, the experiments show that CNNs are the stronger short-phrase closed-vocabulary baseline, while the VLM better matches the full sentence translation objective even though it still needs more compute and data to become accurate.
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  \end{abstract}
39
 
 
40
  \section{Introduction}
41
-
42
- ASL is a complete visual language with its own grammar, facial expressions, body movement, and timing. In many everyday settings, however, hearing people do not know ASL and professional interpreters are not always available. This creates a communication barrier in classrooms, offices, medical spaces, and public services. The goal of BridgeLink ASL is to explore whether modern computer vision can reduce that barrier by converting ASL video input into readable English captions in a simple web interface.
43
-
44
- At the beginning of the project, we treated ASL recognition as an isolated-sign classification problem using WLASL. That approach produced a practical live webcam demo because isolated words can be represented with a short temporal sequence of hand and body landmarks. Later, after instructor feedback emphasized sentence classification rather than individual signs or still images, we extended the project to How2Sign, a continuous ASL dataset whose clips correspond to full English sentence translations. That change turned the project into a more direct CNN-versus-VLM comparison: could a closed-vocabulary video classifier solve the requirement well enough, or was a video-text translation model the better direction for sentence-level ASL? This final report documents both branches and explains where each one succeeds and where it breaks down.
45
-
46
- The project contributions are:
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  \begin{itemize}
48
- \item A working real-time ASL web application with webcam input, uploaded clip input, confidence-gated captions, and Hugging Face Space deployment support.
49
- \item A landmark-based temporal CNN for isolated WLASL signs using MediaPipe hand and pose landmarks.
50
- \item A sentence-level 3D CNN trained on RGB How2Sign full-sentence video clips, not still images.
51
- \item A Qwen2.5-VL-3B QLoRA fine-tuning pipeline for How2Sign video-to-English translation, preserved from the teammate Hugging Face Space workspace and imported into the main repository.
52
- \item Dataset analysis showing why all 31,047 local How2Sign clips cannot be used directly as independent sentence classes under a standard softmax classifier.
53
- \item Presentation and report figures generated with Matplotlib to show dataset sparsity, class distributions, model comparisons, 3D CNN experiments, and VLM fine-tuning results.
 
 
 
54
  \end{itemize}
55
 
56
- \section{Literature Review}
57
-
58
- \textbf{Word-level ASL recognition.} WLASL introduced a large video benchmark for word-level ASL recognition with 2,000 glosses and standardized subset sizes such as WLASL-100 and WLASL-300 \cite{li2020wlasl}. WLASL is useful for isolated sign recognition because each clip has a single gloss label. However, it is not designed for paragraph-length translation because the labels are words, not full sentence meanings.
59
-
60
- \textbf{Continuous ASL datasets.} How2Sign is a large-scale multimodal and multiview continuous ASL dataset with more than 80 hours of sign language videos and corresponding modalities including English transcripts, speech, depth, and pose-related data \cite{duarte2021how2sign}. The dataset is more aligned with our sentence-recognition requirement because its green-screen RGB clips are segmented around sentence-level English translations. This makes How2Sign a better fit than WLASL for testing whether a model can classify full signed sentences.
61
-
62
- \textbf{Landmark-based models.} MediaPipe Holistic provides real-time pose, hand, and face landmark estimation on consumer hardware \cite{grishchenko2020mediapipe}. Landmark representations are compact and reduce background variation, so they are well suited for webcam demos. Skeleton and graph-based sign methods, including skeleton-aware multimodal sign recognition, also show the value of pose representations for sign understanding \cite{jiang2021slgcn}.
63
-
64
- \textbf{3D CNN video models.} 3D CNNs extend standard 2D convolution by adding a temporal dimension. A Conv3D kernel learns local patterns across time, height, and width, making it appropriate for short video clips where motion matters \cite{tran2015c3d}. For our sentence branch, the 3D CNN receives sampled RGB frame volumes and learns from motion and appearance jointly.
65
-
66
- \textbf{Transformer and VLM baselines.} Sign Language Transformers frame sign recognition as a sequence modeling task \cite{camgoz2020signtransformer}. Beyond pure classifiers, recent vision-language models can directly map video content into text. Parameter-efficient fine-tuning methods such as LoRA \cite{hu2022lora} and QLoRA \cite{dettmers2023qlora} make this practical on smaller hardware by training lightweight adapters instead of fully updating every model weight. In our project, this became the main sentence-translation alternative to the CNN approach.
67
-
68
- \section{Data Description}
69
-
70
- Following the dataset-reporting style used in Section 3 of the Toyota Smarthome Untrimmed paper \cite{dai2020toyota}, we describe the source, modalities, labels, splits, and limitations of each dataset used in BridgeLink ASL.
71
-
72
- \subsection{WLASL Word-Level Data}
73
-
74
- WLASL is a public word-level ASL video dataset where each clip is labeled by an English gloss, such as \texttt{help}, \texttt{drink}, or \texttt{yes}. In our project, WLASL supports the live webcam and uploaded isolated-sign tab. The deployed WLASL label map contains 100 word classes. The reported WLASL evaluation artifact is a 36-clip WLASL-25 hybrid subset with 22 true classes. Each record contains the ground-truth label and the CNN top-5 candidates used for the VLM comparison.
75
-
76
- The WLASL branch does not solve full sentence translation. It is useful because it demonstrates real-time sign recognition and produces sensible output from webcam input, but it remains an isolated-sign classifier.
77
-
78
- \subsection{How2Sign Sentence Data}
79
-
80
- How2Sign provides continuous ASL videos aligned with English sentence translations. The data used in this project are green-screen RGB frontal-view clips. Each clip shows a signer from the upper body view, including the hands, arms, torso, face region, and green-screen background. The label is an English sentence string, for example \texttt{Thank you.}, \texttt{Here we go.}, or \texttt{One, two, three.}
81
-
82
- Our local How2Sign processing pipeline matched 31,047 sentence clips from the available RGB clip and translation files. However, approximately 30,008 of those labels are unique sentence strings. This is the central data issue. A standard softmax classifier needs multiple examples of each class so it can learn what visual variation belongs to the same label. If nearly every sentence appears once, then treating all 31,047 clips as 31,047 classes becomes memorization rather than learnable supervised classification.
83
-
84
- To make the task trainable within the current 3D CNN structure, we selected repeated sentence labels. Table~\ref{tab:how2sign-subsets} summarizes the usable repeated subsets. The final model uses the top-25 repeated sentence subset after conservative label normalization. Normalization merges punctuation and spelling variants such as \texttt{Hi!} with \texttt{Hi.}, \texttt{O.k.} with \texttt{Okay.}, and \texttt{Alright.} with \texttt{All right.} This reduced the top-25 subset from 25 raw labels to 21 normalized labels while keeping the same 479 clips.
85
-
86
- For the VLM branch, the data are represented differently. Instead of treating each sentence as a class, the imported Qwen2.5-VL workspace uses JSONL rows with \texttt{id}, \texttt{video\_path}, and \texttt{translation}. This means the model can train on arbitrary sentence-video pairs even if every sentence string is unique. The archived experiment we imported into the main repository uses 500 How2Sign training clips and 100 validation clips. This is a much smaller slice of the full dataset than the 31k local clip inventory, but unlike the 3D CNN classifier, the VLM objective is compatible with open-ended sentence labels.
87
-
88
- \begin{table}[t]
89
- \centering
90
- \small
91
- \begin{tabular}{lrr}
92
- \toprule
93
- Subset & Clips & Classes \\
94
- \midrule
95
- All matched How2Sign clips & 31,047 & 30,008 \\
96
- Repeated at least 2 times & 1,487 & 448 \\
97
- Repeated at least 3 times & 769 & 89 \\
98
- Repeated at least 5 times & 611 & 41 \\
99
- Repeated at least 8 times & 531 & 26 \\
100
- Top-12 repeated subset & 218 & 12 \\
101
- Top-25 repeated subset & 479 & 25 \\
102
- Top-25 normalized subset & 479 & 21 \\
103
- \bottomrule
104
- \end{tabular}
105
- \caption{How2Sign sentence-label sparsity. Most full sentence labels occur once, so the supervised CNN was trained on repeated sentence subsets.}
106
- \label{tab:how2sign-subsets}
107
- \end{table}
108
 
109
  \begin{figure}[t]
110
  \centering
111
- \includegraphics[width=\linewidth]{figures/how2sign_dataset_constraint.png}
112
- \caption{How2Sign dataset constraint. The project has access to many sentence clips, but most labels are singletons, which limits ordinary closed-vocabulary classification.}
113
- \label{fig:dataset-constraint}
114
  \end{figure}
115
 
116
  \begin{figure}[t]
117
  \centering
118
- \includegraphics[width=\linewidth]{figures/how2sign_top25_class_distribution.png}
119
- \caption{Class distribution for the normalized top-25 How2Sign sentence subset used by the final 3D CNN.}
120
- \label{fig:class-distribution}
 
121
  \end{figure}
122
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  \section{Method}
124
-
125
- \subsection{System Pipeline}
126
-
127
- BridgeLink ASL is implemented as a Gradio application. The live tab accepts webcam frames, the word clip tab accepts uploaded or recorded WLASL-style clips, and the sentence tab accepts uploaded How2Sign-style RGB sentence clips. The output is a caption area designed to avoid showing uncertain answers. When confidence is below the display threshold, the interface shows that no confident sign or sentence has been produced yet.
128
-
129
- \subsection{Landmark CNN for Word-Level Recognition}
130
-
131
- The WLASL branch uses MediaPipe Holistic as a fixed feature extractor. For each sampled frame, we collect 21 left-hand landmarks, 21 right-hand landmarks, and 33 pose landmarks. Each landmark contributes $(x,y,z)$ coordinates, producing a 225-dimensional feature vector per frame. A clip is represented as a sequence of 32 frames, so the input tensor is $32 \times 225$.
132
-
133
- The landmark classifier is a temporal 1D CNN:
134
- \begin{itemize}
135
- \item Input: 32-frame landmark sequence with 225 features per frame.
136
- \item Layers: BatchNorm1D, Conv1D with 128 channels, BatchNorm, ReLU, Dropout, Conv1D with 128 channels, BatchNorm, ReLU, MaxPool1D, Conv1D with 256 channels, BatchNorm, ReLU, Dropout, AdaptiveAvgPool1D, and a final linear classifier.
137
- \item Output: softmax probabilities over the deployed word-label set.
138
- \item Runtime filter: predictions are only displayed after confidence and stability checks so captions do not flicker.
139
- \end{itemize}
140
-
141
- The training notebook optimizes cross entropy with label smoothing 0.1 using AdamW, learning rate $10^{-3}$, weight decay $10^{-2}$, batch size 64, 50 epochs, and cosine annealing. The purpose of this model is to provide a fast, stable, real-time baseline for the live demo, not to solve sentence-level ASL.
142
-
143
- \subsection{Sentence-Level 3D CNN}
144
-
145
- The sentence model is the main video CNN contribution. It reads RGB video frames directly rather than landmarks. Each sentence clip is decoded, uniformly sampled to 16 frames, resized to $112 \times 112$, and stacked into a 5D input tensor:
146
- \[
147
- \mathbf{X} \in \mathbb{R}^{16 \times 112 \times 112 \times 3}.
148
- \]
149
-
150
- The final 3D CNN architecture is:
151
- \begin{itemize}
152
- \item Input layer named \texttt{clip\_frames}.
153
- \item Rescaling layer dividing pixels by 255.
154
- \item Conv3D block 1: 16 filters, $3 \times 3 \times 3$ kernel, ReLU, same padding, BatchNorm, MaxPool3D with pool $(1,2,2)$.
155
- \item Conv3D block 2: 32 filters, $3 \times 3 \times 3$ kernel, ReLU, same padding, BatchNorm, MaxPool3D with pool $(2,2,2)$.
156
- \item Conv3D block 3: 64 filters, $3 \times 3 \times 3$ kernel, ReLU, same padding, BatchNorm, MaxPool3D with pool $(2,2,2)$.
157
- \item GlobalAveragePooling3D layer named \texttt{clip\_embedding}.
158
- \item Dropout with rate 0.4.
159
- \item Dense softmax classifier over the sentence classes.
160
- \end{itemize}
161
-
162
- The cost function is sparse categorical cross entropy:
163
- \[
164
- \mathcal{L} = -\frac{1}{N}\sum_{i=1}^{N}\log p_\theta(y_i \mid \mathbf{X}_i),
165
- \]
166
- where $\mathbf{X}_i$ is the sampled RGB clip volume and $y_i$ is the sentence-class index. The optimizer is Adam \cite{kingma2015adam} with learning rate $3 \times 10^{-4}$. We used batch size 2 because raw RGB clip volumes are memory-heavy compared with landmark tensors. The default training schedule is 20 epochs with model checkpointing on validation accuracy, early stopping patience 5, and ReduceLROnPlateau on validation loss with patience 2 and factor 0.5.
167
-
168
- \subsection{Qwen2.5-VL VLM Translation Path}
169
-
170
- The teammate VLM workspace, originally maintained as a Hugging Face Space repository and then imported into the main project repository, fine-tunes \texttt{Qwen/Qwen2.5-VL-3B-Instruct} on How2Sign sentence-video pairs. This branch treats the task as conditional generation rather than classification. Given a video and a prompt, the model autoregressively generates the target English translation.
171
-
172
- The prompt used during training and evaluation is:
173
- \begin{quote}
174
- \small
175
- Translate the American Sign Language video into natural English. Output only the English translation.
176
- \end{quote}
177
-
178
- The video preprocessing settings match the lightweight 3D CNN clip budget closely enough to support a fair engineering comparison:
179
- \begin{itemize}
180
- \item Sampling rate: 2 FPS.
181
- \item Maximum frames: 16.
182
- \item Maximum decoded output length: 96 new tokens.
183
- \item Deterministic generation: no sampling, temperature 0.0.
184
- \end{itemize}
185
-
186
- Fine-tuning uses LoRA adapters with a QLoRA setup \cite{hu2022lora,dettmers2023qlora}. The archived configuration trains for 1 epoch with per-device batch size 1, gradient accumulation 8, learning rate $10^{-4}$, LoRA rank 16, LoRA alpha 32, LoRA dropout 0.05, NF4 4-bit quantization, and gradient checkpointing. The trainable target modules are the attention and MLP projection layers:
187
- \texttt{q\_proj}, \texttt{k\_proj}, \texttt{v\_proj}, \texttt{o\_proj}, \texttt{gate\_proj}, \texttt{up\_proj}, and \texttt{down\_proj}.
188
-
189
- The training loss for this branch is token-level autoregressive cross entropy over the reference translation text, with prompt tokens masked so only the target translation contributes to the loss. This is the key conceptual difference from the CNN branch: the VLM does not require a fixed sentence class list and is therefore compatible with unique sentence labels.
190
-
191
- \subsection{Embedding Retrieval Mode}
192
-
193
- The Hugging Face sentence demo can load the trained 3D CNN and use the \texttt{clip\_embedding} layer as a video embedding. At inference time, the uploaded clip is embedded and compared against a small support index built from repeated training clips. This nearest-neighbor mode is useful for the demo because it often gives more stable matches for short repeated phrases than raw softmax confidence alone. The report metrics, however, still evaluate the supervised 3D CNN classification checkpoints on held-out splits.
194
-
195
- \section{Experimentation}
196
-
197
- \subsection{Implementation}
198
-
199
- The project is implemented in Python 3.11. The live application uses Gradio, OpenCV, MediaPipe, PyTorch, TensorFlow/Keras, NumPy, and Hugging Face Hub. The sentence CNN is trained through the command-line module \texttt{bridgelink\_asl.cli.train\_cnn\_model}. The VLM experiment uses a separate Qwen2.5-VL workspace with \texttt{transformers}, \texttt{accelerate}, \texttt{peft}, \texttt{bitsandbytes}, \texttt{decord}, \texttt{datasets}, \texttt{evaluate}, \texttt{sacrebleu}, and \texttt{rouge-score}. That workspace was imported from the teammate Hugging Face Space into the main repository under \texttt{vlm\_hf\_space/} so the final GitLab submission contains the full VLM code and archived outputs. Figures are generated with Matplotlib from saved metrics and dataset summaries.
200
-
201
- \subsection{Splits}
202
-
203
- The final How2Sign normalized sentence dataset contains 479 clips across 21 normalized sentence labels. The split used for the final 3D CNN is:
204
- \begin{itemize}
205
- \item Training: 335 clips.
206
- \item Validation: 72 clips.
207
- \item Test: 72 clips.
208
- \end{itemize}
209
-
210
- The WLASL hybrid evaluation subset contains 36 test clips across 22 true labels. It is used to evaluate the landmark CNN and VLM reranking workflow.
211
-
212
- The imported How2Sign VLM experiment uses prepared JSONL manifests with:
213
- \begin{itemize}
214
- \item Training: 500 sampled sentence-video pairs.
215
- \item Validation / evaluation: 100 sampled sentence-video pairs.
216
- \end{itemize}
217
- These clips come from the broader How2Sign sentence corpus and are evaluated with translation metrics rather than classification accuracy.
218
-
219
- \subsection{Model Variants}
220
-
221
- We ran several CNN and VLM experiments:
222
- \begin{itemize}
223
- \item \textbf{Top-12 repeated subset:} early feasibility test with 218 clips and 12 classes.
224
- \item \textbf{Top-25 raw subset:} larger closed vocabulary with 479 clips and 25 sentence labels.
225
- \item \textbf{Top-25 normalized subset:} duplicate-label merge that reduces the label space to 21 classes.
226
- \item \textbf{Continued training:} additional epochs from the top-25 checkpoint.
227
- \item \textbf{Class weighting:} balanced class weights to compensate for label imbalance.
228
- \item \textbf{How2Sign VLM baseline:} zero-shot Qwen2.5-VL-3B evaluation on 100 validation clips.
229
- \item \textbf{How2Sign VLM QLoRA fine-tune:} 1 epoch of adapter training on 500 training clips, evaluated on the same 100 validation clips.
230
- \end{itemize}
231
-
232
- \section{Results}
233
-
234
- \subsection{Working Model Output}
235
-
236
- The final application produces sensible output in three ways. The live webcam tab displays stabilized word predictions from the landmark CNN. The upload tab returns word-level predictions with confidence values. The How2Sign sentence tab returns a sentence-level best match from the 3D CNN sentence model or withholds the caption if the result is not confident enough. This satisfies the modeling requirement that the system accepts input and produces interpretable output.
237
-
238
- \subsection{Quantitative Results}
239
-
240
- Table~\ref{tab:overall-results} gives the classification-side evaluation results. The best 3D CNN is the normalized How2Sign top-25 model. Its accuracy is not high in an absolute sense, but it is better than the raw top-25 and top-12 sentence baselines and is trained on full sentence video clips. The VLM results are reported separately because they are translation metrics rather than class-accuracy metrics.
241
-
242
- \begin{table}[t]
243
- \centering
244
- \small
245
- \resizebox{\linewidth}{!}{%
246
- \begin{tabular}{lrrrr}
247
- \toprule
248
- Model / Track & Eval clips & Classes & Accuracy & Macro F1 \\
249
- \midrule
250
- WLASL landmark CNN top-1 & 36 & 22 true & 25.0\% & 15.1\% \\
251
- WLASL VLM rerank & 36 & 22 true & 25.0\% & -- \\
252
- How2Sign 3D CNN normalized & 72 & 21 & 27.8\% & 6.0\% \\
253
- \bottomrule
254
- \end{tabular}
255
- }
256
- \caption{Primary classification results. The WLASL branch is word-level; the How2Sign branch is sentence-level RGB video classification.}
257
- \label{tab:overall-results}
258
- \end{table}
259
-
260
- \begin{table}[t]
261
- \centering
262
- \small
263
- \resizebox{\linewidth}{!}{%
264
- \begin{tabular}{lrrrrr}
265
- \toprule
266
- How2Sign experiment & Classes & Train & Val & Test & Test acc. \\
267
- \midrule
268
- Top-12 repeated & 12 & 150 & 34 & 34 & 14.7\% \\
269
- Top-25 raw & 25 & 335 & 72 & 72 & 20.8\% \\
270
- Top-25 normalized & 21 & 335 & 72 & 72 & \textbf{27.8\%} \\
271
- Top-25 continued & 25 & 335 & 72 & 72 & 18.1\% \\
272
- Top-25 weighted & 25 & 335 & 72 & 72 & 13.9\% \\
273
- \bottomrule
274
- \end{tabular}
275
- }
276
- \caption{Sentence-level 3D CNN ablation results. Label normalization gave the strongest held-out test accuracy.}
277
- \label{tab:how2sign-results}
278
- \end{table}
279
 
280
  \begin{table}[t]
281
  \centering
282
  \small
283
- \resizebox{\linewidth}{!}{%
284
- \begin{tabular}{lrrrr}
285
  \toprule
286
- How2Sign VLM run & Samples & BLEU & chrF & ROUGE-L \\
287
  \midrule
288
- Base Qwen2.5-VL-3B & 100 & 0.13 & 11.96 & 0.0668 \\
289
- QLoRA fine-tuned & 100 & \textbf{1.26} & \textbf{14.08} & \textbf{0.1074} \\
 
290
  \bottomrule
291
  \end{tabular}
292
- }
293
- \caption{How2Sign VLM translation results from the imported teammate workspace. Fine-tuning improves every reported translation metric, although the absolute scores remain low.}
294
- \label{tab:vlm-results}
 
295
  \end{table}
296
 
297
  \begin{figure}[t]
298
  \centering
299
- \includegraphics[width=\linewidth]{figures/how2sign_subset_benchmark.png}
300
- \caption{Top-12, top-25, and normalized top-25 3D CNN benchmark comparison.}
301
- \label{fig:subset-benchmark}
302
- \end{figure}
303
-
304
- \begin{figure}[t]
305
- \centering
306
- \includegraphics[width=\linewidth]{figures/how2sign_top25_experiment_comparison.png}
307
- \caption{3D CNN experiment comparison. The normalized sentence labels produced the best test accuracy.}
308
- \label{fig:experiment-comparison}
309
  \end{figure}
310
 
311
  \begin{figure}[t]
312
  \centering
313
- \includegraphics[width=\linewidth]{figures/vlm_how2sign_metrics.png}
314
- \caption{How2Sign VLM baseline versus QLoRA fine-tuned translation metrics on the archived 100-sample validation evaluation.}
315
- \label{fig:vlm-metrics}
316
  \end{figure}
317
 
318
- \subsection{Observations}
319
-
320
- The most important result is that dataset structure matters more than raw storage size. The project has access to about 31,000 local How2Sign clips, but a closed-vocabulary sentence classifier cannot learn 30,000 classes with one example per class. The repeated-sentence subset is much smaller, but it provides a trainable objective because each class has multiple examples.
321
-
322
- Label normalization improved the sentence model because the original labels contained separate classes for sentence variants that are visually and semantically almost identical. For example, \texttt{Okay.}, \texttt{Okay?}, and \texttt{O.k.} should not be treated as unrelated classes. Merging these labels reduced unnecessary class fragmentation and improved test accuracy from 20.8\% to 27.8\%.
323
-
324
- The imported VLM experiment shows the opposite tradeoff. Because the VLM predicts open-ended text, it can be trained on sentence-video pairs without repeated class labels. This makes it the more principled approach for full paragraph-level or free-form sentence translation. However, the archived fine-tuning run is still compute-limited and data-limited: it uses only 500 training clips and 100 evaluation clips, and the resulting BLEU / chrF / ROUGE-L scores remain low even though they improve over the base model. Qualitative predictions reveal another challenge: the model often produces generic instructional language or safety-style refusal text instead of grounded translations.
325
-
326
- Class weighting and continued training did not improve the final 3D CNN result. This suggests the bottleneck is not simply undertraining. The harder problem is limited repeated sentence data, visual similarity between short phrases, and the fact that English sentence labels do not always align perfectly with ASL timing. In short, the CNN is the stronger short-phrase closed-vocabulary baseline, while the VLM is the architecture that scales more naturally to unrestricted sentence translation.
327
-
328
- \subsection{Qualitative Results and Demo}
329
 
330
- The live demo is intentionally confidence-gated. If the model does not meet the confidence threshold, the UI displays ``No Confident Sign Yet'' or ``No Confident Sentence Yet'' rather than showing a likely incorrect caption. This is important for accessibility because a wrong caption can be worse than no caption. In successful sentence demos, short repeated phrases such as \texttt{Thank you.}, \texttt{One, two, three.}, and \texttt{Here we go.} are the best candidates because they exist in the repeated How2Sign training subset.
331
-
332
- The VLM branch is more useful as an offline experiment than as the final live demo path. In the archived predictions, the fine-tuned model does move away from outright refusals and toward sentence-like English outputs, but many generations are still semantically generic rather than clip-specific. That makes the VLM promising as the long-term direction, but not yet reliable enough to replace the gated CNN demo in a classroom presentation.
333
-
334
- \section{Limitations and Future Work}
335
-
336
- The current 3D CNN satisfies the requirement of using video clips of full ASL sentences, but it is a closed-vocabulary sentence classifier. It cannot read arbitrary paragraphs of sign language. To use all 31,047 clips effectively, the training objective would need to change from sentence-class classification to a video-to-text or contrastive video-text objective. The VLM branch already moves in that direction, but the current QLoRA run is too small to be competitive yet.
337
-
338
- Accuracy could be improved by:
339
- \begin{itemize}
340
- \item Expanding the repeated-label subset with more clips per sentence class for the CNN branch.
341
- \item Using signer-aware or source-aware train/test splits when signer metadata is available.
342
- \item Fine-tuning a pretrained video backbone instead of training a small 3D CNN from scratch.
343
- \item Combining RGB frames with landmark or pose streams to reduce background and clothing sensitivity.
344
- \item Training the VLM on a much larger portion of How2Sign instead of the current 500/100 sample budget.
345
- \item Evaluating with additional translation metrics and human judgment to better judge semantic correctness.
346
- \item Training a retrieval model that uses sentence text embeddings instead of requiring every sentence to be a separate class.
347
- \end{itemize}
348
 
 
349
  \section{Conclusion}
 
350
 
351
- BridgeLink ASL demonstrates a complete CNN-versus-VLM project pipeline for ASL recognition and translation. The landmark CNN provides a practical real-time word-sign demo, the How2Sign 3D CNN provides a working full-sentence video classifier, and the imported Qwen2.5-VL workspace provides the open-ended translation branch that better matches long-form sentence understanding. The best 3D CNN reaches 27.8\% test accuracy on a 21-class repeated-sentence task, while the fine-tuned VLM improves over its base checkpoint on BLEU, chrF, and ROUGE-L but still needs more training scale. The project therefore meets the core technical requirements while also making an honest technical point: CNNs are currently the stronger constrained demo path, but VLM-style video-to-text modeling is the more scalable direction for true sentence and paragraph translation.
352
-
353
- \section*{Acknowledgments}
 
 
 
354
 
355
- We thank the creators of WLASL, How2Sign, MediaPipe, TensorFlow, PyTorch, Gradio, and Hugging Face for releasing tools and datasets that made this project possible.
 
 
356
 
 
357
  {\small
358
- \bibliographystyle{plain}
359
  \bibliography{references}
360
  }
361
 
 
1
+ % BridgeLink ASL — CVPR 2024 camera-ready style
2
+ % ITCS 4152/5010 Final Project Report, Spring 2026
3
+ % This file drops into the cvpr2024-author_kit (camera-ready version).
4
+ % Compile with: pdflatex main.tex ; bibtex main ; pdflatex main.tex ; pdflatex main.tex
5
 
6
  \documentclass[10pt,twocolumn,letterpaper]{article}
7
 
8
+ \usepackage[review]{cvpr} % change to \usepackage{cvpr} for camera-ready
9
  \usepackage{graphicx}
10
  \usepackage{amsmath}
11
  \usepackage{amssymb}
12
  \usepackage{booktabs}
13
  \usepackage{url}
14
  \usepackage{hyperref}
15
+ \usepackage[capitalize]{cleveref}
16
 
17
+ \def\cvprPaperID{****}
18
+ \def\confName{CVPR}
19
+ \def\confYear{2024}
 
 
 
20
 
21
+ \title{BridgeLink ASL: CNN and Vision-Language Model Comparison\\ for Word-Level American Sign Language Recognition}
22
 
23
+ \author{%
24
+ Dalen Gordon \quad Ervin Gordon III \quad Frank Garcia \quad Omar Fraij \\
25
+ University of North Carolina at Charlotte \\
26
+ ITCS 4152/5010 --- Introduction to Computer Vision, Spring 2026 \\
27
+ {\tt\small \{dgordo34, egordo17, fgarci11, ofraij\}@charlotte.edu}
28
  }
29
 
 
 
30
  \begin{document}
31
  \maketitle
32
 
33
+ % -----------------------------------------------------------------------------
34
  \begin{abstract}
35
+ Communication barriers between Deaf and hearing communities remain a significant
36
+ accessibility challenge despite the availability of human interpreters and
37
+ captioning services. We present \textbf{BridgeLink ASL}, a real-time system for
38
+ word-level American Sign Language (ASL) recognition that runs on a standard
39
+ consumer laptop and a free Hugging Face Space. Our approach decomposes the
40
+ problem into (i) pose and hand landmark extraction using MediaPipe Holistic and
41
+ (ii) temporal classification with a lightweight temporal convolutional neural
42
+ network (CNN). We compare this trained CNN against a zero-shot vision-language
43
+ model (VLM) reranking workflow in which the VLM chooses from the CNN's top-5
44
+ candidate labels. Training on the WLASL-100 subset, our CNN reaches TODO\% top-1
45
+ and TODO\% top-5 accuracy on the held-out test set, and the VLM reranker reaches
46
+ TODO\% accuracy on a WLASL-25 held-out evaluation set. We keep a Transformer
47
+ encoder as an additional attention-based experiment, but the primary comparison
48
+ is CNN versus VLM-assisted reranking.
49
  \end{abstract}
50
 
51
+ % -----------------------------------------------------------------------------
52
  \section{Introduction}
53
+ \label{sec:intro}
54
+
55
+ American Sign Language is the primary language of an estimated half-million
56
+ Deaf individuals in the United States and an even larger community of signers
57
+ worldwide. In everyday settings --- classrooms, clinics, retail, transit ---
58
+ real-time ASL-to-English translation is rarely available, and the burden of
59
+ communication typically falls on the Deaf individual. Computer vision offers a
60
+ path to ambient, always-available translation tools that do not require human
61
+ interpreters or specialized hardware.
62
+
63
+ In this work we focus on \emph{word-level} recognition (also called isolated
64
+ sign recognition): given a short video of a signer producing one sign, predict
65
+ the corresponding English gloss. Word-level recognition is a necessary
66
+ building block for more ambitious continuous-translation systems and is
67
+ well-suited to a course-length project because of the availability of clean
68
+ benchmarks, mature feature extractors, and the ability to run and demo the
69
+ final system live in a classroom.
70
+
71
+ Our contributions are:
72
  \begin{itemize}
73
+ \item A complete, reproducible pipeline for WLASL-100 word-level ASL
74
+ recognition using MediaPipe Holistic landmarks and a lightweight temporal
75
+ CNN, trainable end-to-end on a single free-tier GPU.
76
+ \item A Gradio-based Hugging Face Space that serves the model with both
77
+ live webcam streaming and uploaded-clip inference, including sliding-window
78
+ temporal smoothing and text-to-speech output.
79
+ \item A CNN versus VLM comparison: the CNN provides top-5 sign candidates,
80
+ and a pretrained VLM reranks those candidates from the original video clip
81
+ without task-specific VLM fine-tuning.
82
  \end{itemize}
83
 
84
+ % -----------------------------------------------------------------------------
85
+ \section{Related Work}
86
+ \label{sec:related}
87
+
88
+ \paragraph{Isolated sign recognition.} WLASL~\cite{li2020wlasl} established a
89
+ large-scale word-level ASL benchmark with 2,000 glosses and standardized
90
+ WLASL-100/300/1000/2000 subsets; they also introduced I3D and Pose-TGCN
91
+ baselines. Follow-up work such as Sign Pose-based
92
+ Transformer~\cite{boha2021signpose} and SL-GCN~\cite{jiang2021slgcn} demonstrated
93
+ that skeleton-only models can match or exceed pixel-based methods while being
94
+ substantially more efficient.
95
+
96
+ \paragraph{Landmark-based recognition.} MediaPipe
97
+ Holistic~\cite{grishchenko2020mediapipe} provides a reliable, freely available
98
+ pose and hand estimator that runs in real time on CPU, which has made
99
+ landmark-based sign classification practical outside research labs.
100
+
101
+ \paragraph{Sign language transformers.} Camgoz et
102
+ al.~\cite{camgoz2020signtransformer} introduced the Sign Language Transformer
103
+ for joint recognition and translation on continuous sign. Although our task
104
+ scope is word-level, we borrow the basic idea of treating per-frame features
105
+ as a sequence and applying a Transformer encoder with a classification token.
106
+
107
+ % Replace the citation keys in references.bib. Five papers = 1 per team member.
108
+
109
+ % -----------------------------------------------------------------------------
110
+ \section{Dataset}
111
+ \label{sec:dataset}
112
+
113
+ \paragraph{WLASL-100.} We use the WLASL-100 subset of the Word-Level ASL
114
+ dataset~\cite{li2020wlasl}, which consists of the 100 most frequent glosses
115
+ from WLASL-2000. Each class contains approximately 15--20 short clips taken
116
+ from public ASL instructional videos and compiled into a single benchmark with
117
+ author-provided train/validation/test splits that avoid signer overlap across
118
+ splits. We obtain the pre-processed video mirror from a public Kaggle dataset
119
+ to avoid the YouTube link-rot that affects the official download script.
120
+
121
+ \paragraph{Dataset properties.} After removing clips whose videos are no longer
122
+ available, our working set contains TODO\_TRAIN training clips, TODO\_VAL
123
+ validation clips, and TODO\_TEST test clips across TODO\_CLASSES classes. We
124
+ retain the official WLASL split assignment so that our reported numbers are
125
+ directly comparable to prior work. \Cref{fig:classdist} and
126
+ \cref{fig:splitdist} summarize class and split distributions.
 
 
 
 
 
 
 
 
 
127
 
128
  \begin{figure}[t]
129
  \centering
130
+ \includegraphics[width=\linewidth]{figures/class_distribution.png}
131
+ \caption{Top-30 class distribution in our working WLASL-100 split.}
132
+ \label{fig:classdist}
133
  \end{figure}
134
 
135
  \begin{figure}[t]
136
  \centering
137
+ \includegraphics[width=0.8\linewidth]{figures/split_distribution.png}
138
+ \caption{Official train/validation/test split sizes retained in our
139
+ subset after accounting for unavailable videos.}
140
+ \label{fig:splitdist}
141
  \end{figure}
142
 
143
+ \paragraph{Annotation and licensing.} WLASL provides per-clip gloss labels,
144
+ temporal bounds (\texttt{frame\_start}, \texttt{frame\_end}), signer bounding
145
+ boxes, and subset membership tags. The dataset is distributed under the
146
+ Computational Use of Data Agreement (C-UDA), permitting academic and
147
+ computational use.
148
+
149
+ \paragraph{Preprocessing.} For each clip we trim to the labeled
150
+ \texttt{[frame\_start, frame\_end]} range, optionally crop to the provided
151
+ signer bounding box, and uniformly sample $T = 32$ frames. Each frame is
152
+ passed through MediaPipe Holistic, yielding 21 left-hand landmarks, 21
153
+ right-hand landmarks, and 33 pose landmarks, each with $(x, y, z)$ coordinates,
154
+ for a total feature vector of dimension $225$. A clip is therefore represented
155
+ as a $(32, 225)$ tensor of floats. Missing hands (which occur for non-dominant
156
+ signs or occlusion) are represented as zero vectors.
157
+
158
+ % -----------------------------------------------------------------------------
159
  \section{Method}
160
+ \label{sec:method}
161
+
162
+ \paragraph{Overview.} Our pipeline has three stages: (i) per-frame landmark
163
+ extraction, (ii) sequence-level classification with a temporal CNN, and
164
+ (iii) temporal smoothing at inference time for the live demo. A Transformer
165
+ encoder is retained as an optional attention-based extension.
166
+
167
+ \paragraph{Landmark extraction.} We use MediaPipe Holistic as a frozen
168
+ self-supervised feature extractor. MediaPipe Holistic is trained on large
169
+ amounts of web-scale data with self-supervised signals and provides stable
170
+ hand and pose landmarks at interactive rates on CPU, which makes it practical
171
+ for a free-tier demo. Using landmarks rather than raw pixels has three
172
+ benefits: the input representation is compact, invariant to background and
173
+ lighting, and the downstream model is small enough to train quickly and run
174
+ live on CPU.
175
+
176
+ \paragraph{Landmark CNN.} The landmark sequence $\mathbf{X} \in
177
+ \mathbb{R}^{T \times 225}$ is transposed into a channel-first representation
178
+ and passed through a temporal 1D CNN. The CNN uses batch normalization,
179
+ three convolutional blocks, ReLU activations, dropout, max pooling, and global
180
+ average pooling before a linear classification head. This model is the primary
181
+ trained classifier for the CNN-versus-VLM comparison.
182
+
183
+ \paragraph{Optional Transformer.} To address the attention/modern-methods
184
+ portion of the rubric, we also train an optional Transformer encoder on the
185
+ same MediaPipe landmark tensors. This model is reported as an extension rather
186
+ than the primary professor-facing comparison.
187
+
188
+ \paragraph{Loss and optimization.} We train the CNN with cross-entropy loss
189
+ with label smoothing of 0.1, using the AdamW optimizer with learning rate
190
+ $10^{-3}$, weight decay $10^{-2}$, and a cosine annealing schedule over 50
191
+ epochs. We clip gradients at a max norm of 1.0 and use a batch size of 64.
192
+
193
+ \paragraph{Augmentation.} To combat the relatively small dataset size we apply
194
+ three augmentations at training time: (i) Gaussian jitter on landmark
195
+ coordinates ($\sigma = 0.01$); (ii) horizontal flip, which we implement by
196
+ mirroring the $x$-coordinates of all landmarks and \emph{swapping} the
197
+ left-hand and right-hand blocks, so that a left-handed sign is transformed
198
+ into its right-handed counterpart rather than a physically impossible layout;
199
+ and (iii) random temporal dropout that zeros out a short contiguous window of
200
+ frames, encouraging the model to not rely on any single frame.
201
+
202
+ \paragraph{Inference-time smoothing.} In the live demo we maintain a rolling
203
+ buffer of the most recent $32$ frames and run the model every $4$ frames
204
+ (stride 4). A predicted sign is only emitted when its confidence exceeds
205
+ $\tau = 0.35$ and the same top-1 prediction has been produced on at least
206
+ $K = 2$ consecutive runs. This prevents spurious single-frame predictions
207
+ from appearing in the output caption.
208
+
209
+ % -----------------------------------------------------------------------------
210
+ \section{Experiments}
211
+ \label{sec:experiments}
212
+
213
+ \paragraph{Implementation.} Training is implemented in PyTorch 2.2 on a
214
+ Kaggle notebook with one NVIDIA T4 GPU. Landmark extraction uses the
215
+ MediaPipe Python package. End-to-end training (60 epochs including
216
+ evaluation on every epoch) takes approximately TODO minutes. The live demo is
217
+ deployed as a Hugging Face Space using Gradio.
218
+
219
+ \paragraph{Splits.} We use the official WLASL-100 train / validation / test
220
+ split, which assigns each clip to exactly one split by video ID and is
221
+ signer-disjoint across splits.
222
+
223
+ \paragraph{Baseline and comparison.} The primary trained model is a temporal
224
+ landmark CNN. We compare it against a pretrained VLM used in zero-shot reranking
225
+ mode. The VLM is not fine-tuned; instead, it receives the original clip and the
226
+ CNN's top-5 candidate labels and selects the best label from that constrained
227
+ set. The optional Transformer result is reported separately as an attention
228
+ extension.
229
+
230
+ \paragraph{Results.} \Cref{tab:main} reports top-1 and top-5 accuracy on the
231
+ WLASL-100 test split for the CNN and optional Transformer.
232
+ \Cref{fig:trainingcurves} shows training loss and validation accuracy over
233
+ epochs. \Cref{fig:confmat} shows the confusion matrix on the test split. We
234
+ observe that TODO (qualitative observations once you have real numbers ---
235
+ confusions between visually similar signs, classes with few training samples,
236
+ which augmentations helped most, etc.).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
237
 
238
  \begin{table}[t]
239
  \centering
240
  \small
241
+ \begin{tabular}{lcc}
 
242
  \toprule
243
+ Model & Top-1 Acc. & Top-5 Acc. \\
244
  \midrule
245
+ Landmark CNN (ours) & \textbf{TODO} & \textbf{TODO} \\
246
+ VLM reranker on CNN top-5 & TODO & -- \\
247
+ Optional Transformer & TODO & TODO \\
248
  \bottomrule
249
  \end{tabular}
250
+ \caption{Primary CNN versus VLM comparison. The VLM is evaluated as a
251
+ zero-shot reranker over the CNN's top-5 candidates rather than as a fine-tuned
252
+ classifier.}
253
+ \label{tab:main}
254
  \end{table}
255
 
256
  \begin{figure}[t]
257
  \centering
258
+ \includegraphics[width=\linewidth]{figures/training_curves.png}
259
+ \caption{Training loss and validation top-1 / top-5 accuracy over 60 epochs.}
260
+ \label{fig:trainingcurves}
 
 
 
 
 
 
 
261
  \end{figure}
262
 
263
  \begin{figure}[t]
264
  \centering
265
+ \includegraphics[width=\linewidth]{figures/confusion_matrix.png}
266
+ \caption{Confusion matrix on the WLASL-100 test split.}
267
+ \label{fig:confmat}
268
  \end{figure}
269
 
270
+ \paragraph{Qualitative results.} We record live webcam demonstrations of
271
+ common signs including \texttt{HELLO}, \texttt{THANK\_YOU}, \texttt{HELP},
272
+ \texttt{DRINK}, and \texttt{MORE}. The model tracks the signer at
273
+ interactive rates and emits a caption once the prediction stabilizes. A video
274
+ of the demo is linked in our GitLab repository.
 
 
 
 
 
 
275
 
276
+ \paragraph{Limitations.} Our system is limited to 100 glosses and does not
277
+ model co-articulation or sentence structure. Recognition accuracy degrades
278
+ under poor lighting, partial occlusion, or unusual camera angles because
279
+ MediaPipe Holistic becomes unreliable in those conditions. The model is
280
+ signer-independent but was not stress-tested on signers outside the WLASL
281
+ training distribution.
 
 
 
 
 
 
 
 
 
 
 
 
282
 
283
+ % -----------------------------------------------------------------------------
284
  \section{Conclusion}
285
+ \label{sec:conclusion}
286
 
287
+ We presented BridgeLink ASL, a practical real-time word-level ASL recognition
288
+ system built from MediaPipe Holistic landmarks and a lightweight CNN, with an
289
+ additional zero-shot VLM reranking comparison. The full pipeline trains in under an hour on a free GPU and runs
290
+ live on CPU in a hosted Hugging Face Space. We hope the system and its
291
+ accompanying code serve as a useful starting point for students building
292
+ accessibility tools in computer vision courses.
293
 
294
+ \paragraph{Acknowledgments.} We thank the creators of WLASL and MediaPipe for
295
+ releasing their data and tools to the research community, and our instructors
296
+ for their guidance throughout the project.
297
 
298
+ % -----------------------------------------------------------------------------
299
  {\small
300
+ \bibliographystyle{ieeenat_fullname}
301
  \bibliography{references}
302
  }
303
 
report/references.bib CHANGED
@@ -6,13 +6,6 @@
6
  year={2020}
7
  }
8
 
9
- @inproceedings{duarte2021how2sign,
10
- title={{How2Sign}: A Large-scale Multimodal Dataset for Continuous American Sign Language},
11
- author={Duarte, Amanda and Palaskar, Shruti and Ventura, Lucas and Ghadiyaram, Deepti and DeHaan, Kenneth and Metze, Florian and Torres, Jordi and Giro-i-Nieto, Xavier},
12
- booktitle={IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
13
- year={2021}
14
- }
15
-
16
  @article{grishchenko2020mediapipe,
17
  title={MediaPipe Holistic: Simultaneous Face, Hand and Pose Prediction, on Device},
18
  author={Grishchenko, Ivan and Bazarevsky, Valentin},
@@ -29,42 +22,6 @@
29
  year={2020}
30
  }
31
 
32
- @inproceedings{tran2015c3d,
33
- title={Learning Spatiotemporal Features with 3D Convolutional Networks},
34
- author={Tran, Du and Bourdev, Lubomir and Fergus, Rob and Torresani, Lorenzo and Paluri, Manohar},
35
- booktitle={IEEE International Conference on Computer Vision (ICCV)},
36
- pages={4489--4497},
37
- year={2015}
38
- }
39
-
40
- @article{kingma2015adam,
41
- title={Adam: A Method for Stochastic Optimization},
42
- author={Kingma, Diederik P. and Ba, Jimmy},
43
- journal={International Conference on Learning Representations (ICLR)},
44
- year={2015}
45
- }
46
-
47
- @inproceedings{hu2022lora,
48
- title={LoRA: Low-Rank Adaptation of Large Language Models},
49
- author={Hu, Edward J. and Shen, Yelong and Wallis, Phillip and Allen-Zhu, Zeyuan and Li, Yuanzhi and Wang, Lu and Wang, Weizhu and Chen, Weizhu},
50
- booktitle={International Conference on Learning Representations (ICLR)},
51
- year={2022}
52
- }
53
-
54
- @article{dettmers2023qlora,
55
- title={QLoRA: Efficient Finetuning of Quantized LLMs},
56
- author={Dettmers, Tim and Pagnoni, Artidoro and Holtzman, Ari and Zettlemoyer, Luke},
57
- journal={Advances in Neural Information Processing Systems (NeurIPS)},
58
- year={2023}
59
- }
60
-
61
- @article{dai2020toyota,
62
- title={Toyota Smarthome Untrimmed: Real-World Untrimmed Videos for Activity Detection},
63
- author={Dai, Rui and Das, Srijan and Sharma, Saurav and Minciullo, Luca and Garattoni, Lorenzo and Bremond, Francois and Francesca, Gianpiero},
64
- journal={arXiv preprint arXiv:2010.14982},
65
- year={2020}
66
- }
67
-
68
  @inproceedings{boha2021signpose,
69
  title={Sign Pose-Based Transformer for Word-Level Sign Language Recognition},
70
  author={Bohacek, Matyas and Hruz, Marek},
 
6
  year={2020}
7
  }
8
 
 
 
 
 
 
 
 
9
  @article{grishchenko2020mediapipe,
10
  title={MediaPipe Holistic: Simultaneous Face, Hand and Pose Prediction, on Device},
11
  author={Grishchenko, Ivan and Bazarevsky, Valentin},
 
22
  year={2020}
23
  }
24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  @inproceedings{boha2021signpose,
26
  title={Sign Pose-Based Transformer for Word-Level Sign Language Recognition},
27
  author={Bohacek, Matyas and Hruz, Marek},
results/how2sign_top25_dataset_summary.json CHANGED
@@ -1,25 +1,29 @@
1
  {
2
- "dataset": "WLASL-25 hybrid evaluation subset",
3
  "total_clips": 479,
4
- "num_classes": 21,
5
  "split_counts": {
6
  "test": 72,
7
  "train": 335,
8
  "val": 72
9
  },
10
  "class_counts": {
11
- "all right.": 21,
 
12
  "and one, two and three, four.": 9,
13
  "drop.": 8,
14
  "exhale.": 11,
15
  "good.": 60,
16
  "hello!": 14,
17
  "here we go.": 8,
18
- "hi.": 87,
 
19
  "inhale.": 9,
20
  "just like that.": 12,
21
  "lift.": 17,
22
- "okay.": 92,
 
 
23
  "one, two, three, four.": 19,
24
  "one, two, three.": 14,
25
  "squeeze.": 8,
 
1
  {
2
+ "dataset": "How2Sign repeated-sentence subset",
3
  "total_clips": 479,
4
+ "num_classes": 25,
5
  "split_counts": {
6
  "test": 72,
7
  "train": 335,
8
  "val": 72
9
  },
10
  "class_counts": {
11
+ "all right.": 9,
12
+ "alright.": 12,
13
  "and one, two and three, four.": 9,
14
  "drop.": 8,
15
  "exhale.": 11,
16
  "good.": 60,
17
  "hello!": 14,
18
  "here we go.": 8,
19
+ "hi!": 60,
20
+ "hi.": 27,
21
  "inhale.": 9,
22
  "just like that.": 12,
23
  "lift.": 17,
24
+ "o.k.": 17,
25
+ "okay.": 43,
26
+ "okay?": 32,
27
  "one, two, three, four.": 19,
28
  "one, two, three.": 14,
29
  "squeeze.": 8,
results/vlm_how2sign_metrics_summary.json DELETED
@@ -1,22 +0,0 @@
1
- {
2
- "source_dir": "C:\\Users\\ofrai\\OneDrive\\Documents\\BridgeLink-ASL\\vlm_hf_space\\outputs\\how2sign_qwen25vl_3b_qlora\\archive_500train_eval100",
3
- "num_samples": 100,
4
- "baseline": {
5
- "num_samples": 100,
6
- "bleu": 0.13190291190140932,
7
- "chrf": 11.964036429797746,
8
- "rouge_l": 0.0668393398798282
9
- },
10
- "finetuned": {
11
- "num_samples": 100,
12
- "bleu": 1.2645024575524115,
13
- "chrf": 14.076603963296414,
14
- "rouge_l": 0.10735543170596028
15
- },
16
- "delta": {
17
- "bleu": 1.1326,
18
- "chrf": 2.112568,
19
- "rouge_l": 0.040516
20
- },
21
- "figure_path": "C:\\Users\\ofrai\\OneDrive\\Documents\\BridgeLink-ASL\\report\\figures\\vlm_how2sign_metrics.png"
22
- }