Redacción iAgua
Connecting Waterpeople
Hach
Saint Gobain PAM
ADECAGUA
Fundación CONAMA
Laboratorios Tecnológicos de Levante
Likitech
Rädlinger primus line GmbH
SCRATS
Vector Energy
Centro Nacional de Tecnología de Regadíos (CENTER)
Hidroconta
TecnoConverting
Grupo Mejoras
ADASA
Kamstrup
Ministerio para la Transición Ecológica y el Reto Demográfico
AECID
Innovyze, an Autodesk company
Lama Sistemas de Filtrado
Aqualia
AGS Water Solutions
GS Inima Environment
Almar Water Solutions
DATAKORUM
Filtralite
ICEX España Exportación e Inversiones
Confederación Hidrográfica del Segura
TRANSWATER
ESAMUR
IAPsolutions
Consorcio de Aguas Bilbao Bizkaia
Fundación Botín
Sacyr Agua
Xylem Water Solutions España
Ingeteam
ACCIONA
Amiblu
Asociación de Ciencias Ambientales
Barmatec
Red Control
J. Huesa Water Technology
Agencia Vasca del Agua
HRS Heat Exchangers
Minsait
LACROIX
ISMedioambiente
Idrica
AMPHOS 21
RENOLIT ALKORPLAN
Schneider Electric
EPG Salinas
Sivortex Sistemes Integrals
Baseform
IRTA
TEDAGUA
Cajamar Innova
Molecor
CAF
s::can Iberia Sistemas de Medición
KISTERS
FENACORE
ONGAWA
Global Omnium
Catalan Water Partnership
Fundación Biodiversidad
FLOVAC

Se encuentra usted aquí

IA en el agua para todos 7: De vídeo fake de Obama al mantenimiento inteligente

Sobre el blog

José María de Cuenca de la Cruz
Curioso, inquieto y creativo… aprendiz de escritor, e interesado también por las nuevas tecnologías y la educación. Me encanta asumir retos y compartir lo aprendido. Trabajando en lo que me apasiona…. me siento como un pez, en el agua claro.
  • IA agua todos 7: vídeo fake Obama al mantenimiento inteligente

Todos hemos visto aquel vídeo del verano de 2017 con un Obama tan falso como real parecía. Vamos a ver cómo se puede aplicar la misma técnica que se usó para crear este vídeo, para detectar fallos futuros en la maquinaria de un servicio de aguas. Como siempre, incluyo un ejemplo con un código Python en un cuaderno Jupyter para quien quiera profundizar un poco más. Y al final del artículo intentaré explicar de forma sencilla cómo se hizo aquel vídeo ¿Comenzamos?

Nuestras máquinas más importantes se basan en un movimiento rotativo: bombas, soplantes, motogeneradores, centrífugas, agitadores… Trabajan girando y para ello se apoyan en casquillos o rodamientos, con patrones cíclicos de carga. Estos apoyos se desgastan y necesitan ser reemplazados periódicamente.

En los servicios de aguas muchas de estas máquinas deben funcionar continuamente, 24x365. Por ello tenemos que ser muy cuidadosos con su mantenimiento, incluso disponiendo de otras redundantes. Esto se vuelve más complicado en las pequeñas instalaciones, que muchas veces funcionan desatendidas durante gran parte del tiempo. En estos casos se suele optar por el mantenimiento preventivo, reemplazando esos componentes cuando el responsable, según su experiencia, cree que pueden empezar a fallar.

Por otra parte, los fabricantes ofrecen sistemas de monitorización para las gamas altas de sus equipos pesados, de manera que los grandes servicios puedan integrar los parámetros salud de la máquina en el SCADA, conectarlo con un GMAO, y así adecuar las operaciones de mantenimiento de manera predictiva. Y además de suministrarnos estas soluciones, también pueden ofertarnos el trabajo de la máquina como un servicio, quedando de su cuenta el mantenimiento basado en esos análisis automáticos a distancia. Para ello integran sensores mecánicos (básicamente acelerómetros y termopares), cuyas señales permiten conocer las necesidades del equipo, anticipar la próxima avería o incluso analizar las condiciones de trabajo y el componente que causará ese fallo.

Con la transición a la industria 4.0, en poco tiempo esta conexión de la máquina con el sistema de “telemedicina” de su fabricante estará disponible para cualquier equipo, independientemente de su tamaño y precio. Pero aun así seguiremos teniendo en nuestras instalaciones muchas otras sin estas posibilidades y con una elevada útil por delante. Vamos a ver cómo nosotros mismos podemos crear un sistema inteligente, que aprenda del funcionamiento de cualquier máquina en condiciones normales y pueda predecir un próximo fallo cuando detecte algo anormal.

