sdrfsh's picture
Update README.md
4a27c4c verified
|
Raw
History Blame Contribute Delete
4.54 kB
---
library_name: keras
license: mit
pipeline_tag: image-classification
tags:
- alexnet
- tensorflow
- keras
- image-classification
- activity-recognition
metrics:
- accuracy
- f1
---
# AlexNet Binary Classifier - Real-Time Activity and Intention Recognition
AlexNet-style convolutional neural network that classifies whether a person is **entering a door** or just **passing by** it. Trained with TensorFlow/Keras as part of the
**[Real-Time Activity and Intention Recognition](https://github.com/sdrfsh/realtime-activity-and-intention-recognition)** project.
## Model Details
- **Architecture:** AlexNet (5 conv layers + BatchNorm, 3×3 overlapping max-pooling, two 4096-unit dense layers with 0.5 dropout, softmax output)
- **Framework:** TensorFlow / Keras (saved in the modern `.keras` format)
- **Input:** RGB image, 227×227×3, raw 0-255 pixel values (rescaling to [0, 1] is built into the model - do **not** normalize before feeding images)
- **Output:** softmax probabilities over 2 classes
- `0` - **passing by** the door
- `1` - **entering** the door
## Performance
Evaluated on a held-out, balanced test set of 1,120 images (560 per class):
| Metric | Value |
|---|---|
| Test accuracy | **98.84%** |
| F1-score (passing by, 0) | 0.99 |
| F1-score (entering, 1) | 0.99 |
| Test loss | 0.0755 |
Confusion matrix:
| | Pred: passing by | Pred: entering |
|---|---|---|
| **True: passing by** | 548 | 12 |
| **True: entering** | 1 | 559 |
## Usage
```python
import keras
import numpy as np
from huggingface_hub import hf_hub_download
model_path = hf_hub_download(
repo_id="sdrfsh/alexnet-door-entry-classifier",
filename="alexnet.keras",
)
model = keras.models.load_model(model_path)
img = keras.utils.load_img("image.jpg", target_size=(227, 227))
x = np.expand_dims(keras.utils.img_to_array(img), axis=0)
probs = model.predict(x)
label = int(probs.argmax(axis=1)[0])
class_names = {0: "passing by", 1: "entering"}
print(f"Prediction: {class_names[label]} (confidence {probs.max():.2%})")
```
## Training
- Optimizer: Adam (initial LR 1e-4, reduced on plateau)
- Loss: sparse categorical cross-entropy
- Regularization: dropout 0.5 on dense layers, batch normalization, early stopping on validation loss (best weights restored)
- Data split: 72% train / 18% validation / 10% test (stratified)
Full training code and the wider project (real-time inference pipeline, data preparation) are available in the GitHub repository:
👉 **https://github.com/sdrfsh/realtime-activity-and-intention-recognition**
## Fine-tuning for other activity-recognition tasks
This model can be used as a starting point and **fine-tuned on other activity-recognition datasets** (e.g., different actions, intentions, or interaction classes). The convolutional layers have learned general visual features from person/door scenes, so for a related task you can reuse them and retrain only the classification head, then optionally unfreeze the full network:
```python
import keras
from keras import layers
from huggingface_hub import hf_hub_download
path = hf_hub_download("sdrfsh/alexnet-door-entry-classifier", "alexnet.keras")
base = keras.models.load_model(path)
NUM_CLASSES = 4 # number of classes in your dataset
# Reuse everything except the final classification layer
backbone = keras.Model(base.inputs, base.layers[-2].output)
backbone.trainable = False # stage 1: freeze the pretrained layers
model = keras.Sequential([
backbone,
layers.Dense(NUM_CLASSES, activation="softmax"),
])
model.compile(optimizer=keras.optimizers.Adam(1e-3),
loss="sparse_categorical_crossentropy", metrics=["accuracy"])
model.fit(train_ds, validation_data=val_ds, epochs=10)
# Stage 2 (optional): unfreeze and fine-tune the whole network at a low LR
backbone.trainable = True
model.compile(optimizer=keras.optimizers.Adam(1e-5),
loss="sparse_categorical_crossentropy", metrics=["accuracy"])
model.fit(train_ds, validation_data=val_ds, epochs=10)
```
Input images should be 227×227×3 with raw 0-255 pixel values, as with the base model.
## Limitations
- Trained specifically to distinguish a person **entering** a door from a person **passing by** it; performance on other scenes, camera angles, or doors unlike those in the training data is untested.
- Input images must be resizable to 227×227 without destroying the relevant content.
## Citation
If you use this model, please link back to the [GitHub repository](https://github.com/sdrfsh/realtime-activity-and-intention-recognition).