22 KiB
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的sota(95%+)还有很大差距。
原因分析
为什么会这样?我分析有几个可能的原因:
第一,训练不充分。我只训练了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-18,80.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-10,200个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),空间注意力可能没有足够的发挥空间。在更大的图像上,比如ImageNet,CBAM通常能带来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。当然,也有人尝试用AdamW(Adam的改进版),效果介于两者之间。
Q6: 数据增强用了哪些方法?
A: 目前只用了最基础的RandomCrop和RandomHorizontalFlip。这显然不够。下一步我打算加入更强的增强方法,比如:
- CutMix: 把两张图像裁剪后混合
- MixUp: 把两张图像按比例混合
- AutoAugment: 自动搜索最优的增强策略
- RandomErasing: 随机遮挡一部分区域
这些方法已经被证明能显著提升CIFAR-10的性能。
Q7: 能达到95%以上的准确率吗?
A: 理论上可以。CIFAR-10的SOTA(State-of-the-art)准确率已经超过99%了。但要达到95%,需要:
- 充分的训练(200+ epochs)
- 更深的网络(ResNet-50/101)或更先进的架构(EfficientNet, Transformer)
- 强大的数据增强
- 精心调优的超参数
- 可能还需要一些技巧,比如模型集成、知识蒸馏等
我目前的设置比较基础,所以80%是合理的。通过系统优化,90-95%是可以达到的目标。
Q8: 这个项目花了多长时间?
A: 从代码实现到实验运行,大概花了一周时间。其中:
- 模型实现:2天
- 训练脚本和可视化:2天
- 运行实验:1天(50 epochs还是很快的)
- 分析结果和准备汇报:2天
如果重新训练200 epochs,可能还需要2-3天。
Q9: 有遇到什么技术难点吗?
A: 主要有两个:
- CBAM的实现:通道注意力和空间注意力怎么正确地集成到ResNet的BasicBlock中,我参考了原论文和一些开源实现才搞清楚。
- 可视化:怎么把训练过程中的数据保存下来,然后生成漂亮的对比图,这花了不少时间调matplotlib的参数。
整体来说,得益于PyTorch强大的生态,大部分实现都比较顺利。
Q10: 有什么想对后来者说的?
A: 几点建议:
- 从小实验开始:先在小数据集(如CIFAR-10)上验证想法,不要一上来就跑ImageNet。
- 重视基础:把经典模型(CNN、ResNet)吃透,再去追新方法。
- 做好记录:每次实验都要详细记录超参数、结果、遇到的问题。
- 勇于试错:我的注意力机制实验"失败"了,但这本身就是一个重要发现。
- 多看论文:理解为什么这样设计,而不只是调参。
最重要的是:享受学习的过程!深度学习既是科学也是艺术。
【演讲结束】
再次感谢大家的聆听!如果还有问题,欢迎随时交流。
谢谢!