SAM en ArcGIS Pro: probando la segmentación semi-automática sobre ortofotos PNOA en formato COG

Desde hace unas semanas he estado probando el modelo Segment Anything Model (SAM) de Meta AI integrado como modelo preentrenado dentro de ArcGIS Pro, aplicándolo sobre ortofotos del Plan Nacional de Ortofotografía Aérea (PNOA) descargadas del Centro de Descargas del CNIG en formato COG. Este artículo recoge el proceso completo: qué es SAM, qué licencias y extensiones necesitas, cómo se instalan las librerías, de dónde salen los datos de origen, qué formatos intervienen y los problemas reales que me he ido encontrando por el camino, con sus soluciones.

Qué es SAM y por qué interesa en un flujo GIS

SAM es un modelo fundacional de segmentación de imágen desarrollado por Meta AI, entrenado sobre más de mil millones de máscaras y once millones de imágenes del dataset SA-1B. A diferencia de los modelos de detección de objetos tradicionales, que necesitan entrenarse desde cero con un dataset etiquetado para cada tipo de objeto, SAM funciona con aprendizaje zero-shot: es capaz de delinear los contornos de prácticamente cualquier elemento presente en una imagen sin haber visto ese tipo de objeto antes durante el entrenamiento. ESRI lo integró como modelo preentrenado dentro de ArcGIS Living Atlas, lo que permite ejecutarlo directamente desde la herramienta Detect Objects Using Deep Learning en ArcGIS Pro, sin necesidad de entrenar nada previamente.

Imagen 1 – Detect Objects Using Deep Learning en ArcGIS Pro (Parameters)

La contrapartida de esa generalidad es que SAM segmenta absolutamente todo lo que reconoce como objeto diferenciado dentro de la imagen: edificios, coches, sombras, vegetación, piscinas, cualquier polígono con un contorno reconocible, sin asignarle una clase semántica. Es decir, obtienes máscaras, no una clasificación temática. Para quien venga de flujos de clasificación supervisada esto es un cambio de paradigma: primero segmentas todo, y después filtras o clasificas en post-proceso. Esri ha desarrollado además una variante, Text SAM, que combina SAM con Grounding DINO para poder indicar mediante texto qué tipo de objeto interesa extraer, lo cual resulta muy útil cuando quieres, por ejemplo, solo edificaciones y no absolutamente todo lo detectable en la escena.

Imagen 2 – Detect Objects Using Deep Learning en ArcGIS Pro (Environment)

Requisitos de licencia y extensión necesarios

Para ejecutar SAM en ArcGIS Pro hace falta la extensión Image Analyst activa en la licencia. Esto se comprueba entrando en Project, dentro del backstage, y accediendo al apartado Licensing, donde debe aparecer Image Analyst marcada como disponible. Conviene tener en cuenta que la pestaña contextual de imagen en el ribbon solo se muestra cuando hay una capa ráster seleccionada en el panel de contenidos, así que si no ves las herramientas de Image Analyst en el ribbon no significa necesariamente que falte la licencia: puede ser simplemente que no tengas ninguna capa de imagen activa. La vía más fiable para comprobar la disponibilidad real es buscar directamente la herramienta Detect Objects Using Deep Learning dentro de Image Analyst Tools, en el panel Catalog.

Además de la extensión, hace falta instalar las Deep Learning Libraries de Esri, un paquete adicional que añade PyTorch, torchvision y las dependencias específicas de los modelos de deep learning de Esri sobre el entorno Python clonado de ArcGIS Pro. Este instalador debe coincidir exactamente con la versión de ArcGIS Pro que tengas instalada, y hay que ejecutarlo con ArcGIS Pro cerrado.

Descarga e instalación del modelo SAM

El modelo llega empaquetado como archivo .dlpk, un Deep Learning Package que incluye los pesos del modelo y el script Python que ArcGIS Pro ejecuta internamente. Se descarga desde ArcGIS Living Atlas of the World buscando el ítem correspondiente a Segment Anything Model, y se puede descargar tanto desde dentro de Pro, a través del panel Catalog conectado al portal, como desde el navegador. Si lo descargas desde dentro de ArcGIS Pro suele quedar en la carpeta local de paquetes de deep learning del usuario; si lo bajas desde el navegador aterriza en la carpeta de descargas habitual de Windows, y desde ahí conviene moverlo a una ubicación estable del proyecto, por ejemplo dentro de la carpeta Packages del proyecto de ArcGIS.

