PaddleRS:使用超分模块提高真实的低分辨率无人机影像的分割精度

P粉084495128
发布: 2025-07-24 17:37:58
原创
874人浏览过
本项目利用PaddleRS超分模块处理低分辨率无人机影像,再结合PaddleSeg训练的Segformer模型提升分割效果。先通过DRN模型超分重建低质影像,再与直接用低分辨率影像的分割结果对比。虽无标注数据计算指标,但人眼判别显示,超分后预测结果更优,尤其在细节呈现上更接近人工标注真值。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

paddlers:使用超分模块提高真实的低分辨率无人机影像的分割精度 - php中文网

PaddleRS:使用超分模块提高真实的低分辨率无人机影像的分割精度

一、项目背景

  • 前段时间写了个项目:PaddleSeg:使用Transfomer模型对航空遥感图像分割,项目利用PaddleSeg模块训练Transfomer类的语义分割模型,在UDD6数据集中mIOU达到74.50% ,原论文使用DeepLabV3+的mIOU为73.18%, 高1.32%,训练效果图如下,其中:车辆:红色;道路:浅蓝色;植被:深蓝色;建筑立面:亮绿色;建筑屋顶:紫色;其他:焦绿色
In [10]
%cd /home/aistudio/import matplotlib.pyplot as pltfrom PIL import Image

output = Image.open(r"work/example/Seg/UDD6_result/added_prediction/000161.JPG")

plt.figure(figsize=(18,12))#设置窗口大小plt.imshow(output), plt.axis('off')
登录后复制
       
/home/aistudio
登录后复制
       
(<matplotlib.image.AxesImage at 0x7f1e4d90f390>, (-0.5, 4095.5, 2159.5, -0.5))
登录后复制
               
<Figure size 1296x864 with 1 Axes>
登录后复制
               
  • 训练的结果很不错,所使用的UDD6数据是从北京、葫芦岛、沧州、郑州四个城市,使用大疆精灵四无人机在60m-100m高度之间采集。但是,在实际的生产过程中,城市、飞行的高度、图像的质量会发生变化
  • 采集飞行高度升高可以在相同时间内获取更大面积的数据,但分辨率会降低,对低质量的数据,直接使用先前训练的数据预测效果不理想,再标注数据、训练模型将是一个不小的工作量,解决的方法除了提升模型的泛化能力,也可以考虑使用图像超分对低质量的无人机图像重建,然后再进行预测
  • 本项目使用PaddleRS提供的无人机遥感图像超分模块,对真实的低质量无人机影像数据进行超分,然后再使用前段时间用UDD6训练的Segformer模型预测,与直接使用低分辨率模型对比。由于没有对低质量数据进行标注无法计算指标。但人眼判别,超分之后的预测结果更好,左边是人工标注的label,中间是低分辨率的预测结果,右边是超分辨率重建后的结果
In [12]
img = Image.open(r"work/example/Seg/gt_result/data_05_2_14.png")
lq = Image.open(r"work/example/Seg/lq_result/added_prediction/data_05_2_14.png")
sr = Image.open(r"work/example/Seg/sr_result/added_prediction/data_05_2_14.png")

plt.figure(figsize=(18, 12))
plt.subplot(1,3,1), plt.title('GT')
plt.imshow(img), plt.axis('off')
plt.subplot(1,3,2), plt.title('predict_LR')
plt.imshow(lq), plt.axis('off')
plt.subplot(1,3,3), plt.title('predict_SR')
plt.imshow(sr), plt.axis('off')
plt.show()
登录后复制
       
<Figure size 1296x864 with 3 Axes>
登录后复制
               

二、数据介绍与展示

  • 使用的数据是使用大疆精灵四无人机在上海,飞行高度为300m采集的,采集的时候天气也一般,可以看后续的示例发现质量不高。由于只是展示超分重建后进行预测的效果,所以只是简单标注了其中5张照片,毕竟标注数据真的是一件很费力的事! 要是能用公开数据集训练的模型来预测自己的数据,这多是一件美事!
  • 部分标注数据展示如下
