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

Se encuentra usted aquí

IA en el agua para todos 2: Visión artificial; o a bicho visto, contaminación segura

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 2: Visión artificial; o bicho visto, contaminación segura

La visión artificial es una aplicación bastante impresionante de los sistemas inteligentes. Pero espero sorprender más al lector diciendo que, siguiendo unas instrucciones básicas y con un poco de esfuerzo, él mismo puede construir un sistema básico de interpretación de imágenes. A continuación veremos cómo crear una aplicación capaz de identificar algunos microbios en el agua. Imaginar cómo implementarla en un microscopio con cámara en la planta de tratamiento de agua es cosa suya.

Básicamente, un sistema de visión por computador detecta patrones en las imágenes que se le han suministrado para su aprendizaje, y que antes han sido convertidas a matrices numéricas: pura álgebra. Por ejemplo, una imagen en blanco y negro, es una matriz de dimensiones como tantos píxeles tenga la foto, y valores binarios para representar los dos colores. Si la imagen es en escala de grises, los valores variarán en esa escala (generalmente hasta 255). Y cuando la imagen es en color, añadiremos profundidad a la matriz, para cada canal del color (por ejemplo una imagen RGB convertida en una matriz cúbica, con tres “capas”).

Para “entender” lo que ve en una foto nueva, el sistema inteligente buscará patrones, por comparación con las imágenes que ya conoce, siguiendo una técnica de aprendizaje supervisado. Es decir, necesita un conjunto de datos –imágenes en este caso- etiquetadas. Cuantos más datos tenga ese conjunto mejor aprenderá, porque más fácil le resultará encontrar parecidos entre ellos y el nuevo dato sobre el que deseamos que se pronuncie… aunque más tiempo tardará en aprender.

Hay conjuntos enormes de imágenes ya preparados en la red (por ejemplo en kaggle). Están orientados a la visión artificial generalista, con etiquetas como “casa”, “coche”, “avión”… pero también “nemátodo”. Además, siempre podemos crear o añadir nuestras propias imágenes. E incluso compartirlas, que es probablemente lo más inteligente. Eso sí, para que el sistema pueda “aprender” las imágenes, todas deben tener unas características homogéneas en tamaño, resolución y colores. De otra manera tendríamos matrices de diferentes dimensiones. Por ello, si añadimos nuestras propias fotos, tendremos que adecuarlas antes de poderlas usar.

Con los datos preparados, es hora de seleccionar el algoritmo capaz de encontrar similitudes entre las imágenes, es decir, capaz de clasificarlas. Para ello se pueden emplear algoritmos tradicionales, que usan unas reglas dadas para comparar algebraicamente las matrices (bayesianos, k-vecinos, SVM, árboles de clasificación…); o mejor aún, de aprendizaje profundo (redes neuronales), llamados así porque ellos mismos seleccionan las características relevantes y otorgan los pesos entre sus relaciones. Dije que sería fácil y no hay que preocuparse: estos algoritmos están implementados en librerías que facilitan su uso. Incluso es posible utilizar algunos algoritmos ya enseñados, tal cual o con un pequeño aprendizaje complementario para nuestra aplicación concreta.

Para no liarnos demasiado, usaremos una red neuronal predefinida (NASNET Large) profesional y ya clásica, aunque en este campo de conocimiento eso no representa más allá de unos pocos años… ¡finales de 2017 en este caso!. Y como datos de partida clasificados usaremos un mega conjunto de imágenes genérico también muy común (IMAGENET). Tiene 14 millones de imágenes etiquetadas manualmente y es libre, pero no necesitaremos descargarlo, porque usaremos “transferencia de aprendizaje”, es decir, un entrenamiento previo ya realizado sobre ese enorme conjunto de imágenes, a través de un archivo que sí se descargará, pero ocupa mucho menos. Para nuestra aplicación de microbiología en agua no tendrá mucha utilidad que el sistema sepa diferenciar un gato de un perro, pero sí es interesante que pueda identificar un nematodo. No obstante, si alguien se encuentra otras cosas bajo la lupa, el sistema funcionará :-)

Una red neuronal es –básicamente- una serie de nodos dispuestos en capas, que establecen conexiones (sinapsis) entre sí, con diferentes pesos que ponderan esas relaciones. Los pesos se ajustan durante el entrenamiento del modelo, para establecer transformaciones lineales entre los datos de entrada y los de salida (etiquetas de las imágenes en este caso). Una red con un número suficiente de capas (profundidad) tolerará la falta de datos y el ruido, algo muy útil para la visión artificial.

No debemos olvidar que aunque esta red emite una clasificación, está asociada a un valor de confianza estadística. En el resultado debemos emitir no solo la clasificación, sino su valor de confianza, o incluso la de otras opciones que ha barajado. Esto nos da cierta seguridad objetiva de lo que el sistema ve, y en muchas ocasiones es muy elevada. Aunque no debeos tomarla como certeza absoluta.

Hasta aquí la “divulgación”… ¿seguimos?.

Puede ver directamente cómo ha funcionado el sistema creado a través de su cuaderno Jupyter. Es accesible desde el navegador, e incluye el código estructurado en elementos de ejecución paso a paso, imágenes y texto enriquecido. Acceda directamente al fichero con el cuaderno en este enlace. No se asuste por la extensión del cuaderno, la mayor parte son mensajes informativos. En su parte final aparecen las fotos de ejemplo y la clasificación que se obtiene para un nematodo, y también sus limitaciones, con cultivos de bacterias o con rotíferos. Verá que cada elemento de código tiene muchos comentarios, así que espero no sea difícil de seguir.

Pero si quiere dar un paso más y ejecutarlo paso a paso, o incluso modificarlo, no es complicado, ni hace falta ser informático o programador: basta con saber algo de Python, el lenguaje moderno de uso profesional más simple de todos. Tampoco hacen falta muchos recursos: vamos a utilizar Anaconda, un entorno de programación gratuito instalado en un pc doméstico. Si más o menos comprendió todo hasta ahora y quiere lanzarse a probarlo, aquí puede ver cómo hacer una instalación de Anaconda con las librerías necesarias. Si ya tiene instalado el entorno y quiere replicar esta aplicación de la IA en el sector del agua, puede descargar de aquí el código y todos los archivos necesarios para experimentar con él. Debe dejar la descarga en la carpeta raíz de su usuario, y a continuación abrir el fichero ipynb desde Jupyter. Ejecutando el cuaderno paso a paso y siguiendo las indicaciones y comentarios incluidos en él, será capaz de encontrar “bichos” en las imágenes de prueba que se incluyen… o usarlo con las suyas propias.

De momento no hay muchos analizadores de microbiología de agua en tiempo real… pero no tardarán en proliferar…. Con estas técnicas creo que muy pronto no deberían ser inalcanzablemente caros.

Otra aplicación similar puede ser la identificación de macro invertebrados en cauces naturales de agua, para determinar la salud del ecosistema acuático de una manera automática. Pero hay muchas más, como la detección de plásticos en ríos o zonas costeras…. Si se te ocurre alguna aplicación más para sistemas de visión artificial, tienes datos que quieres explotar pero no sabes por dónde empezar, o tienes alguna duda sobre el tema, a continuación puedes dejar tu comentario.