目录

前言

设计思路

一、课题背景与意义

二、算法理论原理

2.1 卷积神经网络

2.2 目标检测算法

三、检测的实现

3.1 数据集

3.2 实验环境搭建

3.3 实验及结果分析

最后


前言

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

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

         选题指导:

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

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

        🎯基于深度学习的吸烟动作识别算法研究

设计思路

一、课题背景与意义

        随着人们对健康的重视程度不断提高,吸烟有害健康的观念深入人心。公共场所禁烟政策在全球范围内广泛推行,但在实际执行中,监管难度较大,需要借助更有效的技术手段来辅助禁烟工作,香烟吸烟动作识别算法应运而生,为公共场所禁烟提供技术支持,以减少吸烟对公众健康的危害。吸烟不仅危害健康,在一些特定场所还存在严重的安全隐患,如加油站、油田、矿场、仓库等场所,一旦发生火灾,后果不堪设想。据统计,全年火灾事故中有相当比例是由抽烟引起的,因此需要一种能够实时监测和预警吸烟行为的技术,以预防火灾等安全事故的发生。通过大量的数据训练和复杂的神经网络模型,计算机能够自动学习和识别各种模式,从而实现对吸烟动作等复杂行为的准确识别,使得开发高精度的香烟吸烟动作识别算法成为可能。

二、算法理论原理

2.1 卷积神经网络

        在深度学习里,卷积神经网络 CNN 是特殊的人工神经网络 ANN,常用于处理网络模式数据,是数学方法建立的深度学习模型,由卷积层、池化层和全连接层构成。卷积层提取输入图像特征,池化层下采样和压缩特征图,全连接层将特征图映射到输出类别。

        卷积层是 CNN 基本层次,包括卷积运算和激活函数。卷积是 CNN 关键线性运算,用卷积核对输入张量操作,内核元素与输入元素逐元素乘积并求和得输出张量相应位置值即特征图,其含输入张量在该位置的特征信息。多个卷积操作可生成不同特征图捕捉输入张量多个特征,不同大小和数量的内核可生成任意数量特征图,作为不同特征提取器。

毕业设计-基于深度学习的吸烟动作识别算法研究 卷积神经网络 机器学习 人工智能

        池化层通过下采样降低特征图平面维度,增强小偏移量和失真的平移不变性并减少可学习参数,常见的有最大池化和平均池化。最大池化是最常用的方式,只保留输入特征图每个补丁的最大值,一般用 2×2 过滤器、步幅为 2,可使平面维度减半、深度维度不变,能降低计算复杂度和过拟合风险。

毕业设计-基于深度学习的吸烟动作识别算法研究 卷积神经网络 机器学习 人工智能

        在 CNN 中,卷积层与池化层提取特征后,这些特征一般要连接一个或多个全连接层来处理,全连接层在神经网络里起着连接输入和输出层的关键作用。其神经元与前一层所有神经元都相连,每个神经元的输出会对下一层所有神经元产生影响。全连接层把输入的特征图和权重矩阵进行矩阵乘法运算,并加上偏置项,再将结果输入激活函数进行非线性转换后输出到下一层。在训练阶段,全连接层可借助反向传播算法对权重和偏置项加以调整,让输出结果更贴近实际值。而且在每个全连接层的输出之后,通常会添加一个如 ReLU 函数之类的非线性函数,以此增强网络的表达能力,从而使整个 CNN 模型能够更精准地处理和分析数据。 

卷积神经网络毕业设计-基于深度学习的吸烟动作识别算法研究 卷积神经网络 机器学习 人工智能

        在神经网络中,激活函数也叫 “传递函数”,输出值范围受限的激活函数称为 “挤压函数”,多数激活函数是非线性的,可视为 “非线性”。选择合适的激活函数对提升神经网络能力和性能至关重要,不同层可能需不同激活函数以更好拟合输入数据和有效预测。激活函数是神经网络节点的内部或后续处理,同一层节点通常用相同类型。网络有输入层(接收原始输入)、隐藏层(接收和输出)、输出层(进行预测)三种类型,隐藏层一般用同一种激活函数,输出层所用激活函数因预测类型而定。激活函数一般可微,因神经网络用反向传播算法训练,需计算误差对参数的导数来更新权重,使网络预测更适应训练数据。 

