Movidius para un gran aprendizaje innovador
Neural Compute Stick permite el uso de la IA en aplicaciones integradas de baja potencia.
La inteligencia artificial (IA) es una de esas cosas que, al igual que la energía limpia que se obtiene con la fusión nuclear, lleva décadas prometiendo una gran repercusión en la sociedad. Los avances realizados en los últimos años han permitido que la IA se use por fin en un gran número de aplicaciones prácticas. No obstante, existe un desafío que no desaparece: muchas aplicaciones clave, como el procesamiento de la visión, se caracterizan por un elevado uso computacional y, por lo tanto, el procesamiento local en dispositivos de baja potencia queda descartado.
Movidius, una empresa que actualmente pertenece a Intel, está revolucionando este aspecto con su unidad de procesamiento de visión (VPU) Myriad 2, la cual proporciona visión virtual programable por software con un consumo de energía ultrabajo.
En este artículo, echamos un primer vistazo a la tecnología de la VPU Myriad y a su SDK, y practicamos con el Neural Compute Stick (NCS), una solución de bajo coste para desarrollar y elaborar prototipos.
100 gigaflops para 1 vatio 1
Fuente: Movidius Myriad 2 VPU Product Brief
El Movidius Neural Compute Stick (139-3655) ofrece un fantástico rendimiento para aplicaciones de procesamiento de visión, con más de 100 gigaflops para un consumo de energía aproximado de 1 vatio. Esto es posible con un sistema en chip (SoC) de 600 MHz que incorpora 12 procesadores VLIW de 128 bits y 2 MB de memoria en chip con una velocidad de transferencia de 400 Gbps.
Entre las características clave se incluyen:
- Compatibilidad con FP16, FP32 y operaciones de números enteros con precisión de 8, 16 y 32 bits.
- Inferencia en el dispositivo en tiempo real sin conectividad con la nube.
- Implementación de modelos de redes neuronales convolucionales (CNN) existentes o redes de aprendizaje exclusivas.
- Todos los datos y la potencia se suministran a través de un único puerto USB 3.0 en un PC host.
Aunque dispone de tecnología USB 3.0, es probable que un puerto USB 2.0 sea suficiente para la mayoría de los usos. Para aumentar el rendimiento, es posible conectar en red varios NCS mediante un concentrador USB.
Compatibilidad con Caffe
La compatibilidad con aplicaciones de aprendizaje profundo se consigue mediante el framework Caffe de código abierto desarrollado por el Laboratorio de investigación de inteligencia artificial de Berkeley (BAIR). Los principios de Caffe son:
- Expresión: los modelos y las optimizaciones se definen en forma de esquemas de texto sin formato en lugar de código.
- Velocidad: en campos como la investigación y otros similares, la velocidad es crucial para trabajar con modelos vanguardistas y grandes volúmenes de datos.
- Modularidad: las nuevas tareas y los ajustes precisan de flexibilidad y capacidad de ampliación.
- Accesibilidad: el progreso científico y aplicado exige la existencia de un código común, modelos de referencia y reproducibilidad.
- Comunidad: todos los avances relacionados con la investigación académica, los prototipos iniciales y las aplicaciones industriales se comparten por medio de un debate conjunto y el desarrollo en un proyecto de BSD-2.
El sitio web del proyecto ofrece un recorrido por la anatomía y las funciones de Caffe. Si tienes tan poca experiencia como yo en la tecnología de IA, hay mucho por hacer. Sin embargo, no te preocupes: el SDK de Movidius Neural Compute (NC) incluye el framework y asistencia para hardware, así como aplicaciones de ejemplo que utilizan los modelos existentes de red neuronal. En otras palabras, tendrás todo listo en un tiempo mínimo, y podrás evaluar el rendimiento de las redes y el hardware de NCS.
Instalación del SDK
Se necesita un ordenador con Ubuntu 16.04 para instalar el SDK de NC. Es posible que también funcione con otras distribuciones, pero solo se menciona esta.
A continuación se ofrece un resumen de los pasos seguidos; es recomendable descargar la guía de inicio en PDF y otra documentación oficial para obtener instrucciones más detalladas.
Una vez descargada, el SDK de NC se puede instalar con:
$ sudo apt-get update
$ sudo apt-get upgrade
$ tar xvf MvNC_SDK_1.07.07.tgz
$ tar xzvf MvNC_Toolkit-1.07.06.tgz
$ cd bin
$ ./setup.sh
La instalación del kit de herramientas y las dependencias relacionadas puede tardar cierto tiempo. Ten en cuenta que el script de instalación actualiza el archivo ~/.bashrc para configurar la variable del entorno PYTHONPATH según corresponda. Por ejemplo, con la ubicación de instalación predeterminada, la línea que se añade es:
export PYTHONPATH=$env:"/opt/movidius/caffe/python":$PYTHONPATH
Si otros usuarios necesitan utilizar el SDK, tendrán que añadir esta línea al archivo ~/.bashrc.
Suponiendo que aún estamos en el directorio bin, podemos instalar modelos de Caffe para el código de ejemplo:
$ cd data
$ ./dlnets.sh
Si regresamos al directorio en el que se extrajo el SDK por primera vez, ahora podemos instalar la API:
$ cd ../..
$ tar xzvf MvNC_API-1.07.07.tgz
$ cd ncapi
$ ./setup.sh
Hay una serie de ejemplos que puedes ejecutar desde el directorio bin para probar el funcionamiento de NCS:
$ cd ../bin
$ make example00
$ make example01
$ make example02
$ make example03
Video stream infer example
Python stream_infer example
Ahora podemos pasar a un ejemplo más interesante. Necesitaremos un dispositivo de entrada de vídeo y, en nuestro caso, decidimos usar la webcam Logitech C920 Full HD (125-4272), ya que ofrece una compatibilidad excepcional con Linux.
$ cd ../ncapi/tools
$ ./get_models.sh
$ ./convert_models.sh
$ cd ../py_examples/stream_infer
$ python3 stream_infer.py
¡Vaya! ¿Calvo al 60,60%? Bueno, vamos a tranquilizarnos: el NCS solo estaba haciendo el trabajo pesado y debemos agradecer la inferencia realizada a la red neuronal convolucional (CNN). Para ser justos, puede que sea comprensible en cierto modo. En cualquier caso, podemos ver que el mismo ejemplo ofreció un resultado mejor con una taza de café y también ocurrió con otros objetos.
Lo importante aquí es la velocidad a la que nuestra IA es capaz de realizar inferencias; y con la energía que ha usado, no cabe duda de que lo ha hecho muy rápido.
El modelo usado por defecto por el ejemplo stream_infer.py se denomina SqueezeNet, una CNN que ofrece una precisión similar a la de AlexNet, que tiene unos 4 años más y que se diseñó para clasificar los 1,3 millones de imágenes de alta resolución que se incluían en el kit de aprendizaje LSVRC-2010 ImageNet en 1000 clases diferentes. No obstante, SqueezeNet consigue lo mismo con un modelo 510 veces más pequeño que AlexNet.
stream_infer.py puede configurarse para usar tanto SqueezeNet como AlexNet, lo que permite comparar su rendimiento en el NCS. Solo es cuestión de comentar o no unas líneas en la parte superior del archivo Python. También existen los modelos Gender y GoogleNet, que se pueden configurar del mismo modo. Por ejemplo:
NETWORK_IMAGE_WIDTH = 224 # la anchura de las imágenes que necesita la red
NETWORK_IMAGE_HEIGHT = 224 # la altura de las imágenes que necesita la red
NETWORK_IMAGE_FORMAT = "RGB" # el formato de las imágenes que necesita la red
NETWORK_DIRECTORY = "../../networks/GoogLeNet/" # directorio de la red
El ejemplo stream_infer.py buscará los archivos "graph", "stat.txt" y "categories.txt" en NETWORK_DIRECTORY. Si comparamos el tamaño del archivo del gráfico entre AlexNet y SqueezeNet:
Aunque no se multiplica por 510 en el caso del gráfico binario, la diferencia de tamaño es importante.
Compilación de red y creación de perfiles
Fuente: documentación del kit de herramientas de Movidius NCS
Se diseñarán nuevas CNN (por ejemplo, para clasificar los tipos de imagen no contemplados por las CNN existentes) y se efectuará el aprendizaje con un framework adecuado. Tras esto, la red se podrá compilar en un archivo de gráficos y se podrá elaborar el perfil con el kit de herramientas de NCS que se suministra con el SDK.
Plataformas integradas
Aunque la API debe instalarse inicialmente en el mismo ordenador que el kit de herramientas (un sistema con Ubuntu 16.04 x86-64), las bibliotecas, los encabezados, etc., pueden instalarse después en otras plataformas. De hecho, se incluye una serie de paquetes para Raspbian Jessie con el SDK. Esto significa que tras instalar estas dependencias adicionales del repositorio de Raspbian, solo es necesario modificar una línea en stream_infer.py para que este ejemplo pueda usarse con Raspberry Pi.
Aplicaciones típicas
Movidius VPU se ha seleccionado para el procesamiento de píxeles 4K VR del nuevo Motorola Moto Mod. Fuente: movidius.com
Entre las aplicaciones de visión virtual se incluyen:
- Drones y robótica
- Realidad virtual y aumentada
- Dispositivos portátiles
- Seguridad inteligente
La solución Myriad VPU podría utilizarse en cámaras de seguridad que, por ejemplo, sirvan para identificar un vehículo aparcado en un acceso o para diferenciar un ladrón de una mascota. También podría utilizarse para optimizar los robots domésticos (por ejemplo, la aspiradora) y drones, lo que permitiría evitar o detectar determinados objetos. Estos son solo algunos ejemplos de uso de la tecnología, aunque se prevé que su número aumente considerablemente.
Conclusiones
La tecnología de Movidius ya está permitiendo la aplicación práctica de IA en muchas aplicaciones de la vida real y se siguen investigando otros usos en productos vanguardistas, como el procesamiento de píxeles 4K VR en complementos para smartphone y sistemas de detección y evasión para drones. La disponibilidad del Neural Compute Stick significa que cualquiera podrá empezar a experimentar de inmediato con Myriad 2 VPU y añadir de forma sencilla potentes capacidades de aprendizaje profundo a plataformas integradas existentes.
Andrew Back 25 de agosto de 2017, 13:16
Defensor del código abierto (tanto en hardware como en software), tesorero y director de la fundación Free and Open Source Silicon Foundation, organizador del festival tecnológico Wuthering Bytes y fundador del grupo Open Source Hardware User Group.