Spaces:
Sleeping
Sleeping
Habeeb Okunade commited on
Commit ·
e2b01e7
0
Parent(s):
Training the Beit Model
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .gitattributes +4 -0
- Dockerfile +30 -0
- app.py +48 -0
- data/test/AMD/1736051691422.jpg +3 -0
- data/test/AMD/1736059500612.jpg +3 -0
- data/test/AMD/1736150438499.jpg +3 -0
- data/test/AMD/1736230256361.jpg +3 -0
- data/test/AMD/1736238086487.jpg +3 -0
- data/test/AMD/1736308347629.jpg +3 -0
- data/test/DMO/1735967109040.jpg +3 -0
- data/test/DMO/1736309728822.jpg +3 -0
- data/test/DMO/1736313646280.jpg +3 -0
- data/test/DMO/1736313646586.jpg +3 -0
- data/test/DMO/1736750977504.jpg +3 -0
- data/test/DR/1736229013500.jpg +3 -0
- data/test/DR/1736246127574.jpg +3 -0
- data/test/DR/1736573713479.jpg +3 -0
- data/test/DR/1736674429738.jpg +3 -0
- data/test/GLC/1736053862930.jpg +3 -0
- data/test/GLC/1736055876619.jpg +3 -0
- data/test/GLC/1736312466635.jpg +3 -0
- data/test/GLC/1736404283466.jpg +3 -0
- data/test/GLC/1736829787888.jpg +3 -0
- data/test/GLC/1736917199225.jpg +3 -0
- data/test/HR/1735972906946.jpg +3 -0
- data/test/HR/1735975088433.jpg +3 -0
- data/test/HR/1736056856336.jpg +3 -0
- data/test/HR/1736412969133.jpg +3 -0
- data/test/HR/1736567353636.jpg +3 -0
- data/test/HR/1736573124081.jpg +3 -0
- data/test/HR/1736661007443.jpg +3 -0
- data/test/HR/1736829787888.jpg +3 -0
- data/test/HR/1736926372380.jpg +3 -0
- data/test/NO/1736845337125.jpg +3 -0
- data/test/NO/1736916307298.jpg +3 -0
- data/test/NO/1736916453077.jpg +3 -0
- data/test/NO/1736916782202.jpg +3 -0
- data/test/NO/1736918586976.jpg +3 -0
- data/test/NO/1736924950806.jpg +3 -0
- data/test/NO/1736933030180.jpg +3 -0
- data/test/NO/1737001832303.jpg +3 -0
- data/test/NO/1737009313610.jpg +3 -0
- data/test/NO/1737009345917.jpg +3 -0
- data/train/AMD/1735805076901.jpg +3 -0
- data/train/AMD/1735970498953.jpg +3 -0
- data/train/AMD/1735972243906.jpg +3 -0
- data/train/AMD/1736051325693.jpg +3 -0
- data/train/AMD/1736053212903.jpg +3 -0
- data/train/AMD/1736054226367.jpg +3 -0
- data/train/AMD/1736054226530.jpg +3 -0
.gitattributes
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
*.png filter=lfs diff=lfs merge=lfs -text
|
| 2 |
+
*.jpg filter=lfs diff=lfs merge=lfs -text
|
| 3 |
+
*.jpeg filter=lfs diff=lfs merge=lfs -text
|
| 4 |
+
*.gif filter=lfs diff=lfs merge=lfs -text
|
Dockerfile
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM python:3.10-slim
|
| 2 |
+
|
| 3 |
+
# Create non-root user
|
| 4 |
+
RUN adduser --disabled-password --gecos '' user
|
| 5 |
+
USER user
|
| 6 |
+
|
| 7 |
+
# Environment variables
|
| 8 |
+
ENV HOME=/home/user \
|
| 9 |
+
PATH=/home/user/.local/bin:$PATH \
|
| 10 |
+
PORT=7860
|
| 11 |
+
|
| 12 |
+
WORKDIR $HOME/app
|
| 13 |
+
|
| 14 |
+
# Copy requirements first (better for Docker layer caching)
|
| 15 |
+
COPY --chown=user requirements.txt ./
|
| 16 |
+
RUN pip install --no-cache-dir -r requirements.txt
|
| 17 |
+
|
| 18 |
+
# Copy the rest of the application
|
| 19 |
+
COPY --chown=user . .
|
| 20 |
+
|
| 21 |
+
# Expose FastAPI default port for Hugging Face Spaces
|
| 22 |
+
EXPOSE 7860
|
| 23 |
+
|
| 24 |
+
# HF auth picked automatically from env (Spaces provides HF_TOKEN)
|
| 25 |
+
ENV HF_HOME=/root/.cache/huggingface \
|
| 26 |
+
TRANSFORMERS_CACHE=/root/.cache/huggingface/transformers \
|
| 27 |
+
TORCH_HOME=/root/.cache/torch
|
| 28 |
+
|
| 29 |
+
# Start API
|
| 30 |
+
CMD ["bash", "startup.sh"]
|
app.py
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# app.py
|
| 2 |
+
import os, json
|
| 3 |
+
from fastapi import FastAPI, UploadFile
|
| 4 |
+
from transformers import AutoImageProcessor, BeitForImageClassification
|
| 5 |
+
from PIL import Image
|
| 6 |
+
import torch
|
| 7 |
+
|
| 8 |
+
MODEL_DIR = "outputs/beit-retina"
|
| 9 |
+
CLASSES = ["AMD","DMO","DR","GLC","HR","Normal"]
|
| 10 |
+
|
| 11 |
+
app = FastAPI(title="Retina Disease Classifier")
|
| 12 |
+
|
| 13 |
+
# Lazy load model & processor
|
| 14 |
+
processor = None
|
| 15 |
+
model = None
|
| 16 |
+
|
| 17 |
+
def load_model():
|
| 18 |
+
global processor, model, CLASSES
|
| 19 |
+
processor = AutoImageProcessor.from_pretrained(MODEL_DIR)
|
| 20 |
+
model = BeitForImageClassification.from_pretrained(MODEL_DIR)
|
| 21 |
+
with open(os.path.join(MODEL_DIR, "labels.json")) as f:
|
| 22 |
+
CLASSES = json.load(f)
|
| 23 |
+
|
| 24 |
+
@app.on_event("startup")
|
| 25 |
+
def startup_event():
|
| 26 |
+
if os.path.exists(MODEL_DIR):
|
| 27 |
+
load_model()
|
| 28 |
+
|
| 29 |
+
@app.post("/predict")
|
| 30 |
+
async def predict(file: UploadFile):
|
| 31 |
+
if model is None:
|
| 32 |
+
return {"error": "Model not trained yet"}
|
| 33 |
+
img = Image.open(file.file).convert("RGB")
|
| 34 |
+
inputs = processor(images=img, return_tensors="pt")
|
| 35 |
+
with torch.no_grad():
|
| 36 |
+
logits = model(**inputs).logits
|
| 37 |
+
probs = torch.softmax(logits, dim=1)[0].tolist()
|
| 38 |
+
pred_id = int(torch.argmax(logits, dim=1).item())
|
| 39 |
+
return {
|
| 40 |
+
"class_id": CLASSES[pred_id],
|
| 41 |
+
"probabilities": [{CLASSES[i]: float(p) for i, p in enumerate(probs)}]
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
@app.post("/train")
|
| 45 |
+
async def train_endpoint():
|
| 46 |
+
os.system("python train.py") # blocking training run
|
| 47 |
+
load_model()
|
| 48 |
+
return {"status": "Training complete and model reloaded"}
|
data/test/AMD/1736051691422.jpg
ADDED
|
Git LFS Details
|
data/test/AMD/1736059500612.jpg
ADDED
|
Git LFS Details
|
data/test/AMD/1736150438499.jpg
ADDED
|
Git LFS Details
|
data/test/AMD/1736230256361.jpg
ADDED
|
Git LFS Details
|
data/test/AMD/1736238086487.jpg
ADDED
|
Git LFS Details
|
data/test/AMD/1736308347629.jpg
ADDED
|
Git LFS Details
|
data/test/DMO/1735967109040.jpg
ADDED
|
Git LFS Details
|
data/test/DMO/1736309728822.jpg
ADDED
|
Git LFS Details
|
data/test/DMO/1736313646280.jpg
ADDED
|
Git LFS Details
|
data/test/DMO/1736313646586.jpg
ADDED
|
Git LFS Details
|
data/test/DMO/1736750977504.jpg
ADDED
|
Git LFS Details
|
data/test/DR/1736229013500.jpg
ADDED
|
Git LFS Details
|
data/test/DR/1736246127574.jpg
ADDED
|
Git LFS Details
|
data/test/DR/1736573713479.jpg
ADDED
|
Git LFS Details
|
data/test/DR/1736674429738.jpg
ADDED
|
Git LFS Details
|
data/test/GLC/1736053862930.jpg
ADDED
|
Git LFS Details
|
data/test/GLC/1736055876619.jpg
ADDED
|
Git LFS Details
|
data/test/GLC/1736312466635.jpg
ADDED
|
Git LFS Details
|
data/test/GLC/1736404283466.jpg
ADDED
|
Git LFS Details
|
data/test/GLC/1736829787888.jpg
ADDED
|
Git LFS Details
|
data/test/GLC/1736917199225.jpg
ADDED
|
Git LFS Details
|
data/test/HR/1735972906946.jpg
ADDED
|
Git LFS Details
|
data/test/HR/1735975088433.jpg
ADDED
|
Git LFS Details
|
data/test/HR/1736056856336.jpg
ADDED
|
Git LFS Details
|
data/test/HR/1736412969133.jpg
ADDED
|
Git LFS Details
|
data/test/HR/1736567353636.jpg
ADDED
|
Git LFS Details
|
data/test/HR/1736573124081.jpg
ADDED
|
Git LFS Details
|
data/test/HR/1736661007443.jpg
ADDED
|
Git LFS Details
|
data/test/HR/1736829787888.jpg
ADDED
|
Git LFS Details
|
data/test/HR/1736926372380.jpg
ADDED
|
Git LFS Details
|
data/test/NO/1736845337125.jpg
ADDED
|
Git LFS Details
|
data/test/NO/1736916307298.jpg
ADDED
|
Git LFS Details
|
data/test/NO/1736916453077.jpg
ADDED
|
Git LFS Details
|
data/test/NO/1736916782202.jpg
ADDED
|
Git LFS Details
|
data/test/NO/1736918586976.jpg
ADDED
|
Git LFS Details
|
data/test/NO/1736924950806.jpg
ADDED
|
Git LFS Details
|
data/test/NO/1736933030180.jpg
ADDED
|
Git LFS Details
|
data/test/NO/1737001832303.jpg
ADDED
|
Git LFS Details
|
data/test/NO/1737009313610.jpg
ADDED
|
Git LFS Details
|
data/test/NO/1737009345917.jpg
ADDED
|
Git LFS Details
|
data/train/AMD/1735805076901.jpg
ADDED
|
Git LFS Details
|
data/train/AMD/1735970498953.jpg
ADDED
|
Git LFS Details
|
data/train/AMD/1735972243906.jpg
ADDED
|
Git LFS Details
|
data/train/AMD/1736051325693.jpg
ADDED
|
Git LFS Details
|
data/train/AMD/1736053212903.jpg
ADDED
|
Git LFS Details
|
data/train/AMD/1736054226367.jpg
ADDED
|
Git LFS Details
|
data/train/AMD/1736054226530.jpg
ADDED
|
Git LFS Details
|