深度学习期末大作业报告
1. 本研究基于 2022 年提出的 ConvNeXt-Tiny 模型,成功实现了掌纹识别任务,在老师提供的 772 类掌纹数据库上取得了 90.20% 的识别率和 0.56% 的 EER,AUC 达到 0.9996,验证了该模型在掌纹识别任务中的有效性。其中,TP(True Positive)为真阳性,TN(True Negative)为真阴性,FP(False Positive)为假阳性,FN
南昌航空大学
本科生研究报告
学期: 2025-2026(1)
课程: 神经网络与深度学习
题目: 基于 ConvNeXt 的掌纹识别研究
专业: 数据科学与大数据技术
学号: 23208106
姓名: 黄文婷
任课教师: 冷璐
2025年11月
基于 ConvNeXt 的掌纹识别研究
一、题目
基于 ConvNeXt 的掌纹识别研究
二、数据库
(一)数据库来源
本研究采用老师提供的掌纹数据库,该数据库仅限本班科研使用,不得外传。
(二)数据库详细信息
1.图像采集设备:接触式采集设备
2.图像分辨率:统一为 128×128 像素
3.采集对象:386 人,每人提供左右手掌纹图像,同一人的左右手视为两个不同类别
4.类别数:772 类(386 人 ×2 只手)
5.样本数量:数据库原始包含 7752 张掌纹 ROI(Region of Interest,感兴趣区域)图像,经样本均衡处理后,每类保留 6 张有效样本,最终数据集总样本数为 772×6=4632 张
6.编号格式:原始文件命名格式为 “P_F_1_1.bmp” 或 “P_S_2_3.bmp”,其中:
“F” 代表左手,“S” 代表右手
第三部分数字为基础人员 ID(1-386)
第四部分数字为该手掌的样本序号
类别 ID 计算规则:左手类别 ID = 基础 ID,右手类别 ID=386 + 基础 ID
均衡后样本编号采用 “class_id_sample_id” 格式,如 “1_1” 表示 1 号类别(1 号人员左手)的第 1 张样本
(三)数据预处理与均衡
由于原始数据库部分类别的样本数不一致,为保证模型训练的稳定性和公平性,对数据进行了均衡处理:
- 样本不足处理:若某类别样本数少于 6 张,采用重复采样方式补充至 6 张
- 样本过多处理:若某类别样本数多于 6 张,采用随机截取方式保留 6 张
- 数据增强:通过随机水平翻转(概率 0.3)、随机旋转(±5°)等操作扩充数据多样性,模拟手部姿态变化带来的影响
- 数据标准化:采用 ImageNet 数据集的均值([0.485, 0.456, 0.406])和标准差([0.229, 0.224, 0.225])进行标准化处理,适配模型输入要求
(四)数据集划分
将均衡后的 4632 张样本按比例划分为:
训练集:70%,共 3242 张样本
验证集:15%,共 695 张样本
测试集:15%,共 695 张样本
划分过程采用随机抽样方式,确保各数据集的类别分布一致。
三、任务建模
(一)核心科学问题
解决掌纹识别中的身份认证问题,实现从复杂背景下采集的掌纹图像中准确提取生物特征,完成身份的快速识别与验证,同时兼顾识别精度、计算效率和鲁棒性。
(二)计算机视觉任务定义
本研究采用 “分类 + 认证” 双任务模式:
- 分类任务(1:N 模式):将掌纹图像分为 772 个类别,实现多身份的快速分类识别
- 认证任务(1:1 模式):通过计算样本间的相似度,判断两个掌纹是否来自同一人,用于身份验证场景
(三)任务关联与价值
掌纹识别作为一种重要的生物特征识别技术,具有稳定性高、采集便捷、防伪性强等优势。本研究通过深度学习方法实现高精度掌纹识别,可应用于身份认证、安全访问控制等场景。分类任务为快速身份检索提供基础,认证任务为精准身份验证提供支撑,两者结合形成完整的身份识别解决方案。
四、评价指标
结合分类与认证双任务特点,采用以下评价指标,所有指标均提供计算公式:
(一)分类任务指标
识别率(Accuracy):正确分类的样本数占总样本数的比例,计算公式为:

其中,TP(True Positive)为真阳性,TN(True Negative)为真阴性,FP(False Positive)为假阳性,FN(False Negative)为假阴性。
(二)认证任务指标
1. 错误接受率(FAR):不同身份被误判为同一身份的概率,计算公式为:

2.错误拒绝率(FRR):同一身份被误判为不同身份的概率,计算公式为:

3.等错误率(EER):当 FAR 与 FRR 相等时的错误率,是衡量认证系统性能的核心指标,EER 值越低,系统性能越好
4.ROC 曲线(Receiver Operating Characteristic Curve):以 FAR 为横轴、正确接受率(TPR)为纵轴绘制的曲线,反映系统在不同阈值下的性能 trade-off
5.AUC(Area Under ROC Curve):ROC 曲线下的面积,取值范围为 [0,1],AUC 越接近 1,系统区分能力越强
(三)综合性能指标
1. 时间复杂度:通过模型训练和测试过程中的平均迭代时间衡量计算效率
2. 空间复杂度:通过模型参数总量和显存占用量衡量存储需求
3. 鲁棒性:通过数据增强后的识别性能变化,评估模型对姿态变化等干扰因素的抵御能力
五、语言和框架
(一)编程语言
Python 3.8+,具备良好的可读性和丰富的深度学习生态库支持
(二)深度学习框架
PyTorch 1.10+,动态计算图机制便于模型调试和修改,且对 CPU/GPU 环境具有良好的兼容性
(三)核心依赖库
1. 数据处理:numpy(数组运算)、PIL(图像读取与处理)、os(文件路径操作)
2. 模型构建:torch(核心框架)、torch.nn(神经网络层)、torch.optim(优化器)
3. 数据加载:torch.utils.data(数据集构建与加载)
4. 图像预处理:torchvision.transforms(数据增强与转换)
5. 性能评估:sklearn.metrics(准确率、ROC 曲线、AUC 计算)
6. 可视化:matplotlib.pyplot(训练曲线、ROC 曲线绘制)
(四)代码规范
1. 采用类封装配置参数,提高代码可维护性
2. 每个函数和模块均添加详细注释,说明功能、参数定义和返回值
3. 遵循软件工程规范,模块化设计数据加载、模型构建、训练验证等核心功能
4. 代码命名采用下划线命名法,确保可读性
六、算法原理
(一)算法选择依据
本研究选用 2022 年提出的 ConvNeXt-Tiny 模型作为基础网络,该模型是 ConvNeXt 系列的轻量级版本,具有以下优势:
- 符合大作业要求:2022 年至今发表的最新算法,具备一定的新颖性
- 性能优越:采用深度可分离卷积、LayerNorm 等技术,在图像分类任务中表现出优于传统 CNN 的性能
- 计算高效:参数量小、计算量低,适配 CPU 训练环境,同时保证识别精度
- 兼容性好:支持 128×128 像素输入,无需对掌纹图像进行过度缩放,能保留更多细节特征
(二)算法整体流程
1. 数据输入:128×128×3 的 RGB 掌纹图像
2. 数据预处理:图像 resize、数据增强、标准化
3. 特征提取:通过 ConvNeXt-Tiny 的特征提取网络,逐步提取从低级到高级的掌纹特征
4. 特征分类:通过全连接层将提取的特征映射到 772 个类别
5. 概率输出:通过 Softmax 函数将分类结果转换为概率分布
6. 性能评估:基于预测结果和真实标签,计算各项评价指标
(三)模型结构细节
ConvNeXt-Tiny 模型整体结构如下表所示:
|
网络层类型 |
层数 |
核心参数 |
功能描述 |
|
卷积层 |
1 |
卷积核尺寸 7×7,步长 4,输出通道数 96 |
初步提取图像低级特征,降低分辨率 |
|
残差块(Stage 1) |
3 |
每个块包含深度可分离卷积、LayerNorm、GELU 激活 |
提取中级特征,保持特征图尺寸 |
|
残差块(Stage 2) |
3 |
第一个块步长 2,输出通道数 192 |
特征图下采样,增加通道数 |
|
残差块(Stage 3) |
9 |
第一个块步长 2,输出通道数 384 |
深度提取高级特征 |
|
残差块(Stage 4) |
3 |
第一个块步长 2,输出通道数 768 |
最终特征提取,形成高维特征向量 |
|
全局平均池化 |
1 |
- |
降低特征维度,保留全局信息 |
|
LayerNorm |
1 |
- |
归一化特征,加速训练收敛 |
|
全连接层(修改后) |
1 |
输入维度 768,输出维度 772 |
适配掌纹类别数,输出分类结果 |
(四)核心组件说明
1. 激活函数:采用 GELU(Gaussian Error Linear Units),相比 ReLU 能更好地缓解梯度消失问题,公式为:

其中

是标准正态分布的累积分布函数
2.归一化层:采用 LayerNorm,在通道维度上进行归一化,减少 batch 大小对训练的影响
3. 优化算法:AdamW 优化器,结合 Adam 的自适应学习率和权重衰减,有效防止过拟合
4. 损失函数:交叉熵损失(CrossEntropyLoss),适用于多分类任务,计算公式为:

其中N为样本数,C为类别数,

为第i个样本的真实类别,

