Update app.py
Browse files
app.py
CHANGED
@@ -177,13 +177,19 @@ def predict_single(img_input, weights=(0.45, 0.25, 0.3), normalize=True):
|
|
177 |
preds = {}
|
178 |
if model_xcept is not None:
|
179 |
preds['xception'] = model_xcept.predict(img_x, verbose=0)[0]
|
180 |
-
print("Xception (Gradio)
|
|
|
|
|
181 |
if model_resnet50 is not None:
|
182 |
preds['resnet50'] = model_resnet50.predict(img_r, verbose=0)[0]
|
183 |
-
print("ResNet (Gradio)
|
|
|
|
|
184 |
if model_densenet is not None:
|
185 |
preds['densenet201'] = model_densenet.predict(img_d, verbose=0)[0]
|
186 |
-
print("DenseNet (Gradio)
|
|
|
|
|
187 |
|
188 |
# Combinaison pondérée
|
189 |
ensemble = np.zeros(len(CLASS_NAMES), dtype=np.float32)
|
@@ -191,24 +197,40 @@ def predict_single(img_input, weights=(0.45, 0.25, 0.3), normalize=True):
|
|
191 |
if 'resnet50' in preds: ensemble += weights[1] * preds['resnet50']
|
192 |
if 'densenet201' in preds: ensemble += weights[2] * preds['densenet201']
|
193 |
|
194 |
-
print("Ensemble avant mel boost (Gradio)
|
|
|
|
|
195 |
print("Ensemble sum avant mel boost (Gradio):", np.sum(ensemble))
|
196 |
|
197 |
# Ajustement pour "mel"
|
198 |
mel_idx = label_to_index['mel']
|
199 |
if 'densenet201' in preds:
|
|
|
200 |
ensemble[mel_idx] = 0.5 * ensemble[mel_idx] + 0.5 * preds['densenet201'][mel_idx]
|
201 |
-
print(f"
|
|
|
|
|
|
|
|
|
202 |
|
203 |
if normalize:
|
|
|
204 |
ensemble = _renorm_safe(ensemble)
|
205 |
-
print("Ensemble final (Gradio)
|
|
|
|
|
206 |
print("Ensemble sum final (Gradio):", np.sum(ensemble))
|
207 |
|
|
|
|
|
|
|
|
|
|
|
208 |
preds['ensemble'] = ensemble
|
209 |
return preds
|
210 |
|
211 |
|
|
|
212 |
# ---- Helpers Grad-CAM ----
|
213 |
LAST_CONV_LAYERS = {
|
214 |
"xception": "block14_sepconv2_act",
|
|
|
177 |
preds = {}
|
178 |
if model_xcept is not None:
|
179 |
preds['xception'] = model_xcept.predict(img_x, verbose=0)[0]
|
180 |
+
print("\n--- Xception (Gradio) ---")
|
181 |
+
for i, (class_name, prob) in enumerate(zip(CLASS_NAMES, preds['xception'])):
|
182 |
+
print(f"{class_name}: {prob*100:.2f}%")
|
183 |
if model_resnet50 is not None:
|
184 |
preds['resnet50'] = model_resnet50.predict(img_r, verbose=0)[0]
|
185 |
+
print("\n--- ResNet (Gradio) ---")
|
186 |
+
for i, (class_name, prob) in enumerate(zip(CLASS_NAMES, preds['resnet50'])):
|
187 |
+
print(f"{class_name}: {prob*100:.2f}%")
|
188 |
if model_densenet is not None:
|
189 |
preds['densenet201'] = model_densenet.predict(img_d, verbose=0)[0]
|
190 |
+
print("\n--- DenseNet (Gradio) ---")
|
191 |
+
for i, (class_name, prob) in enumerate(zip(CLASS_NAMES, preds['densenet201'])):
|
192 |
+
print(f"{class_name}: {prob*100:.2f}%")
|
193 |
|
194 |
# Combinaison pondérée
|
195 |
ensemble = np.zeros(len(CLASS_NAMES), dtype=np.float32)
|
|
|
197 |
if 'resnet50' in preds: ensemble += weights[1] * preds['resnet50']
|
198 |
if 'densenet201' in preds: ensemble += weights[2] * preds['densenet201']
|
199 |
|
200 |
+
print("\n--- Ensemble avant mel boost (Gradio) ---")
|
201 |
+
for i, (class_name, prob) in enumerate(zip(CLASS_NAMES, ensemble)):
|
202 |
+
print(f"{class_name}: {prob*100:.2f}%")
|
203 |
print("Ensemble sum avant mel boost (Gradio):", np.sum(ensemble))
|
204 |
|
205 |
# Ajustement pour "mel"
|
206 |
mel_idx = label_to_index['mel']
|
207 |
if 'densenet201' in preds:
|
208 |
+
old_mel_prob = ensemble[mel_idx]
|
209 |
ensemble[mel_idx] = 0.5 * ensemble[mel_idx] + 0.5 * preds['densenet201'][mel_idx]
|
210 |
+
print(f"\nMel boost (Gradio): {old_mel_prob*100:.2f}% -> {ensemble[mel_idx]*100:.2f}%")
|
211 |
+
|
212 |
+
print("\n--- Ensemble après mel boost (Gradio) ---")
|
213 |
+
for i, (class_name, prob) in enumerate(zip(CLASS_NAMES, ensemble)):
|
214 |
+
print(f"{class_name}: {prob*100:.2f}%")
|
215 |
|
216 |
if normalize:
|
217 |
+
ensemble_before_norm = ensemble.copy()
|
218 |
ensemble = _renorm_safe(ensemble)
|
219 |
+
print("\n--- Ensemble final après normalisation (Gradio) ---")
|
220 |
+
for i, (class_name, prob) in enumerate(zip(CLASS_NAMES, ensemble)):
|
221 |
+
print(f"{class_name}: {prob*100:.2f}%")
|
222 |
print("Ensemble sum final (Gradio):", np.sum(ensemble))
|
223 |
|
224 |
+
# Afficher l'impact de la normalisation
|
225 |
+
print("\n--- Impact de la normalisation ---")
|
226 |
+
for i, (class_name, prob_before, prob_after) in enumerate(zip(CLASS_NAMES, ensemble_before_norm, ensemble)):
|
227 |
+
print(f"{class_name}: {prob_before*100:.2f}% -> {prob_after*100:.2f}%")
|
228 |
+
|
229 |
preds['ensemble'] = ensemble
|
230 |
return preds
|
231 |
|
232 |
|
233 |
+
|
234 |
# ---- Helpers Grad-CAM ----
|
235 |
LAST_CONV_LAYERS = {
|
236 |
"xception": "block14_sepconv2_act",
|