Me emocioné cuando escuché por primera vez que Turi Create fue adquirida por Apple y luego, ¡fue abierta a la mayor comunidad de aprendizaje automático! A principios de este año, escribí sobre cómo Turi Create está interrumpiendo el paisaje de aprendizaje automático . Luego vino WWDC18 y una serie de mejoras a Turi Create, incluida una versión beta 5.0.
Uno de los nuevos modelos que experimenté se llama Transferencia de estilo, un derivado de Transfer Learning que permite que los filtros de tipo Instrgram se aprendan de los archivos de origen y se apliquen a las imágenes proporcionadas por el usuario.
Esta publicación sirve como introducción a la metodología tal como existe en Turi (octubre de 2018, v5) , así como una rápida inmersión en el paradigma de ResNet y cómo sus optimizaciones permiten un aprendizaje profundo y rápido que permite la transferencia de estilo en dispositivos móviles.
Turi Style Transfer
En primer lugar, siga el Turi Create Instrucciones de instalación en GitHub . Es imperativo crear un entorno Python 2.7 con las dependencias específicas requeridas, o estarás en la versión del infierno. Confía en mí, he pasado tiempo allí! 👹
¡Y usa Anaconda para hacer la vida más fácil! 🐍
Aquí está mi repositorio para un cuaderno Jupyter precompilado e imágenes de origen. Desde aquí, abra Jupyter y saltemos al código:
import turicreate by tc # estilo de carga y fuentes de contenido
styles = tc.load_images (& # 039; styles / & # 039;) content = tc.load_images (& # 039; content / & # 039;)
El contenido importa, porque mientras más cerca entrene en ejemplos de cómo se verán sus imágenes objetivo, más sólidos serán sus resultados.
# crear Modelo de transferencia de estilo model = tc.style_transfer.create (estilos, contenido, max_iterations = 100)
Más iteraciones = más mejor, con rendimientos decrecientes. A menos que esté en una máquina con una GPU dedicada, o mejor, con AWS, Azure, Google, etc., esto tomará un tiempo … y es posible que desee ejecutar durante la noche con 1 a 5k iteraciones.
Desde aquí, Guarde ese modelo lo antes posible! Podemos guardar y cargar modelos fácilmente en Turi, pero tenga en cuenta que la clase cambia a tc para cargas genéricas de cualquier tipo de modelo.
# guardar modelo model.save (& # 039; dog_style_model3.model & # 039;) [19659012] # modelo de carga tc.load_model (& # 039; dog_style_model.model & # 039;)
A continuación, vamos a explorar nuestro modelo:
# obtener las características del modelo modelo
Clase: StyleTransfer
Esquema
– – –
Modelo: resnet-16
Número de estilos únicos: 3
Forma de la imagen de entrada: (256, 256)
Resumen del entrenamiento
– – – – – – –
Tiempo de entrenamiento: 58m 27s
Épocas de entrenamiento: 200
Iteraciones de entrenamiento: 100
Número de imágenes de estilo: 3
Número de imágenes de contenido: 3
Pérdida final : 15.9675
Si, de forma predeterminada, ejecutó un modelo verbose = True mientras se ajustaba, cada iteración habrá provisto su pérdida. En mi corrida, la pérdida final de 15.9675 está rondando la pérdida más baja observada, por lo que puedo estar “algo” seguro de que el modelo es bueno. La pérdida dependerá de aspectos como la complejidad de sus estilos y la variación de sus archivos de contenido.
Nuevamente, tendrá que ejecutar muchas iteraciones si tiene muchos estilos y / o contenido.
También debe dar sus estilos descriptivos de nombres de archivos; el siguiente vistazo proporcionará una buena tabla de referencia.
# vistazo a las fuentes de estilo estilos
# genera una tabla de referencia para los nombres de archivo
Desde aquí, vamos a cargar y “estilizar” Nuestras imágenes proporcionadas por el usuario. Elegí dos de mis razas de perros favoritas, Doberman y Weimaraner:
“¡Regla de los perros alemanes!”
– yo
# cargar imágenes de prueba test_images = tc.load_images (& # 039; perros / & # 039;)
# stylize test set stylized_images = model.stylize (test_images)
También incluyo un archivo JPG blanco liso para ayudar a eliminar complejidad y determinar exactamente lo que está pasando bajo el capó. Este enfoque es algo que recomiendo a mis alumnos, que pueden estar inquietos al aplicar métodos complejos directamente a grandes conjuntos de datos. Sí, el aprendizaje profundo le gusta el big data. Pero no, no es un buen ambiente pedagógico para descifrar lo que está sucediendo cuando te estás ahogando en los datos.
Por lo tanto, corta un trozo de tu conjunto de datos y juega con él, con un enfoque en el algoritmo primero. Haga esto entrenando (contenido) y probando en el archivo blanco.jpg incluido para obtener una idea simple de cuánto y dónde se aplica el filtro.
# abrir la vista de galería stylized_images.explore ()
Este abierto es el La vista de galería de Sframe con datos de imagen, que es una excelente manera de escanear los resultados.
También podemos dirigir estilos específicos a un subconjunto de imágenes según el código siguiente:
# podemos dirigir imágenes y estilos específicos
# primer estilo stylized_image = model.stylize (test_images, style = 0)
# subconjunto de estilos stylized_images = model.stylize (test_images, style = [1, 2])
Y ahí lo tenemos ¡Transferencia de estilo rápida y fácil con Turi Create!
Introducción a ResNet
Algunos pensamientos rápidos sobre Redes Residuales (ResNet) provienen del cuaderno de Jupyter:
- AlexNet (ConvNet) ganó el concurso de clasificación LSVRC2012 y cambió el juego Para siempre!
- Redes neuronales convolucionales (CNN) estaban aquí para quedarse.
- Los descendientes construyeron modelos más complejos con capas más profundas …
- Hasta que el problema “ gradiente de fuga ” detuvo las cosas.
- Ingrese ResNet (Red Residual)
1 Por Kaiming He, Xiangyu Zhang, Shaoqing Ren y Jian Sun de Microsoft Research
2. Documento sobre arXiv - ResNet entrena a miles de capas con un rendimiento rápido.
- Esto se logra con omitir conexiones similar a las celdas de memoria en LSTM.
- ¡Podemos construir CNN más profundos (y otros modelos de aprendizaje profundo) con mejor rendimiento y menos necesidad de optimizar la arquitectura!
I profundice en el desarrollo de este paradigma en el video de mi Github repo Readme de mi reciente presentación de San Francisco sobre este tema. Por favor refiérase a eso para obtener más detalles.
Conclusión: ResNet permite la optimización / mejora automática de las arquitecturas de aprendizaje profundo al permitir el desvío de transformaciones de capas ocultas no productivas.
Si encuentra este post informativo, por favor presione el botón de aplaudir, compartir y conectarse conmigo! ¡Me encantaría saber cómo está usando Style Transfer en los comentarios a continuación!