Análisis de flujo: inicio rápido con SAS ESP

El uso de algoritmos analíticos en el flujo de datos es ahora una de las tareas más urgentes en el campo de la construcción de sistemas analíticos. Muchos modelos predictivos de alta precisión, por ejemplo, desarrollados en base a lecturas de sensores de plantas industriales, están listos para prevenir accidentes industriales graves, pero para esto deben realizarse en dispositivos finales ("dispositivos de borde"), donde las lecturas de los sensores vienen en tiempo real. Se llama al producto SAS Event Stream Processing para resolver este problema y transferir los análisis a "en línea". En esta publicación, me gustaría compartir la experiencia de su configuración utilizando un ejemplo de un problema aplicado: el análisis de imágenes de cámaras de video.



Tecnología


SAS ha estado presente en la línea de productos SAS durante muchos años y está desarrollando su propia solución de procesamiento de flujo, SAS Event Stream Processing (en adelante ESP). La tarea principal para los desarrolladores era lograr un alto rendimiento, órdenes de magnitud superiores a las soluciones existentes en el mercado. Para hacer esto, durante el desarrollo de ESP, abandonaron por completo el almacenamiento de cálculos e índices intermedios en el disco. Todas las conversiones de flujo se realizan en RAM y se conserva el recuento específico de eventos.


Trabajar con memoria en SAS ESP. El repositorio de eventos en RAM almacena resultados intermedios y no está bloqueado en caso de accesos paralelos de procesos internos o externos debido a índices adicionales.

El motor puede manejar grandes flujos de datos, a varios millones de eventos por segundo. Al mismo tiempo, manteniendo una baja latencia, por lo que rápidamente ocupó su lugar en soluciones para el marketing en línea y la lucha contra el fraude bancario. Allí, es un filtro inteligente de las operaciones del cliente y detecta instantáneamente la actividad no estándar en las cuentas, aislando las operaciones fraudulentas del flujo de datos.

Pero aún así esta es una característica secundaria de ESP. El motor está diseñado como un mecanismo para el uso continuo de modelos analíticos (SAS, C, Python y otros) en el flujo de datos.


El principio del procesamiento de eventos de transmisión.

Como ejemplo ilustrativo, para el foro SAS Viya Business Breakfast , en SAS decidimos establecer un stand de demostración, tomando como base la tarea del análisis de imágenes. Y así es como lo configuramos y lo que encontramos en el proceso.

Análisis de video en streaming


Teníamos a nuestra disposición un modelo analítico construido por colegas del departamento de análisis en profundidad en la plataforma SAS Viya. Su esencia era que, al recibir una imagen de entrada de un conductor en el interior del automóvil, un algoritmo (en este caso, una red neuronal convolucional entrenada) clasificó el comportamiento del conductor según las clases: "conducción normal", "distraído por una conversación con un pasajero", "hablando por teléfono "," escribe SMS ", etc.
Un ejemplo del modelo: la imagen de entrada se clasifica como "escribe SMS", según la parte de la imagen donde golpeó la mano con el teléfono.

Surgió la pregunta de cómo ejecutar este algoritmo en tiempo real para poder responder a un comportamiento no deseado. Según el escenario, las imágenes de la cámara en modo en línea ya cayeron en forma de archivos en el directorio de red en el disco.

Todo lo que quedaba era conectarse a los datos, convertir las imágenes al formato deseado, aplicar el modelo y, con toda probabilidad de pertenecer a una clase de comportamiento, mostrar advertencias en tiempo real en paneles en línea. Y resultó que todo esto se puede configurar en la GUI SAS ESP, sin una sola línea de código de programa (!).

Procesamiento de flujo de eventos SAS


Proyecto de detección de riesgos en la interfaz gráfica de SAS ESP Studio.
En el editor gráfico ESP, hemos agregado las siguientes transformaciones de flujo de datos:

  1. Como entrada, tenemos dos nodos de tipo fuente: model_source y input_image. En model_source publicamos nuestro modelo de clasificación. Para hacer esto, configure el conector de archivo, que lee un comando de un archivo de texto que contiene tres parámetros: el nombre de la operación, el tipo de formato del modelo y la ruta física al archivo binario. ESP no permite que cada fuente de datos sea tanto estática como de transmisión, por lo tanto, en cualquier momento, podemos publicar nuevos comandos para descargar modelos a este nodo, lo cual es conveniente en la operación industrial; no es necesario detener el proyecto para actualizar la versión de los algoritmos.


    Configurar comandos de publicación para model_source

    El contenido del archivo de modelo de entrada:

    I,N,1,action,load
    I,N,2,type,astore
    I,N,3,reference,/opt/sas/demo/image_processing/d.astore
  2. La segunda fuente, input_image, son imágenes de la cámara. Para publicar datos, utilizamos un adaptador estándar, un programa que publica datos de una fuente en ESP. En este caso, utilizamos un adaptador de archivo, pero también puede conectarse a la cámara directamente, por ejemplo, a través del adaptador UVC que viene con la solución.


    Configuración de un conector UVC para tipos comunes de videocámaras.
  3. Las imágenes pueden venir en un formato diferente al que se entrenó el modelo, y esto puede afectar la calidad de la clasificación. Por lo tanto, después de input_image, agregamos inmediatamente el nodo resize_image y prescribimos el formato deseado en su configuración. En este caso, apriete a un cuadrado de 100/100 píxeles.

    Configuración de procesamiento de imagen
  4. La ejecución del modelo se configura en CNN_score_code. La interfaz extraerá automáticamente los atributos de salida de la metadescripción del modelo: P__label_c0, P__label_c1, P__label_c2 y P__label_c9, las probabilidades de cada clase de comportamiento. A continuación, en el nodo max_class, definiremos un nuevo campo calculado que seleccionará la clase con la máxima probabilidad.
  5. Ahora, al lanzar el proyecto, podremos obtener una clasificación en tiempo real para cada imagen de entrada. En nuestra historia, un conductor sin escrúpulos se distrae periódicamente de la carretera. Pero es importante separar esos casos cuando estuvo distraído por un segundo de los casos de conducción peligrosa prolongada. Para hacer esto, agregue 3 nodos: almacenamiento de eventos en el último minuto (copy_1_min), agregación por clases de comportamiento (aggr_for_alert) y el filtro de hechos de "conducción peligrosa" (filter_alert).

    Configuración de ajustes de almacenamiento de eventos: en 1 último minuto.

    Configurar el conteo de eventos para cada clase de comportamiento.

    Establecer reglas de filtrado.

