目录

前言

课题背景和意义

实现技术思路

一、算法理论基础

1.1 卷积神经网络

1.2 Transformer 网 络

1.3目标检测算法

二、 数据集

2.1 数据集

2.2 数据扩充

三、实验及结果分析

3.1 实验环境搭建

3.2 模型训练

最后


前言

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

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

    选题指导:

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

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

       🎯基于深度学习的黑夜人脸识别算法系统

课题背景和意义

       随着人工智能技术的深入发展,人脸识别已成为身份验证、安全监控等领域的核心技术。然而,在光线不足的黑夜环境下,传统的人脸识别算法往往难以准确识别目标。因此,研究一种基于深度学习的黑夜人脸识别算法系统具有重要的现实意义。该系统能够克服光线限制,实现在低光照条件下的高效、准确的人脸识别,对于提升安防系统的智能化水平、保障社会公共安全具有重要作用。同时,该课题的研究也能推动深度学习在计算机视觉领域的应用发展,为相关领域的学术研究和技术创新提供有益借鉴。

实现技术思路

一、算法理论基础

1.1 卷积神经网络

       卷积神经网络(CNN)是一种深度神经网络,专门用于图像和视频识别任务。该网络由多个层次组成,包括卷积层、池化层、激活函数和全连接层,它们共同作用于输入图像,学习图像的特征并实现图像分类。卷积层通过卷积运算提取图像中的特征,利用一组可学习的卷积核进行操作。激活函数增加提取出来的特征的非线性能力。池化层的作用是减少特征图的空间维度,从而减少网络中的参数和计算量。最后,池化层的输出被展平为一维向量,并传输至全连接层,全连接层利用学习到的特征完成最终的图像分类任务。

毕业设计:基于深度学习的黑夜人脸识别算法系统

       卷积是一种数学运算,在计算机视觉和图像处理领域广泛应用。它可以从图像中提取特征并以矩阵的形式表示。卷积的基本概念是利用卷积核对输入图像进行处理,检测其中的特定模式。这些模式常常代表着与某项任务相关的独特特征,例如在图像分类中可能包括边缘、角落、纹理和物体等。在输入图像上使用卷积核进行滑动处理,再计算卷积核与图像对应值的乘积,随后将这些乘积结果相加并存储为特征映射的输出。对输入特征图的每个位置都重复上述操作过程,最终生成一个输出特征图,代表图像中存在的特定模式。

毕业设计:基于深度学习的黑夜人脸识别算法系统

       根据二维卷积的基本运算原理,可以将其扩展至高维卷积(即维度大于等于3)中。在高维卷积中,需要遵循一个重要的规则,即卷积核与要处理的图像具有相同数量的通道。此外,卷积核的数量也决定了输出特征图的通道数量。如果要在同一张图像上使用多个卷积核,则需要分别对每个卷积核进行卷积运算,并将输出结果依次堆叠。最后,这些结果将被组合成一个整体。

毕业设计:基于深度学习的黑夜人脸识别算法系统

1.2 Transformer 网 络

       Transformer在NLP领域取得了巨大成功,也引起了视觉图像领域专家的关注。尽管在自然语言处理领域取得了巨大成功,但Transformer模型在图像处理领域面临一些挑战。如果使用像素值序列作为Transformer模型的输入,将会遇到三个问题。首先,模型无法捕获像素值之间的空间关系,而这种空间关系在图像领域非常重要。其次,由于像素值序列较长,导致Transformer模型的训练和运行成本非常高。最后,因为Transformer模型的决策是基于整个序列而不是图像的特定区域,会导致人类难以理解该模型的运作机制。Dosovitskiy等人首次在计算机视觉领域提出了一种Transformer模型,称为ViT(Vision Transformer)。ViT模型的核心思想是将图像划分为补丁序列,并利用自注意力机制处理这些补丁序列,以生成图像的新表示形式。

       自注意力机制是Transformer网络的核心机制,它通过专注于自身输入数据信息而不依赖外部信息来进行处理。自注意力机制的处理过程分为三个步骤:首先,将输入序列经过共享权重矩阵映射到查询(Query)、键(Key)和值(Value)序列,其中查询矩阵表示全局范围搜索,键矩阵表示将要查找的位置,值表示从输入序列提取的内容;然后,将序列与注意力矩阵相乘得到注意力矩阵,并通过Softmax激活函数生成一组注意力权重矩阵;最后,为防止梯度爆炸或消失,需要使用一个缩放因子来稳定注意力矩阵值的计算,并与映射序列做矩阵相乘计算,从而生成上下文感知信息。通过这三个处理过程,自注意力机制能够捕获更好、更丰富的特征信息表示。自注意力机制能够学习输入数据之间的依赖关系,而不考虑数据分布情况。