为第i个样本在第j类的预测得分
- 学习率调度:ReduceLROnPlateau 策略,当训练损失连续 3 个 epoch 无下降时,学习率减半,提高训练稳定性
(五)模型改进与创新点
1. 输入适配修改:针对掌纹图像尺寸特点,调整模型输入为 128×128,无需修改模型核心结构,保持特征提取能力
2. 分类头定制:替换原始模型的 1000 类分类头为 772 类分类头,适配掌纹识别的类别需求
3. 样本均衡策略:针对老师提供数据库的样本分布不均问题,设计了动态样本均衡方案,保证每类样本数量一致
4. 双任务兼容设计:模型同时支持分类任务(1:N)和认证任务(1:1),通过共享特征提取网络,提高代码复用性
(六)参考文献
[1] Liu Z, Mao H, Wu C Y, et al. A ConvNet for the 2020s[C]. Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition, 2022: 11976-11986.
七、程序框架
(一)程序整体架构
本程序遵循模块化设计原则,整体分为 7 个核心模块,各模块之间的调用关系如下:
|
主函数(main) ├── 1. 配置参数模块(Config类) │ └── 数据配置、模型配置、训练配置、路径配置 ├── 2. 数据处理模块 │ ├── 数据集类(PalmprintDataset) │ └── 数据加载与均衡函数(load_and_balance_data) ├── 3. 模型构建模块(build_model) │ └── ConvNeXt-Tiny模型加载与修改 ├── 4. 评价指标模块(calculate_metrics) │ └── 识别率、FAR、FRR、EER、ROC/AUC计算 ├── 5. 训练验证模块(train_model) │ ├── 训练循环 │ ├── 验证循环 │ └── 训练曲线绘制 ├── 6. 测试可视化模块(test_model) │ ├── 模型加载 │ ├── 测试评估 │ ├── ROC曲线绘制 │ └── 指标保存 └── 7. 输出模块 ├── 模型权重保存 ├── 可视化结果保存 └── 性能指标保存 |
(二)核心模块功能说明
1. 配置参数模块:集中管理所有可配置参数,便于快速调整实验设置
2. 数据处理模块:实现数据集构建、样本均衡、数据增强和划分功能,为模型训练提供高质量数据
3. 模型构建模块:加载预定义模型并根据任务需求修改分类头,适配掌纹识别任务
4. 评价指标模块:实现大作业要求的所有评价指标计算,为性能评估提供统一标准
5. 训练验证模块:实现模型训练和验证的完整流程,包括损失计算、参数更新、模型保存和训练曲线绘制
6. 测试可视化模块:基于测试集评估模型最终性能,通过可视化手段直观展示结果
7. 输出模块:统一管理实验输出文件,包括模型权重、可视化图像和性能指标
(三)程序执行流程
1. 初始化配置参数
2. 加载并均衡数据集,划分训练集、验证集和测试集
3. 构建并初始化 ConvNeXt-Tiny 模型
4. 训练模型,实时监控训练损失和验证识别率,保存最优模型
5. 加载最优模型,在测试集上进行性能评估
6. 计算各项评价指标,绘制 ROC 曲线和训练曲线
7. 保存实验结果和输出文件
八、实验过程和讨论分析
(一)实验环境
1. 硬件环境:CPU(Intel Core i7-10750H),内存 16GB
2. 软件环境:Windows 11 操作系统,Python 3.8,PyTorch 1.12.1
3. 实验参数:batch size=8,epochs=15,初始学习率 = 2e-4,权重衰减 = 1e-5
(二)实验设计
1. 变量控制:固定模型结构和数据预处理流程,通过调整学习率、batch size、训练轮数等参数,探究不同配置对模型性能的影响
2. 对比实验:设置不同样本均衡数量(4 张 / 类、6 张 / 类、8 张 / 类),对比样本数量对识别性能的影响
3. 稳定性验证:每组实验重复 3 次,取平均值作为最终结果,减少随机因素影响
(三)实验过程
1. 数据准备阶段(1 天):完成数据库解压、样本均衡、数据集划分和数据增强脚本编写
2. 模型搭建阶段(1 天):基于 PyTorch 实现 ConvNeXt-Tiny 模型,修改分类头,编写训练和测试代码
3. 参数调试阶段(2 天):调整学习率、batch size 等参数,观察训练损失和验证识别率变化,确定最优参数配置
4. 模型训练阶段(3 天):基于最优参数配置训练模型,保存训练过程中的模型权重和训练曲线
5. 性能测试阶段(1 天):在测试集上评估模型性能,计算各项评价指标,绘制 ROC 曲线
6. 结果分析阶段(1 天):分析实验结果,总结规律,撰写实验报告
(四)实验结果
1. 训练过程结果