卷积神经网络,激活函数,毕业设计-基于深度学习的吸烟动作识别算法研究 卷积神经网络 机器学习 人工智能

2.2 目标检测算法

        为了更好地保留原始图像的信息,在神经网络中经常使用大尺度的特征图。这些特征图具有较高的通道数和宽高尺度,以提供更多的特征信息。然而,这也会带来许多冗余的特征,它们并不总是对模型训练和预测有用的,反而会导致计算资源浪费和模型训练受到影响。在驾驶员吸烟检测中,输入的图像通常具有大背景和小目标的特点。这种情况下,图像被缩小或放大时,神经网络中各个特征图的尺度也会相应地被缩小或放大, 因此会出现许多冗余特征的情况。为了解决这个问题,需要使用一些方法来抑制冗余特征的表达,YOLOX网络的基础上,给YOLOX骨干网络中加入卷积注意力机制构建了一个全新的基于卷积注意力机制的YOLOX算法, 简称YCAM,使检测网络将更多的注意力分配到需要的地方。

目标检测算法,毕业设计-基于深度学习的吸烟动作识别算法研究 卷积神经网络 机器学习 人工智能

        在特征提取阶段,YOLOX算法的骨干网络采用了由1×1和3×3卷积构成的残差块,并结合CSPNet设计来优化残差块的堆叠,分为直接连接的Part1和堆叠残差块的Part2,以减少计算量提升性能。网络末端加入空间金字塔池化(SPP)结构,通过不同尺度的最大池化增强对多尺度物体的感知。引入卷积注意力机制CBAM,包括通道注意力模块CAM和空间注意力模块SAM,使得网络能够更好地聚焦于小目标的关键特征,避免漏检,并通过全局平均池化将特征转换为注意力权重,与原始特征结合,提高对小目标特征的捕获能力。

目标检测算法,毕业设计-基于深度学习的吸烟动作识别算法研究 卷积神经网络 机器学习 人工智能

相关代码(示例):

class ConvBlock(nn.Module):
    def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0):
        super(ConvBlock, self).__init__()
        self.conv = nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding)
        self.bn = nn.BatchNorm2d(out_channels)
        self.silu = nn.SiLU()

    def forward(self, x):
        return self.silu(self.bn(self.conv(x)))