毕业设计:基于深度学习的黑夜人脸识别算法系统

       在Transformer的编码器模块中,特征信息建模是由多头注意力机制负责的。因为单头注意力机制对信息的建模能力较差,提取的特征信息较为粗糙。在原始的自注意力机制中,特征映射矩阵(Query、Key、Value)被视为三种类型的头,每种头负责学习不同的信息表示。当每种类型的头有多个时,就需要多组特征映射矩阵,进而得到多组头,运算处理过程与自注意力机制类似,不同之处在于需要将同种类型头代表的信息拼接聚合。

毕业设计:基于深度学习的黑夜人脸识别算法系统

1.3目标检测算法

       原始的自注意力机制的计算复杂度与特征图尺寸的平方成正比,为了降低计算复杂度,一些学者提出了局部区域计算自注意力的方法,但这种方法需要多层叠加才能实现全局建模,导致计算量增加。为了更高效地处理补丁不同区域之间的信息,CSWin提出了一种新的自注意力机制,即十字形窗口自注意力(Cross-Shaped Window Self-Attention,CSW)。CSW利用十字形窗口结构来建模相关的特征图区域,并逐渐扩大十字形窗口,从而实现高效的全局特征建模能力。

毕业设计:基于深度学习的黑夜人脸识别算法系统

       在处理自然场景下的人脸表情识别任务时,我们希望网络模型对输入的表情样本具有鲁棒性。具体而言,当表情样本本身存在某种"形变"时,网络模型在理论上应能正确将表情样本分到正确的类别标签。自然场景中人脸表情样本的一些例子包括人脸倾斜、非正面头部姿态以及人脸相对于观察者不同方向等。尽管这些客观因素对于人类识别表情来说微不足道,但计算机视觉算法适用于处理亮度值的原始三维数组。因此,输入样本中的一个微小变化就能改变相应数组中的一个像素值。

毕业设计:基于深度学习的黑夜人脸识别算法系统

       随着训练过程的进行,单位批次内图像样本的变化会引起特征参数的变化,从而导致AdaFace的Margin函数也随之变化,进而影响训练过程中的误差反向传播。因此,AdaFace可以根据图像质量的不同,强调不同困难样本的重要性。在高质量图像数据中,关注困难样本,而在低质量图像中抑制困难样本。

毕业设计:基于深度学习的黑夜人脸识别算法系统

二、 数据集

2.1 数据集

       鉴于目前公开的人脸数据集中缺乏专门针对黑夜环境下的样本,本研究决定自行制作一个黑夜人脸识别数据集。为了收集真实且多样的黑夜人脸数据,我们设计了一套严密的拍摄方案。首先,在多个不同的室外和室内场景下进行拍摄,确保光照条件符合黑夜环境的要求。同时,邀请了众多志愿者参与拍摄,以涵盖不同年龄、性别和面部特征的人群。在拍摄过程中,我们使用了高清摄像机,并严格控制拍摄角度、距离和光线等因素,以确保图像质量的一致性。

毕业设计:基于深度学习的黑夜人脸识别算法系统