Para ello usaremos un conjunto de datos público y ya clásico, creado por la NASA a comienzos de siglo, que monitoriza las vibraciones de un conjunto de rodamientos hasta que falla el primero de ellos. Se puede consultar y descargar aquí. Es el cuarto (Bearing Data Set). Hay otros muchos, todos curiosos y entre los que destaca el de parámetros en el cultivo de algas de espirulina… quizá para otra ocasión.

Este conjunto Bearing Data Set consta de 3 experimentos, en los que se apoyó un eje en dos rodamientos en sus extremos, y se cargó sobre otros dos intermedios. El muestreo de aceleraciones se realizó durante su vida útil a intervalos de 10 minutos, durante un segundo cada vez, con una frecuencia de 20kHz. Toda una generación de información Big-Data.

Para el ejemplo usaremos el segundo experimento, por ser el de menor número de datos y el más fácil de reproducir en cualquier pc incluso con algunos años… Aun así procesaremos más de 20 millones de mediciones en cada uno de los 4 canales que incluye, uno por rodamiento.

La aproximación tradicional a un análisis de este tipo comienza por analizar los datos recogidos cuando la máquina es nueva (o al menos cuando funciona correctamente), y cuando está próxima a un fallo. Es decir 2 muestras de 20.480 valores cada una. Si representamos las señales de aceleración respecto del tiempo en un gráfico, rápidamente vemos que no es un problema que pueda solucionarse a ojo, por buenos cuberos que perteneciendo al sector se nos suponga.

Por ello, el enfoque habitual suele ser llevar la representación de los datos originales desde el dominio de tiempo al dominio de frecuencias, mediante la Transformada de Fourier. De esta manera podemos ver como al envejecer, las frecuencias de vibración que estaban más o menos homogéneamente repartidas a lo largo de todo el espectro, de media se reducen concentrándose en algunos valores de frecuencias mayores a la de giro… que suelen ser múltiplos del número de revoluciones, de las bolas del rodamiento, de cualquier pequeño fallo en la fabricación, o de una influencia cíclica externa que acaba desgastando más el rodamiento en esa zona.

Podemos intentar la representación de todos los datos para ver su evolución… pero crear una gráfica con 20 millones de valores no es buena idea, ni siquiera con la ayuda de “gafas de Fourier”. A lo sumo nos podemos ayudar de un espectrograma, en el que representamos la evolución temporal de las frecuencias y de su intensidad. Aunque tenuemente, en él vemos cómo aparecen esas concentraciones de energía en algunas frecuencias, indicando el desgaste a partir de un determinado tiempo de funcionamiento. Pero para aplicar este método a nuestra máquina, deberíamos procesar todos los datos, es decir, entrenar el sistema a posteriori del fallo, lo que no nos sirve de mucho, ya que cada máquina puede desgastarse o fallar de una forma diferente a otra.

Tenemos entonces que buscar un nuevo planteamiento. Podemos preguntarnos ¿qué nos dice el compañero que opera la instalación cuando intuye un fallo? Simplemente nos comenta que “suena” diferente, que hace un ruido “extraño”. Vale, tenemos valores de aceleración medidos a 20 kHz, no es una grabación de un sonido… Pero eso no significa que no podamos “escucharla”. Para ello la convertiremos el dataset en un archivo wav, que por cierto no es otra cosa que un formato para archivar datos de ondas sin pérdida de calidad y sin comprimir, aunque se haya generalizado para almacenar sonidos. Tras la conversión vemos que tenemos unos 16 minutos de datos concentrados, que podemos escuchar en este zip. Saltando en la reproducción podemos sentir cómo cambia el ruido de la máquina, apareciendo poco a poco un chirrido agudo, cada vez más fuerte antes del fallo. Por cierto, como nos decía la transformada de Fourier: ese sonido agudo que aparece lo hace al concentrarse parte de la energía en las frecuencias altas, frente a la distribución homogénea del ruido inicial. Sorpresa: nos parece que el ojo es más preciso, pero el oído resulta más capaz en este caso.

Bien. Entendidos los datos, vamos con el segundo reto. Veamos cómo hacer un sistema inteligente que pueda aprender el “ruido” normal de nuestra máquina, y que pueda indicarnos lo parecido que le resulta cualquier otro “ruido” que le enviemos posteriormente. Cuando difieran lo suficiente, se comportará como el operario que conoce la instalación y nos avisa: “suena raro”.

