¿Qué tamaño tiene el modelo entrenado por tensorflow?
Sin embargo, ejecutar modelos profundos directamente en el navegador también trae consigo nuevos desafíos y limitaciones. Después de todo, algunos modelos existentes no fueron diseñados para ejecutarse en navegadores de clientes, y mucho menos en navegadores móviles. Tomemos como ejemplo los modelos de detección de objetos de última generación: a menudo requieren importantes recursos informáticos para funcionar a fps razonables, y mucho menos en tiempo real. Además, para una aplicación web sencilla, no resulta práctico asignar más de 100 MB de peso de modelo al navegador del cliente.
Entrena un modelo de aprendizaje profundo eficaz para la red
¡Pero no pierdas la esperanza! Con base en algunos principios básicos, podemos crear y entrenar modelos muy buenos y optimizarlos para ejecutarlos en un entorno web. Lo creas o no, en realidad podemos entrenar un modelo de clasificación de imágenes bastante bueno, incluso el modelo de detección de objetivos tiene un tamaño de solo unos pocos megabytes o incluso unos cientos de K:
Este artículo dará algunas sugerencias generales. Le ayudaré a comenzar a entrenar su propia red neuronal convolucional (CNN) y algunas sugerencias para entrenar CNN para aplicaciones web y navegadores móviles basados en tensorflow.js
Me pidió que entrenara un modelo de aprendizaje profundo en el navegador. ?
Quizás tengas curiosidad: ¿Por qué debería entrenar mi modelo basado en tensorflow.js en el navegador en lugar de entrenar mi modelo directamente en mi propia máquina? Por supuesto, puedes entrenar en tu propia máquina, especialmente si tu máquina está equipada con una tarjeta gráfica NVIDIA. Tensorflow.js usa aceleración WebGL internamente, por lo que un beneficio de entrenar el modelo en el navegador es que puede usar tarjetas gráficas AMD. Además, entrenar el modelo en el navegador protege mejor la privacidad del usuario y facilita que los usuarios confíen en él.
Arquitectura de red
Obviamente, antes de entrenar un modelo, primero es necesario implementarlo. Por lo general, la gente recomendará elegir una arquitectura existente que haya sido probada, como YOLO, SSD, ResNet, MobileNet, etc.
Personalmente creo que al diseñar nuestra propia arquitectura, es muy valioso aplicar algunos conceptos de arquitecturas existentes, pero puede que no sea apropiado introducir estas arquitecturas existentes directamente en las aplicaciones web porque queremos una modelo que es más pequeño, más rápido de inferir (idealmente inferencia en tiempo real) y fácil de entrenar.
Ya sea que planee introducir una arquitectura existente o comenzar desde cero, aquí hay algunas sugerencias que han sido muy útiles cuando yo mismo diseñé una arquitectura CNN eficiente 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, más rápido será su tiempo de 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 la arquitectura de red actual no funciona muy bien o no logra la precisión que desea, aún puede aumentar gradualmente el tamaño de la red, como aumentar la cantidad de filtros convolucionales en cada capa, o apilar directamente más capas de red para construir una red más profunda.
2. Aplicar convolución separable en profundidad
Dado que estamos construyendo un nuevo modelo, no hay duda de que deberíamos utilizar convolución separable en profundidad para reemplazar la convolución 2D tradicional. La convolución separable en profundidad divide la operación de convolución regular en dos partes: primero convolución por canal y luego convolución por 1x1. Las convoluciones separables en profundidad tienen menos parámetros que las operaciones de convolución regulares, lo que significa menos operaciones de punto flotante, una paralelización más fácil y una inferencia más rápida (he encontrado solo convoluciones separables en profundidad en lugar de convoluciones regulares, la inferencia se acelera 10 veces) y consume menos recursos (lo que significa mejoras). rendimiento en dispositivos móviles). Además, el tiempo de entrenamiento es más corto debido a que hay menos parámetros.