目录
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
选题指导:
大家好,这里是海浪学长毕设专题,本次分享的课题是
🎯基于深度学习的近岸SAR舰船目标检测系统
设计思路
一、课题背景与意义
由于类似舰船的陆地目标的干扰和舰船的紧密排列,基于合成孔径雷达(SAR)图像的近岸舰船检测会出现较多漏检和误检。合成孔径雷达(SAR)是一种主动式微波成像传感器,它可以不受天气的影响,不分昼夜,同时可以获得更高质量、更高分辨率的大范围远距离图像。因此,利用SAR图像进行舰船检测已成为国内外研究的热点。
二、算法理论原理
2.1 注意力机制
计算机视觉的注意力机制的思想是通过寻找现有数据间的关联性突出某些重要特征,是一个在[0,1]区间连续分布的问题,属于软注意力。软注意力可以通过神经网络学习,经过前向传播和后向传播来得到注意力的权重。压缩激发网络(SENet)关注通道之间的关系,希望网络能够自发学习到特征图不同通道的重要程度。
任意特征图X经过任意特征提取操作Ftr后获得特征图U,其中H、W、C分别为特征图的高度、宽度、通道数。SENet通过对特征图U进行压缩(Squeeze)和激发(Excitation)操作,即图中Fsq和Fex,得到1个一维向量,向量中的每个参数作为每个通道的评分,然后在通道上施加对应的权重,得到处理后的结果。其中压缩操作对每个通道做平均池化,得到各个通道的统计数值;激发操作学习通道的相关程度,并根据相关程度调整权重。卷积块注意力模块(CBAM)结合了空间注意力和通道注意力。
输入特征图(Input Feature)经过通道CAM和空间注意力机制模块(SAM)获得提炼后特征图(Refined Feature)。SAM,和通道注意力类似,空间注意力可以学习特征图不同空间的重要程度。
2.2 YOLOv5算法
YOLO是一种基于深度学习神经网络的目标检测算法,属于一阶段检测网络,相比于以SSD为代表的双阶段检测网络,拥有运行速度很快的特点,适用于实时检测。CONV模块是YOLOv5中最基础的模块,由卷积模块、BN模块、Leaky ReLU激活函数组成。卷积模块是卷积神经网络的基础、Leaky ReLU函数,可以防止梯度饱和的问题,同时有效抑制梯度消失现象。
路径聚合网络(Path Aggregation Network,PANet,PANet)提出的目的是在特征图金字塔网络(Feature Pyramid Network,FPN)的基础上进一步促进不同层之间特征信息的流动。PANet在自顶往下的网络后,又增加了一个自底往上的金字塔结构。
相关代码:
def forward(self, x):
if self.training:
# 计算当前批次的均值和方差
mean = torch.mean(x, dim=0)
var = torch.var(x, dim=0)
# 更新全局均值和方差的移动平均值
self.running_mean = 0.9 * self.running_mean + 0.1 * mean
self.running_var = 0.9 * self.running_var + 0.1 * var
# 标准化输入
x_normalized = (x - mean) / torch.sqrt(var + self.eps)
# 缩放和平移
out = self.gamma * x_normalized + self.beta
else:
# 使用全局均值和方差进行标准化
x_normalized = (x - self.running_mean) / torch.sqrt(self.running_var + self.eps)
# 缩放和平移
out = self.gamma * x_normalized + self.beta
三、检测的实现
3.1 数据集
本次实验计划使用公开舰船检测数据集。该数据集包含了多种不同的成像条件。图像主要来源于RadarSat-2、TerraSAR-X和Sentinel-1卫星传感器,一共4种极化模式,分辨率的范围为115m。通过位深度转换和对比度调整,将原数据调整为更适合用于网络训练和人工评估的图像。之后选取包含舰船目标的图像区域,按照所构建的神经网络要求,将图像进行切片为适合网络进行训练的图像尺寸,完成训练集的制作。
数据集切片数量为1386张。将1386张图片分为两类,包含陆地的数据、不包含陆地的数据,其中包含陆地的切片数量为304张,不包含陆地的切片数量为1082张。由于数据集数量较少,按照6∶2∶2的比例分别将上述两类数据分为训练集、验证集、测试集,并在测试集中去除不包含陆地的目标,着重分析网络对于近岸目标的检测性能。
3.2 实验及结果分析
均值平均精度(Mean Average Precision,mAP),用以衡量网络性能。计算时,置信度阈值设置为0.001,NMS置信度设置为0.5;检测时,置信度阈值为0.5,NMS置信度为0.5。
为了进一步提高准确率,在YOLOv5网络结构中加入注意力机制模块,并重复实验。分别加入模块SELayer和CBAM,数量为1,位置为网络第8层,处理批次大小设置为8。采用随机梯度下降作为梯度下降算法,初始学习率为0.01,周期学习率为0.2,NMS阈值为0.5。
由于增加了模块,模型参数增加,导致训练速度减慢,因此需要增加迭代次数,迭代次数设置为400。加入CAM后精度-召回率曲线如图所示。加入SELayer的网络,mAP值有小幅度提升,且准确率下降到一定程度后没有继续下降,证明SELayer模块在减少检测网络错检的效果上较为突出;加入CBAM模块的网络,mAP值有更明显的提升,证明了注意力机制模块在提升检测网络性能方面的作用
相关代码如下:
def __init__(self, num_classes):
super(ShipDetectionModel, self).__init__()
# Backbone
self.backbone = resnet.resnet50(pretrained=True)
# TODO: Add additional layers/modules for SAR-specific processing
# Head
self.head = nn.Linear(2048, num_classes)
def forward(self, x):
# Backbone
x = self.backbone.conv1(x)
x = self.backbone.bn1(x)
x = self.backbone.relu(x)
x = self.backbone.maxpool(x)
x = self.backbone.layer1(x)
x = self.backbone.layer2(x)
x = self.backbone.layer3(x)
x = self.backbone.layer4(x)
x = self.backbone.avgpool(x)
x = torch.flatten(x, 1)
# TODO: Implement SAR-specific processing
# Head
out = self.head(x)
return out
# 创建近岸SAR舰船目标检测模型
model = ShipDetectionModel(num_classes=2)
# 加载预训练权重
pretrained_weights = 'path/to/your/pretrained_weights.pth'
model.load_state_dict(torch.load(pretrained_weights))
# 将模型移至GPU
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model.to(device)
实现效果图样例
创作不易,欢迎点赞、关注、收藏。
毕设帮助,疑难解答,欢迎打扰!