【毕业设计选题】基于深度学习的建筑工人着装智能检测系统 YOLO python 卷积神经网络

目录

前言

设计思路

一、课题背景与意义

二、算法理论原理

三、建筑工人着装检测的实现

3.1 数据集

3.2 CBMA注意力机制

3.2 级联卷积神经网络

最后


前言

       📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

        🚀对毕设有任何疑问都可以问学长哦!

         选题指导:

        最新最全计算机专业毕设选题精选推荐汇总

        大家好,这里是海浪学长毕设专题,本次分享的课题是

        🎯基于深度学习的建筑工人着装智能检测系统

设计思路

一、课题背景与意义

        在建筑工地中,正确的着装对于工人的安全至关重要。合适的工作装备可以保护工人免受潜在的伤害和危险。因此,开发一种智能系统来检测建筑工人的着装是否符合安全要求可以减少事故和伤害的发生。通过使用智能检测系统,可以及时发现工人着装不当的情况,提醒他们进行必要的调整,保障工人的安全。

二、算法理论原理

        数据预处理在机器学习中是一项非常重要的步骤。数据集可能存在多种问题,如缺失值、异常值、噪声和重复值等,这些问题可能会对模型的训练产生严重影响。因此,需要对数据进行预处理操作。

根据该数据库的实际情况,数据预处理操作包括以下几个步骤:

①对数据库进行标注

for image_name in images:
        image_path = os.path.join(database_path, image_name)
        # 进行标注操作,将标注结果保存到注释文件中
        annotation = annotate_image(image_path)
        annotation_file.write(annotation + '\n')

②对标注进行检查和评估,以确保标注的准确性

 for annotation in annotations:
        check_and_evaluate_annotation(annotation)

③删除数据库中模糊的图像,以确保数据的质量;

for image_name in images:
        image_path = os.path.join(database_path, image_name)
        image = cv2.imread(image_path)
        # 进行模糊检测操作
        if is_blurry(image):
            os.remove(image_path)

最后,利用Mosaic技术进行数据增广,该技术可以增加目标检测所需的数据量,并增加检测对象的背景信息,从而降低将背景误判为检测目标的几率。

augmented_image = mosaic_augmentation(image)
        augmented_image_path = os.path.join(output_path, image_name)
        cv2.imwrite(augmented_image_path, augmented_image)

        建筑工地的监控设备通常安装在较高的位置,导致画面中的目标(工人)较小。这会导致主流的目标检测算法在检测小目标时存在漏检或置信度低的问题。为了解决这个问题,学长提出对YOLOv5的Backbone和Head进行了针对性的设计和修改。

毕业设计-建筑工人着装智能识别系统-卷积神经网络-YOLOv5-深度学习

        Backbone是一种卷积神经网络,用于在不同图像细粒度上聚合并形成图像特征。原始模型在Head层只设置了三个尺寸的检测特征图,分别为80×80、40×40和20×20,用于检测大小在8×8、16×16和32×32以上的目标。较大的特征图尺寸可以减少特征丢失,更有利于检测小目标。因此,在Head层增加了一个160×160的检测特征图,用于检测更小尺寸(4×4)的目标。

  model = models.Model(inputs=backbone.input, outputs=[detection_output_80, detection_output_40, detection_output_20, detection_output_160])
    
    return model

input_shape = (160, 160, 3)
num_classes = 1

        Head主要负责对图像特征进行预测,生成边界框并预测类别。YOLOv5中的Backbone和Head使用的是C3模块,它包含了3个标准卷积层和多个Bottleneck模块。然而,由于C3模块经历的卷积层较多,可能会丢失小目标的特征。因此,将C3模块改为BottleneckCSP模块,并在残差输出后增加了Conv模块。此外,标准卷积模块中的激活函数为SiLU,这增加了模型的平滑性和非单调性。

        选择合适的损失函数对模型的收敛效果有很大影响,可以获得更好的识别效果。采用了GIoU_Loss作为损失函数,该函数引入了更准确的边界框相交度量方式,有助于解决边界框不重合的问题。

毕业设计-建筑工人着装智能识别系统-卷积神经网络-YOLOv5-深度学习

三、建筑工人着装检测的实现

3.1 数据集

        由于没有公开数据集,本项目通过现场采集和网络爬虫,选取并标记了约3000张图片。这些图片可以分为两类:一类是图片拍摄范围广,工人多且较小;另一类是拍摄范围小,工人较少。工人着装主要分为四种情况:短袖(short_sleeve),长袖(long_sleeve),短裤(shorts)和长裤(trousers)。

3.2 CBMA注意力机制

        验证了不同训练批次(epoch)下模型性能的表现。使用精确率(Precision)、召回率(Recall)和mAP@.5三个指标来衡量模型的性能,并寻找最佳的epoch。在控制其他参数不变的情况下,我们将epoch分别设为100、150、300和600进行实验。在相同参数下,当epoch设置为100时,各指标达到最优。因此,在实验中我们将epoch都设置为100。

毕业设计-建筑工人着装智能识别系统-卷积神经网络-YOLOv5-深度学习

        我们验证了不同图像分辨率对模型性能的影响,结果如下表所示。可以观察到,当分辨率较高时,模型的精确度较高,但预测时间也较长。综合考虑模型的精确度和速度,将训练(测试)图像的分辨率设置为640×640(416×416)。

毕业设计-建筑工人着装智能识别系统-卷积神经网络-YOLOv5-深度学习

        我们验证了不同损失函数对模型性能的影响,CIOU_Loss在精确率方面略低于GIOU_Loss,但在其他指标上都优于GIOU_Loss。

毕业设计-建筑工人着装智能识别系统-卷积神经网络-YOLOv5-深度学习

3.2 级联卷积神经网络

        损失函数迅速下降并逐渐收敛,性能指标在前100次迭代之前达到最高水平。

毕业设计-建筑工人着装智能识别系统-卷积神经网络-YOLOv5-深度学习

毕业设计-建筑工人着装智能识别系统-卷积神经网络-YOLOv5-深度学习

        P-R曲线下的面积被称为AP(Average Precision)平均精度。可以看出,短裤的识别精度和召回率最好,达到了0.88;而长袖的识别精度和召回率最差,仅为0.66。这可能是因为长袖样本的数量较少,导致模型学习不充分。

毕业设计-建筑工人着装智能识别系统-卷积神经网络-YOLOv5-深度学习

        为了验证方法的有效性,与YOLOv5进行了比较。从表可以看出,其在三个关键指标上均优于YOLOv5:Precision提升了0.9%,Recall提升了3.2%,mAP@0.5提升了0.4%。

毕业设计-建筑工人着装智能识别系统-卷积神经网络-YOLOv5-深度学习

部分代码如下:

self.conv1 = Conv(in_channels, 256, kernel_size=3, stride=1, padding=1)
        self.conv2 = Conv(256, (num_classes + 5) * num_anchors, kernel_size=1, stride=1, padding=0)
        self.detect = Detect(num_classes, num_anchors)
    
    def forward(self, x):
        x = self.conv1(x)
        x = self.conv2(x)
        
        x = x.permute(0, 2, 3, 1)
        
        pred = self.detect(x)
        
        return pred

# 创建头部模型实例
head = YOLOv5Head(in_channels=1024, num_classes=10, num_anchors=3)

# 生成一个随机输入张量
input_tensor = torch.randn(1, 1024, 7, 7)

# 前向传播得到预测结果
predictions = head(input_tensor)

创作不易,欢迎点赞、关注、收藏。

毕设帮助,疑难解答,欢迎打扰!

最后

  • 19
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值