Introducción
¿Alguna vez has querido crear una aplicación que pueda identificar objetos en una imagen, justo como lo hacen los teléfonos inteligentes? Con TensorFlow.js, ¡ahora puedes hacerlo directamente en tu navegador! En este tutorial, te guiaremos paso a paso en la creación de un reconocedor de objetos personalizado utilizando una red neuronal convolucional (CNN) y TensorFlow.js.
Puntos Principales
1. Conceptos Básicos
- Redes Neuronales Convolucionales (CNN): Explicaremos cómo las CNN son especialmente adecuadas para tareas de visión por computadora, como el reconocimiento de imágenes.
- TensorFlow.js: Introduciremos TensorFlow.js como una biblioteca de JavaScript de código abierto que nos permite ejecutar modelos de aprendizaje automático directamente en el navegador.
2. Preparando los Datos
- Conjunto de datos: Utilizaremos un conjunto de datos preentrenado como ImageNet para nuestro modelo base.
- Preprocesamiento: Explicaremos cómo preparar las imágenes para el entrenamiento, incluyendo redimensionamiento, normalización y creación de batches.
3. Creando el Modelo
- Carga del modelo base: Cargaremos una CNN preentrenada en TensorFlow.js para aprovechar el conocimiento previo.
- Ajuste fino: Modificaremos las últimas capas de la red para adaptarla a nuestra tarea específica de reconocimiento de objetos.
4. Entrenando el Modelo
- Función de pérdida: Utilizaremos una función de pérdida adecuada para la clasificación de imágenes (por ejemplo, entropía cruzada categórica).
- Optimizador: Seleccionaremos un optimizador para actualizar los pesos de la red durante el entrenamiento (por ejemplo, Adam).
- Iteraciones de entrenamiento: Explicaremos cómo el modelo aprende a partir de los datos a través de múltiples iteraciones.
5. Creando la Interfaz de Usuario
- HTML y CSS: Diseñaremos una interfaz simple con un campo para cargar imágenes y una sección para mostrar los resultados.
- JavaScript: Utilizaremos TensorFlow.js para cargar el modelo, preprocesar la imagen cargada por el usuario y realizar la predicción.
- Visualización: Mostraremos los resultados de la predicción en la interfaz de usuario, incluyendo la imagen original y las etiquetas de los objetos detectados.
6. Optimización
- Cuantización: Discutiremos cómo reducir el tamaño del modelo y acelerar las inferencias mediante la cuantización.
- Web Workers: Explicaremos cómo utilizar Web Workers para realizar cálculos intensivos en un hilo separado y mejorar el rendimiento.
Conclusión
En este tutorial, hemos creado un reconocedor de objetos personalizado utilizando TensorFlow.js. Hemos visto cómo cargar un modelo preentrenado, ajustarlo a nuestros datos y crear una interfaz de usuario interactiva. ¡Imagina las posibilidades que se abren al poder ejecutar modelos de aprendizaje automático directamente en el navegador!
<!DOCTYPE html>
<html>
<head>
<title>Reconocedor de Objetos con TensorFlow.js</title>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@latest"></script>
</head>
<body>
<input type="file" id="imageUpload" />
<img id="image" />
<div id="result"></div>
<script>
// Cargar el modelo preentrenado MobileNet
const model = await tf.loadLayersModel('https://tfhub.dev/google/tfjs-model/imagenet/mobilenet_v3_large/classification/2/1.0.0/default/1');
// Función para preprocesar la imagen
async function preprocessImage(image) {
// Redimensionar la imagen a 224x224
const tensor = tf.browser.fromPixels(image)
.resizeNearestNeighbor([224, 224])
.expandDims();
// Normalizar los píxeles
const normalized = tensor.div(255.0);
return normalized;
}
// Función para realizar la predicción
async function predict(image) {
const processedImage = await preprocessImage(image);
const predictions = await model.predict(processedImage);
const classId = predictions.argMax(1).dataSync()[0];
const classProbability = predictions.dataSync()[classId];
// Obtener el nombre de la clase
const classNames = ['gato', 'perro', 'coche', 'avión', ...]; // Lista de clases posibles
const className = classNames[classId];
// Mostrar el resultado
document.getElementById('result').textContent = `El objeto más probable es: ${className} con una probabilidad de ${classProbability.toFixed(2)}`;
}
// Event listener para cuando se selecciona una imagen
document.getElementById('imageUpload').addEventListener('change', async (event) => {
const image = document.getElementById('image');
image.src = URL.createObjectURL(event.target.files[0]);
image.onload = async () => {
await predict(image);
};
});
</script>
</body>
</html>Palabras clave: TensorFlow.js, reconocimiento de objetos, redes neuronales convolucionales, aprendizaje profundo, visión por computadora, desarrollo web.