In [15]
add_lb = Image.open(r"work/example/Seg/gt_result/data_05_2_19.png")
lb = Image.open(r"work/example/Seg/gt_label/data_05_2_19.png")
img = Image.open(r"work/ValData/DJI300/data_05_2_19.png")

plt.figure(figsize=(18, 12))
plt.subplot(1,3,1), plt.title('image')
plt.imshow(img), plt.axis('off')
plt.subplot(1,3,2), plt.title('label')
plt.imshow(lb), plt.axis('off')
plt.subplot(1,3,3), plt.title('add_label')
plt.imshow(add_lb), plt.axis('off')
plt.show()
登录后复制
       
<Figure size 1296x864 with 3 Axes>
登录后复制
               

三、无人机遥感图像超分

  • 因为PaddleRS提供了预训练的超分模型,所以这步主要分为以下两个步骤:
    • 准备PaddleRS并设置好环境
    • 调用PaddleRS中的超分预测接口,对低分辨率无人机影像进行超分重建
In [3]
# 从github上克隆仓库!git clone https://github.com/PaddleCV-SIG/PaddleRS.git
登录后复制
       
正克隆到 'PaddleRS'...
remote: Enumerating objects: 2325, done.
remote: Counting objects: 100% (2325/2325), done.
remote: Compressing objects: 100% (1086/1086), done.
remote: Total 2325 (delta 1233), reused 2245 (delta 1182), pack-reused 0
接收对象中: 100% (2325/2325), 3.22 MiB | 2.49 MiB/s, 完成.
处理 delta 中: 100% (1233/1233), 完成.
检查连接... 完成。
登录后复制
       
In [ ]
# 安装依赖,大概一分多钟%cd PaddleRS/
!pip install -r requirements.txt
登录后复制
   
In [ ]
# 进行图像超分处理,使用的模型为DRNimport osimport paddleimport numpy as npfrom PIL import Imagefrom paddlers.models.ppgan.apps.drn_predictor import DRNPredictor# 输出预测结果的文件夹output = r'../work/example' # 待输入的低分辨率影像位置input_dir = r"../work/ValData/DJI300" paddle.device.set_device("gpu:0") # 若是cpu环境,则替换为 paddle.device.set_device("cpu")predictor = DRNPredictor(output) # 实例化filenames = [f for f in os.listdir(input_dir) if f.endswith('.png')]for filename in filenames:
    imgPath = os.path.join(input_dir, filename)   
    predictor.run(imgPath) # 预测
登录后复制
   
  • 超分重建结果前后对比展示
In [6]
 # 可视化import osimport matplotlib.pyplot as plt
%matplotlib inline

lq_dir = r"../work/ValData/DJI300" #低分辨率影像文件夹sr_dir = r"../work/example/DRN" #超分辨率影像所在文件夹img_list = [f for f in os.listdir(lq_dir) if f.endswith('.png')]
show_num = 3 # 展示多少对影像for i in range(show_num):
    lq_box = (100, 100, 175, 175)
    sr_box = (400, 400, 700, 700)
    filename = img_list[i]
    image = Image.open(os.path.join(lq_dir, filename)).crop(lq_box) # 读取低分辨率影像
    sr_img = Image.open(os.path.join(sr_dir, filename)).crop(sr_box) # 读取超分辨率影像

    plt.figure(figsize=(12, 8))
    plt.subplot(1,2,1), plt.title('Input')
    plt.imshow(image), plt.axis('off')
    plt.subplot(1,2,2), plt.title('Output')
    plt.imshow(sr_img), plt.axis('off')
    plt.show()
登录后复制
       
<Figure size 864x576 with 2 Axes>
登录后复制
               
<Figure size 864x576 with 2 Axes>
登录后复制
               
<Figure size 864x576 with 2 Axes>
登录后复制
               

