--- language: - en library_name: tensorflow pipeline_tag: image-classification tags: - asl - sign-language - cnn - reproducible-research --- # ASL-HG CNN baseline (`cnn-001`) A TensorFlow/Keras CNN baseline for 36 static ASL classes (digits `0–9`, letters `A–Z`). This repository contains the trained checkpoint **and the full experiment record** needed to reproduce or audit the result. ## Result | Metric | Value | |---|---:| | Test accuracy | 83.2544% | | Macro F1 | 80.0983% | | Macro precision / recall | 79.5670% / 83.3056% | | Best validation accuracy | 72.0964% | | Epochs run | 15 | | Recall `O` / `0` | 100.0000% / 0.0000% | This is a deliberately simple CNN-from-scratch baseline, not the final proposed model. In particular, digit `0` has zero recall in this run, so later improvements should report this class separately. ## Evaluation protocol - Dataset: [`hnam25/asl-hand-gesture-images`](https://huggingface.co/datasets/hnam25/asl-hand-gesture-images), revision `8f36ac00ece6dfce94410a980a839d93a912d366`. - Input: the publisher's `ASL_Processed_Images.zip`, SHA-256 `a8e7a38c4085fd9dc18aa4fa8646ad7d6917e9ff7374a3ffd5f9f3b37a5c045b`. - Audit source: `metadata/colab-audit-2026-08-10`; the raw archive fingerprint and audit statistics are preserved in `metadata/experiment_config.json`. - Exact duplicate policy: retain one deterministic canonical image per raw-image SHA-256. The run removes 559 duplicate crops from 36000 usable images. - Split: **participant-disjoint**. Train: P1, P10, P3, P4, P5, P6, P7, P8; validation: P2; test: P9. No participant or exact image hash appears in multiple partitions. - Seed: 42. Split files and the deduplication manifest are included under `metadata/`. This participant-disjoint protocol is stricter than the publisher's supplied image-level train/test archive split and should not be numerically compared with a random image-level split. ## Model `Rescaling(1/255) → 3 × [Conv-BN-ReLU-Conv-BN-ReLU-MaxPool] (32/64/128 filters) → GAP → Dense(256) → Dropout(0.3) → Dense(36, softmax)`. Training used Adam (`1e-3`), image size 128, batch size 64, at most 30 epochs, checkpointing on validation accuracy, early stopping on validation loss, and learning-rate reduction on plateau. Best validation accuracy occurred at epoch 10. ## Files - `models/cnn_001_participant_disjoint.keras`: best checkpoint. - `metrics/`: summary, per-class report, confusion matrix. - `figures/confusion_matrix.png`: visual confusion matrix. - `logs/training_history.csv`: full optimization history. - `metadata/experiment_config.json`: pinned data/config provenance. - `metadata/split_manifest.json`, `train.csv`, `validation.csv`, `test.csv`, `deduplication_manifest.csv`: exact protocol and partitions. - `reproducibility/08_cnn_baseline_reproducible.ipynb`: Colab notebook used for this run. - `reproducibility/requirements.txt`: project requirements snapshot. ## Reproduce Open the included notebook in Google Colab, run it on a T4 GPU, and use the pinned dataset revision already embedded in the notebook. It downloads public data and audit metadata, verifies the processed archive and audit mapping, recreates the exact participant split, trains, and writes the same artifact layout.