¿Qué tamaño tiene un modelo típico entrenado por tensorflow?
Bibliotecas como tensorflow.js aportan muchas posibilidades a los desarrolladores web.
Sin embargo, ejecutar modelos profundos directamente en el navegador también trae nuevos desafíos y limitaciones; después de todo, algunos modelos existentes no están diseñados para ejecutarse en el navegador del cliente, y mucho menos en el navegador móvil ahora. Tomemos como ejemplo los modelos actuales de detección de objetos de última generación: a menudo requieren importantes recursos informáticos para ejecutarse a una velocidad de fotogramas razonable, y mucho menos ejecutarse en tiempo real. Tampoco resulta práctico distribuir más de 100 MB de pesos de modelos a los navegadores de los clientes para una aplicación web sencilla.
Entrenando modelos eficientes de aprendizaje profundo para redes
¡Pero no pierdas la esperanza! Con base en algunos principios básicos, podemos crear y entrenar modelos muy buenos y optimizarlos para que se ejecuten en un entorno de red. Lo creas o no, podemos entrenar modelos de clasificación de imágenes bastante buenos e incluso modelos de detección de objetos que tienen un tamaño de sólo unos pocos megabytes o incluso cientos de kilobytes:
Este artículo te enseñará Proporciona algunos consejos generales sobre cómo comenzar a entrenar su propia red neuronal convolucional (CNN), así como algunos consejos sobre cómo entrenar CNN para aplicaciones web y navegadores móviles basados en tensorflow.js. sugiere CNN.
¿Estás hablando tú y yo sobre cómo entrenar modelos de aprendizaje profundo en el navegador?
Quizás te preguntes: ¿Por qué entrenar mi modelo basado en tensorflow.js en el navegador en lugar de entrenar un modelo basado en tensorflow directamente en tu propia máquina? Ciertamente puedes entrenar en tu propia máquina, especialmente si tiene una tarjeta gráfica NVIDIA. tensorflow.js usa aceleración WebGL internamente, por lo que uno de los beneficios de entrenar un modelo en el navegador es que puede usar una tarjeta gráfica AMD. Además, los modelos de entrenamiento en el navegador pueden proteger mejor la privacidad del usuario y facilitar la obtención de su confianza.
Arquitectura de red
Obviamente, antes de entrenar un modelo, primero es necesario implementarlo. Por lo general, la gente recomendaría elegir una arquitectura existente probada como YOLO, SSD, ResNet, MobileNet, etc.
Personalmente, creo que es muy valioso aplicar algunos conceptos de arquitecturas existentes al diseñar la suya propia, pero incorporar estas arquitecturas existentes directamente a una aplicación web probablemente no sea una buena idea porque queremos que nuestros modelos sean más pequeño, más rápido de inferir (preferiblemente en tiempo real) y fácil de entrenar.
Ya sea que planee incorporar una arquitectura existente o comenzar completamente desde cero, aquí hay algunas sugerencias que han sido muy útiles en mi propio diseño de arquitecturas CNN eficientes para la web:
1. Comience con una arquitectura pequeña
Tenga en cuenta que cuanto más pequeña sea la red que pueda lograr una mayor precisión, menos tiempo llevará realizar la inferencia y más fácil será para los usuarios descargar y almacenar en caché el modelo. Además, los modelos más pequeños tienen menos parámetros y, por tanto, convergen más rápido durante el entrenamiento.
Si descubre que el rendimiento de su arquitectura de red actual no es muy bueno o que la precisión no es satisfactoria, aún puede aumentar gradualmente el tamaño de la red, por ejemplo, aumentar la cantidad de filtros convolucionales. por capa, o simplemente apilar más capas de red para construir una red más profunda.
2. Aplicar convoluciones separables en profundidad
Dado que estamos construyendo un nuevo modelo, no hay duda de que queremos utilizar convoluciones separables en profundidad en lugar del producto tradicional de convoluciones 2D. La convolución separable en profundidad divide la operación de convolución tradicional en dos partes, primero convoluciona en el canal y luego aplica una convolución 1x1. Las convoluciones separables en profundidad tienen menos parámetros que las operaciones de convolución tradicionales, lo que significa menos operaciones de punto flotante, una paralelización más fácil y una inferencia más rápida (he encontrado convoluciones separables en profundidad en lugar de la convolución tradicional, la velocidad de inferencia es 10 veces más rápida) y consume menos recursos ( lo que significa que se mejora el rendimiento de los dispositivos móviles). Además, el entrenamiento lleva menos tiempo debido a que hay menos parámetros.