当前位置:网站首页>提升复杂场景三维重建精度 | 基于PaddleSeg分割无人机遥感影像
提升复杂场景三维重建精度 | 基于PaddleSeg分割无人机遥感影像
2022-07-04 16:30:00 【飞桨PaddlePaddle】
本文已在飞桨公众号发布,查看请戳链接:
提升复杂场景三维重建精度 | 基于PaddleSeg分割无人机遥感影像
项目背景
运动结构恢复(Structure from Motion, SfM)是一种能够从多张图像或视频序列中自动地恢复相机的参数以及场景三维结构的技术。由于成本较低,该方法应用广泛,涉及增强现实、自主导航、运动捕捉、手眼标定、影像视频处理、基于影像的三维建模等多个领域[1]。以城市场景的应用为例,通过以无人机为主要搭载平台,获取大范围的城市航空遥感影像,使用SfM可以恢复城市三维结构,也可以对单个建筑物进行航拍数据采集,根据序列影像恢复其精细的三维模型。尽管现在很多研究为提高SfM精度做了大量的努力,但是大多数SfM方法都受到匹配结果的影响,在复杂的场景中,传统的图像匹配算法如SIFT等容易产生误匹配[2],如何有效地过滤误匹配点是SfM领域的关键问题。
近几年,随着语义分割任务的蓬勃发展,我们可以轻松地使用优秀的语义分割模型为特定的下游任务提供置信度高的语义信息。例如Zhai等人[3]使用语义分割模型得到的信息来优化ORB-SLAM2,使其能在在动态环境中保持稳定和最佳的定位性能。Chen等人[2]则使用语义分割模型提取待匹配图像的语义信息,给特征点匹配提供鲁棒的语义约束,提高特征点匹配的准确率。同时,从语义分割的结果中提取的语义约束,构建等式约束的光束法平差来优化3D结构和相机位姿。实验的结果表明利用语义信息辅助SfM可以在相同的效率下达到更好的重建精度。该论文的思路值得我们学习,同时我也注意到文中使用的模型是DeeplabV3+。在今年年初我所看到的一个视频中,在cityscapes-C上同时运行SegFormer和DeeplabV3+,视频中的SegFormer的鲁棒性比DeeplabV3+好很多,于是,我打算使用飞桨图像分割开发套件PaddleSeg中提供的SegFormer模型对论文的数据集进行训练,为SfM提供更精确和稳定的语义约束。
项目介绍
SegFormer模型介绍
PaddleSeg提供了基于飞桨实现的SegFormer模型[4],该模型将Transformer与轻量级多层感知 (MLP) 解码器相结合,表现SOTA,性能优于SETR、Auto-Deeplab和OCRNet等网络。此外,PaddleSeg提供了SegFormer-B0到 SegFormer-B5 一系列模型,以SegFormer-B4为例,该模型有64M参数,在ADE20K数据集上实现了50.3%的mIoU,比之前的最佳方法的参数小5倍,精度提高了2.2%。
关于模型的详细介绍请参考:
- 论文原文地址:
https://arxiv.org/abs/2105.15203
- Github代码地址:
https://github.com/PaddlePaddle/PaddleSeg/tree/release/2.5/configs/segformer
- Segformer解读AI Studio项目地址:
https://aistudio.baidu.com/aistudio/projectdetail/3728553
数据集介绍
本项目使用的数据集为UDD6数据集,是北京大学图形与交互实验室使用DJI-Phantom 4无人机在中国4个城市的60-100m之间高度采集并标注的,面向航拍场景理解、重建的数据集。数据的分辨率为4k(4096*2160)或12M(4000*3000),包含了各种城市场景。该数据集含有的类别如下图所示。
UDD6共包含有建筑外立面、道路、植被、汽车、建筑屋顶和其他6类,数据的示例如下图所示。
UDD6数据集有训练集160张和验证集45张,没有测试集。各个作为基准的分割模型对UDD6数据的验证数据集测试效果如下图所示,可以看到效果最好的是DeeplabV3+,mIoU为73.18%,模型的size为731M。
UDD6数据集地址:
https://github.com/MarcWong/UDD
基于PaddleSeg
使用****SegFormer分割航空遥感影像
下面我们开始在AI Studio平台上基于PaddleSeg套件使用SegFormer模型分割航空遥感影像。需要注意的是,AI Studio上是Notebook的环境,所以在运行cd命令的时候前面需要加上百分号“%”,运行其它shell命令的时候,前面需要加上叹号“!”。
点击阅读原文获得项目链接
欢迎大家fork&star
https://aistudio.baidu.com/aistudio/projectdetail/3565870
第一步 下载PaddleSeg套件
用户可以从Github下载PaddleSeg,为了便于国内用户下载,飞桨也提供了Gitee下载方式。
!git clone https://gitee.com/paddlepaddle/PaddleSeg
第二步 准备UDD6数据集
数据集已经挂载在项目上,通过以下命令进行数据集解压。
!mkdir work/UDD6
!unzip -oq data/data75675/UDD6.zip -d work/UDD6/
同时,由于UDD6数据中图像大小为 (4096, 2160) 所以训练之前先进行crop处理成(1024, 1024)小块的图像以减少IO的占用。切割的代码process_data.py的代码在work文件夹下,可以指定切割的大小、步长以及线程池的数量以加快效率,运行以下命令处理。
%cd work/
!python process_data.py --tag val #处理验证集
!python process_data.py --tag train #处理训练集
第三步 安装依赖项
由于我们在AI Studio中已经安装了paddlepaddle-gpu的库,所以接下来只需要运行以下命令安装和数据处理相关的依赖项即可。
%cd /home/aistudio/PaddleSeg
!pip install -r requirements.txt
第四步 数据集列表生成
由于PaddleSeg套件是根据文件名列表.txt文件来进行数据集的定义,所以需要生成训练集和验证集的列表文件。
套件中包含划分数据集生成文件名列表的代码。该代码使用帮助文档网址:
https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.5/docs/data/marker/marker_cn.md
运行以下命令即可。
# 训练数据集txt生成
!python tools/split_dataset_list.py \
../work/UDD6 train_sub train_labels_sub \
--split 1.0 0.0 0.0 \
--format JPG png \
--label_class Other Facade Road Vegetation Vehicle Roof
!mv ../work/UDD6/train.txt ../work/UDD6/train_true.txt # 修改文件名
# 验证数据集txt生成
!python tools/split_dataset_list.py \
../work/UDD6 val_sub val_labels_sub \
--split 0.0 1.0 0.0 \
--format JPG png \
--label_class Other Facade Road Vegetation Vehicle Roof
!rm ../work/UDD6/train.txt #删除第二次运行生成的train.txt
!mv ../work/UDD6/train_true.txt ../work/UDD6/train.txt # 将文件名改回来
第五步 环境配置和YML文件准备
运行以下代码,指定一张可用的显卡。
!export CUDA_VISIBLE_DEVICES=0
我们使用的是SegFormer-B3这个模型,配置文件segformer_b3_UDD.yml在work文件夹下,可以修改batch_size、iters、learning_rate等超参数,运行以下命令将配置文件复制到configs文件夹中。
!cp ../work/segformer_b3_UDD.yml configs/
第六步 开始训练
执行如下命令调用train.py脚本启动训练,在训练过程中会将最佳模型保存在output/best_model文件夹下。
!python train.py \
--config configs/segformer_b3_UDD.yml \
--do_eval \
--use_vdl \
--save_interval 500 \
--save_dir output
在训练过程中,验证集的mIoU指标变化情况如下图所示。
验证集的Acc指标变化情况如下图所示。
第七步 结果预测与评估
执行以下命令调用val.py,使用训练出来的权重对验证集进行预测和评估。
!python val.py \
--config configs/segformer_b3_UDD.yml \
--model_path ./output/best_model/model.pdparams
预测的结果在UDD6数据集中mIOU达到74.50% ,相较于原论文使用DeepLabV3+的mIOU为73.18%,高1.32%。
同时,可以使用训练好的权重对我们自己的航拍影像进行预测,执行如下命令即可。其中image_path是待预测图像所在文件夹路径。
!python predict.py \
--config ../work/segformer_b3_UDD.yml \
--model_path ./output/best_model/model.pdparams \
--image_path ../work/demo \
--save_dir ../work/result \
--is_slide \
--crop_size 1024 1024 \
--stride 512 512
参考文献
[1] Wei Y M , Kang L , Yang B , et al. Applications of structure from motion: a survey[J]. 浙江大学学报:C卷英文版, 2013, 14(7):9.
[2] Yu C , Yao W , Peng L , et al. Large-Scale Structure from Motion with Semantic Constraints of Aerial Images[J]. Springer, Cham, 2018.
[3]Zhai R, Yuan Y. A Method of Vision Aided GNSS Positioning Using Semantic Information in Complex Urban Environment [J]. Remote Sens. 2022, 14, 869.
[4] Xie E , Wang W , Yu Z , et al. SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers[C]// 2021.
关注【飞桨PaddlePaddle】公众号
获取更多技术内容~
边栏推荐
- regular expression
- 设置窗体透明 隐藏任务栏 与全屏显示
- 大厂面试总结大全二
- 超标量处理器设计 姚永斌 第5章 指令集体系 摘录
- Dynamic programming stock problem comparison
- The block:usdd has strong growth momentum
- 国产数据库TiDB初体验:简单易用,快速上手
- ISO27001认证办理流程及2022年补贴政策汇总
- About the pit of firewall opening 8848 when Nacos is started
- Rainfall warning broadcast automatic data platform bwii broadcast warning monitor
猜你喜欢
Rainfall warning broadcast automatic data platform bwii broadcast warning monitor
"In Vietnam, money is like lying on the street"
补能的争议路线:快充会走向大一统吗?
【HCIA持续更新】广域网技术
【HCIA持续更新】WLAN工作流程概述
People in the workplace with a miserable expression
CocosCreator事件派發使用
机器学习概念漂移检测方法(Aporia)
“在越南,钱就像躺在街上”
Cann operator: using iterators to efficiently realize tensor data cutting and blocking processing
随机推荐
Recast of recastnavigation
mysql5.7安装教程图文详解
比李嘉诚还有钱的币圈大佬,刚在沙特买了楼
[HCIA continuous update] network management and operation and maintenance
超标量处理器设计 姚永斌 第6章 指令解码 摘录
项目通用环境使用说明
I wrote a learning and practice tutorial for beginners!
【Hot100】32. 最长有效括号
中断的顶半部和底半部介绍以及实现方式(tasklet 和 工作队列)
[daily question] 556 Next bigger element III
五千字讲清楚团队自组织建设 | Liga 妙谈
[unity ugui] scrollrect dynamically scales the grid size and automatically locates the middle grid
大厂面试总结大全二
Talk about seven ways to realize asynchronous programming
内核中时间相关的知识介绍
为啥有些线上演唱会总是怪怪的?
数学分析_笔记_第7章:多元函数的微分学
用于图数据库的开源 PostgreSQL 扩展 AGE被宣布为 Apache 软件基金会顶级项目
General environmental instructions for the project
Superscalar processor design yaoyongbin Chapter 7 register rename excerpt