Inferencia#
Ultralytics Platform proporciona inferencia desde el navegador para probar modelos entrenados y endpoints específicos para el acceso programático.

Pestaña Predict#
Todos los modelos con pesos incluyen una pestaña Predict para la inferencia desde el navegador:
- Ve a tu modelo
- Haz clic en la pestaña Predict
- Sube una imagen, usa un ejemplo o abre tu webcam
- Revisa la superposición específica de la tarea, el resumen de predicciones, los tiempos y la respuesta sin procesar
Los modelos sin pesos muestran un estado vacío; primero entrena el modelo o sube los pesos.

Métodos de entrada#
El panel de predicción admite varios métodos de entrada:
| Método | Descripción |
|---|---|
| Carga de imágenes | Arrastra y suelta una imagen o haz clic para subirla |
| Imágenes de ejemplo | Haz clic en los ejemplos integrados (imágenes del conjunto de datos o predeterminadas) |
| Captura con webcam | Transmisión de vídeo en directo con captura de un solo fotograma |
graph LR
A[Upload Image]:::start --> D[Auto-Inference]:::proc
B[Example Image]:::start --> D
C[Webcam Capture]:::start --> D
D --> E[Results + Overlays]:::out
classDef start fill:#4CAF50,color:#fff
classDef proc fill:#2196F3,color:#fff
classDef out fill:#9C27B0,color:#fffSubir imagen#
Arrastra y suelta o haz clic para subirla:
- Formatos compatibles: JPEG, PNG, WebP, AVIF, HEIC, JP2, TIFF, BMP
- Tamaño máximo: 10 MB
- Inferencia automática: los resultados aparecen automáticamente después de subir la imagen
El panel de predicción ejecuta la inferencia automáticamente cuando subes una imagen, seleccionas un ejemplo o capturas un fotograma de la webcam. No es necesario hacer clic en ningún botón.
Antes de subirla, el panel redimensiona la imagen para que su lado más largo coincida con el Image Size seleccionado y solicita coordenadas normalizadas. Esto mantiene rápidas las pruebas en el navegador; las solicitudes que envías tú no se redimensionan.
Imágenes de ejemplo#
El panel de predicción muestra hasta dos imágenes de ejemplo del conjunto de datos vinculado a tu modelo y da preferencia a la división val, seguida de
test y después train. Si no hay ningún conjunto de datos vinculado, se usan ejemplos predeterminados:
| Imagen | Contenido |
|---|---|
bus.jpg | Escena urbana con vehículos |
zidane.jpg | Escena deportiva con personas |
Para los modelos OBB, se muestran en su lugar imágenes aéreas de barcos y de un aeropuerto.
Las imágenes de ejemplo se precargan al cargar la página, por lo que al hacer clic en un ejemplo la inferencia se ejecuta casi al instante, sin esperar a ninguna descarga.
Webcam#
Haz clic en la tarjeta de la webcam para iniciar una transmisión de vídeo en directo:
- Concede permiso para usar la cámara cuando se te solicite
- Haz clic en la vista previa del vídeo para capturar un fotograma
- La inferencia se ejecuta automáticamente en el fotograma capturado
- Vuelve a hacer clic para reiniciar la webcam
Ver resultados#
Los resultados de la inferencia muestran la salida adecuada para la tarea del modelo: cuadros, máscaras, puntos clave, cuadros orientados, puntuaciones de clasificación, cobertura semántica o un mapa de profundidad. Los resultados de objetos usan los colores de clase del conjunto de datos cuando están disponibles. El panel también muestra los tiempos de preprocesamiento, inferencia, posprocesamiento y red.

