Views
No views yet
| Metric | Score |
|---|---|
| Accuracy | 0.7389 |
| Precision | 0.7660 |
| Recall | 0.7423 |
| F1-Score | 0.7539 |
1import torch
2import torchaudio
3from huggingface_hub import hf_hub_download
4
5# Load model architecture (you'll need to define Custom1DCNN class)
6# See model architecture in the repository
7from model import Custom1DCNN
8
9model = Custom1DCNN(num_classes=2)
10model_path = hf_hub_download(repo_id="cxlrd/engine-knock-cnn1d", filename="model.pth")
11model.load_state_dict(torch.load(model_path, map_location='cpu'))
12model.eval()
13
14# Prepare audio
15waveform, sample_rate = torchaudio.load('audio.wav')
16if sample_rate != 16000:
17 waveform = torchaudio.transforms.Resample(sample_rate, 16000)(waveform)
18
19# Pad or truncate to 80000 samples
20if waveform.shape[1] > 80000:
21 waveform = waveform[:, :80000]
22else:
23 waveform = torch.nn.functional.pad(waveform, (0, 80000 - waveform.shape[1]))
24
25# Predict
26with torch.no_grad():
27 output = model(waveform)
28 prediction = torch.argmax(output, dim=1)
29 print('Clean' if prediction == 0 else 'Knocking')Conv1D(1→64, k=80, s=4) → BatchNorm → ReLU → MaxPool(4)
Conv1D(64→128, k=3) → BatchNorm → ReLU → MaxPool(4)
Conv1D(128→256, k=3) → BatchNorm → ReLU → MaxPool(4)
Conv1D(256→512, k=3) → BatchNorm → ReLU → AdaptiveAvgPool
Dropout(0.5) → Linear(512→128) → ReLU → Dropout(0.3) → Linear(128→2)1@misc{engine-knock-cnn1d,
2 author = {cxlrd},
3 title = {Engine Knock Detection with 1D CNN},
4 year = {2025},
5 publisher = {HuggingFace},
6 howpublished = {\url{https://huggingface.co/cxlrd/engine-knock-cnn1d}}
7}