前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
选题指导:
最新最全计算机专业毕设选题精选推荐汇总
大家好,这里是海浪学长毕设专题,本次分享的课题是
🎯基于深度学习的水面漂浮物目标检测算法系统
设计思路
一、课题背景与意义
目前国内对水面漂浮物的处理主要采用人工打捞或者机械清理等方式。传统清理方式需要大量人力,清理效率低下。而且由于水面漂浮物分布范围广,很难被管理人员及时发现并处理,所以亟需研究一种智能化的水面漂浮物检测系统。
二、算法理论原理
2.1 Faster RCNN
两阶段目标检测算法将目标检测分成两步:第一步利用卷积神经网络完成对特征的提取并生成相应的候选区域,第二步完成对候选区域进行分类和位置回归。目前两阶段目标检测算法主要为RCNN系列检测算法,而Faster RCNN是RCNN系列中较为经典的检测网络。
2.2 YOLOv5算法
YOLOv5其图像推理速度最快达0.007s,即每秒可处理140帧,满足对视频流的在线检测,主要分为输入端、主干网络、颈部网络和预测网络。
YOLOv5通过自适应缩放统一输入尺寸,接着将图片划分为S×S网格,然后通过网络中的卷积层、归一化、激活函数的计算获得大小分别为76×76、38×38和19×19的三个尺度特征,然后通过特征融合和通用检测层预测出图像中包含的检测框及类别,最后采用非极大值抑制算法(NMS)去掉冗余框,保留阈值较高检测框作为边界框回归的结果。
相关代码:
target_images = np.random.choice(image_list, size=3, replace=False)
target_bboxes = get_bboxes(target_images)
target_images_resized = resize_images(target_images, mosaic_size)
target_image = target_images_resized[0]
target_bbox = target_bboxes[0]
# 在背景图像上随机选择一个位置进行融合
x, y = random_position(background_image, target_image)
# 将目标图像融合到背景图像上
mosaic_image = mosaic(background_image, target_image, x, y)
# 更新边界框的位置
target_bbox = update_bbox_position(target_bbox, x, y)
# 将融合后的图像和边界框添加到原始图像和边界框列表中
augmented_image = np.concatenate((image, mosaic_image), axis=0)
augmented_bboxes = np.concatenate((bboxes, target_bbox), axis=0)
return augmented_image, augmented_bboxes
三、检测的实现
3.1 数据集
水面图像数据集主要来自摄像头实时采集的数据,不但数据量较少,而且各个漂浮物种类数量参差不齐。由于受到季节影响,夏季水葫芦、蓝藻样本易于获取,但冬季水葫芦、蓝藻样本难以捕捉,导致最终采集到的水葫芦、蓝藻图像仅有300余张,而船舶图像高达1000张。这将会导致不同种类的样本特征差异较大使网络模型出现过拟合现象,进而影响网络模型的检测精度。
为了平衡各个种类的水面漂浮物图像数量以提升模型的训练效果,首先需要扩充水面漂浮物图像数据集。当带标签的数据不足时,可以采用旋转变换、尺度变换、对比度调整等单样本增强的方式来产生大量的新数据,这些数据可以被添加到训练集中,使训练数据更加丰富。
3.2 实验环境搭建
基于深度学习的目标检测网络复杂、参数多,需要训练大量的权重值,故需要性能优良的计算机进行数据运算。因此,在此次环境的搭建过程中,选取内存128GB的计算机,显存8GB的RTX 2060 SUPER显卡,该显卡采用NVIDIA Turing GPU架构,具有集新一代着色器、实时光线追踪技术和AI增强图形特性,并使用Pytorch 1.8.1作为深度学习框架。
3.3 实验及结果分析
针对船舶的检测可以看出,改进后的YOLOv5对于船舶检测有了明显的提升,对于近点的船舶,无论是摄像头丢帧、污渍、角度偏移、船舶相互遮挡都对船舶检测没有太大影响,对于远点的船舶,面对路灯桥墩等遮挡检测效果也很好。
实际检测中主要会出现遮挡、水面波纹干扰、阴雨天气和光照不足等难点,故截取了部分场景中出现类似问题的离线检测图。可以看出对于遮挡物的检测置信度仍能达到0.8以上,并且能够较好的克服水面反光、水纹、下雨时的雨滴等复杂情况。在可视条件较差的情况下能够很好的将检测目标与背景和其在水中的倒影分开。
部分代码如下:
i # 对帧进行预处理,如调整大小、归一化等
preprocessed_frame = preprocess_frame(frame)
# 使用目标检测模型进行预测
predictions = model.predict(np.expand_dims(preprocessed_frame, axis=0))
# 提取预测结果
boxes, scores, class_ids = extract_predictions(predictions, confidence_threshold=0.5)
# 在帧上绘制检测结果
frame = draw_boxes(frame, boxes, scores, class_ids, class_labels)
# 显示帧
cv2.imshow('Floating Object Detection', frame)
# 按下 'q' 键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
实现效果图样例
创作不易,欢迎点赞、关注、收藏。
毕设帮助,疑难解答,欢迎打扰!
最后
本文转载自: https://blog.csdn.net/2301_79555157/article/details/133162053
版权归原作者 Krin_IT 所有, 如有侵权,请联系我们删除。
版权归原作者 Krin_IT 所有, 如有侵权,请联系我们删除。