Una vez localizado el .dlpk, se referencia directamente como parámetro Model Definition dentro de la herramienta Detect Objects Using Deep Learning, sin necesidad de ningún paso de instalación adicional más allá de tener las Deep Learning Libraries correctamente instaladas.

El origen de los datos: PNOA y el cambio a formato COG

El Plan Nacional de Ortofotografía Aérea arrancó en 2004 con el objetivo de obtener cobertura fotográfica aérea digital de todo el territorio español, con un ciclo de actualización que actualmente es de tres años por comunidad autónoma. Durante años las ortofotos PNOA se distribuyeron en formato ECW, un formato de compresión propietario de Hexagon/Leica Geosystems. En 2023 el IGN dio el paso de sustituir ese formato propietario por Cloud Optimized GeoTIFF, un GeoTIFF estándar pero con teselado interno, pirámides incorporadas y estructura pensada para el acceso remoto parcial vía HTTP Range Requests, de modo que en teoría un cliente puede pedir solo la porción de píxeles que necesita sin descargar el archivo completo. En la práctica, el Centro de Descargas del CNIG sirve estos ficheros mediante peticiones POST en lugar de GET, lo que limita esa ventaja de acceso parcial cuando se consume directamente desde la web de descargas, aunque el archivo en sí conserva toda la estructura interna de un COG válido y funciona perfectamente como cualquier GeoTIFF una vez descargado.

Imagen 3 – Descargando COG desde el CNIG

Junto con el cambio de formato, el IGN también cambió el corte de las hojas de distribución de la ortofoto de máxima actualidad, pasando de hojas MTN50 a hojas MTN25, con el objetivo de reducir el tamaño de cada fichero individual y agilizar la descarga.

Conviene distinguir varios productos dentro del catálogo PNOA porque cada uno tiene su propia disponibilidad temporal y su propio corte de hoja. Las ortofotos históricas PNOA cubren mosaicos anuales desde 2004 hasta la actualidad y se distribuyen según hoja oficial 1:25.000 en COG. Las ortofotos provisionales, que a su vez se dividen en expeditas y rápidas, son productos no definitivos generados a partir de la orientación directa del vuelo mediante GNSS/IMU, disponibles temporalmente hasta que se publica la versión definitiva, y se distribuyen en hoja 1:5.000. La tesela que he usado en mis pruebas, correspondiente al huso 30 y con el prefijo MA de máxima actualidad, entra dentro de esta lógica de actualización continua por lotes autonómicos.

Imagen 4 – COG cargado en ArcGIS Pro

Además de las ortofotos ópticas, el PNOA incluye la componente LiDAR, con modelos digitales de superficie y terreno derivados de las nubes de puntos, también distribuidos en COG, con pasos de malla de cinco metros en el caso del MDS05 y de 2,5 metros en los modelos normalizados de edificación y vegetación de coberturas más recientes.

Formatos necesarios para trabajar con SAM en ArcGIS Pro

SAM está diseñado para trabajar con imagen de tres bandas en color natural RGB y profundidad de 8 bits. Antes de lanzar la herramienta conviene comprobar en las propiedades de la fuente del ráster que el Pixel Type sea efectivamente entero sin signo de 8 bits y que el número de bandas sea tres. Las ortofotos PNOA en COG normalmente ya cumplen este requisito de fábrica, pero si trabajas con productos de mayor número de bandas, como composiciones con infrarrojo cercano, o con productos LiDAR de 16 bits, necesitarás recomponer un ráster de tres bandas de 8 bits mediante herramientas como Composite Bands o Copy Raster antes de poder ejecutar el modelo.

