# Detección YOLOv8

Ejecute la detección de objetos en tiempo real con Ultralytics YOLOv8 y YOLOv11.

{% hint style="success" %}
Todos los ejemplos se pueden ejecutar en servidores GPU alquilados a través de [CLORE.AI Marketplace](https://clore.ai/marketplace).
{% endhint %}

{% hint style="info" %}
**Actualización: YOLOv11 (2025) — 22% más rápido**

YOLOv11 ya está disponible a través del mismo `paquete ultralytics` proporciona **inferencia un 22% más rápida** y mAP mejorado respecto a YOLOv8, con la misma API simple. Las nuevas funciones incluyen la detección con cuadros delimitadores orientados (OBB). Actualice ejecutando `pip install -U ultralytics`.
{% endhint %}

## Alquiler en CLORE.AI

1. Visitar [CLORE.AI Marketplace](https://clore.ai/marketplace)
2. Filtrar por tipo de GPU, VRAM y precio
3. Elegir **Bajo demanda** (tarifa fija) o **Spot** (precio por puja)
4. Configure su pedido:
   * Seleccione la imagen de Docker
   * Establezca puertos (TCP para SSH, HTTP para interfaces web)
   * Agregue variables de entorno si es necesario
   * Ingrese el comando de inicio
5. Seleccione el pago: **CLORE**, **BTC**, o **USDT/USDC**
6. Cree el pedido y espere el despliegue

### Acceda a su servidor

* Encuentre los detalles de conexión en **Mis pedidos**
* Interfaces web: use la URL del puerto HTTP
* SSH: `ssh -p <port> root@<proxy-address>`

## ¿Qué es YOLOv8?

YOLOv8 es un modelo YOLO de alto rendimiento que ofrece:

* Detección de objetos
* Segmentación de instancias
* Estimación de pose
* Clasificación de imágenes
* Seguimiento de objetos

## ¿Qué es YOLOv11?

YOLOv11 (2025) es la última generación, que añade:

* **inferencia un 22% más rápida** vs YOLOv8
* Mayor mAP en todos los tamaños de modelo
* **Detección con cuadros delimitadores orientados (OBB)** — nueva tarea
* Arquitectura mejorada (bloques C3k2, SPPF, C2PSA)
* Mismo `paquete ultralytics` paquete, reemplazo directo

### Tareas compatibles (YOLOv11)

| Tarea      | Sufijo      | Descripción                                                   |
| ---------- | ----------- | ------------------------------------------------------------- |
| `detect`   | *(ninguno)* | Detección de objetos con cuadros delimitadores                |
| `segment`  | `-seg`      | Segmentación de instancias con máscaras                       |
| `classify` | `-cls`      | Clasificación de imágenes                                     |
| `pose`     | `-pose`     | Estimación de pose humana                                     |
| `obb`      | `-obb`      | **NUEVO** Cuadros delimitadores orientados (detección rotada) |

## Tamaños de modelos

### Modelos YOLOv8

| Modelo  | Tamaño | mAP  | Velocidad (RTX 3090) |
| ------- | ------ | ---- | -------------------- |
| YOLOv8n | 3.2M   | 37.3 | \~1ms                |
| YOLOv8s | 11.2M  | 44.9 | \~2ms                |
| YOLOv8m | 25.9M  | 50.2 | \~4ms                |
| YOLOv8l | 43.7M  | 52.9 | \~6ms                |
| YOLOv8x | 68.2M  | 53.9 | \~8ms                |

### Modelos YOLOv11

| Modelo  | Tamaño | mAP  | Velocidad (RTX 3090) |
| ------- | ------ | ---- | -------------------- |
| yolo11n | 2.6M   | 39.5 | \~0.8ms              |
| yolo11s | 9.4M   | 47.0 | \~1.5ms              |
| yolo11m | 20.1M  | 51.5 | \~3.2ms              |
| yolo11l | 25.3M  | 53.4 | \~4.7ms              |
| yolo11x | 56.9M  | 54.7 | \~6.5ms              |

### Comparación YOLOv8 vs YOLOv11

| Métrica               | YOLOv8x | yolo11x | Mejora               |
| --------------------- | ------- | ------- | -------------------- |
| Parámetros            | 68.2M   | 56.9M   | **-17% más pequeño** |
| mAP50-95 (COCO)       | 53.9    | 54.7    | **+0.8 mAP**         |
| Inferencia (RTX 3090) | \~8ms   | \~6.5ms | **+22% más rápido**  |
| FPS (RTX 3090, 640px) | \~150   | \~183   | **+22% más rápido**  |
| Tarea OBB             | ❌       | ✅       | **Nuevo en v11**     |

## Despliegue rápido

**Imagen de Docker:**

```
pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime
```

**Puertos:**

```
22/tcp
7860/http
```

**Comando (YOLOv11):**

```bash
pip install ultralytics gradio && \
python -c "
import gradio as gr
from ultralytics import YOLO
from PIL import Image

model = YOLO('yolo11m.pt')

def detect(image):
    results = model(image)
    return Image.fromarray(results[0].plot())

demo = gr.Interface(fn=detect, inputs=gr.Image(type='pil'), outputs=gr.Image(), title='YOLOv11 Detection')
demo.launch(server_name='0.0.0.0', server_port=7860)
"
```

## Accediendo a su servicio

Después del despliegue, encuentre su `http_pub` URL en **Mis pedidos**:

1. Ir a **Mis pedidos** página
2. Haga clic en su pedido
3. Encuentre la `http_pub` URL (por ejemplo, `abc123.clorecloud.net`)

Use `https://YOUR_HTTP_PUB_URL` en lugar de `localhost` en los ejemplos de abajo.

## Instalación

```bash
pip install ultralytics
```

Mismo paquete para YOLOv8 y YOLOv11. Actualice para obtener YOLOv11:

```bash
pip install -U ultralytics
```

## Detección de objetos con YOLOv11

### Detección básica con yolo11m

```python
from ultralytics import YOLO
from PIL import Image

# Cargar modelo mediano YOLOv11
model = YOLO('yolo11m.pt')

# Ejecutar inferencia
results = model('image.jpg')

# Mostrar resultados
results[0].show()

# Guardar resultados
results[0].save('output.jpg')
```

### Obtener detecciones

```python
results = model('image.jpg')

for result in results:
    boxes = result.boxes
    for box in boxes:
        # Coordenadas
        x1, y1, x2, y2 = box.xyxy[0].tolist()

        # Confianza
        conf = box.conf[0].item()

        # Clase
        cls = int(box.cls[0].item())
        name = model.names[cls]

        print(f"{name}: {conf:.2f} at ({x1:.0f}, {y1:.0f}, {x2:.0f}, {y2:.0f})")
```

### Procesamiento por lotes

```python
from ultralytics import YOLO
import os

model = YOLO('yolo11m.pt')

input_dir = './images'
output_dir = './detected'
os.makedirs(output_dir, exist_ok=True)

# Procesar todas las imágenes
results = model(input_dir, save=True, project=output_dir)
```

## Tareas de YOLOv11

### Segmentación de instancias

```python
from ultralytics import YOLO

# Cargar modelo de segmentación YOLOv11
model = YOLO('yolo11m-seg.pt')

results = model('image.jpg')

for result in results:
    masks = result.masks  # Máscaras de segmentación
    if masks is not None:
        for mask in masks.data:
            # mask es un tensor binario
            pass
```

### Estimación de pose

```python
from ultralytics import YOLO

# Cargar modelo de pose YOLOv11
model = YOLO('yolo11m-pose.pt')

results = model('image.jpg')

for result in results:
    keypoints = result.keypoints
    if keypoints is not None:
        for kp in keypoints.data:
            # 17 puntos clave: nariz, ojos, orejas, hombros, codos, muñecas, caderas, rodillas, tobillos
            pass
```

### Clasificación

```python
from ultralytics import YOLO

# Cargar modelo de clasificación YOLOv11
model = YOLO('yolo11m-cls.pt')

results = model('image.jpg')
for result in results:
    # Clase Top-1 y confianza
    top1 = result.probs.top1
    top1conf = result.probs.top1conf.item()
    print(f"Class: {result.names[top1]} ({top1conf:.2f})")
```

### Cuadro delimitador orientado (OBB) — NUEVO en YOLOv11

OBB detecta objetos en cualquier ángulo de rotación — perfecto para imágenes aéreas/satélite, escaneo de documentos y detección de texto.

```python
from ultralytics import YOLO

# Cargar modelo OBB de YOLOv11
model = YOLO('yolo11m-obb.pt')

results = model('aerial_image.jpg')

for result in results:
    obb = result.obb
    if obb is not None:
        for box in obb:
            # Caja rotada: x_center, y_center, width, height, angle
            xywhr = box.xywhr[0].tolist()
            conf = box.conf[0].item()
            cls = int(box.cls[0].item())
            print(f"{result.names[cls]}: {conf:.2f} rotated box: {xywhr}")
```

## Procesamiento de video

### Procesar video

```python
from ultralytics import YOLO

model = YOLO('yolo11m.pt')

# Procesar video
results = model('video.mp4', save=True)
```

### Webcam en tiempo real

```python
from ultralytics import YOLO
import cv2

model = YOLO('yolo11n.pt')  # Use el modelo nano para tiempo real

cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    if not ret:
        break

    results = model(frame)
    annotated = results[0].plot()

    cv2.imshow('YOLOv11', annotated)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
```

### Guardar video procesado

```python
from ultralytics import YOLO
import cv2

model = YOLO('yolo11m.pt')

cap = cv2.VideoCapture('input.mp4')
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

out = cv2.VideoWriter('output.mp4', cv2.VideoWriter_fourcc(*'mp4v'), fps, (width, height))

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    results = model(frame)
    annotated = results[0].plot()
    out.write(annotated)

cap.release()
out.release()
```

## Seguimiento de objetos

```python
from ultralytics import YOLO

model = YOLO('yolo11m.pt')

# Rastrear objetos en el video
results = model.track('video.mp4', save=True, tracker='bytetrack.yaml')

# Acceder a los IDs de seguimiento
for result in results:
    boxes = result.boxes
    if boxes.id is not None:
        track_ids = boxes.id.tolist()
```

## Entrenamiento personalizado

### Preparar conjunto de datos

```yaml

# dataset.yaml
path: /workspace/dataset
train: images/train
val: images/val

names:
  0: cat
  1: dog
  2: bird
```

### Entrenar YOLOv11

```python
from ultralytics import YOLO

# Cargar modelo YOLOv11 preentrenado
model = YOLO('yolo11n.pt')

# Entrenar
results = model.train(
    data='dataset.yaml',
    epochs=100,
    imgsz=640,
    batch=16,
    device=0
)
```

### Argumentos de entrenamiento

```python
model.train(
    data='dataset.yaml',
    epochs=100,
    imgsz=640,
    batch=16,
    device=0,
    workers=8,
    patience=50,         # Detención temprana
    save=True,
    save_period=10,      # Guardar cada N épocas
    cache=True,          # Cachear imágenes
    amp=True,            # Precisión mixta
    lr0=0.01,
    lrf=0.01,
    momentum=0.937,
    weight_decay=0.0005,
    warmup_epochs=3.0,
    box=7.5,
    cls=0.5,
    dfl=1.5,
    augment=True,
    hsv_h=0.015,
    hsv_s=0.7,
    hsv_v=0.4,
    flipud=0.0,
    fliplr=0.5,
    mosaic=1.0,
    mixup=0.0,
)
```

## Exportar modelo

```python
from ultralytics import YOLO

model = YOLO('yolo11m.pt')

# Exportar a diferentes formatos
model.export(format='onnx')           # ONNX
model.export(format='tensorrt')       # TensorRT
model.export(format='openvino')       # OpenVINO
model.export(format='coreml')         # CoreML
model.export(format='tflite')         # TensorFlow Lite
```

## Servidor API

```python
from fastapi import FastAPI, UploadFile
from fastapi.responses import JSONResponse
from ultralytics import YOLO
from PIL import Image
import io

app = FastAPI()
model = YOLO('yolo11m.pt')

@app.post("/detect")
async def detect(file: UploadFile):
    contents = await file.read()
    image = Image.open(io.BytesIO(contents))

    results = model(image)

    detections = []
    for box in results[0].boxes:
        detections.append({
            "class": model.names[int(box.cls[0])],
            "confidence": float(box.conf[0]),
            "bbox": box.xyxy[0].tolist()
        })

    return JSONResponse(content={"detections": detections})

@app.post("/segment")
async def segment(file: UploadFile):
    contents = await file.read()
    image = Image.open(io.BytesIO(contents))

    model_seg = YOLO('yolo11m-seg.pt')
    results = model_seg(image)

    # Devolver imagen anotada
    annotated = results[0].plot()
    # ... convertir y devolver

# Ejecutar: uvicorn server:app --host 0.0.0.0 --port 8000
```

## Optimización del rendimiento

### Exportación TensorRT

```python
model = YOLO('yolo11m.pt')
model.export(format='tensorrt', half=True)

# Usar modelo exportado
model_trt = YOLO('yolo11m.engine')
results = model_trt('image.jpg')
```

### Inferencia por lotes

```python

# Procesar múltiples imágenes a la vez
images = ['img1.jpg', 'img2.jpg', 'img3.jpg', 'img4.jpg']
results = model(images, batch=4)
```

## Benchmarks de rendimiento

### FPS de YOLOv11 (entrada 640px)

| Modelo  | GPU      | FPS    |
| ------- | -------- | ------ |
| yolo11n | RTX 3090 | \~1100 |
| yolo11s | RTX 3090 | \~730  |
| yolo11m | RTX 3090 | \~370  |
| yolo11x | RTX 3090 | \~183  |
| yolo11x | RTX 4090 | \~305  |

### FPS de YOLOv8 (entrada 640px) — Generación anterior

| Modelo  | GPU      | FPS   |
| ------- | -------- | ----- |
| YOLOv8n | RTX 3090 | \~900 |
| YOLOv8s | RTX 3090 | \~600 |
| YOLOv8m | RTX 3090 | \~300 |
| YOLOv8x | RTX 3090 | \~150 |
| YOLOv8x | RTX 4090 | \~250 |

## Solución de problemas

### Falta de memoria

```python

# Use un modelo más pequeño
model = YOLO('yolo11n.pt')

# O reduzca el tamaño de la imagen
results = model('image.jpg', imgsz=320)
```

### Procesamiento lento

* Use exportación TensorRT
* Use un modelo más pequeño (yolo11n o yolo11s)
* Reduzca el tamaño de la imagen

### Baja precisión

* Use un modelo más grande (yolo11x en lugar de yolo11n)
* Entrene con datos personalizados
* Aumente el tamaño de la imagen

## Estimación de costos

Tarifas típicas del marketplace CLORE.AI (a partir de 2025):

| GPU       | Tarifa por hora | Tarifa diaria | Sesión de 4 horas |
| --------- | --------------- | ------------- | ----------------- |
| RTX 3060  | \~$0.03         | \~$0.70       | \~$0.12           |
| RTX 3090  | \~$0.06         | \~$1.50       | \~$0.25           |
| RTX 4090  | \~$0.10         | \~$2.30       | \~$0.40           |
| A100 40GB | \~$0.17         | \~$4.00       | \~$0.70           |
| A100 80GB | \~$0.25         | \~$6.00       | \~$1.00           |

*Los precios varían según el proveedor y la demanda. Consulte* [*CLORE.AI Marketplace*](https://clore.ai/marketplace) *para las tarifas actuales.*

**Ahorre dinero:**

* Use **Spot** mercado para cargas de trabajo flexibles (a menudo 30-50% más barato)
* Pague con **CLORE** tokens
* Compare precios entre diferentes proveedores

## Siguientes pasos

* [Segmentar cualquier cosa](https://docs.clore.ai/guides/guides_v2-es/procesamiento-de-imagenes/segment-anything) - Segmentación avanzada
* Detectron2 - Más opciones de detección
* [Real-ESRGAN](https://docs.clore.ai/guides/guides_v2-es/procesamiento-de-imagenes/real-esrgan-upscaling) - Mejorar objetos detectados
