Code Monkey home page Code Monkey logo

geoai_plugin's Introduction

GeoAI_QGIS Plugin

LuisGeo Twitter

Read in English https://github.com/luisCartoGeo/GeoAI_Plugin/blob/master/readme_en.md

Repositorio del complemento GeoAI


GeoAI es un complemento en desarrollo para QGIS cuyo objetivo es permitir explotar con versatilidad las capacidades de los modelos de Inteligencia Artifical (IA) en el procesamiento de datos Geo-espaciales, comenzando con el modelo de segmentación de imagenes Segment Anything (SAM) desarrollado por META.

Segment Anything es un modelo de inteligencia artificial pre-entrenado que permite generar mascaras sobre objetos reconocidos en imágenes para su resalte o extracción (Fuente [pagina del proyecto SAM] (https://segment-anything.com/), repositorio github del proyecto SAM).
Segment Anything produce máscaras de objetos de alta calidad a partir de entradas como puntos o recuadros, y puede utilizarse para generar máscaras para todos los objetos de una imagen. Se ha entrenado con un conjunto de datos de 11 millones de imágenes y 1.100 millones de máscaras, y ofrece un gran rendimiento en una gran variedad de tareas de segmentación Fuente pagina del proyecto SAM, repositorio github del proyecto SAM).


Citas y aportes

Al utilizar el texto y/o codigo añadir a la cita:
DOI

Si deseas realizar una aporte a este desarrollo puedes enviarlo a la cuenta PayPal: [email protected]
Escribir en la nota tu nombre y "Contribution to the development of the GeoAI plugin"


Licencia

El plugin esta bajo licencia: Licencia pública general de GNU v3.0


Novedades y mejoras


¿Qué ventajas tiene GeoAI para aplicar el modelo SAM?

Si bien, GeoAI es un complemento en desarrollo, en esta primera versión he apostado por cuatro (04) aspectos fundamentales:


  • Funcionalidad
  • GeoAI puede trabajar sobre imagenes georeferenciadas RGB de 8 bytes (formato aceptado por el modelo) y tambien sobre imagenes unibanda y multibanda como las imagenes de satelite y de drones, las cuales pueden poseer diversos formatos. Para ello el plugin realiza un proceso de transformación.
    Con la implementación del modelo ligero de SAM desarrollada por ETH VIS Group, ahora es posible ejecutar la segmentación consumiendo menos recursos y de forma muy rápida.
    Fuente, repositorio y mayores detalles en: [Github ETH VIS Group](https://github.com/SysCV), [Paper: Ke, Lei and Ye, et. al, 2023 Segment Anything in High Quality, NeurIPS.](https://arxiv.org/abs/2306.01567).

    Luego de configuradas las imagenes el usuario puede segmentar las imagenes utilizando dos modulos:
    1.- Segmentación de toda la imagen
    Permite segmentar toda la imagen, el usuario puede realizarlo utilizando la configuración por defecto o alterando los parametros avanzados. PRECAUCION la modificación de los parametros puede alterar los resultados y los tiempos de ejecución.
    2.- Segmentación interactiva
    Esta es la herramienta más completa e intuitiva. Despliega un asistente mediante el cual es posible segmentar objetos de la imagen seleccionandolos en pantalla mediante puntos y/o areas (dibujando un rectangulo). Ademas cuenta con la opción de obtener un solo segmento por selección, múltiples segmentos o el de mayor superficie. Por otro lado, el usuario puede almacenar los segmentos en una nueva capa o una existente, incluso crear campos y guardar un atributo. Constituye una herramienta de digitalización avanzada.
  • Versatilidad
  • Las interfaces de usuario han sido diseñadas para facilitar su uso al mismo tiempo que se explotan las capacidades del modelo, brindando diversas configuraciones las cuales se disponibilizan cuando es oportuno.
  • Compatibilidad

  • GeoAI ha sido probado en los sistemas operativos Windows10 y 11, en las versiones de QGIS 3.10, 3.16, 3.22 y la última LTR 3.28.
  • Facil instalación y portabilidad
  • El archivo del complemento es ligero pesa menos de 2 megabytes, sus requisitos de instalación son los minimos requeridos para utilizar el modelo SAM, como son: instalar PyTorch, descargar los archivos de los modelos pre-entrenados (checkpoints).
    Puede descargar el archivo zip del plugin de este repositorio y luego instalarlo en QGIS con la opción Instalar mediante Zip.

Sin embargo, hay aspectos mejorables, destacando:

  • Completar la documentación
  • Traducir la interfaz y documentación al ingles y otros idiomas
  • Explorar en implementar las opciones de optimización que ofrece el modelo SAM, Python y PyQGIS
  • Añadir mayores funcionalidades
  • Implementar otras versiones de SAM

Tabla de contenido

Requerimientos

Requerimientos de instalación

GeoAI esta diseñado para minimizar los requsistos de instalación. Para utilizar el plugin solo debe cubrir dos requerimientos:

  1. Instalar la versión adecuada de la libreria PyTorch
  2. Descargar y colocar en una directorio accesible los puntos de control (Check Points) del modelo SAM
  3. Instalar TIMM

Requerimientos de Hardware

SAM es un modelo de redes neuronales NLP densamente entrenado (11 millones de imagenes), por lo cual, los puntos de control son archivos de +/- 2 Gb. Estos modelos presentan un alto consumo de memoria RAM y capacidad de procesamiento.
Sin embargo, esto no restringe el uso en equipos de menores prestaciones, pero evidentemente el proceso tomara más tiempo.

¿Cuales partes del proceso requieren mayor procesamiento, por lo tanto, demoran más?

  1. El proceso de pre-carga del modelo/imagen
  2. El proceso de segmentar toda la imagen, especialmente si se incrementa la densidad de puntos de muestreo
Como podra notar el proceso de pre-carga del modelo/imagen, es el proceso que he encontrado más demandante de recursos, para dar un ejemplo claro, describire cuanto demora el proceso para la misma imagen en los dos equipos en los que lo he probado:
  1. Procesador: AMD Ryzen 3 3200U
  2. Tarjeta de video Radeon Vega Mobile Fx 2.6 Gb
    Memoria RAM: 8 Gb
    Disco duro: aplicaciones SSD, Almacenamiento: HDD nota aqui se encuentran los puntos de control
    Duración proceso de precarga modelo/imagen: +/- 20 minutos

  3. Procesador: intel i5-12500H
  4. Tarjeta de video Ge Force RTX3050TI
    Memoria RAM: 16 Gb
    Disco duro SSD nota aqui se encuentran los puntos de control
    Duración proceso de precarga modelo/imagen: +/- 2 minutos

Recomendaciones para un mejor uso del plugin

  • Mantener lo más libre posible la RAM al realizar la pre-carga, cierre todas las otras aplicaciones
  • Ubique los check points en el disco solido (SSD) si lo posee
  • Deje trabajar el equipo mientras se realiza el proceso de pre-carga

Instalación

Procedimiento para instalar PyTorch

Realizar una adecuada instalación de PyTorch es el paso fundamental para utilizar el plugin sin mayores problemas. Para ello es necesario seleccionar la versión adecuada de PyTorch, a continuación se describe la instalación de PyTorch que he realizado en Windows10 y 11, para diferentes versiones de QGIS.
Un error común instalar la última versión de PyTorch desde la pagina oficial, si bien esta versión puede ejecutar el modelo SAM correctamente, las librerias pre-instaladas en QGIS no necesariamente cubriran los requerimientos de esa versión de PyTorch, por ejemplo, la versión de Numpy pre-instalada

Forma de instalación

Realizaremos la instalación desde el shell de OSGEO utilizando pip. El shell de OSGEO es la ventana de comandos (CMD) instalada con QGIS mediante ella podemos realizar instalaciones de librerias y otras tareas
¿Como acceder al shell de OSGEO?
Dirijase al icono de windows ubicado en la esquina inferior izquierda esto desplegara una lista de todos los programas, seleccione la carpeta que corresponde a su instalación de QGIS. Luego seleccione OSGeo4wShell como se muestra en la imagen


Esto desplegara la ventana MS DOS donde introduciremos el codigo de instalación

Procedimiento de instalación de PyTorch con PIP

1. Verifique el entorno de trabajo

Antes proceder a instalar cualquier libreria Python debemos verificar si se requiere configurar el entorno de trabajo.
Las versiones antiguas de QGIS, incluyendo la 3.16 debemos introducir el siguiente codigo para que la instalación de la libreria se realice adecuadamente, sin embargo, para las nuevas versiones no es necesario.

py3_env

Introduzca el siguiente codigo en el shell, independiente el resultado que devuelva el shell prosiga con los siguientes pasos

2. Actualizar pip

python -m pip install -U pip

Si esta en una versión muy antigua de QGIS y el codigo anterior arroja error utilice este

python -m pip install --upgrade pip

3. Seleccione la versión adecuada de PyTorch para su equipo

Las especificaciones del modelo SAM señalan que se requiere como minimo python>=3.8, pytorch>=1.7 y torchvision>=0.8.
En teoria la versión de Python limita la versión QGIS donde podriamos instalar y ejecutar el modelo, sin embargo, me ha funcionado bien en QGIS 3.10 cuya versión es Python 3.7. Por lo tanto, cualquier versión de QGIS igual o superior a la 3.10 es posible utilizar el plugin.

La instalación de PyTorch dependera de las especificaciones de tu equipo:

1.- Procesador Intel con tarjeta gráfica Nvidia Para un uso adecuado de la GPU deberas verificar la versión de tu driver Nvidia:

a.- Para utilizar CUDA 10.2, la versión del Driver Nvidia debe ser >= 441.22
En ese caso introduce este código

pip3 install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio===0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

b.- Para utilizar CUDA 11.1, la versión del Driver Nvidia debe ser >= 456.38
En ese caso introduce este código

pip3 install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio===0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

2.- Otros procesadores y tarjetas de video
Utiliza el siguiente codigo, en este caso utilizaras el modelo SAM solo con la opción CPU (no te preocupes hasta ahora solo la he utilizado de esta forma)

pip3 install torch==1.8.1+cpu torchvision==0.9.1+cpu torchaudio===0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

3.- Verifica la instalación de PyTorch Introduce este codigo debe devolverte información de la liberia instalada

``` 
pip3 show torch
``` 

Otra opción, abre QGIS activa la consola de Python ejecuta import torch si no devuelve nada, esta instalada

Instalación de TIMM

Para poder utilizar la versión ligera y rápida de SAM en GeoAI debemos instalar el paquete Python timm. Su isntalación es sencilla y obligatoria para poder utilizar el plugin.

¿Qué es el modulo timm?
"timm" es una librería de aprendizaje profundo creada por Ross Wightman, contiene una colección de modelos de visión por ordenador SOTA, capas, utilidades, optimizadores, programadores, cargadores de datos, aumentaciones y también scripts de entrenamiento/validación con capacidad para reproducir los resultados de entrenamiento de ImageNet.
Podemos instalar rápidamente utilizando pip en el shell de OSGEO, como hicimos en los pasos previos:

``` 
pip install timm
``` 

Corrigiendo una instalación previa

Si realizaste una instalación de PyTorch que no te permite ejecutar el plugin deberas removerla y reemplazarla por las recomendadas aqui.
Puedes removerla utilizando pip, asegurate de incluir todo lo instalado previamente, entre ello torchvision y torchaudio
Para desinstalar las versiones aqui recomendadas repite desde el paso 1 e introduce el siguiente codigo

pip3 uninstall torch torchvision torchaudio

Deberas aceptar cuando te pregunte si estas seguro de desinstalar

Procedimiento para descargar e instalar el plugin

Descarga del plugin

El primer paso es descargar el complemento, el proceso es muy sencillo haces clic en el botón de color verde con el texto CODE, despliega un menú y seleccionas Download ZIP esto descargara un archivo zip el cual puedes utilizar directamente para instalar en QGIS. También puedes descargar el complemento desde la opción de Versión ubicado en la parte inferior derecha, descarga la última versión publicada.

Instalación del plugin

Luego de descargado el Zip que contiene el plugin, puede activar el programa QGIS y realizar los siguientes pasos:

  1. Seleccione el menú complementos, luego "Administrar e instalar complementos"
  2. En la ventana que se despliega seleccione la etiqueta "Instalar a partir de Zip" ubicada en el panel de la izquierda
  3. Seleccione el botón a la derecha con tres puntos, le permitira ubicar el archivo Zip en su coputador, luego clic sobre el botón "Instalar complemento"
  4. Luego de instalado es recomendable reiniciar el programa QGIS, active la caja de dialogo Complementos, seleccione la etiqueta Instalado, encontrara el plugin GeoAI, activelo

Modelos pre entrenados (puntos de control o check points)

Para poder ejecutar SAM debemos descargar los puntos de control, los cuales son requeridos durante el proceso de pre-carga del modelo/imagen
Puedes descargar los puntos de control disponibles en los siguientes enlaces:

  1. Generalmente el más utilizado vit_h: (modelo ViT-H SAM)
  2. vit_l: Modelo ViT-L SAM
  3. vit_b: Modelo ViT-B SAM

Tutorial rapido

Segmentación Interactiva

Extracción y conteo de hileras y plantas

Extracción de zonas de cultivo y areas de riego

¿Cómo utilizar Fast Light SAM en GeoAI?

geoai_plugin's People

Contributors

luiscartogeo avatar luischr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

geoai_plugin's Issues

No se instala 'GeoAI_Plugin-main', problema con classFactory()

Hola, estoy intentando instalar el plugin pero no me funciona.

Instalé y actualicé QGIS vía OSGeo4W Shell, además de Pytorch 1.8.1+cu111 tal como aparece en las instrucciones, luego seguí con la descarga del código de GeoAI_plugin en .zip y lo cargué en la sección de complementos, y me salió este mensaje:

No se pudo cargar el complemento 'GeoAI_Plugin-main' debido a un error al llamar a su método classFactory().
Este mismo error me sucedió al intentar instalar otro plugin.

¿Cómo lo puedo solucionar?

De antemano muchas gracias.
Abajo dejo el código de error por completo.

Saludos

Details

No se pudo cargar el complemento 'GeoAI_Plugin-main' debido a un error al llamar a su método classFactory()

ModuleNotFoundError: No module named 'timm'
Traceback (most recent call last):
File "C:\PROGRA1/QGIS321.12/apps/qgis-ltr/./python\qgis\utils.py", line 423, in startPlugin
plugins[packageName] = package.classFactory(iface)
File "C:\Users/*****/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GeoAI_Plugin-main_init
.py", line 28, in classFactory
from .ini_geoai import ini_geoai
File "C:\PROGRA1/QGIS321.12/apps/qgis-ltr/./python\qgis\utils.py", line 888, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "C:\Users//AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GeoAI_Plugin-main\ini_geoai.py", line 21, in
from .dialog_precarga import dialog_precarga
File "C:\PROGRA1/QGIS321.12/apps/qgis-ltr/./python\qgis\utils.py", line 888, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "C:\Users/
/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GeoAI_Plugin-main\dialog_precarga.py", line 35, in
from .segment_fast import *
File "C:\PROGRA1/QGIS321.12/apps/qgis-ltr/./python\qgis\utils.py", line 888, in _import
mod = builtin_import(name, globals, locals, fromlist, level)
File "C:\Users/*****/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GeoAI_Plugin-main\segment_fast_init
.py", line 7, in
from .build_sam_f import (
File "C:\PROGRA1/QGIS321.12/apps/qgis-ltr/./python\qgis\utils.py", line 888, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "C:\Users//AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GeoAI_Plugin-main\segment_fast\build_sam_f.py", line 15, in
from .modeling_f.tiny_vit_sam import TinyViT
File "C:\PROGRA1/QGIS321.12/apps/qgis-ltr/./python\qgis\utils.py", line 888, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "C:\Users/
/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GeoAI_Plugin-main\segment_fast\modeling_f\tiny_vit_sam.py", line 15, in
from timm.models.layers import DropPath as TimmDropPath,
File "C:\PROGRA1/QGIS321.12/apps/qgis-ltr/./python\qgis\utils.py", line 888, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
ModuleNotFoundError: No module named 'timm'

Versión de Python: 3.9.5 (tags/v3.9.5:0a7dcbd, May 3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)]
Versión de QGIS: 3.28.14-Firenze Firenze, b09131c512

Ruta de Python:
C:\Users//AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\open_lidar_tools
C:\Users/
/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\LAStools
C:\Users//AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\AreaAlongVector
C:/PROGRA1/QGIS321.12/apps/qgis-ltr/./python
C:/Users/
/AppData/Roaming/QGIS/QGIS3\profiles\default/python
C:/Users//AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins
C:/PROGRA1/QGIS321.12/apps/qgis-ltr/./python/plugins
C:\PROGRA1\QGIS321.12\apps\grass\grass83\etc\python
C:\Users*\Documents
C:\Program Files\QGIS 3.28.12\bin\python39.zip
C:\PROGRA1\QGIS321.12\apps\Python39\DLLs
C:\PROGRA1\QGIS321.12\apps\Python39\lib
C:\Program Files\QGIS 3.28.12\bin
C:\Users*\AppData\Roaming\Python\Python39\site-packages
C:\PROGRA1\QGIS321.12\apps\Python39
C:\PROGRA1\QGIS321.12\apps\Python39\lib\site-packages
C:\PROGRA1\QGIS321.12\apps\Python39\lib\site-packages\win32
C:\PROGRA1\QGIS321.12\apps\Python39\lib\site-packages\win32\lib
C:\PROGRA1\QGIS321.12\apps\Python39\lib\site-packages\Pythonwin
C:/Users/
/AppData/Roaming/QGIS/QGIS3\profiles\default/python
C:\Users*****\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\mmqgis/forms
C:\Users/*****/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\rvt-qgis

numpy.core._exceptions._ArrayMemoryError: Unable to allocate 9.53 GiB for an array with shape (121110, 84515) and data type uint8

Al hacer la precarga de la imagen y modelo me da este error

Ha ocurrido un error mientras se ejecutaba el código de Python: 

numpy.core._exceptions._ArrayMemoryError: Unable to allocate 9.53 GiB for an array with shape (121110, 84515) and data type uint8 
Traceback (most recent call last):
  File "C:\Users/sigeo.agmartin/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GeoAI_Plugin-main\dialog_precarga.py", line 160, in ejecutar
    resultado=self.cargar_imagen(imagen)
  File "C:\Users/sigeo.agmartin/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GeoAI_Plugin-main\dialog_precarga.py", line 231, in cargar_imagen
    ba=b.ReadAsArray()
  File "C:\PROGRA~1\QGIS32~1.11\apps\Python39\lib\site-packages\osgeo\gdal.py", line 4765, in ReadAsArray
    return gdal_array.BandReadAsArray(self, xoff, yoff,
  File "C:\PROGRA~1\QGIS32~1.11\apps\Python39\lib\site-packages\osgeo\gdal_array.py", line 429, in BandReadAsArray
    buf_obj = numpy.empty([buf_ysize, buf_xsize], dtype=typecode)
numpy.core._exceptions._ArrayMemoryError: Unable to allocate 9.53 GiB for an array with shape (121110, 84515) and data type uint8


Versión de Python: 3.9.5 (tags/v3.9.5:0a7dcbd, May  3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)] 
Versión de QGIS: 3.28.11-Firenze Firenze, b02458a196 

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.