El formato COG en sí no requiere ninguna conversión previa para usarse en ArcGIS Pro: se añade al mapa como cualquier ráster GeoTIFF y Pro lo interpreta de forma nativa aprovechando su estructura teselada internamente, aunque al trabajarlo en local esa ventaja de acceso remoto parcial deja de tener relevancia práctica, ya que el archivo completo reside ya en disco.

Licencia de uso de los datos del IGN y del CNIG

Toda la cartografía y ortofotografía distribuida a través del Centro de Descargas del CNIG, incluyendo las series PNOA, se rige por la Orden FOM/2807/2015, que establece una licencia de uso compatible con Creative Commons Reconocimiento 4.0. Esto permite el uso libre y gratuito de los datos para cualquier propósito legítimo, incluido el uso comercial, con la única obligación estricta de reconocer el origen y la propiedad del IGN y del CNIG en cualquier producto derivado. Cuando se genera una obra derivada, como sería el caso de las máscaras de segmentación producidas por SAM a partir de una ortofoto PNOA, la fórmula de atribución recomendada añade la mención “obra derivada de” antes de la referencia al producto original y su fecha, de modo que en un post o publicación técnica la cita adecuada sería algo del tipo “obra derivada de PNOA, IGN/CNIG, CC BY 4.0“, ajustando el año del vuelo correspondiente.

Problemas reales encontrados durante las pruebas y cómo se resolvieron

Aunque sobre el papel el flujo es sencillo, en la práctica me he encontrado con tres obstáculos consecutivos que merece la pena documentar porque no son evidentes desde la documentación oficial de Esri.

El primero (1) apareció nada más lanzar la herramienta con los parámetros por defecto: un error de conversión de tipo dentro del propio script del .dlpk, que fallaba al intentar convertir a número decimal el valor del umbral de estabilidad de máscara. La causa resultó ser la configuración regional de Windows en español, donde el separador decimal por defecto es la coma. El script interno de SAM espera notación con punto decimal, así que aunque el campo de la interfaz mostrara correctamente “0,95”, al serializarse internamente como argumento de Python fallaba la conversión a float. La solución de fondo no está en el propio formulario de la herramienta, sino en cambiar el símbolo decimal del sistema operativo de coma a punto desde la configuración regional de Windows, y reiniciar ArcGIS Pro por completo para que el cambio se propague.

El segundo problema (2), ya con el separador decimal corregido, fue un error genérico de tipo “unspecified error” al generar la tabla de salida, con referencia a un ráster ausente. Este patrón de error suele apuntar a un fallo en la inicialización del motor de PyTorch, típicamente por ausencia de driver NVIDIA compatible cuando el tipo de procesador se deja sin especificar. Fijar explícitamente el Processor Type a CPU, en el apartado Environments de la herramienta, resolvió ese fallo al forzar una ruta de ejecución que no depende de encontrar una GPU CUDA disponible.

El tercer problema (3) surgió ya con la ejecución corriendo establemente sobre CPU: un timeout del procesamiento paralelo. ArcGIS Pro reparte por defecto el ráster de entrada en varias instancias paralelas para acelerar el procesamiento, pero al ser SAM un modelo computacionalmente muy exigente, correr varias instancias simultáneas sobre CPU compite por los mismos recursos y ninguna llega a completarse dentro del tiempo límite asignado. Poner el factor de procesamiento paralelo a cero para forzar ejecución secuencial, o alternativamente aumentar el valor de timeout desde las opciones de geoprocesamiento del proyecto, resuelve el bloqueo, a costa de un tiempo de ejecución total mayor.

Recomendaciones para una primera prueba

Antes de lanzar el modelo sobre una tesela PNOA completa, que en corte 1:25.000 con resolución de 25 centímetros supone un volumen de píxeles considerable, conviene acotar el extent de procesamiento a un área muy pequeña, del orden de una manzana urbana, para validar que toda la cadena funciona correctamente: licencia activa, librerías instaladas, configuración regional correcta y tipo de procesador explícito. Una vez confirmado el funcionamiento en un área reducida, escalar progresivamente el extent permite calibrar tiempos de ejecución reales antes de comprometerse a procesar la tesela entera o un mosaico de varias teselas contiguas.

Imagen 5 – Primer test éxito (algunos fallos ya que no cambié parámetros por defecto)

