★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>>

一、项目简介 🌏

遥感解译系统-Remote Scening System 是一款功能丰富的遥感影像智能解译工具,致力于实现遥感领域深度学习模型在Gradio平台的快速部署和便捷体验。遥感解译系统-Remote Scening System是一款集数据处理、模型训练、影像分割和解译、模型可视化于一体的遥感影像智能解译工具。该系统致力于通过使用Segemeng Anything Model和PaddleRS等先进技术,为用户提供高效准确的遥感影像解译服务。

该系统的主要特点包括:

🌏 强大的数据处理能力,支持多种遥感影像格式。

🌏 基于Segemeng Anything Model和PaddleRS,支持多种遥感影像的解译任务,包括SAM解译、变化检测、场景分类、目标检测、地物分类等。

🌏 集成了PaddleRS遥感影像处理库,可以支持多种遥感影像的处理和分析,同时还支持参数调整和自定义算法。

🌏 可视化的界面,通过友好的交互设计,使得用户可以通过简单的操作完成遥感影像处理和智能解译等任务,在Gradio平台上可以快速部署和操作。

🌏 高效的解译能力,能够有效解决遥感影像数据的解译问题,提高遥感影像数据处理和分析的效率和准确性。

遥感解译系统-Remote Scening System 可以广泛应用于自然资源管理、城市规划、农业生产、环境保护等领域。在Gradio平台的部署,也为用户提供了高效便捷的数据处理和解译操作,为遥感影像数据的处理提供了新的思路和工具。

二、Segment Anything Model 🌏

随着OpenAI公司ChatGPT的火爆,国内外科技公司都陆续发布自然语言通用领域大模型。而图像领域AI,一时间没了热度。转机出现在上个月,Meta发布了分割万物的视觉通大模型Segment Anything Model(SAM)。关注图像或者遥感语义分割的同事可能知道,语义分割作为计算机视觉的核心任务,应用广泛,但最大的限制就是需要大量的标注数据,并且针对不同的任务需要重新训练或微调,试想,如果出现一个适用所有场景的通用分割模型,数据不用标注了,模型也不用训练了,开包即用,多是一件美事。SAM的愿景就是这样,不仅遥感领域,他要把所有目之所及的图像都纳入他的分割能力之内。

SAM被誉为图片领域中的ChatGPT,可以对图片中的所有对象进行分割。以大家熟知的PS抠图功能类比,过去实现抠图大体上有两种打法:

🌏 经过大量训练,分割出特定对象,比如抠人的模型,抠衣服的模型,抠动物的模型等;

🌏 分割时尽可能的通用,分割后再进行微调。实际应用中,这两种方案混合出现,进而实现自动抠图的效果。

但SAM依赖庞大的参数量和海量训练数据在视觉角度理解了万物,按Meta的原话来说「SAM 已经学会了关于物体的一般概念,可以为任何图像或视频中的任何物体生成 mask,甚至包括在训练过程中没有遇到过的物体和图像类型。SAM 足够通用,可以涵盖广泛的用例,并且可以在新的图像『领域』即开即用,无需额外的训练。」即一个模型可以对图片的任何对象进行圈定,如下图所示。

SAM的发布让CV迎来了ChatGPT时刻,正如Meta AI自己声称的那样:“这是史上首个图像分割基础模型”。通过测评我们看到,对于常见遥感影像,SAM中等参数以上模型基本完全能够胜任常见遥感影像的分割任务,轮廓边缘特别不清晰的地方通过鼠标点击提示(Prompt)去细分也基本没问题,加之最近SEEM等模型的出现,解决了语义缺失的问题,可以说在遥感领域是非常有潜力的一个技术。

三、PaddleRS 套件 🌏

3.1 简要介绍

PaddleRS是百度飞桨、遥感科研院所及相关高校共同开发的基于飞桨的遥感影像智能化处理套件,支持图像分割、目标检测、场景分类、变化检测、图像复原等常见遥感任务。PaddleRS致力于帮助遥感领域科研从业者快速完成算法的研发、验证和调优。同时,PaddleRS也期望助力投身于产业实践的开发者,便捷地实现从数据预处理到模型部署的全流程遥感深度学习应用。【PaddleRS】

PaddleRS具有以下五大特色:

🌏 丰富的视觉与遥感特色模型库:集成飞桨四大视觉套件的成熟模型库,同时支持FarSeg、BIT、ChangeStar等众多遥感领域深度学习模型,覆盖图像分割、目标检测、场景分类、变化检测、图像复原等任务。

🌏 对遥感领域专有任务的支持:支持包括变化检测在内的遥感领域特色任务,提供完善的训练、部署教程以及丰富的实践案例。

🌏 针对遥感影像大幅面性质的优化:支持大幅面影像滑窗推理,使用内存延迟载入技术提升性能;支持对大幅面影像地理坐标信息的读写。

🌏 顾及遥感特性与地学知识的数据预处理:针对遥感数据特点,提供对包含任意数量波段的数据以及多时相数据的预处理功能,支持影像配准、辐射校正、波段选择等遥感数据预处理方法,支持50余种遥感指数的提取与知识融入。

