目录
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
大家好,这里是海浪学长计算机毕设专题,本次分享的课题是
🎯基于机器学习的遥感影像水体提取与变化监测
项目背景
水体是地球表面重要的自然资源,其变化直接影响生态环境和人类生存。遥感技术为水体提取提供了高效的手段,能够在大范围内监测水体的分布与变化。通过分析遥感影像,可以获取水体的空间分布信息,为水资源管理、环境保护和灾害监测提供科学依据。随着深度学习和图像处理技术的发展,遥感影像水体提取的准确性和效率不断提高,推动了遥感应用的广泛发展。
数据集
遥感影像水体图像采集选择了自主拍摄与互联网采集相结合的方式。自主拍摄能够获取特定区域的高分辨率遥感影像,确保数据的真实性和多样性;而互联网采集则提供了丰富的公共数据源,包括卫星影像和无人机拍摄的图像。这种多元化的采集方式为后续的数据处理和分析奠定了坚实的基础。

数据标注是确保数据集质量的重要环节。采用了Labelme等工具对遥感影像进行标注,主要标识出水体区域及其边界。通过精确的标注,可以为模型的训练提供高质量的监督信息。特别注意标注的准确性和一致性,以便后续的模型训练能够有效学习水体的特征,提高提取的准确度。
![]()
在数据集划分与扩展阶段,我们将标注好的数据集进行划分,通常分为训练集、验证集和测试集,以确保模型的泛化能力。为了增强数据集的多样性和鲁棒性,采用了一系列的数据扩展技术,如图像旋转、翻转、缩放及亮度调整等。这些扩展方法不仅增加了样本数量,还提升了模型在不同条件下提取水体的能力,为遥感影像水体提取的研究提供了更为丰富的数据支持。
设计思路
U-Net模型结构为U形对称结构,可分为两部分:左半部分是编码器,负责获取上下文信息,包括两个连续的3×3卷积层,卷积后得到的特征图通过线性整流函数(ReLU)激活,并采用最大池化的下采样方法。每次下采样将特征图的通道数扩增2倍,同时图像尺寸缩小一半;右半部分是对称的解码器,负责精确定位目标。首先对特征图进行反卷积操作,将特征图尺寸扩大2倍,并与对应编码器中的特征图拼接。然后对拼接后的特征图进行两次卷积操作,并利用ReLU激活。最后,输出层使用1×1卷积核对特征图进行卷积,恢复图像尺寸并生成与类别数量相同的维度。在编码器中,特征图通过跳跃连接传递给对应解码器,从而提供不同尺度的特征信息,恢复由于最大池化操作降低分辨率带来的空间信息损失。

U-Net模型主要用于医学影像分割,由于高分辨率遥感影像中水体特征与背景差异明显,使用较少的网络层数也能实现水体的精确提取。为实现对高分辨率影像水体的高精度快速提取,改进U-Net模型以更高效地学习水体特征,使用改进后的VGG16网络作为编码阶段特征提取器。VGG16的网络结构设置合理,已应用于多种遥感影像信息提取场景,更有利于提取遥感影像中轮廓特征较为清晰的目标。VGG16网络有五个下采样层,适用于高分辨率遥感影像水体提取任务。在高分影像覆盖地物多样且与待提取水体差异明显的情况下,随着网络深度增加,特别是在经过四个下采样层后,水体特征图细节信息可能丢失,导致水体提取轮廓不完整。同时,随着网络层数增加,参数量急剧增加,模型训练和预测时间也随之增加。

在对称网络结构基础上,减少一个下采样层以保留低维度特征图的细节信息,实现高分影像水体信息的精确提取,同时减少模型训练和预测时长,提升大面积高分影像的水体提取效率。改进后的主干特征提取网络结构将编码器中的四个下采样层减少到三个。在解码器的特征图与同一级低维特征连接时,加入上一层级的特征图以进行融合,进一步增强低维特征信息,防止细节信息在向后传递过程中丢失。为防止梯度消失或爆炸,对连接后的特征图使用3×3卷积核,并在每次卷积操作后加入批量归一化层,将前面输出的特征分布重新归一化。之后将结果输入ReLU激活函数,经过ReLU后的特征图进行上采样,每次上采样使特征图大小增大2倍,经过四次上采样后恢复到输入的512×512像素大小。由于水体提取为二分类问题,使用1×1卷积层将特征图的数量改为2,并利用sigmoid函数将输出影像中每个像素点对应该点的所属类型值。

数据收集是遥感影像水体提取与变化监测的第一步,涉及到高分辨率遥感影像的获取。可以通过卫星影像、无人机拍摄等方式获取不同时间和不同地点的影像数据。数据收集的多样性有助于模型在各种环境下学习水体的特征,确保模型具有良好的泛化能力。收集到的遥感影像需要进行格式转换、尺寸调整和增强处理,以确保其适合模型输入。通常会对图像进行裁剪、缩放和归一化,使得模型能够更有效地学习。使用标注工具对遥感影像中的水体区域进行标记,包括水体的边界和类别。标注结果将用于后续模型的训练和验证,确保模型能够学习到水体特征。
# 假设使用Labelme进行标注,标注结果将保存为JSON格式
import json
def convert_labelme_to_yolo(labelme_json, output_txt):
with open(labelme_json, 'r') as f:
data = json.load(f)
with open(output_txt, 'w') as out:
for shape in data['shapes']:
class_name = shape['label']
points = shape['points']
# 计算YOLO格式的中心坐标和宽高
# 具体实现省略
out.write(f"{class_name} {center_x} {center_y} {width} {height}\n")
# 示例:将标注结果转换为YOLO格式
convert_labelme_to_yolo('annotation.json', 'output.txt')
选择U-Net作为模型架构,进行水体提取的训练。通过设置合适的超参数,比如学习率、批次大小和训练周期,优化模型的表现。使用数据扩增方法,如旋转、翻转和缩放,增强模型的鲁棒性。模型训练完成后,需要对模型进行评估和测试,以验证其在水体提取与变化监测任务中的性能。使用精确度、召回率和F1分数等指标分析模型的表现,并根据评估结果进行必要的调整和优化。
from utils.metrics import ap_per_class
def evaluate_model(predictions, ground_truths):
stats, ap, ap_class = ap_per_class(predictions, ground_truths)
print(f"Mean Average Precision: {ap.mean()}")
# 示例:评估模型
evaluate_model(predictions, ground_truths)
经过训练和评估后的模型可以部署于实际应用中,实时监测水体变化。当检测到水体变化时,系统可以触发预警机制,进行响应。
import cv2
def monitor_water_changes(video_source):
cap = cv2.VideoCapture(video_source)
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 进行YOLO检测,省略具体实现细节
results = model.predict(frame)
if detected_water_change(results):
send_alert()
# 示例:监测水体变化
monitor_water_changes('water_monitoring_video.mp4')
海浪学长项目示例:






1万+



被折叠的 条评论
为什么被折叠?



