first commit

This commit is contained in:
2025-10-13 02:32:30 +08:00
commit cf19ef2020
25 changed files with 1916 additions and 0 deletions

593
presentation_script.md Normal file
View File

@@ -0,0 +1,593 @@
# CIFAR-10图像分类模型横向测评 - 演讲稿
**演讲者**: 李博睿 (55230422)
**时长**: 约15-20分钟
**场合**: 计算智能课程技术报告
---
## 【第1页 - 封面】
大家好我是李博睿学号55230422。
今天我要向大家汇报的题目是《CIFAR-10图像分类模型横向测评》。
在这次研究中我对比了四种不同的深度学习模型在图像分类任务上的表现包括经典的CNN、现代的ResNet-18以及两种加入了注意力机制的ResNet变体。
那么,让我们开始今天的汇报。
---
## 【第2页 - 目录】
今天的汇报主要分为五个部分:
首先,我会介绍**研究背景与动机**,说明为什么要做这个对比实验;
第二部分,我会详细讲解**四个模型的架构**,包括它们的设计原理和关键特点;
第三部分,我会**展示实验结果**,这是我们最关心的部分;
第四部分,我会**深入分析这些结果**,解释为什么会出现这样的现象;
最后,我会进行**反思**,指出实验中存在的问题,并提出改进方向。
---
## 【第3页 - 研究背景】
### CIFAR-10数据集
首先来看研究背景。
我选择的数据集是**CIFAR-10**,这是计算机视觉领域一个非常经典的基准数据集。
它包含**6万张32×32的彩色图像**分为10个类别飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车。
其中5万张用于训练1万张用于测试。
虽然图像分辨率不高只有32×32像素但正是因为这个"小"CIFAR-10成为了快速验证和对比不同模型架构的理想选择。
### 研究意义
那么,做这个对比研究有什么意义呢?
**第一**,我想系统地评估不同深度学习架构的性能差异;
**第二**,我特别关注注意力机制在图像分类中的作用——理论上它应该能提升性能,但实际效果如何?
**第三**,这个研究可以为实际应用中的模型选择提供参考依据。
---
## 【第4页 - 研究动机与目标】
### 核心研究问题
具体来说,我想回答四个核心问题:
**第一个问题**经典的CNN和现代的ResNet它们的性能差异到底有多大这个差距值得我们花10倍的参数量吗
**第二个问题**ResNet的核心创新——残差连接它对训练深度网络的帮助是否真的如论文所说那么显著
**第三个问题**注意力机制近年来非常火热CBAM和SE这两种注意力模块能否真正提升ResNet的性能
**第四个问题**:性能提升和参数增加之间的权衡如何把握?我们是否应该一味追求更复杂的模型?
### 实验模型
为了回答这些问题,我选择了四个模型:
**CNN**一个3层的卷积神经网络参数量约1.2M,代表经典的浅层架构;
**ResNet-18**18层的残差网络参数量约11M代表现代深度架构
**ResNet-18+CBAM**在ResNet-18基础上加入了通道和空间双重注意力机制
**ResNet-18+SE**在ResNet-18基础上加入了轻量级的通道注意力机制。
---
## 【第5页 - 模型1: CNN架构】
现在进入第二部分,模型架构讲解。
### CNN架构
首先看最简单的CNN模型。
它的结构非常直观输入是3×32×32的RGB图像经过三个卷积块最后接两个全连接层输出10个类别的概率。
**卷积层设计**三层卷积分别将通道数从3增加到64、128、256。每层后面都接BatchNorm做归一化、ReLU做激活、MaxPool做降维。
**全连接层**最后将特征图展平成4096维向量通过一个512维的隐藏层加了50%的Dropout防止过拟合最终输出10维。
**特点**:这个模型的优点是**结构简单、参数少、训练快**。但缺点也很明显:**深度受限,表达能力有限**。如果我们简单地增加卷积层的数量,不仅难以训练,性能反而会下降,这就是所谓的"退化问题"。
---
## 【第6页 - 模型2: ResNet-18架构】
### 残差连接原理
ResNet正是为了解决这个"退化问题"而提出的。
它的核心思想是**残差学习**。看这个公式y = F(x) + x
传统网络学习的是从输入x到输出y的直接映射而ResNet学习的是**残差**——也就是输入和输出的差值F(x)。
为什么这样设计?因为学习一个**"微小的变化"**,比学习一个**"完整的映射"**要容易得多。
### BasicBlock结构
ResNet-18由多个这样的BasicBlock堆叠而成。每个Block包含两个3×3卷积关键是这条**红色的shortcut连接**——它直接把输入加到输出上。
整个网络分为4个Layer每个Layer包含2个BasicBlock总共18层。
### 核心优势
ResNet的核心优势就是**解决了梯度消失问题**。
因为有shortcut的存在梯度可以直接从输出反向传播到输入不会在深层网络中"消失"。这使得训练几百层的深度网络成为可能。
---
## 【第7页 - 模型3: ResNet-18+CBAM】
### CBAM注意力机制
第三个模型在ResNet-18基础上加入了CBAM——Convolutional Block Attention Module。
CBAM的核心理念是让模型学会两件事**"关注什么"**和**"关注哪里"**。
### 通道注意力
**通道注意力**回答"关注什么"。
它通过全局平均池化和最大池化把每个通道压缩成一个数值然后用一个共享的MLP学习每个通道的重要性权重。
比如,对于识别"猫"这个任务,纹理特征的通道可能更重要,而对于识别"飞机",形状特征的通道更重要。
### 空间注意力
**空间注意力**回答"关注哪里"。
它在特征图的每个空间位置生成一个权重,告诉模型应该关注图像的哪个区域。
比如识别猫的时候,应该更关注脸部和耳朵,而不是背景。
### 参数代价
CBAM的一个优点是**非常轻量**。它只增加了约0.2M参数相对于ResNet-18的11M仅增加了1.8%。
理论上,这么小的代价应该能带来可观的性能提升。但实际效果如何呢?我们等会看结果。
---
## 【第8页 - 模型4: ResNet-18+SE】
### SE注意力机制
第四个模型加入的是SE模块——Squeeze-and-Excitation。
SE比CBAM更简单它只做通道注意力不做空间注意力。
### 三步操作
SE的工作流程分为三步
**第一步Squeeze压缩**:用全局平均池化把每个通道压缩成一个标量。这个操作捕获了整个通道的全局信息。
**第二步Excitation激励**通过两层全连接网络学习通道间的依赖关系。第一层降维第二层升维最后用Sigmoid激活得到0到1之间的权重。
**第三步Scale缩放**:把学到的权重乘回原来的特征图,实现通道级的重标定。
### 效率优势
SE的参数更少只增加约0.1M相对ResNet-18仅增加0.9%。
所以从参数效率角度看SE比CBAM更轻量。
---
## 【第9页 - 实验结果展示】
好,现在我们进入最关键的部分——实验结果。
### 图表说明
大家看这张图,它包含三个子图:
**左图**是**训练准确率曲线**。横轴是训练轮数epoch纵轴是准确率。我们可以看到四条不同颜色的曲线代表四个模型。
橙色的ResNet-18上升最快最终达到约85%绿色和红色的CBAM和SE在75-78%左右蓝色的CNN最慢只有约68%。
**中图**是**训练损失曲线**。同样是四条曲线但这次是越低越好。ResNet-18橙色下降到约0.5表现最好其他模型在0.7-0.95之间。
**右图**是**测试准确率的柱状图**。这是最终的性能指标,也是我们最关心的。
ResNet-18最高达到80.68%ResNet-18+SE是74.06%ResNet-18+CBAM是73.56%CNN最低71.95%。
红色虚线是平均值75.06%。
### 初步观察
从这张图,我们可以得出几个初步观察:
**第一**ResNet-18在所有指标上都表现最好
**第二**令人意外的是加了注意力机制的模型反而不如基础的ResNet-18
**第三**所有模型的准确率都不算太高最好的也只有80%多一点。
为什么会这样?我们接下来详细分析。
---
## 【第10页 - 测试准确率对比分析】
### 数据对比
首先看这个详细的对比表格。
**CNN**1.2M参数测试准确率71.95%,作为基线;
**ResNet-18**11M参数80.68%相比CNN提升了8.73个百分点;
**ResNet-18+CBAM**11.2M参数73.56%只比CNN高1.61个百分点;
**ResNet-18+SE**11.1M参数74.06%提升2.11个百分点。
平均准确率是75.06%。
### 关键发现
这里有三个关键发现:
**第一个发现**ResNet-18显著优于CNN。8.73个百分点的提升非常可观,证明了残差连接和深度网络的价值。
**第二个发现**,也是最意外的:**注意力机制的提升远不如预期**。
理论上CBAM和SE应该进一步提升ResNet的性能但实际上它们不仅没有提升反而表现更差。CBAM甚至比基础的CNN都低
**第三个发现**所有模型的绝对准确率都不高。即使是最好的ResNet-18也只有80.68%离CIFAR-10的sota95%+)还有很大差距。
### 原因分析
为什么会这样?我分析有几个可能的原因:
**第一**训练不充分。我只训练了50个epoch从曲线看准确率还在上升损失还在下降说明没有收敛。
**第二**,学习率可能设置不当。注意力机制可能需要不同的学习率策略。
**第三**数据增强不足。标准的RandomCrop和RandomFlip可能不够。
**第四**对于CIFAR-10这种32×32的小图像空间注意力可能难以发挥作用。
---
## 【第11页 - 训练过程分析】
让我们更细致地分析训练过程。
### 训练准确率特征
左边这个block看训练准确率的特征
**CNN**收敛最慢50个epoch后才到68%左右;
**ResNet-18**收敛最快而且最稳定达到了85%
**加了注意力的两个模型**介于两者之间75-78%。
但这里有个**异常现象**需要注意ResNet-18的训练准确率是85%但测试准确率只有80.68%差了4个多百分点。这个gap比其他模型都大说明**ResNet-18可能存在过拟合**。
### 训练损失特征
右边看训练损失:
所有模型在初期都快速下降,这是正常的;
ResNet-18下降到约0.5就稳定了;
其他模型在0.7-0.95之间波动。
损失曲线都比较平滑,说明训练过程是稳定的。
### 收敛性分析
总体来说,**ResNet架构的梯度流动确实更好**,这从它更快的收敛速度就能看出来。
但是,快速收敛不等于最终性能一定最好,还要看是否过拟合。
---
## 【第12页 - 性能-复杂度权衡】
接下来我们从另一个角度看问题:性能和复杂度的权衡。
### 参数效率
我定义了一个简单的指标:**参数效率 = 准确率 / 参数量**。
这个指标越高,说明每个参数的"性价比"越高。
### 数据对比
看这个表格:
CNN的效率是59.96,最高,因为它参数最少;
ResNet-18是7.33
加了注意力的两个模型是6.57和6.67。
虽然CNN的效率最高但它的绝对准确率太低了只有72%,实用价值有限。
### 权衡建议
如果让我给出建议:
**如果资源充足,追求最高准确率**选ResNet-18。虽然它有11M参数但80.68%的准确率在这四个模型中是最高的。
**如果资源非常受限**比如要部署到嵌入式设备那可能不得不选CNN虽然准确率低一些。
**如果想要平衡**ResNet-18+SE可能是个折中选择——它比基础ResNet只多了0.1M参数,准确率虽然低了一些,但参数效率还不错。
但说实话,在当前的训练设置下,这些结论都是初步的,需要更充分的训练来验证。
---
## 【第13页 - 实验中的问题】
现在进入第五部分:反思与改进。
作为一个严谨的研究,我必须承认,这次实验存在一些问题。
### 训练不充分
**最大的问题就是训练不充分**
我只训练了50个epoch这对于CIFAR-10来说远远不够。标准做法是训练200个epoch甚至更多。
从曲线可以看出,准确率还在稳步上升,损失还在下降,说明模型还有学习空间。
如果继续训练我相信准确率还能进一步提升可能会达到90%甚至更高。
### 注意力机制未发挥作用
**第二个问题是注意力机制没有发挥预期作用**
CBAM和SE不仅没有提升性能反而比基础ResNet表现更差。这绝对不正常。
我分析有几个可能的原因:
**原因一**:训练不充分。注意力模块的参数需要更多的迭代才能学到有效的权重;
**原因二**学习率设置可能不合适。注意力模块可能需要不同的学习率或者warmup策略
**原因三**:初始化方法可能有问题。注意力权重的初始化很关键;
**原因四**CIFAR-10的图像太小了只有32×32像素。对于这么小的图像空间注意力可能没有太多发挥空间。如果换成ImageNet那种224×224的图像效果可能会好很多。
### 测试准确率偏低
**第三个问题是整体准确率偏低**
即使是最好的ResNet-1880.68%的准确率也远低于文献中报告的95%+。
这再次说明我的训练策略需要大幅优化。
---
## 【第14页 - 改进方向】
既然发现了这些问题,那么改进方向就很明确了。
### 1. 训练策略优化
**第一组改进是关于训练策略的**
最重要的是**把epochs增加到200**,这是标准做法;
使用**学习率调度**比如MultiStepLR在第60、120、160个epoch降低学习率
添加**学习率预热**在前5个epoch让学习率逐步增加到设定值
使用**更强的数据增强**比如RandomCrop、CutMix、MixUp等。这些技术已经被证明能显著提升性能。
### 2. 超参数调整
**第二组改进是超参数调整**
当前的初始学习率是0.1可能偏大了我会尝试降低到0.05
Batch Size 128是合理的可以保持
但我会增加Weight Decay来加强正则化防止过拟合。
### 3. 模型架构改进
**第三组改进是模型架构方面**
可以尝试更深的ResNet比如ResNet-34或ResNet-50
调整CBAM的位置——也许不应该在每个Block后都加而是只在关键位置加
尝试其他注意力机制比如最近很火的ECA-Net
增加Dropout或者DropBlock来防止过拟合。
---
## 【第15页 - 未来工作展望】
### 短期改进
在**1-2周内**,我计划:
**首先**重新训练所有模型把epochs增加到200
**其次**,优化学习率调度和数据增强策略;
**第三**详细记录训练过程中的每一个指标包括训练loss、验证loss、学习率变化等
**最后**,绘制更完整的可视化,包括训练曲线、混淆矩阵、每个类别的准确率等。
### 中期探索
在**1个月的时间范围内**,我会:
**第一**,实现更多注意力机制的变体,做更系统的对比;
**第二**尝试Transformer架构比如Vision Transformer看看它在CIFAR-10上的表现
**第三**,做详细的消融实验,分析每个组件的贡献;
**第四**把实验扩展到CIFAR-100或者其他数据集验证结论的普适性。
### 长期目标
从长期来看,我对一些前沿方向很感兴趣:
比如**神经架构搜索**,让算法自动找最优的网络结构;
比如**知识蒸馏**,把大模型的知识迁移到小模型;
比如**半监督学习**,利用未标注的数据提升性能。
---
## 【第16页 - 核心结论】
现在让我总结一下本次研究的核心结论。
### 主要发现
**第一个发现**ResNet-18在测试集上表现最优达到80.68%显著优于CNN的71.95%。这验证了残差连接和深度网络的价值。
**第二个发现**:残差连接确实至关重要。它不仅让深层网络能够训练,而且收敛速度更快,性能更好。
**第三个发现**在当前的训练设置下注意力机制没有充分发挥作用。CBAM和SE的表现甚至不如基础ResNet。但这不代表注意力机制无效更可能是训练策略需要优化。
**第四个发现**50个epoch的训练远远不够。从曲线可以看出模型还有很大的提升空间。
### 经验总结
从这次实验中,我总结了几条重要经验:
**第一**,深度学习需要**充分的训练时间**。50个epoch可能在某些任务上够了但对于从零开始训练的CIFAR-10200个epoch才是起点。
**第二****超参数调优和数据增强至关重要**。同样的模型,不同的训练策略可能差距很大。
**第三**,注意力机制不是万能的,它需要**合适的训练策略**才能发挥作用。盲目加上去不一定有效。
**第四****实验设计要系统化、可重复**。要详细记录每个细节,这样才能从失败中学到东西。
### 下一步
基于这些发现,我的下一步计划是:**增加训练轮数到200优化超参数然后重新评估各模型的性能**。
我相信,经过这些改进,注意力机制应该能展现出它应有的价值。
---
## 【第17页 - 致谢页】
好,我的汇报到这里就结束了。
最后这一页列出了我的项目代码和相关文档:
所有代码都在**run_all.py**这个脚本里,可以一键运行所有实验;
实验结果就是刚才展示的**100.png**
详细的分析和讨论写在了**REPORT.md**这个报告文件里。
现在,
# 谢谢大家的聆听!
# 欢迎提问!
---
## 【Q&A环节 - 可能的问题及回答】
### Q1: 为什么只训练50个epoch
**A**: 这其实是我这次实验的一个失误。一开始我以为50个epoch足够了但实际运行后发现曲线还在上升显然没有收敛。正常的CIFAR-10实验应该训练200个epoch以上。这也是为什么我在"反思与改进"部分专门指出了这个问题。下一步我会重新训练更多轮次。
### Q2: 为什么ResNet-18比加了注意力的模型还要好
**A**: 这确实是个意外的结果。我分析有几个原因首先训练不充分注意力模块的参数还没有学到有效的权重其次可能学习率或初始化设置不适合注意力机制第三CIFAR-10图像太小32×32空间注意力可能没有足够的发挥空间。在更大的图像上比如ImageNetCBAM通常能带来1-2%的提升。
### Q3: 你觉得哪个模型最实用?
**A**: 这要看应用场景。如果是在服务器端GPU资源充足我会选ResNet-18因为它准确率最高。如果是在移动端或嵌入式设备上资源受限可能不得不选CNN或者更轻量的MobileNet。ResNet-18+SE是个折中选择——只增加0.1M参数,在优化训练后应该能有不错的性能。
### Q4: 下一步打算做什么改进?
**A**: 最紧迫的是重新训练把epochs增加到200并优化学习率调度和数据增强。我还想尝试更多的注意力机制变体比如ECA-Net、Coordinate Attention等。长远来看我对Transformer架构很感兴趣想看看ViT在CIFAR-10上能达到什么水平。
### Q5: 为什么用SGD而不是Adam
**A**: 这是个很好的问题。在图像分类任务中SGD+Momentum通常比Adam有更好的泛化性能。虽然Adam收敛更快但往往会陷入"尖锐的局部最优"导致测试集表现不如训练集。SGD虽然慢但能找到"平坦的局部最优"泛化性更好。很多SOTA的图像分类工作都用SGD。当然也有人尝试用AdamWAdam的改进版效果介于两者之间。
### Q6: 数据增强用了哪些方法?
**A**: 目前只用了最基础的RandomCrop和RandomHorizontalFlip。这显然不够。下一步我打算加入更强的增强方法比如
- CutMix: 把两张图像裁剪后混合
- MixUp: 把两张图像按比例混合
- AutoAugment: 自动搜索最优的增强策略
- RandomErasing: 随机遮挡一部分区域
这些方法已经被证明能显著提升CIFAR-10的性能。
### Q7: 能达到95%以上的准确率吗?
**A**: 理论上可以。CIFAR-10的SOTAState-of-the-art准确率已经超过99%了。但要达到95%,需要:
1. 充分的训练200+ epochs
2. 更深的网络ResNet-50/101或更先进的架构EfficientNet, Transformer
3. 强大的数据增强
4. 精心调优的超参数
5. 可能还需要一些技巧,比如模型集成、知识蒸馏等
我目前的设置比较基础所以80%是合理的。通过系统优化90-95%是可以达到的目标。
### Q8: 这个项目花了多长时间?
**A**: 从代码实现到实验运行,大概花了一周时间。其中:
- 模型实现2天
- 训练脚本和可视化2天
- 运行实验1天50 epochs还是很快的
- 分析结果和准备汇报2天
如果重新训练200 epochs可能还需要2-3天。
### Q9: 有遇到什么技术难点吗?
**A**: 主要有两个:
1. **CBAM的实现**通道注意力和空间注意力怎么正确地集成到ResNet的BasicBlock中我参考了原论文和一些开源实现才搞清楚。
2. **可视化**怎么把训练过程中的数据保存下来然后生成漂亮的对比图这花了不少时间调matplotlib的参数。
整体来说得益于PyTorch强大的生态大部分实现都比较顺利。
### Q10: 有什么想对后来者说的?
**A**: 几点建议:
1. **从小实验开始**先在小数据集如CIFAR-10上验证想法不要一上来就跑ImageNet。
2. **重视基础**把经典模型CNN、ResNet吃透再去追新方法。
3. **做好记录**:每次实验都要详细记录超参数、结果、遇到的问题。
4. **勇于试错**:我的注意力机制实验"失败"了,但这本身就是一个重要发现。
5. **多看论文**:理解为什么这样设计,而不只是调参。
最重要的是:**享受学习的过程**!深度学习既是科学也是艺术。
---
**【演讲结束】**
再次感谢大家的聆听!如果还有问题,欢迎随时交流。
**谢谢!**