2. 测试集性能指标

3. 可视化结果

训练曲线:包含训练损失下降趋势和验证识别率上升趋势

ROC 曲线:展示模型在不同阈值下的 FAR 和 TPR trade-off,AUC 值为 0.9996
(五)结果分析与讨论
1. 训练过程分析
训练损失呈现持续下降趋势,从初始的 6.8500 降至 0.1108,说明模型能够有效学习掌纹特征
验证识别率逐步提升,从 0.43% 提升至 90.20%,无明显过拟合现象,表明模型泛化能力良好
训练后期(12-15 轮)损失和识别率变化趋于平缓,说明模型已接近收敛,继续增加训练轮数对性能提升有限
2. 性能指标分析
识别率达到 90.20%,在 772 类的多分类任务中表现良好,说明 ConvNeXt-Tiny 模型能够有效提取掌纹的判别性特征
EER 为 0.56%,表明模型在认证任务中具有较好的准确性,错误接受和错误拒绝的平衡效果良好
AUC 为 0.9996,接近 1,说明模型对正负样本的区分能力较强
时间复杂度:单轮训练时间约为 45 分钟,测试阶段单张图像识别时间约为 0.02 秒,满足实时识别需求
空间复杂度:模型参数量约为 2800 万,占用内存约 1.2GB,存储需求较低
3. 影响因素分析
样本数量:实验表明,每类样本数从 4 张增加到 6 张时,识别率提升约 12%;从 6 张增加到 8 张时,识别率仅提升 3%,说明样本数量存在最优值,过多增加样本对性能提升有限,且会增加训练时间
学习率:初始学习率为 2e-4 时效果最佳,学习率过高(如 1e-3)会导致训练震荡,学习率过低(如 1e-5)会导致收敛过慢
数据增强:关闭数据增强时,识别率下降约 8%,说明数据增强能够有效提升模型的鲁棒性,抵御姿态变化等干扰
4. 存在的问题与改进方向
识别率仍有提升空间:可通过增加训练轮数、使用预训练权重、优化数据增强策略等方式进一步提高识别率
模型对模糊图像的鲁棒性不足:后续可增加模糊图像样本,或在数据增强中加入高斯模糊操作
计算效率可优化:可通过模型剪枝、量化等技术,进一步降低计算量,适配嵌入式设备
九、结论和心得体会
(一)研究结论
1. 本研究基于 2022 年提出的 ConvNeXt-Tiny 模型,成功实现了掌纹识别任务,在老师提供的 772 类掌纹数据库上取得了 90.20% 的识别率和 0.56% 的 EER,AUC 达到 0.9996,验证了该模型在掌纹识别任务中的有效性
2. 样本均衡处理对模型性能有显著影响,每类 6 张样本的配置在性能和训练效率之间取得了较好的平衡
3. 数据增强技术能够有效提升模型的鲁棒性,降低姿态变化对识别性能的影响
4. ConvNeXt-Tiny 模型在 CPU 环境下表现出良好的兼容性,计算效率高,适合资源受限的场景
(二)心得体会
1. 理论与实践结合的重要性:通过本次大作业,我深刻体会到深度学习理论与实际工程实现的差距。在模型构建过程中,需要充分考虑数据特点、硬件环境等实际因素,才能设计出高效可行的解决方案
2. 数据预处理的关键作用:数据质量直接影响模型性能,样本均衡、数据增强等预处理步骤虽然繁琐,但对提升模型泛化能力至关重要
3. 参数调试的技巧:在实验过程中,通过控制变量法逐步优化参数,能够快速定位最优配置,同时也让我对学习率、batch size 等参数的作用有了更直观的理解
4. 问题解决能力的提升:面对模型训练过慢、识别率低等问题,通过查阅文献、调试代码、对比实验等方式逐步解决,锻炼了我的问题分析和解决能力
5. 学术规范的重要性:在撰写报告过程中,严格遵循参考文献格式和学术写作规范,培养了严谨的科研态度
(三)未来展望
1. 模型优化:尝试使用 ConvNeXt-Large 等更大规模的模型,或引入注意力机制,进一步提升识别率
2. 多模态融合:结合掌静脉、指节纹等其他手部生物特征,构建多模态识别系统,提高识别的稳定性和可靠性
3. 实时性优化:通过模型压缩、量化等技术,进一步降低计算量,实现掌纹识别的实时应用
4. 数据集扩展:收集更多不同光照、不同姿态的掌纹样本,构建更具挑战性的数据集,提升模型的泛化能力
本次大作业不仅让我巩固了神经网络与深度学习的理论知识,还锻炼了工程实践和学术研究能力,为今后的学习和科研工作奠定了坚实的基础。
源代码和图片后台私信我!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)