2.2 数据扩充

       为了提高模型的泛化能力和鲁棒性,我们对自制的黑夜人脸识别数据集进行了丰富的数据扩充操作。这包括图像的旋转、裁剪、缩放等几何变换,以及亮度、对比度和色彩空间的调整。通过这些操作,我们成功地增加了数据集的多样性和复杂性,使得模型能够在各种不同的条件下进行学习和识别。此外,我们还采用了数据增强的技术,如生成对抗网络(GAN),来进一步扩充数据集,并提升模型的性能。这些努力为黑夜人脸识别算法系统的研究和应用奠定了坚实的基础。

毕业设计:基于深度学习的黑夜人脸识别算法系统

三、实验及结果分析

3.1 实验环境搭建

       实验使用Linux系统,Ubuntu 18.04发行版,GPU为NVIDIA GeForce RTX 3090(24GB),CUDA版本为11.4。实验采用PyTorch深度学习框架,并通过在Windows系统上的PyCharm进行远程连接Linux进行实验。

3.2 模型训练

       消融实验是一种用于研究模型中不同组件或技术对性能影响的实验方法。在目标检测任务中,通过对比基准模型和具有某种因素调整的消融模型的性能差异,可以评估该因素对检测性能的影响。通过准备实验数据、实现基准模型和消融模型、进行训练和评估,可以得出关于模型鲁棒性和有效性的结论。消融实验的结果对于指导模型设计和改进具有重要意义。

# 定义基准模型和消融模型
class BaseModel():
    def __init__(self):
        self.transform = transforms.Compose([
            transforms.Resize((224, 224)),
            transforms.ToTensor()
        ])

    def train(self, train_data):
        # 在训练数据上训练基准模型
        pass

    def evaluate(self, eval_data):
        # 在评估数据上评估基准模型
        pass

class AugmentedModel(BaseModel):
    def __init__(self):
        super().__init__()
        self.transform = transforms.Compose([
            transforms.Resize((224, 224)),
            transforms.RandomHorizontalFlip(),
            transforms.ToTensor()
        ])

    def train(self, train_data):
        # 在训练数据上训练增强模型
        pass

    def evaluate(self, eval_data):
        # 在评估数据上评估增强模型
        pass

       评价指标是用于度量模型性能的指标,根据任务的不同而有所差异。常见的评价指标包括准确率、精确率、召回率、F1分数等用于分类任务,mAP、精确率、召回率、IoU等用于目标检测任务,生成质量、生成多样性、生成准确性用于生成模型任务,以及BLEU、ROUGE等用于机器翻译任务。选择适合任务和需求的评价指标对于综合评估模型的性能至关重要,同时多个指标的结合更能全面反映模型的优劣。

def calculate_ap(precision, recall):
    # 计算单个类别的平均精确率(AP)
    recall = np.concatenate(([0], recall, [1]))
    precision = np.concatenate(([0], precision, [0]))

    for i in range(len(precision) - 2, -1, -1):
        precision[i] = max(precision[i], precision[i + 1])

    indices = np.where(recall[1:] != recall[:-1])[0] + 1
    ap = np.sum((recall[indices] - recall[indices - 1]) * precision[indices])
    return ap

def calculate_map(targets, predictions, num_classes):
    # 计算目标检测任务中的平均精确率均值(mAP)
    # targets: 真实标签框列表,每个标签框包含类别、位置等信息
    # predictions: 预测标签框列表,每个标签框包含类别、位置、置信度等信息
    # num_classes: 类别数量

    average_precisions = []

    for class_idx in range(num_classes):
        class_targets = [target for target in targets if target['class_idx'] == class_idx]
        class_predictions = [prediction for prediction in predictions if prediction['class_idx'] == class_idx]

        num_targets = len(class_targets)
        num_predictions = len(class_predictions)

        if num_targets == 0 or num_predictions == 0:
            average_precisions.append(0)
            continue

        true_positives = np.zeros(num_predictions)
        false_positives = np.zeros(num_predictions)
        matched = set()

海浪学长项目示例:

最后

我是海浪学长,创作不易,欢迎点赞、关注、收藏。

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

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