Inicio > Cursos > Computer Vision con Python > Redes Neuronales Convolucionales (CNN)
Computer Vision con PythonComputer Vision AvanzadoLección 11 de 12

Redes Neuronales Convolucionales (CNN)

Las CNNs son el fundamento del deep learning en visión. Una CNN tiene capas convolucionales (detectan features como bordes, texturas, formas), capas de pooling (reducen dimensiones manteniendo lo importante), y capas densas al final (clasifican). Las primeras capas detectan bordes simples, las intermedias detectan patrones (ojos, ruedas), y las profundas reconocen objetos completos (cara, auto).

En la práctica, no entrenas CNNs desde cero — usas transfer learning: tomas un modelo pre-entrenado en millones de imágenes (ResNet, EfficientNet, MobileNet) y solo reemplazas la última capa para tu tarea específica. Con 100-500 imágenes propias puedes tener un clasificador de 95%+ de precisión. PyTorch y TensorFlow/Keras son los frameworks principales.

# Transfer Learning con PyTorch
import torch
import torchvision.models as models
import torchvision.transforms as T
from torch import nn

# 1. Cargar modelo pre-entrenado (ResNet18)
model = models.resnet18(weights=models.ResNet18_Weights.DEFAULT)

# 2. Congelar todas las capas (no entrenar)
for param in model.parameters():
    param.requires_grad = False

# 3. Reemplazar última capa para TU tarea
# ResNet18 tiene 512 features → tus N clases
num_clases = 5  # ej: perro, gato, pájaro, pez, tortuga
model.fc = nn.Linear(512, num_clases)

# 4. Preprocesar imágenes (mismo formato que ImageNet)
transform = T.Compose([
    T.Resize(256),
    T.CenterCrop(224),
    T.ToTensor(),
    T.Normalize(mean=[0.485, 0.456, 0.406],
                std=[0.229, 0.224, 0.225]),
])

# 5. Entrenar solo la última capa
optimizer = torch.optim.Adam(model.fc.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()

# Loop de entrenamiento (simplificado)
for epoch in range(10):
    for images, labels in train_loader:
        outputs = model(images)
        loss = criterion(outputs, labels)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    print(f"Epoch {epoch}: loss={loss.item():.4f}")

# 6. Inferencia
model.eval()
with torch.no_grad():
    pred = model(transform(mi_imagen).unsqueeze(0))
    clase = pred.argmax().item()
ConsejoTransfer learning > entrenar desde cero. Con 200 imágenes + ResNet pre-entrenado puedes lograr 95%+ de precisión en clasificación personalizada.
← Detección de Bordes y FiltrosSegmentación Semántica y Edge AI →

Practica esta lección

Resuelve los ejercicios del curso de Computer Vision con Python en la app, gratis y con corrección automática.

Empezar a practicar