Resultados
Rendimiento sobre fotos reales
El examen que de verdad importa no es el banco de renders limpios (optimista, porque comparte distribución con el entrenamiento) sino un banco aparte de fotografías reales de huesos, nunca vistas por ningún modelo. Esta tabla compara los cuatro enfoques probados, antes y después de sumar fotos reales al entrenamiento.
| Modelo | Descripción | Accuracy · solo síntesis histórico | Accuracy · + fotos reales re-verificado hoy |
|---|---|---|---|
| Geométrico | RandomForest sobre medidas OpenCV | 0.5185 | 0.5439 |
| CNN | ResNet18 sobre píxeles del recorte segmentado | 0.5741 | 0.6842 |
| Híbridomejor modelo | CNN + medidas geométricas concatenadas | 0.6852 | 0.7719 |
| Cascada | Regla de elongación → hueso largo; resto → híbrido | 0.6296 | 0.7719 |
Columna "solo síntesis": accuracy histórica, checkpoint anterior a sumar fotos reales al entrenamiento — no re-verificada (haría falta reentrenar esa variante para tener también su macro-F1/balanced accuracy). Columna "+ fotos reales": re-ejecutada hoy contra los modelos y el banco actuales (57 de las 63 fotos del manifest — 6 no están ya en disco, ver nota abajo), por eso difiere un poco del número citado en versiones anteriores de esta página. Cascada sale idéntica al híbrido en este banco: la regla de elongación solo se disparó en 8 fotos, y en las 8 coincidió con lo que la CNN ya predecía sola.
Accuracy esconde el desbalance — por eso el titular usa balanced accuracy
Con 8.5× de diferencia entre el grupo más y menos representado, un accuracy alto puede convivir con una clase entera en 0% de recall (pasa exactamente con "costilla" en el modelo geométrico, abajo). Balanced accuracy y macro-F1 promedian por clase antes de promediar entre clases, así que una clase ignorada pesa igual que una que domina el dataset — no se puede compensar acertando mucho en las clases fáciles.
| Modelo | n | Accuracy | Balanced accuracy | Macro F1 | Macro precision | Macro recall | Top-3 accuracy |
|---|---|---|---|---|---|---|---|
| Geométrico | 57 | 0.544 | 0.536 | 0.47 | 0.57 | 0.54 | 0.860 |
| CNN | 57 | 0.684 | 0.665 | 0.67 | 0.75 | 0.66 | 0.877 |
| Híbridomejor modelo | 57 | 0.772 | 0.783 | 0.77 | 0.81 | 0.78 | 0.895 |
| Cascada | 57 | 0.772 | 0.783 | 0.77 | 0.81 | 0.78 | 0.895 |
Todas las cifras de esta tabla se generaron en la misma corrida, hoy, contra el
mismo banco de 57 fotos reales (training/evaluate_cnn_real_photos.py /
evaluate_real_photos.py / evaluate_cascade_real_photos.py,
segmentación Grounded-SAM). El híbrido pasa de 0.772 accuracy a 0.783 balanced
accuracy — sube, no baja: en este banco concreto no hay ninguna clase con recall
en 0 para el híbrido (ver desglose completo abajo), así que balanced accuracy no
lo penaliza. El geométrico sí lo sufre: 0.544 accuracy pero 0.47 de macro-F1,
arrastrado por "costilla" en 0.00 precisión/recall/F1.
Desglose por clase — los 4 modelos, banco completo
| Grupo | n | Geométrico P / R / F1 |
CNN P / R / F1 |
Híbrido P / R / F1 |
|---|---|---|---|---|
| costilla | 3 | 0.00 / 0.00 / 0.00 | 0.50 / 0.33 / 0.40 | 1.00 / 0.67 / 0.80 |
| cráneo | 6 | 0.33 / 0.67 / 0.44 | 1.00 / 0.83 / 0.91 | 0.67 / 0.67 / 0.67 |
| hueso largo | 8 | 0.89 / 1.00 / 0.94 | 1.00 / 0.25 / 0.40 | 0.88 / 0.88 / 0.88 |
| hueso pequeño | 3 | 0.43 / 1.00 / 0.60 | 0.67 / 0.67 / 0.67 | 0.43 / 1.00 / 0.60 |
| hueso plano | 8 | 1.00 / 0.38 / 0.55 | 0.38 / 0.62 / 0.48 | 1.00 / 0.62 / 0.77 |
| mandíbula/maxilar | 8 | 0.50 / 0.75 / 0.60 | 0.89 / 1.00 / 0.94 | 0.60 / 0.75 / 0.67 |
| pelvis | 8 | 1.00 / 0.12 / 0.22 | 0.67 / 0.75 / 0.71 | 0.86 / 0.75 / 0.80 |
| sacro | 6 | 0.50 / 0.33 / 0.40 | 1.00 / 0.67 / 0.80 | 1.00 / 1.00 / 1.00 |
| vértebra | 7 | 0.44 / 0.57 / 0.50 | 0.60 / 0.86 / 0.71 | 0.83 / 0.71 / 0.77 |
| Macro avg | 57 | 0.57 / 0.54 / 0.47 | 0.75 / 0.66 / 0.67 | 0.81 / 0.78 / 0.77 |
P / R / F1 = precisión / recall / F1-score por clase. Cascada no está en esta tabla porque en el banco actual predice exactamente igual que Híbrido (ver nota arriba). El geométrico falla sobre todo por baja precisión o recall en clases con forma parecida a otra (pelvis→cráneo, costilla→hueso plano en la matriz de confusión) — la CNN compensa esas confusiones con textura donde la forma sola no alcanza; el híbrido combina ambas señales y es el único sin ninguna clase en 0.
Por grupo morfológico: forma vs. textura
Una iteración anterior (antes de sumar las fotos reales al entrenamiento) mide por separado el recall de cada rama sobre el mismo banco — ilustra bien por qué combinarlas ayuda: donde falla la forma, suele acertar la textura, y viceversa.
| Grupo | n | Recall geométrico | Recall CNN |
|---|---|---|---|
| hueso_largo | 8 | 0.88 | 0.38 |
| hueso_pequeño | 3 | 0.67 | 0.67 |
| hueso_plano | 8 | 0.62 | 0.62 |
| mandíbula/maxilar | 7 | 0.43 | 0.71 |
| vértebra | 7 | 0.14 | 0.71 |
| cráneo | 7 | 0.00 | 0.57 |
| sacro | 6 | 0.00 | 0.33 |
| pelvis | 7 | 0.00 | 0.29 |
| costilla | 2 | 0.00 | 0.50 |