El panel de resultados muestra:
| Campo | Descripción |
|---|---|
| Resumen de resultados | Lista de cada detección o las 5 clases principales para los modelos de clasificación y semánticos |
| Estadísticas de velocidad | Preprocesamiento, inferencia, posprocesamiento y red (ms) |
| Versiones | Versiones de Ultralytics y PyTorch, además del rango de profundidad o el tamaño de la máscara cuando corresponda |
| Respuesta JSON | Respuesta sin procesar de la API en un bloque de código, con los datos del mapa codificados en base64 omitidos |
Cuando hay resultados, aparecen dos controles sobre la vista previa: haz clic en la imagen para ampliarla manteniendo las superposiciones y usa el botón de descarga para guardar un JPEG anotado del resultado actual.
Parámetros de inferencia#
Ajusta el comportamiento de la inferencia con los tres controles deslizantes situados debajo de la imagen:

| Parámetro | Rango | Predeterminado | Descripción |
|---|---|---|---|
| Confianza | 0.01 – 1.0, pasos de 0.01 | 0.25 | Umbral mínimo de confianza |
| IoU | 0.0 – 0.95, pasos de 0.01 | 0.7 | Umbral de IoU de NMS |
| Tamaño de imagen | 32 – 1280, pasos de 32 | 640 | Dimensión de redimensionamiento de la entrada |
Al cambiar cualquier parámetro, la inferencia se vuelve a ejecutar automáticamente en la imagen actual con un debounce de 500 ms. No es necesario volver a subirla.
Umbral de confianza#
Filtra las predicciones por confianza:
- Más alto (0.5+): menos predicciones y mayor certeza
- Más bajo (0.1-0.25): más predicciones, con algo de ruido
- Predeterminado (0.25): equilibrado para la mayoría de los casos de uso
Umbral de IoU#
Controla la supresión no máxima:
- Más alto (0.7+): permite más cuadros superpuestos
- Más bajo (0.3-0.5): suprime las detecciones superpuestas de forma más agresiva
- Predeterminado (0.7): comportamiento equilibrado de NMS para la mayoría de los casos de uso
Predict del despliegue#
Cada endpoint específico en ejecución incluye una pestaña Predict directamente en su tarjeta de despliegue. Usa el propio servicio de inferencia del despliegue en lugar del servicio de predicción compartido, lo que te permite probar el endpoint desplegado desde el navegador.
En un punto de conexión de pago con la supervisión habilitada, las imágenes procesadas también contribuyen a la pestaña de supervisión. Los ejemplos muestreados y los gráficos agregados de la pestaña de supervisión son datos temporales y ligeros almacenados en la memoria; detener, reiniciar, volver a implementar, cambiar el tamaño o reemplazar el modelo puede borrar los datos de la pestaña de supervisión. Guarda los ejemplos en un conjunto de datos para conservar los ejemplos.
API del endpoint específico#
La tarjeta API Docs de la pestaña Predict del modelo contiene solicitudes de ejemplo en Python, JavaScript y cURL, rellenadas previamente con
la confianza, IoU y el tamaño de imagen establecidos actualmente en los controles deslizantes. La URL y la clave son marcadores de posición hasta que despliegues el
modelo; un botón Deploy situado junto a las pestañas de código salta a la pestaña Deploy del modelo. Después del despliegue, la pestaña
Code de la tarjeta de despliegue rellena la URL de ese endpoint y, para los propietarios del espacio de trabajo, su clave de API vinculada, lista para copiarla y ejecutarla.
Autenticación#
Incluye tu clave de API en las solicitudes:
Authorization: Bearer YOUR_API_KEYPara ejecutar inferencias desde tus propios scripts, notebooks o aplicaciones, incluye una clave de API. Genera una en Settings > API Keys. Un endpoint específico solo acepta la única clave con la que se creó; la API de modelos compartida acepta cualquier clave activa del espacio de trabajo y los modelos públicos también aceptan solicitudes anónimas.
Endpoint#
Los endpoints específicos reciben solicitudes en su propia URL:
POST https://YOUR_DEPLOYMENT_URL.run.app/predictLa inferencia compartida usa la API de Platform con la ruta completa del modelo:
POST https://platform.ultralytics.com/api/models/{owner}/{project}/{model}/predictAmbos aceptan el mismo cuerpo multipart/form-data y devuelven la misma estructura de respuesta. Con el
SDK de Python, usa client.models.predict(owner, project, model, body=...) para la inferencia
compartida o client.deployments.predict(owner, deployment, body=...) para un despliegue específico:
from ultralytics_platform import Platform
client = Platform() # reads ULTRALYTICS_API_KEY
with open("image.jpg", "rb") as f:
results = client.models.predict("acme-vision", "inspection", "v3", body={"file": f, "conf": 0.25})Solicitud#
import requests
url = "https://YOUR_DEPLOYMENT_URL.run.app/predict"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
data = {"conf": 0.25, "iou": 0.7, "imgsz": 640}
with open("image.jpg", "rb") as image_file:
response = requests.post(url, headers=headers, files={"file": image_file}, data=data)
print(response.json())
Parámetros de la solicitud#
| Parámetro | Tipo | Predeterminado | Rango | Descripción |
|---|---|---|---|---|
file | file | - | - | Archivo de imagen o vídeo (obligatorio a menos que se establezca source) |
conf | float | 0.25 | 0.01 – 1.0 | Umbral mínimo de confianza |
iou | float | 0.7 | 0.0 – 0.95 | Umbral de IoU de NMS |
imgsz | int | 640 | 32 – 1280 | Tamaño de la imagen de entrada en píxeles |
normalize | bool | false | - | Devuelve las coordenadas del cuadro delimitador como valores de 0 a 1 |
decimals | int | 5 | 0 – 10 | Precisión decimal de los valores de coordenadas |
bits | int | 8 | 8, 12, 16 | Cuantización del mapa de profundidad, solo para modelos de profundidad |
source | string | - | - | URL de imagen o cadena en base64 (alternativa a file) |
Respuesta#
{
"images": [
{
"shape": [1080, 1920],
"results": [
{
"class": 0,
"name": "person",
"confidence": 0.92,
"box": { "x1": 100, "y1": 50, "x2": 300, "y2": 400 }
},
{
"class": 2,
"name": "car",
"confidence": 0.87,
"box": { "x1": 400, "y1": 200, "x2": 600, "y2": 350 }
}
],
"speed": {
"preprocess": 1.2,
"inference": 12.5,
"postprocess": 2.3
}
}
],
"metadata": {
"imageCount": 1,
"functionTimeAlive": 1284.51,
"functionTimeCall": 0.018,
"task": "detect",
"version": {
"ultralytics": "8.x.x",
"torch": "2.6.0",
"torchvision": "0.21.0",
"python": "3.13.0"
}
}
}
Campos de respuesta#
| Campo | Tipo | Descripción |
|---|---|---|
images | matriz | Lista de imágenes procesadas, una entrada por fotograma de vídeo en el caso de los vídeos |
images[].shape | matriz | Dimensiones de la imagen [altura, anchura] |
images[].results | matriz | Lista de detecciones |
images[].results[].class | int | Índice de clase (ID entero) |
images[].results[].name | string | Nombre de la clase |
images[].results[].confidence | float | Confianza de la detección (0-1) |
images[].results[].box | objeto | Coordenadas de la caja delimitadora |
images[].semantic_mask | objeto | Mapa de clases por píxel (solo modelos semánticos) |
images[].depth | objeto | Mapa de profundidad por píxel (solo modelos de profundidad) |
images[].speed | objeto | Tiempos de procesamiento en milisegundos |
metadata | objeto | Número de imágenes, tiempos del servicio, tarea y versiones de Ultralytics/PyTorch |
Respuestas específicas de cada tarea#
El formato de respuesta varía según la tarea:
{
"class": 0,
"name": "person",
"confidence": 0.92,
"box": {"x1": 100, "y1": 50, "x2": 300, "y2": 400}
}Límites de uso#
La API de modelos compartida está limitada a 20 solicitudes/minuto por cada clave de API, usuario autenticado o IP anónima. Cuando
se aplica la limitación, la API devuelve 429 con una cabecera Retry-After. Consulta la referencia completa sobre los límites de uso para ver todas las categorías de endpoints.
Las solicitudes enviadas directamente a un endpoint dedicado no pasan por el limitador de velocidad de la API de Platform. El endpoint sigue reduciendo la carga con 429 y una cabecera Retry-After cuando alcanza temporalmente su capacidad. Para realizar inferencias locales de gran volumen, consulta la guía del modo Predict.
Gestión de errores#
Respuestas de error habituales:
| Código | Mensaje | Solución |
|---|---|---|
| 400 | Imagen no válida | Comprueba el formato del archivo o que el modelo tenga pesos entrenados |
| 401 | No autorizado | Verifica la clave de API |
| 404 | Modelo no encontrado | Comprueba el propietario, el proyecto y los nombres del modelo |
| 413 | Entrada demasiado grande | Reduce el tamaño del archivo por debajo del límite del endpoint |
| 429 | Límite de solicitudes alcanzado | Espera y vuelve a intentarlo, o envía las solicitudes directamente a un endpoint dedicado |
| 500 | Error del servidor | Vuelve a intentarlo |
| 503 | Servicio no disponible | El servicio Predict se está iniciando o no está disponible; espera un momento y vuelve a intentarlo |
Preguntas frecuentes#
Ambos métodos de inferencia aceptan archivos de vídeo:
- Los endpoints dedicados aceptan archivos de vídeo directamente. Formatos compatibles (hasta 100 MB): ASF, AVI, GIF, M4V, MKV, MOV, MP4, MPEG, MPG, TS, WEBM, WMV. Cada fotograma se procesa individualmente y los resultados se devuelven por fotograma. Consulta endpoints dedicados para obtener más información.
- La inferencia compartida (
POST /api/models/{owner}/{project}/{model}/predict) utiliza el mismo servicio Predict y acepta los mismos formatos de vídeo. La pestaña Predict del navegador solo permite seleccionar imágenes, así que utiliza la API o un endpoint dedicado para vídeo.
En la pestaña Predict, el botón de descarga situado sobre la vista previa guarda el resultado actual como un JPEG anotado. La API propiamente dicha devuelve predicciones en formato JSON. Para visualizarlas:
- Utiliza las predicciones para dibujar cajas localmente
- Utiliza el método
plot()de Ultralytics:
from ultralytics import YOLO model = YOLO("yolo26n.pt") results = model("image.jpg") results[0].save("annotated.jpg")Consulta la documentación del modo Predict para obtener información completa sobre la API de resultados y las opciones de visualización.
- Límite de la pestaña Predict: 10 MB
- Límite de la API: 100 MB tanto para la inferencia compartida como para los endpoints dedicados
- Cambio de tamaño automático en la pestaña Predict: las imágenes cambian de tamaño al
Image Sizeseleccionado antes de subirse
Las imágenes grandes cambian de tamaño automáticamente en el navegador, manteniendo la relación de aspecto. Las solicitudes que envíes tú mismo no cambian de tamaño, por lo que las imágenes que superen el límite se rechazan con
413.La API actual procesa una imagen por solicitud. Para procesar por lotes:
- Envía solicitudes independientes para cada imagen
- Distribuye las solicitudes entre endpoints dedicados cuando sea conveniente
- Utiliza la inferencia local para lotes grandes
Inferencia por lotes con Pythonimport concurrent.futures import requests url = "https://YOUR_DEPLOYMENT_URL.run.app/predict" headers = {"Authorization": "Bearer YOUR_API_KEY"} images = ["img1.jpg", "img2.jpg", "img3.jpg"] def predict(image_path): with open(image_path, "rb") as f: return requests.post(url, headers=headers, files={"file": f}).json() with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor: results = list(executor.map(predict, images))