Cómo ve una máquina: imágenes como tensores
Para una persona, una foto es un gato. Para un modelo, es un tensor de números. Entender qué representa cada dimensión —alto, ancho, canales— y qué se pierde al redimensionar es el primer paso de la visión artificial.
Al terminar sabrás
El tensor de imagen
Cuántos números hay en una foto
Una imagen de 224×224 en color tiene $224\cdot224\cdot3=150\,528$ valores. Una capa densa con 1 000 neuronas sobre esa entrada tendría $150\,528\,000$ pesos: demasiado para un problema pequeño y sin estructura espacial.
Una imagen de 4K (3840×2160×3) tiene casi 25 millones de valores. Una CNN con stride reduce rápidamente la resolución espacial; por eso las arquitecturas modernas trabajan a 224–512 píxeles y no a resolución completa.
Normalización y aumento de tamaño
Los modelos preentrenados esperan la misma normalización con la que fueron entrenados. ImageNet usa media y desviación por canal:
X.min(), X.max() y el tipo antes de inferir.
Lectura y preprocesado en Python
from PIL import Image
import numpy as np
import torch
from torchvision import transforms
img = Image.open("foto.jpg").convert("RGB")
print(img.size) # (ancho, alto)
arr = np.asarray(img)
print(arr.shape, arr.dtype, arr.min(), arr.max()) # (H, W, 3) uint8
# Pipeline estándar para un modelo preentrenado
preprocesar = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(), # HWC uint8 -> CHW float [0,1]
transforms.Normalize(
mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]
)
])
tensor = preprocesar(img)
print(tensor.shape, tensor.dtype, tensor.min().item(), tensor.max().item())
# Añadir dimensión de batch: (3,224,224) -> (1,3,224,224)
batch = tensor.unsqueeze(0)
print(batch.shape)Resolución, detalle y coste
| Resolución | Píxeles por canal | Uso típico | Compromiso |
|---|---|---|---|
| 28×28 | 784 | Dígitos, Fashion-MNIST | Muy rápido, poco detalle |
| 224×224 | 50 176 | Clasificación con modelos preentrenados | Estándar de facto |
| 512×512 | 262 144 | Detección, segmentación | Más detalle, más memoria |
| 1024×1024 | 1 048 576 | Imágenes médicas, satélite | Requiere recortes o arquitecturas eficientes |
Ejercicio 9.1 · Inspeccionar una imagen
Carga una imagen, imprime forma, tipo y rango. Convierte a grises, redimensiona a 224×224 y normaliza. Comprueba que la media y desviación por canal tras normalizar son aproximadamente 0 y 1. ¿Qué ocurre si olvidas dividir entre 255?
Orientación: sin dividir entre 255, los valores quedan en 0–255 y la normalización produce números grandes; las activaciones saturan y el modelo preentrenado falla. Verifica siempre el contrato de entrada del modelo.