Light Bulb es una herramienta que nos ayuda a entrenar, etiquetar, probar y desplegar modelos de aprendizaje automático sin ningún tipo de codificación.
Vaya directamente al proyecto Github aquí .
Supongamos que queremos crear una aplicación para compartir fotos, por ejemplo algo así como CatSnap que permite a sus usuarios enviar fotos de gatos, y nada más.
¿Cómo vamos a comenzar? Probablemente podemos pensar en lo siguiente:
- Recogemos un gran conjunto de fotos de gatos y otras que no contengan un gato.
- Etiquetamos manualmente las publicaciones como gato o no gato .
- Dividimos el conjunto de datos en tren, prueba y validación conjuntos .
- Entrenamos un modelo (digamos una red neuronal convolucional ) en el conjunto de datos.
- Buscamos la precisión del conjunto de pruebas, si no es lo suficientemente bueno, vuelveremos atrás y debemos volve a pensar cada paso.
- Guardamos los pesos del modelo y cargamos en un servidor web para comenzar a clasificar las publicaciones nuevas.
Bueno dicho todo lo anterior veamos cómo Light Bulb puede ayudarnos con todo esto.
Presentamos: Light Bulb 💡
Light Bulb es un servicio que integrará de extremo a extremo, desde el etiquetado hasta la producción.
Primero definamos esta configuración:
# config/cat_not_cat.yml task: title: Is this a cat? dataset: directory: dataset/cat_not_cat/ data_type: images judgements_file: outputs/cat_not_cat/labels.csv label: type: classification classes: - Cat - Not Cat model: directory: outputs/cat_not_cat/models/ user: chris
Luego desde la raíz de la aplicación ejecutada:
make make dataset/cat_not_cat .virt/bin/python code/server.py --config config/cat_not_cat.yml
Que iniciará un servidor en http://localhost:5000
Al etiquetar algunas entradas, verá Entrenamiento ícono cambia de No a Sí. Esto significa que un modelo está entrenando activamente en las publicaciones recientemente etiquetadas. A medida que etiqueta más publicaciones, el modelo se vuelve más inteligente.
Después de etiquetar más imágenes (y darle al modelo cierto tiempo para entrenar), verá una Precisión estadística, que muestra qué tan bien está funcionando el modelo. En este caso, nuestro modelo está obteniendo aproximadamente 87% de precisión, lo cual es bastante sorprendente ya que solo etiquetamos 78 imágenes.
Etiquetando 2000 imágenes en 15 minutos
Ahora que nuestro modelo está entrenado, comenzará a ayudarnos a etiquetar más datos 😲. Light Bulb will:
- Examine el conjunto de datos y etiquete las imágenes con las que se sienta seguro (97% de confianza de hecho).
- Almacene las etiquetas que asigna el modelo y preséntelas por lotes. Todo lo que tiene que hacer es confirmar que las etiquetas son correctas.
Con esta función de etiquetado por lotes, logré etiquetar todas las 2000 imágenes en solo 15 minutos.
Modelo de servicio.
Light Bulb también expone una API para su modelo. Puede emitir fácilmente solicitudes de API al servidor y obtener nuevas imágenes.
Veamos en qué piensa nuestro modelo de esta imagen:
curl --header "Content-Type: application/json" --request POST \ --data '{"type": "images", "urls": ["https://sitiobigdata.com/wp-content/uploads/2019/12/Light-Bulb-cat.jpg"]}' \ http: // localhost: 5000 / score
Que devuelve:
{ "labels": ["Cat", "Not Cat" ], "scores": [ [0.9971857666969299, # Nuestro modelo cree que es 99% un gato! 0.0028141846414655447] ] } Y ahora intentemos algo que no sea un gato :
curl --header "Content-Type: application/json" --request POST --data '{"type": "images", "urls": ["https://sitiobigdata.com/wp-content/uploads/2019/12/Light-Bulb-dog.jpg"]}' \ http://localhost:5000/score
Nuestro modelo devuelve:
{ "labels": ["Cat", "Not Cat" ] "scores": [ [ 0.007293896283954382, 0.9927061200141907 # Nuestro modelo cree que esto es 99.2% no es un gato! ] ] }
¿Cómo funciona?
La mayoría de las tareas de aprendizaje profundo se pueden enmarcar como una arquitectura encoder – decoder.
Imágenes
Para todas las tareas de imagen, utilizamos un Squeeze Net codificador pre-entrenado en Image Net .
Clasificación de imagen: La clasificación de imagen se realiza con un codificador basado en CNN, que se alimenta a un decodificador de perceptrón multicapa.
Detección de objetos (trabajo en progreso): La detección de objetos se puede enmarcar como un codificador basado en CNN, que se alimenta a un decodificador de regresión. Para la detección de objetos, el decodificador será un cabezal YOLOv3 preentrenado.
Ejemplo de detección de objetos
Texto
Para todas las tareas de texto, usaremos un codificador LSTM de 3 capas preentrenado como un modelo de lenguaje en Wikitext-103.
Clasificación de texto: La clasificación de texto se puede enmarcar como un codificador LSTM que da salida a un decodificador de regresión logística.
Etiquetado de secuencia (trabajo en progreso): El etiquetado de secuencia se puede enmarcar como un codificador LSTM, donde en cada paso de tiempo, la salida se alimenta a un modelo CRF