四、超分前后图像分割效果对比

  • 使用的模型为Segformer_b3,用UDD6数据集训练了40000次
  • 已经将性能最好的模型以及.yml文件放在work文件夹下
  • 运行以下命令可对指定的文件夹下的图像进行预测
  • 首先用该模型对低质量的无人机数据进行预测,然后再使用超分重建后的图像预测,最后对比一下预测的效果
In [18]
%cd ..# clone PaddleSeg的项目!git clone https://gitee.com/paddlepaddle/PaddleSeg
登录后复制
       
/home/aistudio
正克隆到 'PaddleSeg'...
remote: Enumerating objects: 16439, done.
remote: Counting objects: 100% (1402/1402), done.
remote: Compressing objects: 100% (811/811), done.
remote: Total 16439 (delta 710), reused 1165 (delta 573), pack-reused 15037
接收对象中: 100% (16439/16439), 341.09 MiB | 10.14 MiB/s, 完成.
处理 delta 中: 100% (10574/10574), 完成.
检查连接... 完成。
登录后复制
       
In [ ]
# 安装依赖%cd /home/aistudio/PaddleSeg
!pip install  -r requirements.txt
登录后复制
   
In [ ]
# 对低分辨率的无人机影像进行预测!python predict.py \
       --config ../work/segformer_b3_UDD.yml \
       --model_path ../work/best_model/model.pdparams \
       --image_path ../work/ValData/DJI300 \
       --save_dir ../work/example/Seg/lq_result
登录后复制
   
In [ ]
# 对使用DRN超分重建后的影像进行预测!python predict.py \
       --config ../work/segformer_b3_UDD.yml \
       --model_path ../work/best_model/model.pdparams \
       --image_path ../work/example/DRN \
       --save_dir ../work/example/Seg/sr_result
登录后复制
   

展示预测结果

百度GBI
百度GBI

百度GBI-你的大模型商业分析助手

百度GBI 104
查看详情 百度GBI
  • 其中,颜色如下:
种类 颜色
其他 焦绿色
建筑外立面 亮绿色
道路 淡蓝色
植被 深蓝色
车辆 红色
屋顶 紫色
  • 由于只标注了五张图片,所以只展示五张图片的结果,剩下的预测结果均在 work/example/Seg/文件夹下,其中左边是真值,中间是低分辨率影像预测结果,右边是超分重建后预测结果
In [17]
# 展示部分预测的结果%cd /home/aistudio/import matplotlib.pyplot as pltfrom PIL import Imageimport os

img_dir = r"work/example/Seg/gt_result" #低分辨率影像文件夹lq_dir = r"work/example/Seg/lq_result/added_prediction"sr_dir = r"work/example/Seg/sr_result/added_prediction" # 超分辨率预测的结果影像所在文件夹img_list = [f for f in os.listdir(img_dir) if f.endswith('.png') ]for filename in img_list:
    img = Image.open(os.path.join(img_dir, filename))
    lq_pred = Image.open(os.path.join(lq_dir, filename))
    sr_pred = Image.open(os.path.join(sr_dir, filename))

    plt.figure(figsize=(12, 8))
    plt.subplot(1,3,1), plt.title('GT')
    plt.imshow(img), plt.axis('off')
    plt.subplot(1,3,2), plt.title('LR_pred') 
    plt.imshow(lq_pred), plt.axis('off')
    plt.subplot(1,3,3), plt.title('SR_pred') 
    plt.imshow(sr_pred), plt.axis('off')
    plt.show()
登录后复制
       
/home/aistudio
登录后复制
       
<Figure size 864x576 with 3 Axes>
登录后复制
               
<Figure size 864x576 with 3 Axes>
登录后复制
               
<Figure size 864x576 with 3 Axes>
登录后复制
               
<Figure size 864x576 with 3 Axes>
登录后复制
               
<Figure size 864x576 with 3 Axes>
登录后复制
               

以上就是PaddleRS:使用超分模块提高真实的低分辨率无人机影像的分割精度的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号