Creando una Aplicación de Visión en Situaciones de Baja Potencia: Usando OpenVino y OpenCV con ODROID-C2

La distribución Intel® del kit de herramientas OpenVINO ™ y el Intel® Neural Compute Stick 2 (Intel® NCS 2) son el complemento perfecto para aplicaciones de visión en entornos de desarrollo de baja potencia. La configuración en tantas y diferentes arquitecturas ofrece muchas oportunidades. Las plataformas ARM como ARM64 se están volviendo cada vez más comunes para los desarrolladores que crean y exportan soluciones para ordenadores de placa reducida (SBC) de bajo consumo. Estos pueden tener requisitos muy diferentes en comparación con los entornos informáticos tradicionales x86. Aunque la distribución Intel® del kit de herramientas OpenVINO ™ proporciona una instalación binaria para múltiples entornos, incluido el popular SBC Raspberry Pi*, la versión de código abierto del kit de herramientas Intel® OpenVINO ™ ofrece a los desarrolladores la oportunidad de compilar el kit de herramientas y la aplicación de puerto(s) para muy diversos entornos. ODROID-C2 de HARDKERNEL CO., LTD es un ordenador similar a la Raspberry Pi. El ODROID-C2 es una plataforma ARM64 con un potente procesador de cuatro núcleos y mucha RAM (2 GB) para múltiples aplicaciones. Este artículo te guiará a la hora de configurar un ODROID-C2 con Ubuntu * 16.04 (LTS), compilar CMake*, OpenCV y el kit de herramientas OpenVINO™ de Intel®, configurar tu Intel® NCS 2 y ejecutar algunos ejemplos para asegurarnos de que todo esté listo para que puedas crear e implementar tus aplicaciones del kit de herramientas Intel® OpenVINO™.

Paquete Neural Compute Stick

Aunque estas instrucciones han sido escritas para el ODROID-C2*, los pasos deberían ser prácticamente los mismos para otros SBC ARM* 64 como el ODROID-N2 siempre que tu entorno esté utilizando un sistema operativo de 64 bits. Si tu dispositivo utiliza un sistema operativo de 32 bits que admite el conjunto de instrucciones ARMv7, visita este artículo de ARMv7: https://intel.ly/2DyJjpt. Las instrucciones generales sobre cómo crear y utilizar la distribución de código abierto del kit de herramientas OpenVINO ™ con Intel® Neural Compute Stick 2 y el Intel® Movidius ™ Neural Compute Stick original, las puedes encontrar en el artículo: https://intel.ly/2P9kQga.

Hardware

Asegúrate de cumplir con los siguientes requisitos antes de empezar. Esto asegurará que todo el proceso de instalación se realice sin problemas:

  • SBC ARMv7 como el Orange pi PC Plus
  • AL MENOS una tarjeta microSD de 8GB. Puede utilizar el módulo eMMC integrado si tienes uno, aunque necesitarás una tarjeta microSD para escribir el sistema operativo en la placa.
  • Intel® Neural Compute Stick 2
  • Conexión a Internet Ethernet o red inalámbrica compatible
  • Adaptador de corriente continua dedicado
  • Teclado
  • Monitor HDMI
  • Cable HDMI
  • Dispositivo de almacenamikento USB
  • Ordenador Windows*, Ubuntu* o macOS * independiente (como el que estás usando en este momento) para escribir la imagen del instalador en el dispositivo con un lector de tarjetas microSD compatible

Configuración de tu entorno de compilación

Esta guía asume que estás utilizando el usuario root y no incluye sudo en los comandos. Si ha creado otro usuario y ha iniciado sesión con ese usuario, ejecuta los comandos como root para instalarlos correctamente.

Asegúrate de que el software de tu dispositivo está actualizado:

$ apt update && apt upgrade –y
Algunas de las dependencias del kit de herramientas no tienen binarios ARMv7 precompilados y deben compilarse desde la fuente; esto puede aumentar el tiempo de compilación significativamente en comparación con otras plataformas. Preparar el kit de herramientas requiere de los siguientes pasos:

  • Instalar herramientas de compilación
  • Instalar CMake* desde la fuente
  • Instalar OpenCV desde la fuente
  • Clonar el kit de herramientas

Los pasos se detallan a continuación:

Instalar las herramientas de compilación

Instalar build-essential:

$ apt install build-essential
Esto instalará y configurará los compiladores GNU C y GNU CPlusPlus. Si todo finaliza con éxito, continua e instalar CMake* desde la fuente.

Instalar CMake* desde la fuente

La versión de código abierto del kit de herramientas Intel® OpenVINO ™ (y OpenCV, a continuación) usa CMake* como su sistema de compilación. La versión de CMake en los repositorios de paquetes tanto para Ubuntu 16.04 (LTS) como para Ubuntu 18.04 (LTS) está demasiado desactualizada para nuestro uso y no existe un binario oficial para la plataforma, por lo que debemos compilar la herramienta desde la fuente. En este momento, la versión estable más reciente de CMake es 3.14.4. Para empezar, coge CMake de la página de GitHub*, extráelo y dirígete a la carpeta extraída:

$ wget https://github.com/Kitware/CMake/releases/download/v3.14.4/cmake-3.14.4.tar.gz
$ tar xvzf cmake-3.14.4.tar.gz
$ cd ~/cmake-3.14.466
Ejecuta el script de arranque para instalar las dependencias adicionales e iniciar la compilación:
$ ./bootstrap
$ make –j4
$ make install
El paso de instalación es opcional, pero recomendado. Sin él, CMake se ejecutará desde el directorio de compilación. El número de tareas que utiliza el comando make se puede ajustar con el parámetro –j; se recomienda fijar este número para que coincida con el número de núcleos de tu plataforma. Puede verificar el número de núcleos de tu sistema utilizando el comando grep –c ^processor /proc/cpuinfo. Ten en cuenta que fijar un número demasiado alto puede provocar el desbordamiento de la memoria y por tanto fallar la compilación. Si el tiempo te lo permite, te recomiendo ejecutar de 1 a 2 tareas. CMake ahora está completamente instalado.

Instalar OpenCV desde la fuente

El kit de herramientas Intel® OpenVINO ™ utiliza el potencial de OpenCV para acelerar la inferencia basada en la visión. Aunque el proceso CMake para el kit de herramientas Intel® OpenVINO ™ descarga OpenCV, si no hay una versión instalada para las plataformas compatibles, no existe una versión específica para las plataformas ARMv7. Como tal, debemos compilar OpenCV desde la fuente. OpenCV requiere algunas dependencias adicionales. Instala lo siguiente desde tu administrador de paquetes (en este caso, apt):

  • git
  • libgtk2.0-dev
  • pkg-config
  • libavcodec-dev
  • libavformat-dev
  • libswscale-dev

Clona el repositorio desde la página OpenCV GitHub*, prepara el entorno de compilación y compila:

$ git clone https://github.com/opencv/opencv.git
$ cd opencv && mkdir build && cd build
$ cmake –DCMAKE_BUILD_TYPE=Release –DCMAKE_INSTALL_PREFIX=/usr/local ..
$ make –j4
$ make install
OpenCV ahora está completamente instalado.

Descargar el código fuente e instalar dependencias

La versión de código abierto del kit de herramientas Intel® OpenVINO ™ está disponible desde GitHub. La carpeta del repositorio es dldt, para Deep Learning Development Toolkit.

$ git clone https://github.com/opencv/dldt.git
El repositorio también tiene submódulos que deben cogerse:
$ cd ~/dldt/inference-engine
$ git submodule init
$ git submodule update –-recursive
El kit de herramientas Intel® OpenVINO ™ tiene varias dependencias de compilación. El script install_dependencies.sh las busca por ti. Se han realizado algunos cambios en el script para que se ejecute correctamente a las plataformas ARM*. Si tienes algún problema a la hora de ejecutar el script, debes instalar cada dependencia individualmente. Para las imágenes que incorporan un shell no compatible con POSIX de Bash, este script (a partir de 2019 R1.1) usa palabra clave de función y un conjunto de corchetes dobles que no funcionan para shells que no son Bash. Usando tu editor de texto favorito, realiza los siguientes cambios.

Línea 8 Original:

function yes_or_no {

Editar Linea 8:

yes_or_no() {

Line 23 Original:

if [[ -f /etc/lsb-release ]]; then

Editar Linea 23:

if [ -f /etc/lsb-release ]; then
El script también intenta instalar dos paquetes que no son necesarios para ARM: gcc-multilib y gPlusPlus-multilib. Deben eliminarse del script o el resto de paquetes deberán instalarse de forma independiente.

Ejecuta el script para instalar:

$ sh ./install_dependencies.sh
Si el script finaliza con éxito, estás listo para compilar el kit de herramientas. Si algo ha fallado, asegúrate de instalar las dependencias que hemos mencionado e inténtalo nuevamente.

Compilación

El primer paso, para empezar la compilación, es decirle al sistema la ubicación de la instalación de OpenCV. Usa el siguiente comando:

$ export OpenCV_DIR=/usr/local/opencv4
El kit de herramientas utiliza un sistema de compilación CMake para guiar y simplificar este proceso de compilación. Para compilar tanto el motor de inferencia como el complemento MYRIAD para Intel® NCS 2, usa los siguientes comandos:
$ cd ~/dldt/inference-engine
$ mkdir build && cd build
$ 6cmake -DCMAKE_BUILD_TYPE=Release \
      -DENABLE_MKL_DNN=OFF \
      -DENABLE_CLDNN=OFF \
      -DENABLE_GNA=OFF \
      -DENABLE_SSE42=OFF \
      -DTHREADING=SEQ \
      ..
$ make
Si el comando make falla debido a un problema con una librería OpenCV, asegúrate de informar al sistema de la ubicación de tu instalación de OpenCV. Si la compilación se completa con éxito, el kit de herramientas Intel® OpenVINO ™ está listo para ejecutarse. Las compilaciones esta ubicadas en:
/inference-engine/bin/armv7/Release/

Verificando la instalación

Después de completar con éxito la compilación del motor de inferencia, debes verificar que todo esté configurado correctamente. Para verificar que el kit de herramientas y el Intel® NCS 2 funcionan en tu dispositivo, completa los siguientes pasos:

  • Ejecuta el programa de muestra benchmark_app para confirmar que todas las librerías se cargan correctamente.
  • Descargar un modelo formado
  • Selecciona una entrada para la red neuronal
  • Configura el controlador USB Intel® NCS 2 Linux*
  • Ejecuta benchmark_app con el modelo y la entrada seleccionados.

Sample Programs: benchmark_app
El kit de herramientas Intel® OpenVINO ™ incluye algunos programas de muestra que utilizan el motor de inferencia e Intel® NCS 2. Uno de los programas es benchmark_app, una herramienta para estimar el rendimiento de la inferencia de aprendizaje profundo. La puedes encontrar en:
~/dldt/inference-engine/bin/intel64/Release6
Ejecuta el siguiente comando en la carpeta para probar benchmark_app:
$ ./benchmark_app –h
Debe aparecer un cuadro de diálogo de ayuda que describa las opciones disponibles del programa.

Descargar un modelo

El programa necesita un modelo para pasar a la entrada. Los modelos para el kit de herramientas Intel® OpenVINO ™ en formato IR se pueden obtener de la siguiente forma:

  • Usando del Optimizador de modelos para convertir un modelo existente de uno de los marcos compatibles al formato IR para el motor de inferencia
  • Usando la herramienta Model Downloader para descargar un archivo de Open Model Zoo
  • Descargando los archivos IR directamente desde download.01.org

En nuestro caso, descargar los archivos directamente es más fácil. Usa los siguientes comandos para obtener un modelo de reconocimiento de edad y género:

$ cd ~
$ mkdir models
$ cd models
$ wget https://download.01.org/opencv/2019/open_model_zoo/R1/models_bin/age-gender-recognition-retail-0013/FP16/age-gender-recognition-retail-0013.xml
$ wget https://download.01.org/opencv/2019/open_model_zoo/R1/models_bin/age-gender-recognition-retail-0013/FP16/age-gender-recognition-retail-0013.bin
El Intel® NCS 2 requiere modelos optimizados para el formato de punto flotante de 16 bits conocido como FP16. Tu modelo, si difiere del ejemplo, puede requerir la conversión utilizando el Optimizador de modelos para FP16.

Entrada para la red neuronal

El último elemento requerido es la entrada para la red neuronal. Para el modelo que hemos descargado, necesitas una imagen de 62x62 con 3 canales de color. Este artículo incluye un archivo que contiene una imagen que puede usar, y se usa en el siguiente ejemplo. Copia el archivo en un dispositivo de almacenamiento USB, conecta el dispositivo a tu placa y usa los siguientes comandos para montar la unidad y copiar su contenido a una carpeta llamada OpenVINO en tu directorio de inicio:

$ lsblk
Utiliza el comando lsblk para listar los dispositivos de bloque disponibles y toma nota de tu unidad USB conectada. Usa tu nombre en lugar de sdX en el siguiente comando:
$ mkdir /media/usb
$ mount /dev/sdX /media/usb
$ mkdir ~/OpenVINO
$ cp /media/archive_openvino.tar.gz ~/OpenVINO
$ tar xvzf ~/OpenVINO/archive_openvino.tar.gz
La carpeta OpenVINO ahora debe contener dos imágenes, un archivo de texto y una carpeta llamada squeezenet. Ten en cuenta que el nombre del archivo puede ser diferente; debe coincidir con lo que has descargado de este artículo.

Configurar el controlador USB Intel® NCS 2 Linux*

Es necesario agregar algunas reglas udev para permitir que el sistema reconozca los dispositivos USB Intel® NCS 2. Dentro del archivo tar.gz adjunto hay un archivo llamado 97-myriad-usbboot.rules_.txt. Se debe descargar en el directorio de inicio del usuario. Sigue los siguientes comandos para agregar las reglas a tu dispositivo:

Si el usuario actual no es miembro del grupo de usuarios, ejecuta el siguiente comando y reinicia tu dispositivo:

$ sudo usermod –a –G users “$(whoami)”
Mientras estás conectado como usuario en el grupo de usuarios:
$ cd ~
$ cp 97-myriad-usbboot.rules_.txt /etc/udev/rules.d/97-myriad-usbboot.rules
$ udevadm control --reload-rules
$ udevadm trigger
$ ldconfig
El controlador USB debería instalarse correctamente ahora. Si Intel® NCS 2 no se detecta al ejecutar las demos, reinicia tu dispositivo e inténtalo de nuevo.

Ejecutando benchmark_app

Cuando se descarga el modelo, hay una imagen de entrada disponible y el Intel® NCS 2 está conectado a un puerto USB, usa los siguientes comandos para ejecutar benchmark_app:

$ cd ~/dldt/inference-engine/bin/intel64/Release
$ ./benchmark_app –I ~/president_reagan-62x62.png –m \
  ~/models/age-gender-recognition-retail-0013.xml
$ –pp ./lib –api async –d MYRIAD
Esto ejecutará la aplicación con las opciones seleccionadas. El parámetro –d le dice al programa qué dispositivo usar para la inferencia: MYRIAD activa el complemento MYRAID, utilizando el Intel® NCS 2. Una vez que el comando se ejecute con éxito, el terminal mostrará estadísticas para la inferencia. Si la aplicación se ejecutó correctamente en tu Intel® NCS 2, entonces el kit de herramientas Intel® OpenVINO ™ y el Intel® NCS 2 están configurados correctamente para usarlos en tu dispositivo.

Inferencia en el borde

Ahora que has confirmado que tu ARMv7 está configurado y funciona con Intel® NCS 2, puede comenzar a compilar e implementar tus aplicaciones de inteligencia artificial o utilizar una de las aplicaciones de muestra precompiladas para probar su uso. A continuación, intentaremos hacer una clasificación de imagen simple usando SqueezeNetv1.1 y una imagen descargada en la placa. Para simplificar las cosas, el archivo adjunto contiene tanto la imagen como la red. La red SqueezeNetv1.1 ya se ha convertido al formato IR para ser usado por el motor de inferencia.

El siguiente comando tomará la imagen cat.jpg que fue incluida en el archivo, usará el modelo de red squeezenet1.1, cargará el modelo con el complemento MYRIAD en el Intel® NCS 2 conectado e inferirá la salida. Como antes, la ubicación de la aplicación de muestra es:

/inference-engine/bin/armv7/Release/

$ ./classification_sample –i ~/OpenVINO/cat.jpg –m \
  ~/OpenVINO/squeezenet/squeezenet1.1.xml –d MYRIAD
El programa generará una lista de los 10 resultados principales de la inferencia y un promedio del rendimiento de la imagen.

Si has llegado hasta aquí, tu dispositivo está configurado, verificado y listo para empezar a crear prototipos y desplegar tus propias aplicaciones de inteligencia artificial utilizando la potencia del kit de herramientas Intel® OpenVINO™.

Para obtener información más completa sobre las optimizaciones del compilador, consulta nuestro Aviso de optimización en: https://intel.ly/33FbQUU.

Referencía

https://software.intel.com/en-us/articles/ARM64-sbc-and-NCS2

Be the first to comment

Leave a Reply