Esto podemos hacerlo con un autoencoder, un tipo de red neuronal que se definió conceptualmente a finales de los 80 para reducir ruido en imágenes y últimamente se ha hecho famoso al utilizarse junto a las redes GAN para generar vídeos fakes, en los que se cambia la cara y la voz de una persona por otra. Un autoencoder trabaja comprimiendo los datos (decoder) y luego reconstruyéndolos (encoder) de manera que sean lo más parecido a los originales. Para ello se diseña una red simétrica respecto de una capa central de neuronas, denominada espacio latente. En ella residen las características esenciales de la información original, que serán aquellas que permiten su reconstrucción.

En nuestra aplicación, usaremos un autoencoder creado para la ocasión, entrenándolo con los datos correspondientes al inicio de la vida útil de la máquina. Cuando posteriormente carguemos este algoritmo con todos los datos, incluyendo los de su vejez, veremos que con los últimos no es capaz de funcionar correctamente, dado que no “se parecen” a los que tiene aprendidos. Como podemos monitorizar esta falta de precisión entre el dato original y el que sale del autoencoder, podemos detectar ese “ruido extraño” en la señal.

Lo mejor de todo esto es que no necesitamos etiquetar los datos, ni indicar de ninguna forma al sistema si tienen fallo. Simplemente necesitamos datos durante el buen funcionamiento. Se trata por tanto de aprendizaje automático no supervisado, en el que nuestra inteligencia artificial aprende sola.

Pero hay más. No necesitamos alimentar la red con los 20 millones de datos: su perspicacia la permite descubrir la “normalidad del funcionamiento” trabajando solo con los valores medios de cada una de las muestras. Esto es importante: con esta técnica es posible una simplificación de los datos en origen reduciendo el coste de las comunicaciones. Con el último hardware incluso se podría implementar todo el equipo de análisis in situ, en un microcontrolador junto al sensor.

Por supuesto, esta técnica no solo se puede aplicar a ruidos. Convenientemente ajustada podría usarse con cualquier tipo de señal en la que deseemos detectar una anomalía, pero no siga un patrón claramente definido o resulte difícil de interpretar. Como un sensor que pierde su calibración, el desgaste de un contador, o una fuga incipiente en la red. Sin olvidar lo que ahora está tan de moda: las trazas del SARs-COV-2 en aguas residuales para predecir el COVID-19.

¿Fascinante? Como en los artículos anteriores de esta serie, puedes ver el cuaderno con el código de ejemplo en este repositorio de gitHub. Y si tras esta serie de post te decidiste a instalar python, también puedes reproducir todos los pasos en tu pc, probarlo con otro conjunto de datos (siempre que lo alimentes con cuatro señales), o modificarlo a tu gusto o para usarlo con otros tipos de datos o diferente número de señales.

Y para que nadie se quede con la duda: las imágenes fakes se hacen con dos autoencoder. El primero con las imágenes del original y el segundo con otras similares del fake, de manera que ambos aprendan su “esencia”. Después cortan y se montan, utilizando el decoder del original hasta llegar a su espacio latente, y el encoder del fake para reconstruirlas a partir de ese punto. Así, en vez de reconocer diferencias, hace una transformación de las imágenes originales en las que deseamos…. Aún no conozco aplicaciones de la sustitución de imágenes en nuestro sector, pero al ritmo que evoluciona la IA, seguro que no tardan.

Para lograr un vídeo fake como el de Obama, la reconstrucción de toda la imagen no es posible, sino que hay que “inventar” las partes que nos interesan: gestos de la cara y especialmente el movimiento de los labios. Aunque nada impide sustituir un rostro completo. Para ello se usa la primera parte del autoencoder, que aísla en el espacio latente las características relevantes de las imágenes fuente, y luego se reconstruyen usando una red GAN (Generative Adversarial Network), capaz de producir una salida artificial con apariencia del original, pero no exactamente igual. De esta manera, el Obama virtual dirá lo que se le dicte. Esta red consta de un generador de las imágenes, que parte del contenido del espacio latente suministrado por el autoencoder (por tanto no vé las imágenes reales); y un discriminador que sí ha sido entrenado con las imágenes reales, y le indica si son suficientemente parecidas a la realidad. De esta manera se logra un resultado más correcto que solamente con dos autoencoder, ya que en un vídeo nunca tendremos la cámara en la misma posición, ni lograremos reproducir gestos o movimientos fotograma a fotograma como lo podríamos hacer con una foto estática. Aunque el fundamento es el mismo. Ingenioso, ¿verdad?