🌏 工业级训练与部署性能:支持多进程异步I/O、多卡并行训练等加速策略,结合飞桨核心框架的显存优化功能,可大幅度减少模型的训练开销,帮助开发者以更低成本、更高效地完成遥感的开发和训练。

3.2 快速开始

所有代码均位于/home/aistudio/launch目录下

# 安装依赖
!unzip /home/aistudio/launch.zip
%cd /home/aistudio/launch
!pip install -r requirements.txt --user

注: 运行完上述代码,请记得重启内核,继续往下运行,否则运行下述代码,会导致缺少依赖等问题!

3.3 场景分类

3.3.1 功能描述

对图像进行场景分类,输出类别名称和置信度。

3.3.2 使用方法

单击“点击上传”选择单张图像,点击“场景分类”提交任务,等待模型处理完毕后可在下方获取解译结果。

3.3.3 推理展示

若您需要使用自训练模型,请参考使用PaddleRS训练和导出模型。可以使用以下demo代码进行测试。

%cd /home/aistudio/launch
import paddlers as pdrs
from paddlers.transforms import decode_image

def classification(model_path, data_path):
    ims = decode_image(data_path)
    predictor = pdrs.deploy.Predictor(model_path, use_gpu=True)
    temps = predictor.predict(ims)
    class_ids_map = temps['class_ids_map'][0]
    scores_map = temps['scores_map'][0]
    label_names_map = temps['label_names_map'][0]
    return class_ids_map, scores_map, label_names_map

model_path = '/home/aistudio/launch/weights/classification'
data_path = '/home/aistudio/launch/datasets/classification/agricultural04.png'

classification(model_path, data_path)
2023-06-25 18:57:30 [WARNING]	Cannot find raw_params. Default arguments will be used to construct the model.
2023-06-25 18:57:30 [INFO]	Model[ResNet50_vd] loaded.
------------------ Inference Time Info ----------------------
total_time(ms): 22.1, img_num: 1, batch_size: 1
average latency time(ms): 22.10, QPS: 45.248869
preprocess_time_per_im(ms): 2.00, inference_time_per_batch(ms): 19.70, postprocess_time_per_im(ms): 0.40





(0, 0.9179, 'agricultural')
💐 aircraft 💐❣️ playground ❣️💘 overpass 💘💐 oiltank 💐

3.4 目标检测

3.4.1 功能描述

对图像进行目标检测,输出检测结果。

3.4.2 使用方法

单击“点击上传”选择单张图像和调整置信度,点击“目标检测”提交任务,等待模型处理完毕后可在下方获取解译结果。

3.4.3 推理展示

若您需要使用自训练模型,请参考使用PaddleRS训练和导出模型。可以使用以下demo代码进行测试。

from PIL import Image
import paddle
import numpy as np

import paddlers as pdrs
from paddlers.transforms import decode_image
from paddlers.tasks.utils.visualize import visualize_detection

def object_detection(model_path, data_path, threshold):
    """
    :param model_path: 模型路径
    :param data_path: 图片路径,里面只包含图片
    :param threshold: 阈值
    """
    predictor = pdrs.deploy.Predictor(model_dir=model_path, use_gpu=True)
    pred = predictor.predict(data_path)
    # 读取输入影像
    ims = decode_image(data_path)
    # 绘制目标框
    with paddle.no_grad():
        vis = ims
        # 绘制预测目标框
        if len(pred) > 0:
            vis = visualize_detection(
                np.array(vis),
                pred,
                threshold=threshold,
                save_dir=None)
            result = Image.fromarray(vis)
    return result

model_path = '/home/aistudio/launch/weights/object_detection'
data_path = '/home/aistudio/launch/datasets/object_detection/oiltank_37.jpg'
threshold = 0.2

object_detection(model_path, data_path, threshold).show()
2023-06-25 19:14:20 [WARNING]	Cannot find raw_params. Default arguments will be used to construct the model.
2023-06-25 19:14:20 [INFO]	Model[PPYOLO] loaded.
------------------ Inference Time Info ----------------------
total_time(ms): 75.1, img_num: 1, batch_size: 1
average latency time(ms): 75.10, QPS: 13.315579
preprocess_time_per_im(ms): 31.60, inference_time_per_batch(ms): 43.30, postprocess_time_per_im(ms): 0.20

在这里插入图片描述

3.5 地物分类

3.5.1 功能描述

对图像进行地物分类,输出分割结果。

3.5.2 使用方法

单击“点击上传”选择单张图像,点击“地物分类”提交任务,等待模型处理完毕后可在下方获取解译结果。

3.5.3 推理展示

若您需要使用自训练模型,请参考使用PaddleRS训练和导出模型。可以使用以下demo代码进行测试。

import numpy as np
from PIL import Image
import paddlers as pdrs
from paddlers.tasks.utils.visualize import get_color_map_list

def semantic_segmentation(model_path, data_path):
    predictor = pdrs.deploy.Predictor(model_path, use_gpu=True)
    pred = predictor.predict(data_path)
    ims = pred['label_map']
    lut = np.array(get_color_map_list(256))
    im = lut[ims]
    med = im.astype(np.uint8)
    segmentation = Image.fromarray(med)
    return segmentation