Conclusión: hacia dónde lleva esto

Más allá de la prueba de concepto sobre una tesela urbana, el interés real de SAM en un flujo GIS aparece cuando se combina la segmentación óptica con otras capas ya disponibles en el propio catálogo del CNIG, en particular con el componente LiDAR del PNOA. Las máscaras que produce SAM a partir de la ortofoto son polígonos sin altura ni clase semántica; cruzarlas con el modelo digital de superficie o con la nube de puntos clasificada de la misma zona permite dar profundidad real a esa segmentación: asignar una altura a cada máscara detectada, diferenciar edificación de vegetación por su perfil vertical en lugar de solo por su forma en planta, o generar de forma semiautomática capas de volumetría 3D a partir de contornos que SAM ha extraído en segundos sobre un área que manualmente llevaría horas de digitalización.

Esto es especialmente interesante ahora mismo porque la tercera cobertura del proyecto PNOA-LiDAR, capturada con una densidad homogénea de cinco puntos por metro cuadrado en todo el territorio, muy superior a los 0,5 puntos por metro cuadrado con los que arrancó la primera cobertura en 2009, acaba de completar su publicación para Castilla y León, una de las últimas comunidades en incorporarse a este ciclo. Y ahí es donde el cruce entre segmentación SAM y LiDAR de tercera cobertura se vuelve realmente vistoso: en las zonas de alta montaña de la Cordillera Cantábrica y del Sistema Central leonés, por ejemplo, donde la densidad de puntos y la resolución de la ortofoto asociada capturan un nivel de detalle del terreno que hace unos años solo se conseguía con vuelos específicos de proyectos puntuales, no con una cobertura nacional sistemática.

Imagen 6 – Detalle de 3ª cobertura PNOA en Castilla y León (Ávila)
Imagen 7 – La misma zona en la realidad


DESCRIPTION=PNOA_2014_CYL-SW_314-4460_ORT-CLA-COL.laz
LIDAR POINT COUNT=6,953,827
LIDAR POINT DENSITY=2.022 samples / m^2
LIDAR POINT SPACING=0.703 m
LIDAR OFFSET=( 314000, 4458000, 0 )
LIDAR SCALE=( 0.001, 0.001, 0.001 )
UPPER LEFT X=314000.000
UPPER LEFT Y=4459999.990
LOWER RIGHT X=315999.990
LOWER RIGHT Y=4458000.000

Combinar ahí la segmentación de SAM sobre la ortofoto con el modelo digital de superficie o con el modelo digital de terreno de tercera cobertura abre la puerta a extraer de forma casi automática elementos como afloramientos rocosos, morfología glaciar residual, o el trazado exacto de sendas y cortafuegos en terreno muy complejo, con un nivel de detalle que hasta ahora exigía trabajo manual intensivo de fotointerpretación.

En definitiva, SAM no sustituye el criterio del analista ni resuelve por sí solo la clasificación temática, de hecho, nada lo hace, pero como capa de segmentación rápida sobre cualquier ortofoto PNOA, combinada con el LiDAR de la misma cobertura, se perfila como un acelerador muy serio para flujos de extracción de elementos del territorio que hasta ahora dependían casi en exclusiva de digitalización manual.

Imagen 8 – Segundo test SAM de mayores dimensiones. Éxito en la configuración!

Lo que sí que se podría decir es que la segmentación ha venido para quedarse y saber segmentar, separar de acuerdo a texturas, patrones, tipologías, alturas, etc va a ser crucial para poder aprovecharlo para verificar cambios en los usos del suelo o tracking de fenómenos como la nueva urbanización o mismamente los incendios…

Alberto Concejal
Analista Geoespacial
Geovisualization.net

Fuentes:
https://ai.meta.com/research/sam2/
https://doc.arcgis.com/es/pretrained-models/latest/imagery/introduction-to-segment-anything-model-sam-.htm
https://learn.arcgis.com/es/projects/detect-objects-with-text-sam/
https://geospatialtraining.com/metas-sam-3-a-game-changer-for-gis-feature-extraction/

Leave a comment