Views
No views yet
| Model | AUROC | Size | AUROC Drop |
|---|---|---|---|
| Original FP32 | 0.7923 | 3.8 MB | — |
| Quantized INT8 | 0.6756 | 1.47 MB | 0.1167 |
1import torch
2import torch.nn as nn
3import torch.quantization
4import joblib
5import librosa
6import numpy as np
7
8# Define ImprovedTBCNN with QuantStub/DeQuantStub
9# (see quantization.ipynb for full class definition)
10
11# Load quantized bundle
12bundle = joblib.load('quantized_fusion_model.pkl')
13
14# Rebuild quantized model structure
15model = ImprovedTBCNN(dropout=0.4)
16model.eval()
17torch.quantization.fuse_modules(model, [...], inplace=True)
18model.qconfig = torch.quantization.get_default_qconfig('fbgemm')
19torch.quantization.prepare(model, inplace=True)
20torch.quantization.convert(model, inplace=True)
21model.load_state_dict(bundle['audio_model_state'])
22model.eval()
23
24# Preprocess audio
25audio, _ = librosa.load('cough.wav', sr=22050, duration=5)
26audio = np.pad(audio, (0, max(0, 22050*5 - len(audio))))[:22050*5]
27mel = librosa.feature.melspectrogram(y=audio, sr=22050, n_mels=128, n_fft=2048, hop_length=512)
28log_mel = librosa.power_to_db(mel, ref=np.max)
29log_mel = (log_mel - log_mel.min()) / (log_mel.max() - log_mel.min() + 1e-8)
30mel_tensor = torch.FloatTensor(log_mel).unsqueeze(0).unsqueeze(0)
31
32# Predict
33with torch.no_grad():
34 prob = torch.sigmoid(model(mel_tensor)).item()
35print('TB probability:', prob)