model_path = '/home/aistudio/launch/weights/semantic_segmentation'
data_path = '/home/aistudio/launch/datasets/semantic_segmentation/agricultural04.png'

semantic_segmentation(model_path, data_path).show()
2023-06-25 19:15:56 [WARNING]	Cannot find raw_params. Default arguments will be used to construct the model.
2023-06-25 19:15:56 [INFO]	Model[DeepLabV3P] loaded.
------------------ Inference Time Info ----------------------
total_time(ms): 50.1, img_num: 1, batch_size: 1
average latency time(ms): 50.10, QPS: 19.960080
preprocess_time_per_im(ms): 11.70, inference_time_per_batch(ms): 35.50, postprocess_time_per_im(ms): 2.90

在这里插入图片描述

3.6 变化检测

3.6.1 功能描述

对图像进行变化检测,输出检测结果。

3.6.2 使用方法

单击“点击上传”选择变化前图像和变化后图像,点击“变化检测”提交任务,等待模型处理完毕后可在下方获取解译结果。

3.6.3 推理展示

若您需要使用自训练模型,请参考使用PaddleRS训练和导出模型。可以使用以下demo代码进行测试。

import os
import os.path as osp
from PIL import Image
import numpy as np

import paddlers as pdrs
from paddlers.transforms import decode_image


def change_detection(model_path, image1, image2, window_size=256, stride=128):
    predictor = pdrs.deploy.Predictor(model_path, use_gpu=True)
    image_list = (image1, image2)
    predictor.slider_predict(
        image_list,
        save_dir=None,
        transforms=None,
        block_size=window_size,  #注意block_size的值不能等于overlap的值
        overlap=window_size - stride,
        merge_strategy='accum')

    raw_name = os.path.splitext(osp.basename(image1))+ ".tif"
    img = decode_image(raw_name)
    save_img = np.where(img == 0, img, 255)
    save_img = np.concatenate((save_img, save_img, save_img), axis=-1)
    change = Image.fromarray(save_img)
    return change

model_path = '/home/aistudio/launch/weights/change_detection'
image1 = '/home/aistudio/launch/datasets/change_detection/A/train_3.png'
image2 = '/home/aistudio/launch/datasets/change_detection/B/train_3.png'

change_detection(model_path, image1, image2, window_size=256, stride=128).show()
import paddlers as pdrs
from paddlers.transforms import decode_image

def classification(model_path, data_path):
    ims = decode_image(data_path)
    predictor = pdrs.deploy.Predictor(model_path, use_gpu=True)
    temps = predictor.predict(ims)
    class_ids_map = temps['class_ids_map'][0]
    scores_map = temps['scores_map'][0]
    label_names_map = temps['label_names_map'][0]
    return class_ids_map, scores_map, label_names_map

model_path = '/home/aistudio/launch/weights/classification'
data_path = '/home/aistudio/launch/datasets/change_detection/A/train_3.png'

classification(model_path, data_path)
2023-06-24 14:13:39 [WARNING]	Cannot find raw_params. Default arguments will be used to construct the model.
2023-06-24 14:13:39 [INFO]	Model[ResNet50_vd] loaded.
------------------ Inference Time Info ----------------------
total_time(ms): 1561.9, img_num: 1, batch_size: 1
average latency time(ms): 1561.90, QPS: 0.640246
preprocess_time_per_im(ms): 3.00, inference_time_per_batch(ms): 1557.90, postprocess_time_per_im(ms): 1.00

s_time_per_im(ms): 1.00

(7, 0.53535, 'forest')
变化前变化后变化检测

四、总结与推荐 🌏

如果你对大模型(GPT、ChatGLM、SAM等)感兴趣或是对Gradio应用、遥感领域感兴趣,欢迎加入【我的社区–大模型和应用频道】进行交流和学习。

4.1 总结与提升

🌏 总结:遥感解译系统-Remote Scening System-V1.0 使用 SAMPaddleRS 完成了SAM解译、变化检测、场景分类、目标检测、地物分类功能。

🌏 提升一: 为 Remote Scening System 添加遥感影像预处理、解译结果后处理功能,可以对遥感数据进行处理,以获得更精确的结果。

🌏 提升二: 为 Remote Scening System 添加图像复原、道路提取、SAR船舰识别等功能,使Remote Scening System功能更完善,添加模型上传功能和文件夹上传功能,方便用户的使用。

🌏 提升三: 在使用 SAM 时,可以利用 Grounded-Segment-Anything 使功能更加完善,检测及分割更加精细化,以达到对遥感图像的解译。

4.2 参考项目

🌏 PaddleRS:https://github.com/PaddlePaddle/PaddleRS/tree/develop

🌏 GeoView:https://github.com/PaddleCV-SIG/GeoView

4.3 推荐项目与应用

🌏 👔 快来试试成为小小服装设计师的感jio 👘

🌏 💘When Segment Anything Model Meets Stable Diffusion 💘

请点击此处查看本环境基本用法.

Please click here for more detailed instructions.

此文章为搬运
原项目链接

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