Add nameplate classifier model
Browse files- README.md +128 -0
- config.json +19 -0
- model.pth +3 -0
- pytorch_model.bin +3 -0
README.md
ADDED
@@ -0,0 +1,128 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
language: en
|
3 |
+
tags:
|
4 |
+
- image-classification
|
5 |
+
- nameplate-detection
|
6 |
+
- industrial
|
7 |
+
- pytorch
|
8 |
+
- computer-vision
|
9 |
+
license: mit
|
10 |
+
datasets:
|
11 |
+
- kahua-ml/nameplate-classification
|
12 |
+
base_model: mobilenet_v2
|
13 |
+
pipeline_tag: image-classification
|
14 |
+
---
|
15 |
+
|
16 |
+
# Nameplate Classifier
|
17 |
+
|
18 |
+
## Model Description
|
19 |
+
|
20 |
+
This is a lightweight binary image classifier that determines whether an image contains a readable nameplate or not. The model is based on MobileNetV2 architecture and is optimized for industrial equipment nameplate detection.
|
21 |
+
|
22 |
+
## Model Details
|
23 |
+
|
24 |
+
- **Model Type**: Image Classification (Binary)
|
25 |
+
- **Architecture**: MobileNetV2 backbone with custom classifier
|
26 |
+
- **Framework**: PyTorch
|
27 |
+
- **Model Size**: ~9.4MB
|
28 |
+
- **Input Size**: 224x224 RGB images
|
29 |
+
- **Classes**:
|
30 |
+
- `no_nameplate` (0): Image does not contain a readable nameplate
|
31 |
+
- `has_nameplate` (1): Image contains a readable nameplate
|
32 |
+
|
33 |
+
## Training Data
|
34 |
+
|
35 |
+
The model was trained on the `kahua-ml/nameplate-classification` dataset, which contains:
|
36 |
+
- **Positive examples**: 3,456 images with nameplates from industrial equipment
|
37 |
+
- **Negative examples**: 826 images without nameplates from construction safety and industry datasets
|
38 |
+
- **Total**: 4,282 images
|
39 |
+
|
40 |
+
## Performance
|
41 |
+
|
42 |
+
- **Expected Accuracy**: 85-95%
|
43 |
+
- **Training Time**: ~10-15 minutes
|
44 |
+
- **Inference Speed**: Very fast (optimized for real-time applications)
|
45 |
+
|
46 |
+
## Usage
|
47 |
+
|
48 |
+
```python
|
49 |
+
import torch
|
50 |
+
import torchvision.transforms as transforms
|
51 |
+
from PIL import Image
|
52 |
+
|
53 |
+
# Load model
|
54 |
+
model = torch.load("model.pth", map_location='cpu')
|
55 |
+
model.eval()
|
56 |
+
|
57 |
+
# Prepare image
|
58 |
+
transform = transforms.Compose([
|
59 |
+
transforms.Resize((224, 224)),
|
60 |
+
transforms.ToTensor(),
|
61 |
+
transforms.Normalize(mean=[0.485, 0.456, 0.406],
|
62 |
+
std=[0.229, 0.224, 0.225])
|
63 |
+
])
|
64 |
+
|
65 |
+
# Predict
|
66 |
+
image = Image.open("your_image.jpg")
|
67 |
+
input_tensor = transform(image).unsqueeze(0)
|
68 |
+
|
69 |
+
with torch.no_grad():
|
70 |
+
outputs = model(input_tensor)
|
71 |
+
probabilities = torch.nn.functional.softmax(outputs, dim=1)
|
72 |
+
predicted = torch.max(outputs, 1)[1].item()
|
73 |
+
confidence = probabilities[0][predicted].item()
|
74 |
+
|
75 |
+
result = "has_nameplate" if predicted == 1 else "no_nameplate"
|
76 |
+
print(f"Prediction: {result} (Confidence: {confidence:.3f})")
|
77 |
+
```
|
78 |
+
|
79 |
+
## Applications
|
80 |
+
|
81 |
+
- Industrial equipment documentation
|
82 |
+
- Asset management systems
|
83 |
+
- Quality control in manufacturing
|
84 |
+
- Automated inventory systems
|
85 |
+
|
86 |
+
## Limitations
|
87 |
+
|
88 |
+
- Optimized for industrial nameplates
|
89 |
+
- May not work well on severely damaged or obscured nameplates
|
90 |
+
- Requires clear, readable text on nameplates
|
91 |
+
|
92 |
+
## Training Details
|
93 |
+
|
94 |
+
- **Optimizer**: Adam
|
95 |
+
- **Loss Function**: CrossEntropyLoss
|
96 |
+
- **Epochs**: 5
|
97 |
+
- **Batch Size**: 32
|
98 |
+
- **Learning Rate**: 0.001
|
99 |
+
- **Data Augmentation**: Random horizontal flip, rotation, color jitter
|
100 |
+
|
101 |
+
## Model Architecture
|
102 |
+
|
103 |
+
```
|
104 |
+
LightweightNameplateClassifier(
|
105 |
+
(backbone): MobileNetV2(
|
106 |
+
(classifier): Sequential(
|
107 |
+
(0): Dropout(p=0.2)
|
108 |
+
(1): Linear(in_features=1280, out_features=128)
|
109 |
+
(2): ReLU()
|
110 |
+
(3): Dropout(p=0.3)
|
111 |
+
(4): Linear(in_features=128, out_features=2)
|
112 |
+
)
|
113 |
+
)
|
114 |
+
)
|
115 |
+
```
|
116 |
+
|
117 |
+
## Citation
|
118 |
+
|
119 |
+
If you use this model in your research, please cite:
|
120 |
+
|
121 |
+
```
|
122 |
+
@misc{kahua-nameplate-classifier,
|
123 |
+
title={Lightweight Nameplate Classifier},
|
124 |
+
author={Kahua ML Team},
|
125 |
+
year={2024},
|
126 |
+
howpublished={\url{https://huggingface.co/kahua-ml/nameplate-classifier}}
|
127 |
+
}
|
128 |
+
```
|
config.json
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"architectures": [
|
3 |
+
"LightweightNameplateClassifier"
|
4 |
+
],
|
5 |
+
"model_type": "image-classification",
|
6 |
+
"num_classes": 2,
|
7 |
+
"id2label": {
|
8 |
+
"0": "no_nameplate",
|
9 |
+
"1": "has_nameplate"
|
10 |
+
},
|
11 |
+
"label2id": {
|
12 |
+
"no_nameplate": 0,
|
13 |
+
"has_nameplate": 1
|
14 |
+
},
|
15 |
+
"image_size": 224,
|
16 |
+
"backbone": "mobilenet_v2",
|
17 |
+
"framework": "pytorch",
|
18 |
+
"task": "image-classification"
|
19 |
+
}
|
model.pth
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:a7976def7f4d156f56251a1e661fa73f0603ea674f5e6c74ee8218772bd97429
|
3 |
+
size 9813242
|
pytorch_model.bin
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:531e5aeca5016aa40ad162d7fbb635edacb03b790ff60b820d4afb8055167135
|
3 |
+
size 9799674
|