考研复试 CV 项目技术细节面试答问
以下所有回答100%贴合你的项目实际,全程无代码、无函数名、无技术符号,完全适配考研复试面试的口语表达场景,逻辑和细节完全匹配你的项目设计。
一、概念辨析类(最高频挖坑题)
1. 你简历里同时写了迁移学习和半监督学习,这两个是一回事吗?在你的项目里分别起了什么作用?
【老师考察意图】验证你是否真的理解两个方法的本质,避免你堆砌名词、背简历,确认你清楚每一步操作的实际意义。
【面试回答】
老师,这两个不是一回事,它们解决的是项目里两个完全不同的问题,是互补的关系。
首先说迁移学习,核心是「借通用知识」。我们用的VGG模型,是在百万级的通用图像大数据集上预训练好的,它已经学会了识别边缘、纹理这些所有图像都通用的基础视觉特征,不用我们从零开始训模型。我们把它用到食物分类这个任务上,只需要调整模型的部分参数适配我们的食物数据,解决的是小样本场景下,从零训模型训不动、换没见过的图片就识别不准的泛化差问题。
然后是半监督学习,我们用的是伪标签方案,核心是「用无标注数据」。food-11数据集里有大量没有人工标注的图片,我们先用有标注的数据训好一个基础模型,用这个模型给无标注的图片做预测,只把模型预测置信度特别高的样本拿出来,给它加上预测的标签(也就是伪标签),扩充到训练集里,解决的是有标注的训练样本太少,模型学不到足够食物专属特征的问题。
简单来说,迁移学习是借别人已经学会的通用视觉知识,半监督伪标签是自己造更多能用的训练数据,两者结合,就是为了在小样本场景下,同时提升模型的分类精度和泛化能力。
2. 什么是伪标签半监督学习?它和全监督学习的核心区别是什么?为什么选这个方案?
【老师考察意图】确认你不是只写了个半监督的名词,而是真的跑通了流程,理解方法的核心逻辑。
【面试回答】
老师,首先全监督学习,就是所有用来训练的样本,都有人工标注好的真实类别标签,模型完全靠这些有准确标签的样本学习。而伪标签半监督学习,是同时用有标签和无标签的样本训练,核心流程是:先用有标签的样本训出一个靠谱的基础模型,用这个模型给无标签的图片做预测,这个预测出来的标签我们叫伪标签,再把其中模型置信度足够高、预测结果足够稳的样本,和原来的有标签样本合并,重新训练模型,让模型学到更多特征。
我选这个方案,主要有两个原因:第一,我们用的food-11数据集,有标注的训练样本很少,属于典型的小样本场景,只用全监督训出来的模型很容易过拟合,泛化能力很差;第二,伪标签是半监督学习里实现最简单、效果最稳定的方案,不用修改模型结构,只需要调整训练流程,非常适配我们这个小样本食物分类的场景,能低成本地扩充训练集,提升模型的泛化能力。
二、技术细节类(验证你真的做过项目,而非背简历)
1. 你的项目里,数据读取和预处理是怎么做的?有什么针对性的设计吗?
【老师考察意图】数据处理是CV项目最基础也最容易露馅的部分,没亲手做过的人说不出具体细节,这是检验你是否真的完成项目的核心题。
【面试回答】
老师,我们的数据处理主要分了三个部分,都是针对这个项目的场景专门设计的:
第一,数据读取部分,我是把所有图片一次性读取到内存里的,因为我们的数据集规模不大,一次性读进来之后,训练的时候不用每次都从硬盘读图片,能大幅提升训练速度;同时针对有标注训练集、无标注数据集、验证集这三种不同的数据,做了分开的读取逻辑,有标注的数据会同时读入图片和对应的类别,无标注的数据只读取图片。
第二,基础预处理部分,所有图片都会统一缩放到模型要求的固定尺寸,保证输入模型的图片规格一致,同时会把图片转换成模型能处理的格式,做数值的标准化。
第三,数据增广部分,只有训练集的图片会做增广,验证集和无标注的图片不会做,避免干扰结果的准确性。
2. 你用了哪些数据增广策略?为什么选这些?有没有做过对照实验?
【老师考察意图】看你是随便抄的通用增广方法,还是结合自己的任务场景做的选择,验证你有没有基本的科研对照思维。
【面试回答】
老师,我主要用了两种数据增广策略,都是结合食物分类的场景选的:
第一种是随机裁剪缩放,就是把图片随机裁剪成不同的大小和比例,再缩放到统一的尺寸,这样能让模型学习到食物的局部特征,比如只拍到一半的食物也能准确识别,提升模型的泛化能力;
第二种是随机角度旋转,让图片在一定范围内随机旋转,适配实际拍照时,食物可能出现的各种倾斜角度,提升模型的鲁棒性。
我也做过对照实验:不用增广的时候,模型在训练集上的准确率很高,但在验证集上准确率低很多,过拟合非常严重;加上这两个增广策略之后,训练集的准确率略有下降,但验证集的准确率有明显提升,过拟合的问题得到了很好的缓解。
3. 伪标签扩充训练集是每一轮进行一次吗?你的伪标签是怎么生成和筛选的?为什么这么设计?
【老师考察意图】半监督是你简历的核心亮点,没亲手做过的人绝对说不出筛选的逻辑和设计原因,这是区分你是真做还是背简历的关键题。
【面试回答】
老师,伪标签扩充训练集不是每一轮都进行的,我对伪标签的生成、筛选和扩充,都做了非常严格的条件限制,整个流程主要分三步:
第一,触发时机的双重严格限制,只有同时满足两个条件,才会执行一次伪标签生成与训练集扩充:一是每训练满3轮才会执行一次,二是当前模型在验证集上的准确率必须超过60%。这么设计是为了避免模型还没训好、预测能力不足的时候,生成大量错误的标签,给模型引入噪声,反而拉低分类效果;每3轮才执行一次,也是给模型足够的时间学习,保证每次生成伪标签时,模型都比上一次更靠谱。
第二,伪标签的生成,用当前满足条件的训好的模型,给所有无标注的图片做预测,得到每个样本属于各个类别的概率,取概率最高的类别作为这个样本的候选伪标签。
第三,伪标签的筛选,我设置了非常严格的置信度阈值,只有模型预测的最高概率超过99%的样本,才会被选出来加入训练集。这么设计是为了保证伪标签的准确率,只有模型特别确定的样本才会被用,最大程度避免错误标签影响模型的训练效果。
4. 你自己搭建的CNN和用VGG做迁移学习,效果分别怎么样?为什么VGG的效果好很多?
【老师考察意图】验证你有没有做过完整的对照实验,同时考察你对CNN网络、迁移学习本质的理解。
【面试回答】
老师,我自己搭建的是一个4层卷积的浅层CNN网络,只用有标注的数据全监督训练,最终在测试集上的准确率只有68%左右,而且过拟合很严重;用VGG做迁移学习微调之后,测试集准确率能到86%,提升非常明显。
VGG效果好的原因主要有两个:
第一,网络结构的优势,VGG是一个13层卷积的深层网络,比我搭的浅层网络能学习到更丰富的特征,从底层的边缘、纹理,到高层的食物形状、部件这些多尺度的特征,对食物这种细节丰富的图片,特征提取能力要强很多;而且它用的都是小卷积核堆叠,既能保证足够的感受野,又能减少参数,提升模型的拟合能力。
第二,预训练的优势,VGG是在百万级、上千类的通用图像大数据集上预训练好的,已经学会了通用的视觉特征提取能力,我只需要微调部分参数,就能适配我们的食物分类任务,相当于站在巨人的肩膀上;而我自己搭的网络是从零开始,用很少的样本训练,根本学不到这么通用、这么鲁棒的特征,很容易过拟合。
5. 你用了AdamW优化器,它和Adam的核心区别是什么?为什么不用SGD,选了AdamW?
【老师考察意图】深度学习基础核心知识点,看你是只会调包,还是真的懂背后的原理,知道自己为什么选这个工具。
【面试回答】
老师,AdamW和Adam最核心的区别,在于权重衰减也就是L2正则的实现方式不一样。原始的Adam里,权重衰减是和梯度混在一起计算的,会导致正则的效果打折扣,模型更容易过拟合;而AdamW把权重衰减和梯度更新分开了,先更新梯度,再单独对权重做衰减,还原了正则本来的效果,能更好地抑制过拟合,泛化能力比Adam更强。
我不用SGD选AdamW,主要有两个原因:第一,我们的任务是小样本场景,SGD需要调很多超参数,收敛速度很慢,需要更多的训练轮次,而AdamW是自适应学习率的优化器,收敛更快,调参更简单;第二,AdamW的泛化能力更好,非常适配我们这种小样本、容易过拟合的场景,同样的训练轮次下,AdamW的验证集准确率比Adam高了3个百分点左右。
三、实验设计与原理类(考察科研思维与基础功底)
1. 你为什么设计了「自定义CNN验证→VGG迁移学习→伪标签半监督学习」这个递进的实验流程?
【老师考察意图】看你的实验是有逻辑、有目标的设计,还是东拼西凑堆方法,验证你有没有基本的科研思维。
【面试回答】
老师,我设计这个递进的流程,主要是为了一步步解决问题,同时每一步都有对照,能清楚地看到每个方法带来的提升,而不是盲目堆方法。
第一步,先搭建自定义的CNN,一方面是为了搞懂CNN的完整结构和训练流程,打牢基础;另一方面是为了拿到全监督小样本场景下的基准准确率,作为后面所有优化方法的对照,能明确知道后面的优化有没有用、有多大用。
第二步,用VGG做迁移学习,是为了解决自定义CNN在小样本下泛化能力差的问题,借助预训练模型的通用特征,大幅提升模型的分类精度。
第三步,加入伪标签半监督学习,是为了把数据集里大量没用上的无标签样本利用起来,进一步扩充训练集,让模型学到更多食物类别的专属特征,在迁移学习的基础上再进一步提升精度和泛化能力。
整个流程是从基准到优化,每一步都有明确的目标和对照,能清晰地验证每个方法的效果。
2. 你网络里用到了批归一化(BN),它在训练和测试的时候有什么不一样?
【老师考察意图】CNN核心基础知识点,复试必问的高频题,验证你的深度学习基础牢不牢。
【面试回答】
老师,批归一化也就是BN,在训练和测试阶段的计算逻辑是完全不一样的。
训练阶段,BN会用当前批次的训练数据,计算这个批次里数据的均值和方差,用这个均值方差对输入做归一化,同时会用滑动平均的方式,更新整个训练集的全局均值和全局方差,把这个全局的统计量保存下来。
测试阶段,BN不会用测试批次的均值和方差,而是直接用训练阶段保存好的、整个训练集的全局均值和方差来做归一化,这样能保证不管测试批次的大小是多少,模型的输出都是稳定的,不会因为测试数据的波动影响结果。
3. 分类任务为什么都用交叉熵损失,而不用均方误差?
【老师考察意图】损失函数是模型训练的核心,这个问题能考察你对分类任务底层逻辑的理解,是复试高频基础题。
【面试回答】
老师,分类任务用交叉熵损失而不用均方误差,主要有两个核心原因:
第一,两者适配的分布不一样。均方误差是基于高斯分布的假设,更适合用来做回归任务,也就是预测连续的数值;而分类任务的标签是离散的类别,模型的输出是每个类别的概率分布,符合多项分布,交叉熵损失更适合用来计算两个概率分布之间的差异,和分类任务的场景更适配。
第二,梯度消失的问题。如果用均方误差做分类的损失,当模型预测错误的时候,比如真实类别是A,模型给A的预测概率特别低,这时候均方误差的梯度会非常小,模型的参数很难更新,收敛很慢;而交叉熵损失在这种情况下,梯度会很大,能让模型快速修正错误,收敛速度更快。
四、反思与拓展类(加分题,考察科研潜力)
问题:你的项目最终的分类准确率是多少?还有什么不足?如果再给你时间优化,你会怎么做?
【老师考察意图】看你对自己的项目有清晰的认知,不盲目自大,同时有思考和规划能力,这是读研必备的核心素质。
【面试回答】
老师,我的项目最终的最高测试集准确率是89.2%,是VGG迁移学习加上伪标签半监督学习的方案达到的。
我觉得这个项目还有几个比较明显的不足:
第一,数据读取的设计有局限,我现在是把所有图片一次性读到内存里,虽然速度快,但如果换成更大的数据集,内存会不够用,扩展性不好;
第二,模型保存的逻辑有个小瑕疵,原来的逻辑里,保存最优模型的时候,记录最高准确率的变量赋值有问题,可能会导致保存的不是真正最优的模型;
第三,伪标签的设计还比较初级,现在用的是固定的置信度阈值和固定的触发时机,还有很大的优化空间;
第四,模型的鲁棒性还有待提升,对于有遮挡、拍摄角度特别偏的食物图片,分类的错误率还是比较高。
如果再给我时间优化,我主要会做这几件事:
第一,优化数据读取的逻辑,改成动态读取图片的方式,不用一次性全读进内存,适配更大的数据集;
第二,优化伪标签的方案,把固定阈值改成动态阈值,随着训练轮次的增加,慢慢降低阈值,让更多可靠的样本加入训练,同时加入一致性约束,提升伪标签的质量;
第三,更换更先进的网络架构,比如用ResNet或者ConvNeXt做迁移学习,这些模型的特征提取能力更强,还有残差连接,能解决深层网络的梯度消失问题,进一步提升分类精度;
第四,做模型的轻量化,把大模型的知识迁移到小模型里,降低参数量和计算量,让它能部署到手机端,实现拍照识别食物的落地功能。
五、压力测试类(考察心态与应变能力)
问题:你这个项目,说白了就是用了个现成的预训练模型,调了调参数,没什么学术创新,你怎么看?
【老师考察意图】典型的压力面,看你会不会慌、会不会和老师抬杠,能不能客观看待自己的工作,同时有清晰的自我认知和读研的明确诉求。
【面试回答】
老师您说得对,从学术创新的角度来说,我这个项目确实没有提出新的算法或者模型,主要是基于现有的成熟方法,针对food-11小样本食物分类的场景,做了方案的整合、实验的验证和完整的工程实现。
但对我本科阶段来说,这个项目最大的收获,是我完整地走通了一个计算机视觉分类任务的全流程:从数据集分析、数据预处理、网络结构搭建、模型训练调参,到半监督学习的实现、实验结果的分析,每一步都是我自己独立完成的,也解决了很多实际的工程问题,比如怎么提升训练速度、怎么保证伪标签的质量、怎么缓解模型过拟合这些实际的问题。
同时,这个过程也让我发现了自己的不足,比如对半监督学习的前沿算法理解还不够深,对模型的底层原理还有很多没吃透的地方,这也是我想要读研继续深造的原因,希望能在老师的指导下,更深入地学习深度学习的理论,做出有创新的工作。