AdarshRajDS commited on
Commit
2b8b06c
·
1 Parent(s): 6d5d66b

Add ResNet baseline and ConvNeXt v2 backend

Browse files
Files changed (3) hide show
  1. app.py +17 -2
  2. dino.py +7 -1
  3. requirements.txt +0 -1
app.py CHANGED
@@ -14,7 +14,7 @@ from advanced_decision import (
14
  from gradcam import GradCAM
15
  from typing import Optional
16
 
17
- app = FastAPI(title="Mold Detection API v2 (ConvNeXt)")
18
 
19
  app.add_middleware(
20
  CORSMiddleware,
@@ -118,7 +118,22 @@ def ensure_dino():
118
  async def predict_v1(file: UploadFile):
119
  img = Image.open(io.BytesIO(await file.read())).convert("RGB")
120
  img_t = transform(img).to(device)
121
- return final_decision(model, img_t)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
 
123
 
124
  @app.post("/predict/v2")
 
14
  from gradcam import GradCAM
15
  from typing import Optional
16
 
17
+ app = FastAPI(title="Mold Detection API (ResNet + ConvNeXt)")
18
 
19
  app.add_middleware(
20
  CORSMiddleware,
 
118
  async def predict_v1(file: UploadFile):
119
  img = Image.open(io.BytesIO(await file.read())).convert("RGB")
120
  img_t = transform(img).to(device)
121
+
122
+ with torch.no_grad():
123
+ out = model(img_t.unsqueeze(0))
124
+ cp = torch.softmax(out["class"], 1)[0]
125
+ bp = torch.softmax(out["bio"], 1)[0]
126
+
127
+ mold_p = cp[mold_idx].item()
128
+ bio_p = bp[1].item()
129
+
130
+ decision = final_decision(mold_p, bio_p)
131
+
132
+ return {
133
+ "decision": decision,
134
+ "mold_probability": round(mold_p, 3),
135
+ "biological_probability": round(bio_p, 3),
136
+ }
137
 
138
 
139
  @app.post("/predict/v2")
dino.py CHANGED
@@ -1,7 +1,10 @@
1
  import torch
2
  import numpy as np
3
  from PIL import Image
4
- from datasets import load_dataset
 
 
 
5
  from sklearn.metrics.pairwise import cosine_similarity
6
 
7
 
@@ -15,6 +18,9 @@ def load_dino(device):
15
 
16
 
17
  def build_embeddings(dino, transform, device):
 
 
 
18
  dataset = load_dataset(
19
  "AdarshDS/mold-reference-images",
20
  split="train"
 
1
  import torch
2
  import numpy as np
3
  from PIL import Image
4
+
5
+ # NOTE:
6
+ # We intentionally avoid importing `datasets` at module import time so the API can
7
+ # start even if the optional DINO dependencies are not installed locally.
8
  from sklearn.metrics.pairwise import cosine_similarity
9
 
10
 
 
18
 
19
 
20
  def build_embeddings(dino, transform, device):
21
+ # Lazy import to keep DINO optional.
22
+ from datasets import load_dataset
23
+
24
  dataset = load_dataset(
25
  "AdarshDS/mold-reference-images",
26
  split="train"
requirements.txt CHANGED
@@ -6,7 +6,6 @@ pillow
6
  numpy<2
7
  python-multipart
8
  scikit-learn
9
- scikit-learn
10
  datasets
11
 
12
 
 
6
  numpy<2
7
  python-multipart
8
  scikit-learn
 
9
  datasets
10
 
11