视觉计算这门课的期末样卷说重要程度一点不夸张。很多同学复习时习惯按PPT一章一章往后背背到后面发现前面全忘了等上了考场看到样题才发现原来老师考的不是你背了多少细节而是你能不能把图像处理、特征提取、几何视觉、深度学习这几块东西串起来用。我见过太多人挂在同一个地方样卷刷了一遍答案也看了但换个数字、换个拍法就不会写。这篇文章就以一份典型期末样题为主轴带你把考点地图、解题思路、失分点一次理清适合正在备考视觉计算期末、或者是想提前摸清楚这门课套路的同学。这里只聊视觉计算本身的内容不绑定具体学校和课程编号道理放之四海皆准。1. 先看考情视觉计算这门期末到底在考什么1.1 六块核心内容基本锁死全部出题范围视觉计算课程尽管在不同高校里名称可能略有差异但核心知识框架非常固定基础图像处理、特征提取与描述、相机模型与几何视觉、传统识别方法、深度学习视觉、以及图像检索与综合应用。先说基础图像处理像素操作、灰度变换、直方图均衡、滤波去噪、边缘检测这些内容是试卷前半部分的常客。像Canny边缘检测的完整步骤、高斯核为什么是可分离的这些细节反复出现在选择和简答题里复习时不能只记结论。特征提取部分SIFT、HOG、Harris角点、ORB等算法是术语密集区。期末题不会要求你从零推导整个SIFT但会问你为什么SIFT有尺度不变性为什么HOG对光照变化相对鲁棒。这类问题本质上考的是算法设计动机而不是背参数。几何视觉则包括针孔相机模型、相机内参外参、透镜畸变、单应矩阵、基础矩阵、对极几何约束等计算题往往从这里出。深度学习部分近几年权重越来越大CNN的卷积、池化、全连接层感受野的计算经典网络如VGG、ResNet目标检测R-CNN系列与YOLO的基础概念分割任务的基础概念。最后是图像检索、图像去噪、人脸识别等应用场景题往往以开放设计题形式出现考察综合能力。这六块合起来就是整张试卷的考点地图复习前先把它刻在脑子里后面所有刷题动作才有坐标。1.2 试题结构、分值权重与老师出题偏好我见过的几套样卷结构基本是固定的选择题约10到15道覆盖概念辨析和小的计算判断简答题3到4道要求解释算法原理或比较不同方案计算推导题2到3道通常涉及卷积尺寸计算、IoU计算、相机几何或特征匹配计算最后一道开放设计题一般给一个实际任务比如人群计数、车牌识别、工业缺陷检测让你给出技术方案并解释选型理由。分值上选择和简答大概占40到50分计算推导占25到30分设计题占20到25分。出题偏好很明显基础题考广度计算题考细节设计题考思路。换句话说设计题没有标准唯一答案但你的方案需要自洽必须说清楚每个环节用了什么方法、为什么这样选、精度大概能达到什么水平。老师判卷时会看你能不能把课上讲过的模块组装成一条完整流水线而不是零散地堆了一堆专业名词。2. 样题逐题精讲把参考答案里的“所以然”讲明白2.1 选择题速刷这些知识点反复出现给大家看几道出现频率最高的小题。第一类卷积核尺寸3×3、输入特征图32×32、padding1、stride1输出尺寸是多少这类题直接套公式(32 2×1 - 3) / 1 1 32尺寸不变。这里的关键是别把padding的计算忘掉三个数里只要错一个答案马上带偏。第二类池化层有什么作用选项里可能有减少参数、增强平移不变性、防止过拟合、增加感受野正确说法是“以上都对但要区分侧重点”单独说池化一定防止过拟合是不严谨的它主要作用还是空间降采样和一定的平移鲁棒性。第三类高频选择是关于感受野的两层3×3卷积级联的感受野等效于一层5×5卷积但参数量更少、非线性更强这就是VGG为什么偏爱小卷积核的原因。这类题的价值不只是选对答案更要理解背后的设计原则。第四类HOG特征与SIFT特征的主要区别前者基于梯度方向直方图、侧重局部形状后者含关键点检测和方向归一化、更重局部纹理与尺度。选择题我建议在复习时当作判断题来刷把每个错误选项改对效果比单纯背答案好得多。2.2 简答题高分框架以SIFT尺度不变性为例简答题最容易出现的情况是“每句话都对但是凑不满分”。以真题“请说明SIFT为什么具有尺度不变性”为例低分答案是三行字SIFT用了高斯金字塔所以对尺度变化不敏感。这句话方向没错但缺少关键的机制细节。一份能拿高分的答案应该分四步写第一构建图像尺度空间用不同尺度的高斯核做卷积形成金字塔形成连续尺度层第二用高斯差分DoG近似尺度归一化的拉普拉斯算子通过在DoG空间检测局部极值来同时定位关键点的位置和尺度第三检测到关键点后用关键点邻域的梯度直方图确定主方向完成方向归一化第四在选定的尺度层上提取描述子使得描述子本身与图像尺度解耦。阅卷时老师通常会按点给分你能写出“尺度空间”“DoG”“局部极值”“方向归一化”这四组关键词并且把前后逻辑讲通分数就基本拿满。我建议备考时用同样的框架去准备其他经典算法原理动机、核心步骤、数学表达、约束条件、适用场景。把这五个维度做成一张表复习效率会高很多考场上一看到“简述xxx算法”脑子里自动跳出这张表的骨架。2.3 计算题典型卷积输出尺寸与参数量推导计算题的第一类典型题目输入是RGB图像尺寸224×224×3通过一个卷积层卷积核是3×3输出通道数为64padding1stride1请计算输出特征图的尺寸和该卷积层的参数量。先算尺寸H_out (224 2×1 - 3) / 1 1 224W_out同理也是224所以特征图是224×224×64。这里要注意输出通道数就是卷积核的个数64个3×3×3的卷积核会生成64张图每一张都是全部三个输入通道分别做卷积再相加的结果。参数量应该分三部分算卷积核参数64×(3×3×3)1728然后每个输出通道配一个bias一共64个所以总参数量是1728641792。比较常见的失分点是把输入通道数3漏乘写成64×3×3576那样就把彩色图当成单通道了。还有同学顺手把padding也算进参数里padding不是参数它只是影响输出尺寸这两个概念要在做题时严格分开。如果再往下考还会问计算量FLOPs输出特征图每个位置上的每个输出通道都要做3×3×327次乘法输出总元素是224×224×64≈321万总MAC数约321万×27≈8670万约等于0.87亿次乘加。这种连问三小问的题目分值通常在10分以上公式正确但数字算错的占大多数。我建议平时练习时就养成写完整推导过程的习惯公式、代入、结果三步呈现在答题纸上既方便检查也能让阅卷老师给步骤分。数学计算能力是一方面把过程写清楚的习惯才是考场上真正救命的。2.4 几何题典型8点法求基础矩阵的关键步骤几何相关计算题里8点法求基础矩阵绝对算经典。题目一般会给8组以上的匹配点坐标让我求基础矩阵。答题先写前提在双目视觉中一对匹配点满足对极约束这个约束写成齐次坐标形式就是基础矩阵F把左图的点映射到右图对应的极线上数学表达为对任意匹配点对x, x有 x^T F x 0。展开后可以整理成关于F的九个未知元素的线性方程。把8组点代入就能得到8个齐次线性方程用最小二乘求解最简单的做法是构造一个8×9的矩阵A对A做奇异值分解F即对应最小奇异值的那个右奇异向量。因为F的秩必须是2还需要进一步强制SVD后把F的第三个奇异值置零再做一次SVD映射回去。这一步“秩2约束”是阅卷重点很多人算完SVD就直接写答案漏掉奇异值置零扣掉大半步骤分。我建议回答这类题时把三个要点写完整构造线性方程、SVD最小二乘解、秩2约束后处理。同时注意坐标要归一化直接拿原始像素坐标跑8点法数值稳定性很差工程上通常先做坐标平移和缩放归一化这也是经典的Hartley改进。这类题如果只写答案不给过程即便数字全对也只能拿到一半分因为老师要看的是你对对极几何约束的理解深度而不只是会套库函数。3. 编程设计题实战解析一套能直接“抄”的答题结构3.1 题目长什么样怎么审题开放设计题常用句式是给定若干张带标签的图像请设计一个视觉系统完成图像分类或目标检测任务并说明网络结构、数据处理、训练策略和评价指标。看题的时候先别急着写代码先在草稿纸上圈出四个关键词任务类型、数据规模、精度要求、运行环境。任务类型决定用分类网络还是检测网络数据规模决定要不要用预训练模型精度要求决定网络深度和是否做模型集成运行环境如果提到嵌入式就得往轻量网络方向想。之前有同学在答题时写了一个很深的网络做垃圾图像分类精度确实高但题目明确部署在移动端这就犯了大忌方向一错整道题最多拿三分之一分。答题逻辑应该是先讲需求分析再说技术选型最后给实现细节。哪怕代码不完整只要思路主线清晰老师通常会给出大部分分数。所以审题阶段多花两分钟把需求边界划清楚比后期多写一段代码值钱得多。3.2 网络结构设计与答题打分点拆解以图像分类为例一份能拿高分的答案长这样输入层说明图像resize到224×224并做数据增强增强手段包括随机裁剪、水平翻转、颜色抖动主干网络推荐ResNet18或MobileNetV2理由是小数据集不需要太深网络ResNet的残差结构能缓解梯度消失全连接层输出类别数损失函数用交叉熵优化器用Adam初始学习率1e-3配合StepLR每30个epoch衰减0.1训练30到50个epochbatch size 32或64在验证集上保存最佳模型。打分点一般是能否说明清楚输入输出维度能否讲明白数据增强的作用能否给出合理的网络选择理由以及是否提到训练策略。我特别提醒一个细节输出维度千万不要写错类别数是C最后一层全连接就输出C维很多人一顺手写成1000这个错误在开题设计里非常显眼。模型评估部分分类任务写Accuracy和混淆矩阵如果有样本不均衡还应该写F1-score和macro/micro平均这些术语能让答案立刻提高一个档次。3.3 PyTorch 关键代码与答题要点设计题如果需要写关键代码我推荐一段最常用的CNN主干。这里给参考代码不是让你原样抄而是要掌握代码背后的答题要点。import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self, num_classes10): super().__init__() self.features nn.Sequential( nn.Conv2d(3, 32, kernel_size3, padding1), nn.ReLU(inplaceTrue), nn.MaxPool2d(2), nn.Conv2d(32, 64, kernel_size3, padding1), nn.ReLU(inplaceTrue), nn.MaxPool2d(2), ) self.classifier nn.Sequential( nn.AdaptiveAvgPool2d(1), nn.Flatten(), nn.Linear(64, num_classes), ) def forward(self, x): return self.classifier(self.features(x))这段代码信息量很大。用AdaptiveAvgPool2d(1)代替固定尺寸的全局池化好处是输入图片尺寸即使不固定也能输出长度一致的向量这是工程里非常实用的一招。用全局平均池化而非直接Flatten再接多个全连接能大幅减少参数量这也是ResNet的设计思路之一。答题时如果能顺带解释一下为什么用全局平均池化老师会看出你真的理解网络结构而不只是在背代码。训练主循环也是常考内容至少要把loss清零、前向、反向、优化器step四句话写出来。for images, labels in train_loader: optimizer.zero_grad() outputs model(images) loss criterion(outputs, labels) loss.backward() optimizer.step()如果试卷已经给了模型定义只让你写训练流程那这五行就是核心得分点。缺了optimizer.zero_grad()会让梯度在多个batch间累积这是新手最常见的隐形错误答题时建议专门加一行注释说明。另外代码题千万别写“pretrainedTrue”就不管了。如果用了预训练一定要说加载的backbone顶层的分类头是随机初始化的需要单独设置不同的学习率或直接微调最后几层。这个细节在真实项目和考试里都很重要体现你理解预训练模型的使用边界。4. 高频失分坑与排查技巧实录4.1 概念题“会而不全”少一条就给一半分我帮学弟学妹复盘卷子时见过一种很典型的答案解释SIFT和HOG区别只写了一个是特征点一个是特征描述子。这句话没错但丢掉了SIFT包含关键点检测、方向估计HOG本质是固定网格的梯度统计不涉及关键点检测。老师看到的是你能说出局部差异但看不到你对全局算法框架的理解。解决这个问题的办法很土但有效把每章标题下的算法名词都整理成“算法卡片”每个卡片写四行解决什么问题、核心思想、大致流程、局限性。临考前一天专门过一遍卡片简答题就不容易漏得分点。概念题还有一个容易被忽略的地方作图题。比如让你画一维高斯核卷积后的效果或者画出Sobel算子的两个卷积核。这种题几乎没有文字门槛但颗粒度极细3×3的矩阵元素必须写对Sobel的x方向核是[-1 0 1; -2 0 2; -1 0 1]。不少同学只背了“3×3”没背具体值考场上凭记忆乱填前面学得再好也要扣分。我建议考前把所有常见算子写成一张纯数值速查卡高斯核、Sobel、Laplacian、均值核花半小时就能搞定性价比极高。4.2 计算题“式对数错”维度和单位最坑计算题失分的大头在数字计算错误。最常见的三类卷积尺寸公式里把padding漏了或者padding符号算反参数量计算漏乘输入通道数IoU计算里用面积差代替交集并集。这类问题没有解题技巧只有检查习惯。我自己的做法是算完一个数先回头确认单位像素级尺寸就写像素参数量是“个”FLOPs写“乘加次数”如果题目要求“百万”或“GFLOPs”再明显转化一次。另一个检查技巧是用极端情形反推比如stride1、padding1、核为3×3输出尺寸必须等于输入尺寸这是卷积中非常常见的“保持尺寸”情况如果算出来变了那一定错。用这个规律三五秒就能拦住大部分低错。答题纸上步骤完整还有一个实际好处即便最后数字写错老师看到公式和代入过程对了步骤分仍然在而且用草稿检查一次再誊写几乎不浪费时间。4.3 代码题“有模型没流程”缺少训练主循环我帮忙复盘卷子时发现很多同学代码题只写了模型定义前向传播和训练循环完全没写。问起来就说时间不够其实不是时间问题而是平时练习时习惯站在“调包”角度没有真正写通过一遍训练流程。设计题里的代码分值往往不高但它是拉开差距的地方。哪怕试卷上只写“给出关键训练代码”至少也要覆盖数据加载与归一化、模型实例化、损失函数与优化器定义、训练循环四行核心、验证集评估。写全这五项比只写出一个花哨的注意力模块得分高得多。还有一个小坑是变量名不统一模型里定义的是features训练循环里写成backbone这种前后不一致会让阅卷老师觉得你只是背了一段代码没有真正理解。答题时保持变量名一致输入输出形状标注清楚代码题给人的整体印象会好很多。4.4 时间分配与作答顺序建议整套期末考试时间一般是2到3小时我建议把时间切成三段前15到20分钟快速浏览全卷并完成选择题中间60%到70%的时间集中在简答和计算题务必把步骤写满最后留20到30分钟给设计题并完整检查一遍。很多同学把大段时间耗在设计题追求“完美方案”上反而导致前面的计算题没有时间写步骤得不偿失。做选择题时遇到犹豫的题先选一个确定性最高的并随手在题号上标个问号回头有时间再回来抠。简答题每题控制在8到10分钟写成一个自然的“是什么-为什么-怎么做”结构一个点的耗时超过3分钟就果断停下写下一题。计算题先列公式再代入万一卡住了也把最终公式放在那里确保步骤分跑不掉。这套策略我实测在好几门偏工程类课程里都适用关键是提前模拟练习两三次形成肌肉记忆。5. 考前两周怎么刷一份可照抄的复习规划5.1 三个阶段的复习节奏考前两周不要从第一章开始重看那样永远看不完。第一周做“知识收敛”把PPT和作业题并行推进每天一个章节按前面说的算法卡片方式整理重点周末拿出半天过一遍全部卡片这个阶段的目标是能把每章用三句话讲清楚。第二周做“真题实战”限时做样卷严格按考试时间执行做完对照参考答案逐题打分重点看哪些题失分是因为不熟练哪些是因为完全不会。错题整理成一份“错题单”考前最后一天只看这份。如果时间更紧张只剩一周至少保证做一套完整样卷并复盘。复盘比做卷子更重要每一道错题要标注错误类型知识漏洞、计算失误、审题偏差、表达残缺。之前我复盘的时候发现有同学连续三次在同一个数据集尺寸上算错就是因为复盘时只看了“正确答案是多少”而没有总结出“我每次把batch_size和通道数搞混”这个模式。用标签把错因量化后你会很清晰看到自己哪里需要补而不是每次都在同一个坑里反复摔。5.2 我坚持使用的自检清单最终交卷前按下面这张清单检查一遍绝不空手交卷。第一项选择填空有没有留空选择题的每个选项是否都看了有些题目故意设置“以下哪个不正确”容易被惯性忽视。第二项简答和计算题的公式是否完整标注了变量含义尤其是矩阵类题目维度没有写清会被扣分。第三项代码题有没有写清输入输出张量形状训练循环有没有optimizer.step()这一行。第四项设计题是否明确写了任务约束条件选型理由是否成段。第五项全卷有没有个人信息漏写或错位这一点听起来离谱但真的有人吃过亏。清单里还要加一条如果某题卡了超过10分钟直接在草稿纸上标记并在答题纸上留出一块空白先写后面能拿分的题。最后二十分钟收尾时把留白题目能想到的相关公式先填上用思路性文字代替完整解答。阅卷永远是在有限文字里找给分点你写了相关公式和专业术语就有机会拿步骤分留白则意味着零分。这个习惯不光适用于视觉计算任何有计算推导成分的科目都通用。
阅读完成 · 觉得有帮助?