class CSPBlock(nn.Module):
    def __init__(self, in_channels, out_channels):
        super(CSPBlock, self).__init__()
        self.part1 = nn.Sequential(
            ConvBlock(in_channels, out_channels // 2, 1),
            ConvBlock(out_channels // 2, out_channels, 3, padding=1)
        )
        self.part2 = nn.Sequential(
            ConvBlock(in_channels, out_channels // 2, 1),
            ConvBlock(out_channels // 2, out_channels // 2, 3, padding=1),
            ConvBlock(out_channels // 2, out_channels, 1)
        )

    def forward(self, x):
        part1 = self.part1(x)
        part2 = self.part2(x)
        return torch.cat((part1, part2), dim=1)

三、检测的实现

3.1 数据集

        在制作数据集时,需要采集包含吸烟与未吸烟特征的人物图像,。通过在对工作人员视频记录,并使用OpenCV将视频帧转换为图片。最终,对这些图片进行分类,以扩充包含吸烟与未吸烟特征的人物图像数据集。

        利用OpenCV工具将视频帧转换为图片,并通过LabelImg等图像标注工具对这些图片进行手动标注。标注过程中,操作者会在图像中绘制出目标对象的边界框,通常用绿色矩形框表示,并对选定的区域赋予相应的标签,如“吸烟”或“未吸烟”。标注完成后,LabelImg会生成包含标注信息的XML文件,这些文件随后将用于训练深度学习模型,以识别和区分吸烟与未吸烟的行为。通过这种方式,数据集得到了有效扩充,为模型的训练提供了丰富的监督信息。

目标检测算法,毕业设计-基于深度学习的吸烟动作识别算法研究 卷积神经网络 机器学习 人工智能

        数据集扩充是提升机器学习模型性能的关键策略,包括数据增强、合成数据生成、迁移学习、重采样、数据融合、特征工程、标签传播、利用外部数据源、人工标注和使用模拟环境等多种方法,每种方法通过不同的技术手段增加数据的多样性和数量,以解决过拟合、类别不平衡等问题,从而提高模型的泛化能力和鲁棒性。 

3.2 实验环境搭建

       深度学习框架为构建、训练、优化和推理深度神经网络提供了必要的基础工具,使开发者能够更高效地进行相关工作。这些框架不仅简化了复杂的计算过程,还提供了丰富的功能和灵活的接口,帮助开发者快速实现各种深度学习算法。在众多深度学习框架中,PyTorch因其高度的扩展性和可移植性而受到广泛欢迎,尤其在学术研究和工业应用中表现出色。它的动态计算图特性使得模型的调试和修改变得更加直观和方便,同时,PyTorch拥有一个活跃的开发者社区,提供了大量的资源和支持,极大地推动了深度学习的研究和应用。
 

3.3 实验及结果分析

        模型训练过程中的超参数设置、损失函数选择、优化器选择以及训练过程,并附上相应的Python代码示例。这些代码示例通常会在使用深度学习框架如TensorFlow或PyTorch时使用。

        超参数是模型训练前需要预先设定的参数,它们影响模型的训练过程和最终性能。

  • 学习率(Learning Rate):决定了模型权重更新的幅度。
  • 批次大小(Batch Size):一次训练所使用的样本数量。
  • 迭代次数(Epochs):整个数据集被训练的次数。
# 超参数示例
learning_rate = 0.001  # 常见的学习率起点
batch_size = 32        # 根据显存大小调整
epochs = 50            # 训练的轮数

损失函数:

        损失函数用于量化模型预测与真实值之间的差异。

  • 交叉熵损失(Cross-Entropy Loss):用于分类问题。
  • 定位损失(Localization Loss):如平滑L1损失,用于回归问题,如边界框坐标的预测。
import tensorflow as tf

# 交叉熵损失函数
cross_entropy_loss = tf.keras.losses.CategoricalCrossentropy()

# 定位损失函数,例如平滑L1损失
huber_loss = tf.keras.losses.Huber(delta=1.0)

优化器:

        优化器用于调整模型权重以最小化损失函数。

  • SGD(Stochastic Gradient Descent):随机梯度下降。
  • Adam:结合了动量和自适应学习率的方法。
# 优化器示例
optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate)
# 或者使用SGD
# optimizer = tf.keras.optimizers.SGD(learning_rate=learning_rate)

训练过程涉及前向传播和反向传播。

# 假设 model 是已经构建好的模型,train_dataset 是已经准备好的训练数据集
for epoch in range(epochs):
    for batch_images, batch_labels in train_dataset:
        # 前向传播
        with tf.GradientTape() as tape:
            predictions = model(batch_images, training=True)
            loss = cross_entropy_loss(batch_labels, predictions)
            # 如果有定位损失,可以加上
            # loss += huber_loss(batch_labels, predictions)

        # 反向传播
        gradients = tape.gradient(loss, model.trainable_variables)
        optimizer.apply_gradients(zip(gradients, model.trainable_variables))
        
    # 每个epoch后可以打印出损失,进行验证等
    print(f'Epoch {epoch + 1}, Loss: {loss.numpy()}')

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

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

最后

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