Índices


Es importante tener en cuenta que cada transformación en el ESP tiene una configuración: "Estado". Caracteriza si la transformación de datos se está transmitiendo, es decir Cuando se procesa un evento de entrada, el resultado se transmite de inmediato a lo largo del diagrama y se elimina de la memoria de este nodo. O podemos almacenar el resultado del procesamiento de cada evento y crear un índice para permitir el acceso a él en cualquier momento. Por ejemplo, la ventana de agregación siempre almacena el estado y se recalcula de manera continua en función de la secuencia de entrada.

Lanzamiento


De vuelta al proyecto. Solo tenemos que ejecutarlo .
Para facilitar la visualización de los flujos de datos, se suministra un ESP en línea, un diseñador de informes, SAS ESP Stream Viewer. En el modo de configuración, vemos todos los proyectos en ejecución en los servidores, y podemos conectarnos a ellos y elegir una visualización conveniente.


Paneles en línea en SAS ESP Stream Viewer

Eso es todo Tuvimos la oportunidad de automatizar la reacción en tiempo real a una señal de video. En este caso, configuramos el monitoreo en línea, pero usando los mismos adaptadores / conectores, podemos enviar un mensaje para cada caso de violaciones detectadas, o formar una acción de control a un sistema externo.

O Python?


Técnicamente, el caso se completó, pero con el propósito de demostrar en el foro, no parecía lo suficientemente interactivo. Fue inconveniente y bastante inseguro (!) Mostrar en tiempo real, por lo que las fotos se tomaron con anticipación y el automóvil estaba en el estacionamiento.

SAS ESP admite la ejecución de transmisión de modelos realizados en Python. Para confirmación, configuramos el análisis de imágenes, es decir, la búsqueda de objetos en la imagen, utilizando las bibliotecas OpenCV.

Modelo ESP para encontrar un casco en una secuencia de entrada de imagen
En el diagrama ESP, tenemos 2 fuentes de datos: fotogramas de la cámara en línea de la computadora portátil y una fotografía del objeto que estamos buscando. En este caso, determinamos si el trabajador potencial en el sitio de construcción se ha olvidado de las reglas de seguridad: ¿tiene un casco? En el nodo proc_detection, ejecutamos el siguiente código de Python:

 def compute_total(Image,image_template): "Output: score_point" import sys import cv2 import numpy as np import os import base64 import io from imageio import imread MIN_MATCH_COUNT = 10 #       DIST_COEFF = 0.55 img_big = imread(io.BytesIO(base64.b64decode(image_template))) sift = cv2.xfeatures2d.SIFT_create() # Initiate SIFT detector matcher = cv2.BFMatcher() # BFMatcher with default params kp_big, des_big = sift.detectAndCompute(img_big,None) img_tpl = imread(io.BytesIO(base64.b64decode(Image))) kp_tpl, des_tpl = sift.detectAndCompute(img_tpl,None) matches = matcher.knnMatch(des_tpl,des_big,k=2) good = [] for m,n in matches: if m.distance < n.distance * DIST_COEFF: good.append(m) score_point = len(good) return score_point 


Identificación de la presencia de un casco en la imagen de la cámara web en el foro SAS Viya Business Breakfast (colega, maxxts está probando el stand)

Aprendizaje automático


Si hablamos sobre el desarrollo posterior del procesamiento de flujo, entonces el énfasis probablemente se trasladará a la capacitación de modelos analíticos en el flujo. Es decir A diferencia de los ejemplos anteriores, los modelos no solo se ejecutarán, sino que también se entrenarán dentro de SAS ESP. Esto requerirá un flujo de datos adicional en el que realizar la operación del tren del algoritmo seleccionado por el evento (por ejemplo, para empezar, agrupación simple de k-medias). Luego, el automóvil con el ESP a bordo tendrá la oportunidad de analizar la situación utilizando nuevos sensores que se acaban de conectar. Esto permitirá encender y automatizar rápidamente nuevos dispositivos en el concepto de Industria 4.0.

Escriba en los comentarios qué tareas enfrenta en el análisis de transmisión y, por supuesto, me complacerá responder preguntas sobre el procesamiento de flujo de eventos SAS .

Source: https://habr.com/ru/post/es429176/


All Articles