Commit
·
8c3c7d8
1
Parent(s):
d8c83d4
initial model push
Browse files- .gitattributes +0 -34
- README.md +5 -0
- config.json +18 -0
- handler.py +35 -0
- model.safetensors +3 -0
- requirements.txt +4 -0
.gitattributes
CHANGED
|
@@ -1,35 +1 @@
|
|
| 1 |
-
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
-
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
-
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
-
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
-
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
-
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
-
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 8 |
-
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 9 |
-
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
-
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
-
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
-
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
-
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
-
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
-
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
-
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
-
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
-
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
-
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
-
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
-
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
-
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
-
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
-
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
-
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 27 |
-
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
-
*.tar filter=lfs diff=lfs merge=lfs -text
|
| 29 |
-
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 30 |
-
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 31 |
-
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 32 |
-
*.xz filter=lfs diff=lfs merge=lfs -text
|
| 33 |
-
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
-
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
-
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
README.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Garbage Classifier · EfficientNet‑V2‑S (torchvision)
|
| 2 |
+
|
| 3 |
+
Finetuned model for 10‑class garbage image classification.
|
| 4 |
+
|
| 5 |
+
> **Owner:** `attilaultzindur` • **Pushed:** 2025-05-05
|
config.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"architecture": "torchvision_efficientnet_v2_s",
|
| 3 |
+
"input_size": 224,
|
| 4 |
+
"num_labels": 10,
|
| 5 |
+
"label_names": [
|
| 6 |
+
"battery",
|
| 7 |
+
"biological",
|
| 8 |
+
"cardboard",
|
| 9 |
+
"clothes",
|
| 10 |
+
"glass",
|
| 11 |
+
"metal",
|
| 12 |
+
"paper",
|
| 13 |
+
"plastic",
|
| 14 |
+
"shoes",
|
| 15 |
+
"trash"
|
| 16 |
+
],
|
| 17 |
+
"library": "torchvision"
|
| 18 |
+
}
|
handler.py
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from typing import Dict, Any
|
| 2 |
+
import io, base64, torch, torchvision
|
| 3 |
+
from PIL import Image
|
| 4 |
+
from torchvision import transforms as T
|
| 5 |
+
|
| 6 |
+
class EndpointHandler:
|
| 7 |
+
def __init__(self, path='.'): # path = repo root in container
|
| 8 |
+
self.labels = ['battery', 'biological', 'cardboard', 'clothes', 'glass', 'metal', 'paper', 'plastic', 'shoes', 'trash']
|
| 9 |
+
self.model = torchvision.models.efficientnet_v2_s(weights=None)
|
| 10 |
+
nf = self.model.classifier[1].in_features
|
| 11 |
+
self.model.classifier = torch.nn.Sequential(
|
| 12 |
+
torch.nn.Linear(nf, 256),
|
| 13 |
+
torch.nn.ReLU(inplace=True),
|
| 14 |
+
torch.nn.Dropout(0.5),
|
| 15 |
+
torch.nn.Linear(256, len(self.labels))
|
| 16 |
+
)
|
| 17 |
+
self.model.load_state_dict(torch.load(f"{path}/model.safetensors", map_location="cpu"))
|
| 18 |
+
self.model.eval()
|
| 19 |
+
self.trans = T.Compose([
|
| 20 |
+
T.Resize((224, 224)),
|
| 21 |
+
T.ToTensor(),
|
| 22 |
+
T.Normalize(mean=[0.485,0.456,0.406], std=[0.229,0.224,0.225])
|
| 23 |
+
])
|
| 24 |
+
|
| 25 |
+
def __call__(self, data: Dict[str, Any]):
|
| 26 |
+
img_bytes = data['inputs']
|
| 27 |
+
if isinstance(img_bytes, str): # base64
|
| 28 |
+
img_bytes = base64.b64decode(img_bytes)
|
| 29 |
+
img = Image.open(io.BytesIO(img_bytes)).convert('RGB')
|
| 30 |
+
x = self.trans(img).unsqueeze(0)
|
| 31 |
+
with torch.no_grad():
|
| 32 |
+
probs = self.model(x).softmax(1)[0]
|
| 33 |
+
topk = probs.topk(5)
|
| 34 |
+
return [{'label': self.labels[i], 'score': float(topk.values[j])}
|
| 35 |
+
for j, i in enumerate(topk.indices)]
|
model.safetensors
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:f0d1ba4d1966d0cf2eb8143e5c3b64f50d3e2c5484c67036dfcf52936cbb319c
|
| 3 |
+
size 82726304
|
requirements.txt
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
torch
|
| 2 |
+
torchvision
|
| 3 |
+
pillow
|
| 4 |
+
safetensors
|