|
Download README.md from basant18/Post-Training-Quantization: direct link, hf CLI and curl.
- Browser
- Download file 3.43 kB
-
https://huggingface.co/basant18/Post-Training-Quantization/resolve/main/README.md
- Command line
-
hf download hf://basant18/Post-Training-Quantization/README.md
-
curl -L -o README.md https://huggingface.co/basant18/Post-Training-Quantization/resolve/main/README.md
3.43 kB
| license: apache-2.0 | |
| language: | |
| - en | |
| # Model Quantization Notebook | |
| This notebook converts a pre-trained Keras violence detection model into TensorFlow Lite (TFLite) format using three different quantization strategies, making it suitable for deployment on edge/mobile devices. | |
| --- | |
| ## Overview | |
| | Property | Details | | |
| |---|---| | |
| | **Framework** | TensorFlow / TFLite | | |
| | **Base Model** | `modelv2.keras` β a Keras video violence detection model | | |
| | **Input Shape** | `(1, 16, 224, 224, 3)` β batch Γ frames Γ height Γ width Γ channels | | |
| | **Architecture** | CNN + LSTM (contains dynamic LSTM loops) | | |
| | **Platform** | Kaggle (GPU hidden to avoid CuDNN conflicts) | | |
| --- | |
| ## Quantization Methods | |
| ### A β Dynamic Range Quantization | |
| - **Output file:** `model_dynamic_quant.tflite` | |
| - Quantizes weights from float32 to int8 at **conversion time**. | |
| - Activations are quantized **dynamically** at inference time. | |
| - Fastest to convert; no calibration data required. | |
| - Good balance between size reduction and accuracy. | |
| ### B β Float16 Quantization | |
| - **Output file:** `model_fp16_quant.tflite` | |
| - Reduces weight precision from float32 to **float16**. | |
| - Ideal for GPU-accelerated edge devices that support fp16 natively. | |
| - Smaller model size with minimal accuracy loss. | |
| ### C β Full Integer (INT8) Quantization | |
| - **Output file:** `model_full_int8.tflite` | |
| - Quantizes **both weights and activations** to int8. | |
| - Requires a **representative dataset** for calibration (currently uses random dummy data β replace with real video samples for best results). | |
| - Input and output tensors are also forced to int8. | |
| - Smallest model size; best suited for CPU-only or microcontroller deployment. | |
| --- | |
| ## Requirements | |
| ``` | |
| tensorflow | |
| numpy | |
| ``` | |
| --- | |
| ## Usage | |
| ### 1. Load the Base Model | |
| ```python | |
| import tensorflow as tf | |
| tf.config.set_visible_devices([], 'GPU') # Hide GPU to avoid CuDNN issues | |
| model = tf.keras.models.load_model('path/to/modelv2.keras') | |
| ``` | |
| ### 2. Run Quantization | |
| Open and run the notebook cells in order: | |
| 1. **Cell 1β2** β Load the model | |
| 2. **Cell 3β4** β Dynamic range quantization β `model_dynamic_quant.tflite` | |
| 3. **Cell 5β6** β Float16 quantization β `model_fp16_quant.tflite` | |
| 4. **Cell 7β8** β Full INT8 quantization β `model_full_int8.tflite` | |
| --- | |
| ## Important Notes | |
| - **Representative dataset:** The INT8 quantization cell uses random dummy data for calibration. For production use, replace `dummy_data` in `representative_data_gen()` with real video frames from your training set to get accurate quantization ranges. | |
| - **LSTM compatibility flags:** The model contains dynamic LSTM loops. The following flags are set in all conversion paths to prevent conversion failures: | |
| ```python | |
| converter.target_spec.supported_ops = [ | |
| tf.lite.OpsSet.TFLITE_BUILTINS, | |
| tf.lite.OpsSet.SELECT_TF_OPS | |
| ] | |
| converter._experimental_lower_tensor_list_ops = False | |
| ``` | |
| - **Static input shape:** The INT8 path uses `tf.function` with a `tf.TensorSpec` to lock the input shape to `(1, 16, 224, 224, 3)` before conversion β this is required for correct INT8 LSTM quantization. | |
| --- | |
| ## Output Files | |
| | File | Method | Precision | | |
| |---|---|---| | |
| | `model_dynamic_quant.tflite` | Dynamic Range | Weights: INT8, Activations: float32 | | |
| | `model_fp16_quant.tflite` | Float16 | Weights & Activations: float16 | | |
| | `model_full_int8.tflite` | Full Integer | Weights & Activations: INT8 | |